利用词向量结合机器学习的垃圾短信识别方法
技术领域
本发明涉及一种利用词向量结合机器学习的垃圾短信识别方法,属于信息技术领域,特别是属于基于机器学习的垃圾短信识别的技术领域。
背景技术
垃圾短信是目前困扰广大移动通信用户的问题之一。虽然已经有很多垃圾短信的识别方法被提出来,但是这些方法由于主要是基于传统的模式识别理论,普遍存在识别率不高、漏判、错判等问题。
近几年,基于机器学习的人工智能技术得到快速的发展,在许多领域获得非常好的应用成果。如何把机器学习技术应用到垃圾短信的识别领域,提高垃圾短信的识别率成为目前移动通信技术领域急需解决的一个技术难题。
发明内容
有鉴于此,本发明的目的是发明一种方法,在传统模式识别理论的基础上,结合利用机器学习技术,实现垃圾短信的高准确率识别。
为了达到上述目的,本发明提出了利用词向量结合机器学习的垃圾短信识别方法,所述方法包括下列操作步骤:
(1)根据短信特征对垃圾短信进行第一步识别,把符合设定条件的短信筛出;所述的短信特征包括但不限于:标点符号种类数目、短信字符数目、特殊字符、是否包含统一资源定位符URL;
(2)根据关键词对垃圾短信进行第二步识别,内容是:基于词向量模型,通过词共现分析和词相似度计算,建立关键词库;对短信进行分词处理,通过命中计算,如果该短信中命中超过设定数目的关键词,则把该短信筛出;所述的关键词库中的每一个关键词,同时包括该关键词的词向量和拼音;短信分词处理后,对得到的每一个分词进行转拼音处理;所述的命中计算既进行词向量命中计算也进行拼音命中计算;
(3)计算短信的短信文本向量,用所得到的短信文本向量构造特征向量,使用支持向量机的方法对垃圾短信进行第三步识别;
(4)计算短信的静态词向量矩阵embedding_matrix,以该静态词向量矩阵作为输入,利用卷积神经网络对垃圾短信进行第四步识别;所述的静态词向量矩阵是通过计算所述短信的每一个分词的静态词向量组合而成;
(5)计算短信的每一个分词的动态词向量,以所述动态词向量作为输入,利用卷积神经网络对垃圾短信进行第五步识别。
所述步骤(1)的具体内容包括如下子操作步骤:
(1.1)统计短信中包含的标点符号种类,除去“。”和“,”之外,把标点符号种类数目大于等于3的短信筛出,识别为垃圾短信;
(1.2)统计短信中包含的字符数目,除去标点符号之外,把字符数目大于等于80的短信筛出,识别为垃圾短信;
(1.3)匹配常用词库,把包含特殊字符的短信筛出,识别为垃圾短信;
(1.4)把内容中包含URL的短信筛出,识别为垃圾短信。
所述步骤(2)的具体内容包括如下子操作步骤:
(2.1)把标准中文语料库中的词转化为词向量;
(2.2)基于词向量模型,对短信样本中的词进行词共现分析和词相似度计算,得到短信样本中近似的关联词组,实现短信内的关联和短信间的关联关系,组建关键词网即关键词库,并把关键词库中的关键词转拼音处理;
(2.3)对短信进行分词处理,得到分词权重排名前三的分词,然后对所述的三个分词进行命中计算,如果该短信中命中不少于两个的关键词,则把该短信筛出;所述的命中计算既进行词向量命中计算也进行拼音命中计算;
所述步骤(2.1)中,所述的标准中文语料库为维基wiki中文语料库,所述的把标准中文语料库中的词转化为词向量的具体内容是:基于连续词袋模型CBOW或者Skip-Gram模型把词转化为词向量;所述的把标准中文语料库中的词转化为词向量的具体方法是使用Word2Vec工具进行转化;所述步骤(2.2)中,使用N_Gram模型进行所述的词共现分析;使用Word2Vec工具进行词相似度计算;所述步骤(2.3)中,利用python中jieba模块对短信进行分词处理。
步骤(3)中所述的计算短信的短信文本向量的具体内容是:对短信进行分词处理,得到该短信的短信分词,然后计算每个短信分词的词向量,最后根据短信分词的词向量组合计算得到所述短信的短信文本向量。
所述根据短信分词的词向量组合计算得到所述短信的短信文本向量的具体内容是:把所述短信的所有短信分词的词向量直接累加求和获得该短信的短信文本向量。
所述根据短信分词的词向量组合计算得到所述短信的短信文本向量的具体内容是:根据词性,对所述短信分词中的名词、动词、专有名词的词向量权重设为1,其他词的词向量权重设为0,然后加权求和得到所述短信的短信文本向量。
所述根据短信分词的词向量组合计算得到所述短信的短信文本向量的具体内容是:利用TextRank算法计算所得到的短信分词的权重,然后加权求和得到所述短信的短信文本向量。
所述根据短信分词的词向量组合计算得到所述短信的短信文本向量的具体内容是:首先把所述短信的所有短信分词的词向量直接累加求和,获得第一个向量;然后计算所述短信的词频-逆文件频率TFIDF向量,获得第二个向量,最后把所述的这两个向量前后连接起来,作为所述短信的短信文本向量。
步骤(3)中所述的用所得到的短信文本向量构造特征向量的具体内容是:用所得到的一种短信文本向量直接作为特征向量;或者用所得到的两种以上的短信文本向量顺序连接构造特征向量;或者用所得到的两种以上的短信文本向量加权求和构造特征向量。
步骤(4)的具体内容是:
对所述短信进行分词处理,使用Word2Vec工具计算各个短信分词的静态词向量,不删除停用词,把各个静态词向量顺序排列起来构成所述的静态词向量矩阵embedding_matrix;
所述短信的静态词向量矩阵embedding_matrix作为所述卷积神经网络的输入;
使用多个不同尺寸的卷积核来构造所述卷积神经网络的卷积层,以便捕捉短信的N-Gram信息;
利用最大n信息熵n_max_entropy作为所述卷积神经网络的池化层pooling层的输出,以便保留短信的主要信息,提高短信的识别度;其中参数n为一个自然数,按照下式进行计算
n=[f(x)]
上式中,x表示所述短信,f(x)表示所述短信的短信丰富度,[]表示取整运算。
步骤(4)所述的卷积神经网络为TextCNN。
步骤(5)的具体内容是:
对所述短信进行分词处理,计算各个短信分词的动态词向量即ELMo动态词向量VEMLo;所述ELMo动态词向量VEMLo按照下式进行计算:
VEMLo=k1·Vchar_c+k2·VLf+k3·VLb
上式中,Vchar_c是根据char-CNN模型计算得到的所述短信分词的原始词向量,VLf和VLb分别是根据biLM模型计算所述短信分词的原始词向量的第一中间词向量和第二中间词向量,k1、k2和k3是权重系数,此处分别取值为:k1=0.2,k,2=0.4,k3=0.4;
所述短信的动态词向量作为所述卷积神经网络的输入;
使用bi-LSTM设计所述卷积神经网络的隐藏层,以所述短信的关键语义特征作为所述卷积神经网络卷积层的输入,使用一个卷积核来构造所述卷积神经网络的卷积层;
利用最大n信息熵n_max_entropy作为所述卷积神经网络的池化层pooling层的输出,以便保留短信的主要信息,提高短信的识别度;其中参数n为一个自然数,按照下式进行计算
n=[f(x)]
上式中,x表示所述短信,f(x)表示所述短信的短信丰富度,[]表示取整运算;
步骤(5)所述的卷积神经网络为长短期记忆循环神经网络和卷积神经网络的融合模型LSTM_CNN。
前面所述的短信丰富度f(x)的定义如下式所示:
上式中,m表示主体词性的种类数目,主体词性的种类包括:形容词、名词、其他专名、动词、副动词和动名词;ai(x)表示短信x包含的第i种主体词性种类的数目,b(x)表示短信x的长度,h1和h2是权重系数。
本发明的有益效果在于:本发明的方法首先采用无监督的垃圾短信识别方法,即分别从短信特征和关键词两个方面进行垃圾短信识别,然后再采用有监督的垃圾短信识别方法,即利用词向量先后结合传统机器学习方法和深度学习方法进行垃圾短信识别,从而使得垃圾短信识别准确率得到很大的提高。
附图说明
图1是本发明提出的利用词向量结合机器学习的垃圾短信识别方法的流程图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面结合附图对本发明作进一步的详细描述。
参见图1,介绍本发明提出的利用词向量结合机器学习的垃圾短信识别方法,所述方法包括下列操作步骤:
(1)根据短信特征对垃圾短信进行第一步识别,把符合设定条件的短信筛出;所述的短信特征包括但不限于:标点符号种类数目、短信字符数目、特殊字符、是否包含统一资源定位符URL;
(2)根据关键词对垃圾短信进行第二步识别,内容是:基于词向量模型,通过词共现分析和词相似度计算,建立关键词库;对短信进行分词处理,通过命中计算,如果该短信中命中超过设定数目的关键词,则把该短信筛出;所述的关键词库中的每一个关键词,同时包括该关键词的词向量和拼音;短信分词处理后,对得到的每一个分词进行转拼音处理;所述的命中计算既进行词向量命中计算也进行拼音命中计算;
(3)计算短信的短信文本向量,用所得到的短信文本向量构造特征向量,使用支持向量机的方法对垃圾短信进行第三步识别;实施例中,我们采用了sklearn中的svm支持向量机模块。在机器学习应用中,sklearn(scikit-learn)是一个功能强大的python包。
(4)计算短信的静态词向量矩阵embedding_matrix,以该静态词向量矩阵作为输入,利用卷积神经网络对垃圾短信进行第四步识别;所述的静态词向量矩阵是通过计算所述短信的每一个分词的静态词向量组合而成;
(5)计算短信的每一个分词的动态词向量,以所述动态词向量作为输入,利用卷积神经网络对垃圾短信进行第五步识别。
所述步骤(1)的具体内容包括如下子操作步骤:
(1.5)统计短信中包含的标点符号种类,除去“。”和“,”之外,把标点符号种类数目大于等于3的短信筛出,识别为垃圾短信;发明人经试验,此步垃圾短信的识别准确率在80%以上。
(1.6)统计短信中包含的字符数目,除去标点符号之外,把字符数目大于等于80的短信筛出,识别为垃圾短信;发明人经试验,此步垃圾短信的识别准确率在95%以上。
(1.7)匹配常用词库,把包含特殊字符的短信筛出,识别为垃圾短信;发明人经试验,此步垃圾短信的识别准确率在60%以上。
(1.8)把内容中包含URL的短信筛出,识别为垃圾短信。发明人经试验,此步垃圾短信的识别准确率在95%以上。
所述步骤(2)的具体内容包括如下子操作步骤:
(2.1)把标准中文语料库中的词转化为词向量;
(2.2)基于词向量模型,对短信样本中的词进行词共现分析和词相似度计算,得到短信样本中近似的关联词组,实现短信内的关联和短信间的关联关系,组建关键词网即关键词库,并把关键词库中的关键词转拼音处理;
(2.3)对短信进行分词处理,得到分词权重排名前三的分词,然后对所述的三个分词进行命中计算,如果该短信中命中不少于两个的关键词,则把该短信筛出;所述的命中计算既进行词向量命中计算也进行拼音命中计算;
所述步骤(2.1)中,所述的标准中文语料库为维基wiki中文语料库,所述的把标准中文语料库中的词转化为词向量的具体内容是:基于连续词袋模型CBOW(Continuous Bagof Words)或者Skip-Gram模型把词转化为词向量;所述的把标准中文语料库中的词转化为词向量的具体方法是使用Word2Vec工具进行转化;所述步骤(2.2)中,使用N_Gram模型进行所述的词共现分析;使用Word2Vec工具进行词相似度计算;所述步骤(2.3)中,利用Python中jieba模块对短信进行分词处理。
本发明中,Word2Vec为托马斯·米科洛夫(Tomas Mikolov)在Google带领的研究团队创造,在对统计语言模型进行研究的背景下,Google公司在2013年开放了Word2Vec这一款用于训练词向量的软件工具。Word2Vec可以根据给定的语料库,通过优化后的训练模型快速有效地将一个词语表达成向量形式,为自然语言处理领域的应用研究提供了新的工具。
jieba(结巴)是Python的一个中文分词组件。
步骤(3)中所述的计算短信的短信文本向量的具体内容是:对短信进行分词处理,得到该短信的短信分词,然后计算每个短信分词的词向量,最后根据短信分词的词向量组合计算得到所述短信的短信文本向量。
所述根据短信分词的词向量组合计算得到所述短信的短信文本向量的具体内容是:把所述短信的所有短信分词的词向量直接累加求和获得该短信的短信文本向量。
所述根据短信分词的词向量组合计算得到所述短信的短信文本向量的具体内容是:根据词性,对所述短信分词中的名词、动词、专有名词的词向量权重设为1,其他词的词向量权重设为0,然后加权求和得到所述短信的短信文本向量。
所述根据短信分词的词向量组合计算得到所述短信的短信文本向量的具体内容是:利用TextRank算法计算所得到的短信分词的权重,然后加权求和得到所述短信的短信文本向量。
所述的TextRank算法是一种文本排序算法,由谷歌的网页重要性排序算法PageRank算法改进而来,它能够从一个给定的文本中提取出该文本的关键词。
所述根据短信分词的词向量组合计算得到所述短信的短信文本向量的具体内容是:首先把所述短信的所有短信分词的词向量直接累加求和,获得第一个向量;然后计算所述短信的词频-逆文件频率TFIDF向量,获得第二个向量,最后把所述的这两个向量前后连接起来,作为所述短信的短信文本向量。
步骤(3)中所述的用所得到的短信文本向量构造特征向量的具体内容是:用所得到的一种短信文本向量直接作为特征向量;或者用所得到的两种以上的短信文本向量顺序连接构造特征向量;或者用所得到的两种以上的短信文本向量加权求和构造特征向量。
步骤(4)的具体内容是:
对所述短信进行分词处理,使用Word2Vec工具计算各个短信分词的静态词向量,不删除停用词,把各个静态词向量顺序排列起来构成所述的静态词向量矩阵embedding_matrix;
所述短信的静态词向量矩阵embedding_matrix作为所述卷积神经网络的输入;
使用多个不同尺寸的卷积核来构造所述卷积神经网络的卷积层,以便捕捉短信的N-Gram信息;
利用最大n信息熵n_max_entropy作为所述卷积神经网络的池化层pooling层的输出,以便保留短信的主要信息,提高短信的识别度;其中参数n为一个自然数,按照下式进行计算
n=[f(x)]
上式中,x表示所述短信,f(x)表示所述短信的短信丰富度,[]表示取整运算。
步骤(4)所述的卷积神经网络为TextCNN,TextCNN是利用卷积神经网络对文本进行分类的算法,2014年由Yoon Kim在“Convolutional Neural Networks for SentenceClassification”一文中提出。
步骤(5)的具体内容是:
对所述短信进行分词处理,计算各个短信分词的动态词向量即ELMo(Embeddingsfrom Language Models)动态词向量VEMLo;所述ELMo动态词向量VEMLo按照下式进行计算:
VEMLo=k1·Vchar_c+k2·VLf+k3·VLb
上式中,Vchar_c是根据char-CNN模型计算得到的所述短信分词的原始词向量,VLf和VLb分别是根据双向语言模型biLM计算所述短信分词的原始词向量的第一中间词向量和第二中间词向量,k1、k2和k3是权重系数,此处分别取值为:k1=0.2,k,2=0.4,k3=0.4;
char-CNN模型参见文献Character-level Convoutional Networks for TextClassification,https://arxiv.org/pdf/1509.01626.pdf。
所述短信的动态词向量作为所述卷积神经网络的输入;
使用双向长短期记忆网络bi-LSTM设计所述卷积神经网络的隐藏层,以所述短信的关键语义特征作为所述卷积神经网络卷积层的输入,使用一个卷积核来构造所述卷积神经网络的卷积层;
利用最大n信息熵n_max_entropy作为所述卷积神经网络的池化层pooling层的输出,以便保留短信的主要信息,提高短信的识别度;其中参数n为一个自然数,按照下式进行计算
n=[f(x)]
上式中,x表示所述短信,f(x)表示所述短信的短信丰富度,[]表示取整运算;
步骤(5)所述的卷积神经网络为长短期记忆循环神经网络和卷积神经网络的融合模型LSTM_CNN。
前面所述的短信丰富度f(x)的定义如下式所示:
上式中,m表示主体词性的种类数目,主体词性的种类包括:形容词、名词、其他专名、动词、副动词和动名词;ai(x)表示短信x包含的第i种主体词性种类的数目,b(x)表示短信x的长度,h1和h2是权重系数,在实施例中,我们取h1=0.6和h2=0.4。
发明人对本发明所述方法在真实的网络环境中进行了大量的实验,获得了满意的实验结果,证明本发明的方法是有效可行的。