賴文輝,喬宇鵬
(華南理工大學(xué) 自動(dòng)化科學(xué)與工程學(xué)院,廣州 510640)
近年來,隨著通信技術(shù)的不斷進(jìn)步,我國使用手機(jī)的用戶數(shù)量日益增多,短信成為一種方便的信息傳遞渠道。然而,短信在使人們的日常生活變得更加方便的同時(shí),垃圾短信的泛濫也越來越嚴(yán)重,嚴(yán)重干擾了人們的生活,成為了危害社會(huì)公共安全的一大公害。360互聯(lián)網(wǎng)安全中心于2017年2月發(fā)布的《2016年中國互聯(lián)網(wǎng)安全報(bào)告》顯示,360手機(jī)衛(wèi)士在2016年內(nèi)為全國手機(jī)用戶共攔截約173.5億條垃圾短信。絕大多數(shù)垃圾短信的內(nèi)容都是廣告推銷或者影響社會(huì)穩(wěn)定團(tuán)結(jié)的謠言、詐騙等。工業(yè)和信息化部于2015年6月頒布施行的《通信短信息服務(wù)管理規(guī)定》,其中規(guī)定任何短信服務(wù)提供商和短信內(nèi)容發(fā)送者在未經(jīng)用戶同意的情況下,都不得向用戶發(fā)送商業(yè)性的信息。因此垃圾短信成為當(dāng)前一個(gè)重要的社會(huì)問題,有效識(shí)別垃圾短信對維護(hù)國家安全、社會(huì)穩(wěn)定和人們正常生活具有重要的時(shí)代背景意義。
對垃圾短信進(jìn)行有效識(shí)別的方法主要有三種[1-4],分別是基于黑白名單的方法、基于規(guī)則的方法和基于短信內(nèi)容的方法?;诤诿麊魏鸵?guī)則的識(shí)別方法比較簡單,缺點(diǎn)是需要手動(dòng)添加號(hào)碼名單和關(guān)鍵詞,能夠添加的數(shù)量相對有限且難以全面,導(dǎo)致識(shí)別的效果較差。鑒于前兩種方法的局限性,目前對垃圾短信識(shí)別技術(shù)的研究主要集中在短信的內(nèi)容上,即利用文本分類技術(shù)將垃圾短信識(shí)別問題轉(zhuǎn)化為一個(gè)有監(jiān)督的學(xué)習(xí)問題。文本分類技術(shù)是以機(jī)器學(xué)習(xí)算法為基礎(chǔ),先對已經(jīng)過人工標(biāo)注的文本進(jìn)行特征提取,然后利用算法對文本進(jìn)行自動(dòng)分類。文獻(xiàn)[5]提出基于多特征融合的方法來向量化表示短信文本,并分別比較了樸素貝葉斯(Na?ve Bayes, NB)、邏輯回歸(Logistic Regression, LR)、支持向量機(jī)(Support Vector Machine, SVM)和隨機(jī)森林(Random Forest, RF)等分類器的性能差別,各分類器的識(shí)別效果較好,但是特征提取較為復(fù)雜。文獻(xiàn)[6]提出一種文本加權(quán)K最近鄰(K Nearest Neighbor, KNN)算法,通過特征詞在短信中出現(xiàn)的頻率賦予合適的權(quán)重,同時(shí)對垃圾短信數(shù)據(jù)集進(jìn)行頻繁詞挖掘,并以此提高垃圾短信文本的權(quán)重,雖然在性能上有所提升,但仍然沒有解決垃圾短信語法和句法格式干擾的問題。文獻(xiàn)[7]用信息增益矩陣作為提取短信特征的方法,并在樸素貝葉斯和隨機(jī)森林這兩種分類器上進(jìn)行垃圾短信的識(shí)別。文獻(xiàn)[8]針對基于對抗環(huán)境下的垃圾短信短信檢測技術(shù)進(jìn)行研究,提出了基于特征長度與權(quán)重相結(jié)合的好詞攻擊和feature reweighting防御方法來識(shí)別垃圾短信。文獻(xiàn)[9]提出了消息主題模型(Message Topic Model, MTM)方法提取短信特征,并利用k-means算法將垃圾短信訓(xùn)練成不規(guī)則的類,然后把所有的垃圾短信聚合為單個(gè)文件以捕獲單詞的共現(xiàn)模式。文獻(xiàn)[10]通過深入研究垃圾短信的特征后發(fā)現(xiàn)了10個(gè)特征可以有效地過濾垃圾短信,并在隨機(jī)森林分類器上實(shí)現(xiàn)了96.5%的真陽性率和1.02%的假陽性率。這些分類算法使用的前提都是先利用人工設(shè)計(jì)的文本特征選擇方法來提取短信文本的特征,但這些特征提取方法忽略了短信文本長度比較短且上下文的關(guān)聯(lián)性比較強(qiáng)的特點(diǎn),導(dǎo)致數(shù)據(jù)特征稀疏,無法體現(xiàn)短信上下文語義之間的聯(lián)系,并且丟棄了詞序、語法等文本結(jié)構(gòu)信息,阻礙了垃圾短信識(shí)別效果的提升。相比人工設(shè)計(jì)文本特征的方式,深度學(xué)習(xí)能夠高效便捷地完成文本特征提取。文獻(xiàn)[11]將詞向量與卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network, CNN)相結(jié)合用于癌癥特征文本分類,引入最新的癌癥領(lǐng)域數(shù)據(jù)集進(jìn)行評(píng)估,并獲得了良好的效果。文獻(xiàn)[12]將CNN用于情感分析和主題模型的分類,模型在測試數(shù)據(jù)上的準(zhǔn)確率相比傳統(tǒng)的情感分析模型有顯著的提升。
為了提高垃圾短信識(shí)別的準(zhǔn)確率,針對人工設(shè)計(jì)特征選擇方法提取短信特征時(shí)產(chǎn)生的數(shù)據(jù)稀疏、文本特征信息共現(xiàn)不足和文本特征提取困難等問題,本文嘗試將基于Word2Vec模型的詞向量特征提取方法和CNN模型相結(jié)合,進(jìn)行垃圾短信識(shí)別。詞向量方法的優(yōu)勢在于可以通過控制向量的維數(shù)來解決“維數(shù)災(zāi)難”的問題,并且詞向量在訓(xùn)練過程中注重詞與詞之間的位置關(guān)系,保留詞組在語義之間的聯(lián)系。CNN是一種出色的深度學(xué)習(xí)算法,尤其在特征提取方面有更加優(yōu)異的性能。CNN起初主要應(yīng)用于圖像處理領(lǐng)域,以圖像像素矩陣作為模型的輸入,因此需要將短信數(shù)據(jù)轉(zhuǎn)化為圖像像素矩陣的形式。首先利用Word2Vec中的Skip-Gram模型根據(jù)維基中文語料訓(xùn)練出每個(gè)詞的詞向量;然后由訓(xùn)練好的詞向量按照短信的詞序組合成表示每條短信的特征矩陣;最后將特征矩陣作為CNN的輸入?yún)⑴c到模型的訓(xùn)練測試過程中。為了驗(yàn)證詞向量和CNN在垃圾短信識(shí)別中的性能優(yōu)勢,本文用同樣的數(shù)據(jù)集和特征提取方法在文獻(xiàn)[5]、文獻(xiàn)[7]和文獻(xiàn)[10]中所采用的分類器即樸素貝葉斯、邏輯回歸、支持向量機(jī)和隨機(jī)森林四種機(jī)器學(xué)習(xí)模型上進(jìn)行對比實(shí)驗(yàn)。實(shí)驗(yàn)結(jié)果表明本文所設(shè)計(jì)的基于深度學(xué)習(xí)的詞向量和CNN模型相比機(jī)器學(xué)習(xí)模型具有更強(qiáng)的特征提取能力,能有效提高識(shí)別的準(zhǔn)確率。
本文是以詞向量作為組成文本特征矩陣的基本單位,因此應(yīng)該以分開的具有獨(dú)立語言意義的詞組作為文本的最小組成要素。
在以單詞作為文本基本組成元素的拉丁語言中,單詞之間都會(huì)以空格分開,因此對這些語言進(jìn)行分詞并不困難。
然而這種天然優(yōu)勢在漢語里并不存在,主要原因是中文文本是由中文詞組無空格緊密地連接在一起所組成的,因此中文文本預(yù)處理的首要任務(wù)是先對文本進(jìn)行中文分詞,將詞與詞分隔開來。有研究表明,分詞質(zhì)量高低與最終的文本分類效果息息相關(guān),因此,快速準(zhǔn)確的分詞算法是非常重要的。
目前,研究人員不斷開發(fā)出一些中文分詞器,中文分詞技術(shù)不斷地趨向成熟。比較流行的有NLPIR(Natural Language Processing & Information Retrieval)、THULAC (THU Lexical Analyzer for Chinese)、 jieba分詞和 SnowNLP等分詞器,使用者可以根據(jù)應(yīng)用場景選用適合的中文分詞器。由于jieba分詞器是一個(gè)用python語言開發(fā)的免費(fèi)開源的分詞工具,并且用戶可以根據(jù)自己的任務(wù)環(huán)境自定義詞典和詞庫,所以本文采用jieba分詞器中比較適合于文本分析的精確分詞模式對短信文本進(jìn)行分詞處理。
目前文本表示通常采用向量空間模型(Vector Space Model,VSM)。VSM是20世紀(jì)70年代由Salton等提出的,并在SMART文本檢索系統(tǒng)中成功應(yīng)用[13]。簡要概括,VSM用統(tǒng)計(jì)的方法提取文本特征的向量表示,然后計(jì)算向量之間的距離從而判斷文本之間在語義上是否相似[14-16]。VSM的建模過程如下:文本集D中某個(gè)文本d∈D含相互獨(dú)立的q個(gè)不同的關(guān)鍵詞,即d=(x1,x2,…,xq);以這q個(gè)關(guān)鍵詞在文本中的權(quán)重組成的向量Vd=(w1,w2,…,wq)作為文本d的特征表示。在VSM的建模思想中,如何給各個(gè)關(guān)鍵詞賦予合適的權(quán)重值是最為關(guān)鍵的問題。權(quán)重的計(jì)算方法一般是利用文本的統(tǒng)計(jì)信息,主要是詞頻,給關(guān)鍵詞賦予一定的權(quán)重。常用的權(quán)重計(jì)算方法有布爾權(quán)重、詞頻率-逆文檔頻率(Term Frequency-Inverse Document Frequency, TF-IDF)和熵權(quán)重等。
VSM在表示文本的特征向量時(shí)可以降低向量計(jì)算的復(fù)雜度,具有簡單易行的優(yōu)點(diǎn),但同時(shí)也存在很多缺陷和不足:1)當(dāng)樣本數(shù)據(jù)集比較大,含有較多的關(guān)鍵詞時(shí),文本的特征向量維度較高,可能導(dǎo)致維數(shù)災(zāi)難。2)VSM只是單純地將每個(gè)詞的詞頻或者權(quán)重值作為統(tǒng)計(jì)量,割裂了前后文之間的語義聯(lián)系,造成語義信息的丟失。對于維數(shù)災(zāi)難問題,可以考慮用文檔頻率(Document Frequency, DF)、信息增益(Information Gain, IG)、χ2統(tǒng)計(jì)量(Chi-square, CHI)和互信息(Mutual Information, MI)等特征選擇方法進(jìn)行降維。這些特征選擇方法雖然可以使“維數(shù)災(zāi)難”問題在某種程度上得到緩解,但是也加劇了信息的流失。
進(jìn)而,當(dāng)面對通常只有幾個(gè)到幾十個(gè)詞且整個(gè)詞匯空間非常大的短信文本時(shí),用傳統(tǒng)特征提取方法提取短信的文本特征時(shí)將產(chǎn)生數(shù)據(jù)稀疏、文本特征信息共現(xiàn)不足的問題。因此針對傳統(tǒng)的特征提取方法存在的不足,為更好地提取短信文本特征,應(yīng)該嘗試新的特征提取方法。
為解決文本數(shù)據(jù)特征稀疏的問題,Hinton[17]提出了一種叫作word embedding的詞向量方法,其核心理論是將詞從高維度的向量空間分布式地投影到低維度空間,不同詞之間的語義關(guān)聯(lián)性可以由它們所分別對應(yīng)的詞向量之間的位置關(guān)系反映,這種方法保留了詞序、語法等文本結(jié)構(gòu)信息,有助于提升文本分類效果[18-19]。
Mikolov等[20]提出了針對語料庫能夠快速高效訓(xùn)練詞向量的 Word2Vec模型。Word2Vec中的Skip-Gram模型可以根據(jù)所給語料庫快速地訓(xùn)練出每個(gè)詞的詞向量。
Skip-Gram的主要思想是由當(dāng)前詞Wt的概率來預(yù)測前后文詞Wi的概率,即預(yù)測P(W(i)|W(t)|),其中t-c≤i≤t+c,每個(gè)詞向量反映了前后文詞的位置情況,并且其訓(xùn)練方式如圖1所示。
圖1 Skip-Gram模型結(jié)構(gòu)
假設(shè)有一條短信文本經(jīng)過分詞、去除停用詞等預(yù)處理步驟后,產(chǎn)生一系列詞為W(1),W(2),…,W(n)。Skip-Gram模型的目的是使式(1)的值最大化:
(1)
其中:c表示窗口的長度,即當(dāng)前詞W(t)的前面的c個(gè)詞和后面的c個(gè)詞。
綜上所述,相較于傳統(tǒng)的人工提取特征的方法,詞向量方法的優(yōu)勢在于可以控制特征向量維數(shù)、在解決維數(shù)災(zāi)難問題的同時(shí),不會(huì)忽略詞組在文本中的相對位置關(guān)系,而且保留了詞組在語義之間的關(guān)聯(lián)。
在完成提取短信文本特征的任務(wù)后,后續(xù)步驟就是用分類器過濾識(shí)別。目前可以完成文本分類的算法主要有兩類:一類是當(dāng)前在研究應(yīng)用上已經(jīng)十分成熟的機(jī)器學(xué)習(xí)算法;另一類是時(shí)下熱點(diǎn)之一的基于深度學(xué)習(xí)理論的算法。
本文涉及的CNN模型是深度學(xué)習(xí)理論中應(yīng)用最為廣泛的一種結(jié)構(gòu),具有很多顯著的特性:特有的卷積層和池化層使得模型對微小的局部特征十分敏感;模型在訓(xùn)練數(shù)據(jù)時(shí)既可以提取出更加抽象完備的特征信息,也可以完成分類任務(wù)。CNN的諸多優(yōu)勢使其在圖像處理和語音識(shí)別中大獲成功。然而文本數(shù)據(jù)與圖像語音有很大的不同點(diǎn),文本數(shù)據(jù)不單是由詞語所組成,它更包含了屬于人類特有的語義信息,因此文本處理過程中需要更完備可靠的特征信息。鑒于CNN的優(yōu)異的特征提取能力,本文嘗試將其用于垃圾短信識(shí)別。
垃圾短信識(shí)別總體流程如圖2所示。
圖2 垃圾短信識(shí)別流程
Fig. 2 Spam message recognition flow chart
短信作為日常的通信交流的工具,行文比較隨意,結(jié)構(gòu)也不規(guī)范;因此在獲得短信樣本后,首先必須對原始的短信作預(yù)處理以得到較為純凈的文本。進(jìn)一步純文本數(shù)據(jù)仍無法被計(jì)算機(jī)所識(shí)別,需要將短信文本轉(zhuǎn)化為計(jì)算機(jī)可以處理的形式,即用特征提取的結(jié)果來表示短信文本, 然后使用已經(jīng)提取到的短信文本特征和類別已知的樣本將垃圾短信識(shí)別任務(wù)轉(zhuǎn)化為有監(jiān)督的學(xué)習(xí)問題,設(shè)計(jì)算法完成最終的識(shí)別任務(wù)。
由于原始的短信文本數(shù)據(jù)的格式?jīng)]有統(tǒng)一的規(guī)范,包含許多標(biāo)點(diǎn)符號(hào)和表情圖形或顏文字等特殊元素,無法直接處理,需要先對其進(jìn)行數(shù)據(jù)清洗。
原始的短信文本數(shù)據(jù)里的標(biāo)點(diǎn)符號(hào)、表情圖和顏文字等與短信的上下文語境之間沒有語義關(guān)聯(lián),首先需要將這些特殊元素過濾掉,只保留具有語言信息意義的中文詞組和一些專有的外文詞匯。
全半角轉(zhuǎn)換。有一些外文字符是在全角狀態(tài)下輸入的,有些是在半角狀態(tài)輸入的,這導(dǎo)致文本格式都不盡相同,為使下一步的分詞操作順利進(jìn)行,需要將這些不規(guī)范的地方進(jìn)行格式統(tǒng)一。
原始的短信文本經(jīng)過數(shù)據(jù)預(yù)處理步驟后,格式更為統(tǒng)一規(guī)范,為后續(xù)的分詞處理奠定了良好的基礎(chǔ)。
由于中文不像英文以空格作為單詞之間的分隔符,中文詞匯之間沒有明確的界限,因此需要先對短信進(jìn)行中文分詞處理,以詞作為短信的組成要素。本文采用python第三方庫中的jieba分詞器里的精確分詞模式作為分詞工具。
分詞完畢后,還要去除短信文本中的停用詞,減少冗余,使文本分類更準(zhǔn)確。常見的停用詞有“的”“如果”“可以”“要”和“而且”等對垃圾短信識(shí)別不重要的詞。上述短信在去除停用詞后最終的分詞結(jié)果為“天氣 逐漸 變涼 記得 添加 衣服 注意 防寒 保暖”,取得了較好的分詞效果。
短信文本在經(jīng)過中文分詞處理并濾去停用詞后,可以使用Word2Vec工具并結(jié)合Skip-Gram模型訓(xùn)練數(shù)據(jù)集中各詞的詞向量。由于python語言在自然語言處理任務(wù)中的優(yōu)勢,本文使用python的第三方開源庫Gensim作為訓(xùn)練詞向量的工具。
若要得到質(zhì)量較高的詞向量,需要具備較大規(guī)模的語料庫,目的是為了充分地反映出詞組在語義空間的位置關(guān)系。而維基中文語料是公認(rèn)的大型中文語料,本文擬用維基中文語料訓(xùn)練詞向量。
Skip-Gram模型有兩個(gè)重要的參數(shù)需要設(shè)置,分別是窗口長度參數(shù)c和詞向量維數(shù)k。
原則上c值越大,考慮前后文的關(guān)系就更全面,一般能使預(yù)測的結(jié)果更加精確,但也會(huì)使訓(xùn)練時(shí)間更長,因此需要不斷嘗試來確定c值的大小。由于短信文本的長度較短,故c的值不宜太大,否則容易引起關(guān)聯(lián)到很多語義不相關(guān)的詞匯。
詞向量維數(shù)k可以根據(jù)所解決問題的要求和語料庫的大小確定。為更能體現(xiàn)各個(gè)詞組在語義空間上的分布情況,應(yīng)該使詞向量的維數(shù)盡量大一些,但前提是需要有大而均勻的語料庫作為支撐,為避免發(fā)生過擬合現(xiàn)象,也需要更高要求的模型表達(dá)能力和硬件計(jì)算能力。
在確定了合適的c和k以后,模型可根據(jù)數(shù)據(jù)集訓(xùn)練出各個(gè)詞組的詞向量。
在短信文本中,詞與詞、句子與句子之間在語境上更依賴前后文的關(guān)系,而不是割裂孤立起來的,這種語義關(guān)聯(lián)直接影響到最終的識(shí)別結(jié)果[21]。與用向量空間模型作為特征提取方法相比,Word2Vec更重視詞組前后文之間的語序和語法上的聯(lián)系;而且所有詞組的詞向量各個(gè)維度上都有數(shù)值,這解決了傳統(tǒng)特征提取方法中數(shù)據(jù)稀疏和維數(shù)災(zāi)難問題。
CNN是深度學(xué)習(xí)中一種具有代表性的結(jié)構(gòu)。CNN由多層神經(jīng)網(wǎng)絡(luò)組成,本質(zhì)上是神經(jīng)網(wǎng)絡(luò)的一種拓展,一個(gè)典型的CNN由輸入層、卷積層、池化層和全連接層四部分構(gòu)成。
CNN區(qū)別于其他神經(jīng)網(wǎng)絡(luò)之處在于CNN采用了局部連接和權(quán)值共享技術(shù),對局部微小的特征更加敏感,這更有利于提取短信文本的特征信息。通過對短信文本進(jìn)行卷積和池化操作,可以在詞和詞的位置信息之間提取出更多的抽象特征值和相關(guān)語義信息。CNN模型起初用在圖像處理領(lǐng)域中,以每張圖片的像素矩陣作為模型的輸入?;叶葓D像以一個(gè)二維矩陣表示,由于每個(gè)像素點(diǎn)只能有一個(gè)值表示顏色,因此灰度圖像也稱為單通道圖像;彩色圖像也叫RGB通道圖像,以一個(gè)三維矩陣表示,每一維矩陣分別代表紅色(R)通道、綠色(G)通道和藍(lán)色(B)通道。本文用于垃圾短信識(shí)別的CNN模型如圖3所示,模型的輸入層是類似于灰度圖像的表示各個(gè)短信文本的二維特征矩陣,因此每條短信都只有一個(gè)通道。
圖3 垃圾短信識(shí)別的CNN結(jié)構(gòu)
輸入層的作用是把提取到的表示短信的特征矩陣作為輸入數(shù)據(jù)傳送到CNN模型中,并和下一層的卷積層連接起來。為了在垃圾短信識(shí)別任務(wù)中應(yīng)用卷積神經(jīng)網(wǎng)絡(luò)模型,模型的輸入應(yīng)該是類似于圖像像素的特征矩陣。
要實(shí)現(xiàn)以詞向量來表示整個(gè)短信文本,可以采取一種較為簡單的組織詞向量的方式:假設(shè)一條短信文本經(jīng)過分詞處理后由“天氣 逐漸 變涼 記得 添加 衣服 注意 防寒 保暖”組成。這9個(gè)詞語的詞向量依次為Ω1,Ω2,…,Ω9,按照詞組的順序作縱向排列,就得到一個(gè)表示該短信的特征矩陣Ω,可表示為:
(2)
式(2)的排列方式可以通過圖像形象化地表示為圖3的文本輸入層所示的格式。
為便于后續(xù)的卷積層和池化層提取出更加抽象的高層次文本特征,需要將各條短信的特征矩陣設(shè)置為同一大小。取特征矩陣的寬度為各個(gè)詞組的詞向量的維數(shù)k。然而由于短信長短不一,特征矩陣的高度應(yīng)該由短信數(shù)據(jù)集D中長度最長的短信決定。若短信數(shù)據(jù)集D中各條短信在經(jīng)過中文分詞處理后,詞組數(shù)目最多的一條短信含有m個(gè)詞,則該短信由m個(gè)k維向量按照詞組的順序進(jìn)行縱向排列成m×k的特征矩陣表示。
(3)
卷積層作為CNN的核心組成部分,其主要功能是用卷積核對輸入層的各個(gè)特征矩陣進(jìn)行卷積操作,得到更加抽象的高層文本特征。卷積核是一個(gè)h×k的權(quán)重矩陣,可表示為:
(4)
高度h可根據(jù)文本的長度設(shè)置合適的值,本文設(shè)計(jì)的卷積核的寬度等于詞向量的維數(shù)k,用符號(hào)W∈Rhk代表整個(gè)卷積核。卷積核以大小為1的步長從文本特征矩陣的頂部由上至下開始掃描并和卷積核窗口內(nèi)的矩陣進(jìn)行卷積計(jì)算,每一步都提取出一個(gè)新的特征值。用Xi表示一條短信中每一個(gè)詞的詞向量,也是卷積核窗口中第一個(gè)詞的詞向量。Xi,Xi+1,…,Xi+h-1依次表示卷積核窗口中h個(gè)詞的詞向量。卷積核窗口中的部分特征矩陣可表示為:
(5)
每一步的特征值可以通過式(6)得到:
(6)
其中:b為偏置量,符號(hào)*為卷積運(yùn)算符,f(·)為激活函數(shù)。常見的激活函數(shù)有邏輯函數(shù)、正切函數(shù)和線性整流函數(shù)等。本文采用線性整流函數(shù)即Relu函數(shù)[22]作為激活函數(shù),可以使模型較快地收斂,其計(jì)算公式為:
f(x)=max(0,x)
(7)
V=(V1,V2,…,Vm-h+1)T
(8)
V表示卷積核對整個(gè)特征矩陣掃描完畢后提取出的新的特征圖。由于卷積核的窗口高度為h,特征矩陣為m行,所以掃描完一個(gè)特征矩陣需要m-h+1次,即特征圖V的高度也為m-h+1;卷積核的窗口寬度等于詞向量的維數(shù),所以特征圖V的寬度為1。窗口高度不同的卷積核可以提取出高度也不同的特征圖V,意味著可以從不同的角度提取短信特征,得到更為完善的特征信息。
根據(jù)上述分析可知,CNN的強(qiáng)大之處就在于其卷積塊強(qiáng)大的特征提取能力。為了從不同角度提取特征而不增加計(jì)算的復(fù)雜度,Kim所提出的模型[12]使用了三種不同的卷積窗口。由于不同的短信,其前后文的語義關(guān)聯(lián)不一樣,為從短信文本中提取較為完備的特征,因此本文也使用三種窗口高度不同的卷積核提取相應(yīng)的局部語義特征。因短信文本的長度一般在幾個(gè)到幾十個(gè)詞之間,可將卷積核的高度分別設(shè)置為3、4、5,最終得到3種不同粒度的特征。CNN提取特征的具體流程如圖4所示。
圖4 CNN提取特征流程
三種卷積核的大小分別設(shè)置為3×k、4×k、5×k,通過卷積核掃描運(yùn)算后,獲得3種粒度大小分別為(m-2)×1、(m-3)×1和(m-4)×1的特征圖,其過程如圖4的卷積處理所示。本文設(shè)置每種尺寸卷積核各128個(gè),即對每條短信文本的特征矩陣輸入,一種卷積核可得到128個(gè)特征圖,卷積層輸出384個(gè)特征圖。
針對自然語言處理過程中卷積操作的結(jié)果,CNN的池化層的功能是對局部信息再總結(jié),使卷積層提取到的文本向量維數(shù)減小,防止出現(xiàn)過擬合。池化操作包括常用的Max-Pooling和Average-Pooling。Max-Pooling是輸出所接收到特征圖V中的最大值,可以認(rèn)為這個(gè)最大值是短信的最顯著的特征。 Average-Pooling是輸出特征圖V中所有值的平均值。常見的自然語言處理任務(wù)中通常使用Max-Pooling方法, 而且文獻(xiàn)[23]也認(rèn)為Max-Pooling更適合于文本分類,因此本文以Max-Pooling為基礎(chǔ)進(jìn)行研究。
(9)
池化操作得到的384個(gè)特征值是對垃圾短信識(shí)別最具影響的局部特征。全連接的操作是對這384個(gè)特征值進(jìn)行融合,本文以串接的方式把這384個(gè)特征值串聯(lián)起來,形成一個(gè)固定長度的融合特征向量來表示短信的語義特征,過程如式(10)所示:
(10)
其中⊕表示串接操作。從式(10)可以看出,特征向量的長度不再與短信的長度相關(guān)聯(lián),每條短信的有效特征都是一個(gè)384維的向量。把表示短信的語義特征向量Vmessage輸入最后的softmax Regression分類器[24],從全局的角度對特征進(jìn)行分析,進(jìn)而完成垃圾短信的識(shí)別。
本文的實(shí)驗(yàn)環(huán)境:編程語言為python3.6,深度學(xué)習(xí)框架為Tensorflow1.0,內(nèi)存8 GB,操作系統(tǒng)為Windows 10,處理器為Intel Core i5。
本文訓(xùn)練詞向量所使用的維基中文語料庫包含232 894個(gè)中文文本。所有文本經(jīng)過分詞處理后,共有1億多個(gè)中文詞組和少量的英語單詞。
參與實(shí)驗(yàn)的短信數(shù)據(jù)集分為垃圾短信(negative)和正常短信(positive)兩大類,短信樣本總數(shù)量為10萬條,其中正常短信數(shù)量為5萬條,垃圾短信數(shù)量為5萬條。這些數(shù)據(jù)在初始時(shí)即具有特征標(biāo)簽。
維基中文語料庫的規(guī)模足以訓(xùn)練高質(zhì)量和高維度的詞向量,而且每個(gè)詞組所附帶的語義信息也可以被盡量地保存下來。高維度的詞向量雖然可以更充分地表達(dá)詞組的語義特征,但它也會(huì)增加CNN模型參數(shù)的數(shù)量,同時(shí)增加過擬合的風(fēng)險(xiǎn)。因此經(jīng)過綜合權(quán)衡之后,本文將詞向量的維度設(shè)置為100,即k=100。在訓(xùn)練詞向量時(shí)為避免關(guān)聯(lián)到更多語義不相關(guān)的詞匯和縮短訓(xùn)練的時(shí)間,窗口大小設(shè)置為5,即c=5。本文用到的短信數(shù)據(jù)集在通過中文分詞、去除停止詞等操作后,長度最長的一條短信含有100個(gè)詞,即m=100;因此,每條短信都須表示為100×100的特征矩陣。
在以詞向量組成表示短信文本特征矩陣的基礎(chǔ)上,結(jié)合CNN模型來完成垃圾短信的識(shí)別,并與傳統(tǒng)的機(jī)器學(xué)習(xí)模型進(jìn)行比較以驗(yàn)證CNN模型的性能優(yōu)勢,具體的實(shí)驗(yàn)設(shè)計(jì)方案如下:
1)詞向量+CNN模型。將表示短信文本的100×100特征矩陣作為CNN的輸入?yún)⑴c到模型的訓(xùn)練測試過程中。
2)詞向量+傳統(tǒng)的機(jī)器學(xué)習(xí)模型。在同一數(shù)據(jù)上,同樣用分布式特征提取方法獲取每個(gè)詞組的詞向量,以每條短信中各個(gè)詞所對應(yīng)的詞向量的各維度上的均值組合成表示短信的特征向量。該組實(shí)驗(yàn)采用文獻(xiàn)[5]、文獻(xiàn)[7]和文獻(xiàn)[10]所用到的分類器模型,包括:樸素貝葉斯、邏輯回歸、支持向量機(jī)和隨機(jī)森林。樸素貝葉斯是基于貝葉斯定理與特征條件獨(dú)立假設(shè)的分類方法,而且模型比較簡單,在處理大量數(shù)據(jù)時(shí)效率較高。邏輯回歸是用于二分類最基本的算法之一,該模型處理數(shù)據(jù)時(shí)計(jì)算量非常小,效率高,所需的存儲(chǔ)資源較低。支持向量機(jī)可以解決高維的大型特征空間問題,能夠處理非線性特征。隨機(jī)森林是通過集成學(xué)習(xí)的思想將多棵決策樹集成的一種算法,具有模型簡單、容易實(shí)現(xiàn)和計(jì)算開銷小的特點(diǎn),適合用于大型數(shù)據(jù)集。
目前在訓(xùn)練CNN時(shí)所采用的方法仍然是傳統(tǒng)的梯度下降法。欲使收斂效果最佳,可以采用批量梯度下降法,但是這種方法需要所有的短信文本數(shù)據(jù)參與每一次的迭代過程,這使收斂速度受到嚴(yán)重限制。欲使收斂速度較高,亦可采用隨機(jī)梯度下降法,每次只需要一個(gè)短信文本數(shù)據(jù)參與迭代過程,但這種方法在每次迭代中沒有用到全部信息,收斂效果不佳,很可能最終只是收斂到局部最優(yōu)解。為使訓(xùn)練過程既可以獲得較好的收斂效果也可以達(dá)到較高的收斂速度,本文使用mini-batch梯度下降法進(jìn)行CNN模型的訓(xùn)練,即用一部分短信參與迭代過程。短信樣本容量為100 000,為實(shí)現(xiàn)收斂效果和收斂速度之間的平衡,將每批樣本大小設(shè)置為1 000。
(11)
交叉熵?fù)p失約束表示如式(12)所示:
(12)
在訓(xùn)練全連接層參數(shù)時(shí),為避免發(fā)生過擬合,采取dropout策略使部分神經(jīng)節(jié)點(diǎn)失效,即一些已經(jīng)訓(xùn)練過的參數(shù)在每一次更新時(shí)將被隨機(jī)選擇丟棄[25]。本文參照Kim所提出的模型[12],在訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型的參數(shù)時(shí)將dropout策略的概率值設(shè)置為0.5,選擇隨機(jī)拋棄一半的參數(shù)。本文選擇應(yīng)用最廣泛、一般而言效果最好的AdamOptimizer優(yōu)化器。
CNN模型訓(xùn)練的參數(shù)設(shè)置如表1所示。
表1 CNN算法參數(shù)設(shè)置
(13)
其中|·|是指示函數(shù),當(dāng)里面的內(nèi)容為真時(shí)取值為1,當(dāng)內(nèi)容為假時(shí)取值為0。
本文為驗(yàn)證CNN模型在垃圾短信識(shí)別中的可靠性,采取十折交叉驗(yàn)證法來評(píng)判模型在短信測試集上的準(zhǔn)確率。具體措施為:將短信數(shù)據(jù)集中的所有100 000個(gè)樣本分為10等份,每份包含5 000條正常短信和5 000條垃圾短信。每次實(shí)驗(yàn)以其中1份樣本進(jìn)行測試,另外9份樣本進(jìn)行訓(xùn)練。10份樣本輪流作為測試集,共進(jìn)行10次實(shí)驗(yàn),以這10次實(shí)驗(yàn)所測得結(jié)果的平均值作為評(píng)估模型的指標(biāo)。
4.6.1 CNN模型實(shí)驗(yàn)結(jié)果
CNN的收斂速度與學(xué)習(xí)率的大小有關(guān),當(dāng)學(xué)習(xí)率過小時(shí),無法快速找到好的下降方向,導(dǎo)致訓(xùn)練時(shí)間較長,收斂較慢;當(dāng)學(xué)習(xí)率太大時(shí),會(huì)造成神經(jīng)網(wǎng)絡(luò)出現(xiàn)超調(diào)或劇烈振蕩;因此需設(shè)置合理的學(xué)習(xí)率以獲得預(yù)期的結(jié)果。實(shí)驗(yàn)結(jié)果如圖5所示,可以觀測出當(dāng)學(xué)習(xí)率分別為0.1和0.8時(shí),整個(gè)神經(jīng)網(wǎng)絡(luò)收斂相對穩(wěn)定,但是收斂的速度相對較低;當(dāng)學(xué)習(xí)率為0.5時(shí)模型收斂得最快,準(zhǔn)確率最高。從圖6可以觀測出,隨著學(xué)習(xí)的不斷深入,損失在不斷減小,當(dāng)學(xué)習(xí)率為0.5時(shí)損失收斂得最快。最終準(zhǔn)確率收斂為99.5%,損失收斂為0.03。
圖5 不同學(xué)習(xí)率下的準(zhǔn)確率變化
圖6 不同學(xué)習(xí)率下的損失變化
4.6.2 模型對比分析
本文使用樸素貝葉斯(NB)、邏輯回歸(LR)、支持向量機(jī)(SVM)和隨機(jī)森林(RF)四種機(jī)器學(xué)習(xí)模型與CNN模型進(jìn)行對比實(shí)驗(yàn),不同模型下的準(zhǔn)確率對比如圖7所示。使用CNN模型的識(shí)別準(zhǔn)確率為99.5%,而使用樸素貝葉斯、邏輯回歸、支持向量機(jī)和隨機(jī)森林四種機(jī)器學(xué)習(xí)模型的準(zhǔn)確率分別為94.4%、97.1%、96.3%和95.8%??梢钥闯?,基于深度學(xué)習(xí)的CNN模型對垃圾短信的識(shí)別準(zhǔn)確率高于傳統(tǒng)的機(jī)器學(xué)習(xí)模型,因此CNN模型在垃圾短信識(shí)別任務(wù)中能有效提高識(shí)別的準(zhǔn)確率。
圖7 不同模型下的準(zhǔn)確率比較
樸素貝葉斯、邏輯回歸、支持向量機(jī)和隨機(jī)森林對垃圾短信識(shí)別率偏低的主要原因分別是:1) 樸素貝葉斯模型比較簡單,在處理大量數(shù)據(jù)時(shí)效率較高,但由于樸素貝葉斯模型假設(shè)樣本各個(gè)特征之間是相互獨(dú)立的,而這個(gè)假設(shè)在垃圾短信識(shí)別中往往不成立。主要因?yàn)橛?xùn)練的詞向量不僅僅表示單個(gè)詞組,而且還保留了詞組在語義空間上的聯(lián)系。當(dāng)特征個(gè)數(shù)較多或各特征之間關(guān)聯(lián)性較大時(shí),分類效果不好。樸素貝葉斯模型在預(yù)測時(shí)需要知道先驗(yàn)概率,而先驗(yàn)概率的計(jì)算取決于模型的假設(shè),很多時(shí)候因?yàn)槟P图僭O(shè)的原因?qū)е骂A(yù)測效果不佳。2) 邏輯回歸模型處理數(shù)據(jù)時(shí)計(jì)算量非常小,效率高,所需的存儲(chǔ)資源較低;但是當(dāng)特征空間較大時(shí),容易出現(xiàn)欠擬合,阻礙了分類效果的提升。3)支持向量機(jī)可以解決高維的大型特征空間問題,能夠處理非線性特征,但是當(dāng)樣本容量比較大時(shí),數(shù)據(jù)處理的速度較低、耗時(shí)長;對非線性特征的處理沒有通用的方法,選取合適的核函數(shù)也較困難。4)隨機(jī)森林模型的訓(xùn)練和預(yù)測速度較高,能有效處理大型數(shù)據(jù)集;但是當(dāng)數(shù)據(jù)集中的樣本數(shù)據(jù)的噪聲較大時(shí),隨機(jī)森林模型容易引起過擬合。究其原因,傳統(tǒng)的機(jī)器學(xué)習(xí)模型在訓(xùn)練的過程中對輸入的特征沒有更進(jìn)一步的分析;而CNN首先利用卷積層和池化層對輸入的特征矩陣提取出更高層次的文本特征,然后再通過分類器進(jìn)行模式分類。
因此,通過對以上結(jié)果的分析可知,在同一短信樣本集和特征提取方法下,基于深度學(xué)習(xí)的CNN模型相比傳統(tǒng)的機(jī)器學(xué)習(xí)算法,在垃圾短信識(shí)別任務(wù)中有更出色的性能優(yōu)勢,能有效提高識(shí)別的準(zhǔn)確率,同時(shí)也證明CNN模型在短信數(shù)據(jù)有噪聲的情況下有更好的健壯性。
垃圾短信泛濫一直是一個(gè)使人們非常困擾的社會(huì)問題。為有效識(shí)別垃圾短信并建立可靠的模型,本文首先深入研究了常用的文本特征提取方法,提出了一組更適合于垃圾短信識(shí)別的文本數(shù)據(jù)特征提取方法和識(shí)別分類方法:采用Skip-Gram模型根據(jù)維基中文語料庫自動(dòng)訓(xùn)練出短信樣本集中所有中文詞組的詞向量,這在一定程度上解決了短信表示面臨的數(shù)據(jù)稀疏、維數(shù)過高和詞間語義關(guān)系建模困難等問題,并且將詞向量按照詞序縱向排列成每條短信的分布式特征矩陣。然后在充分了解了深度學(xué)習(xí)的理論和應(yīng)用后,嘗試用深度學(xué)習(xí)中的CNN模型的來解決垃圾短信識(shí)別問題。將表示文本的特征矩陣作為CNN的輸入層,然后利用3個(gè)窗口大小不同的卷積核提取3種相應(yīng)粒度的更高層的文本特征。為使所提取到的特征向量的維數(shù)進(jìn)一步減小,防止出現(xiàn)過擬合,采用1-max pooling策略進(jìn)一步篩選特征,再將篩選出來的特征在全連接層重新組合成特征向量輸入分類器中完成垃圾短信識(shí)別任務(wù)。模型對比實(shí)驗(yàn)表明,CNN模型在垃圾短信識(shí)別任務(wù)中相比傳統(tǒng)的機(jī)器學(xué)習(xí)模型有更高的準(zhǔn)確率,證明了CNN模型在垃圾短信識(shí)別任務(wù)中的有效性和性能優(yōu)勢。
然而,基于CNN模型的垃圾短信識(shí)別分類任務(wù)中也存在著一些不足需要加以改進(jìn),如網(wǎng)絡(luò)結(jié)構(gòu)中參數(shù)過多、訓(xùn)練時(shí)間過長。因此為了提高短信文本識(shí)別分類的效率,縮短訓(xùn)練的時(shí)間,未來將嘗試在分布式平臺(tái)上進(jìn)行卷積神經(jīng)網(wǎng)絡(luò)的訓(xùn)練測試。為了不使識(shí)別的準(zhǔn)確率因樣本數(shù)據(jù)類別分布的差異而產(chǎn)生偏差,本文使用的短信據(jù)集在類別分布上保持均衡,但是現(xiàn)實(shí)中往往是正常短信多于垃圾短信,而現(xiàn)有的分類器在設(shè)計(jì)時(shí)都假設(shè)數(shù)據(jù)集中的樣本類別分布均衡,如果用這些分類器對樣本類別分布不均衡的數(shù)據(jù)集進(jìn)行分類,將導(dǎo)致分類器性能的下降并且也會(huì)因數(shù)據(jù)分布不均衡引入額外的誤差而對最終的分類結(jié)果產(chǎn)生影響。對類別分布不均衡的短信數(shù)據(jù)集進(jìn)行垃圾短信識(shí)別將是下一步的研究重點(diǎn)。