賴文輝,喬宇鵬
(華南理工大學 自動化科學與工程學院,廣州 510640)
近年來,隨著通信技術的不斷進步,我國使用手機的用戶數量日益增多,短信成為一種方便的信息傳遞渠道。然而,短信在使人們的日常生活變得更加方便的同時,垃圾短信的泛濫也越來越嚴重,嚴重干擾了人們的生活,成為了危害社會公共安全的一大公害。360互聯網安全中心于2017年2月發布的《2016年中國互聯網安全報告》顯示,360手機衛士在2016年內為全國手機用戶共攔截約173.5億條垃圾短信。絕大多數垃圾短信的內容都是廣告推銷或者影響社會穩定團結的謠言、詐騙等。工業和信息化部于2015年6月頒布施行的《通信短信息服務管理規定》,其中規定任何短信服務提供商和短信內容發送者在未經用戶同意的情況下,都不得向用戶發送商業性的信息。因此垃圾短信成為當前一個重要的社會問題,有效識別垃圾短信對維護國家安全、社會穩定和人們正常生活具有重要的時代背景意義。
對垃圾短信進行有效識別的方法主要有三種[1-4],分別是基于黑白名單的方法、基于規則的方法和基于短信內容的方法?;诤诿麊魏鸵巹t的識別方法比較簡單,缺點是需要手動添加號碼名單和關鍵詞,能夠添加的數量相對有限且難以全面,導致識別的效果較差。鑒于前兩種方法的局限性,目前對垃圾短信識別技術的研究主要集中在短信的內容上,即利用文本分類技術將垃圾短信識別問題轉化為一個有監督的學習問題。文本分類技術是以機器學習算法為基礎,先對已經過人工標注的文本進行特征提取,然后利用算法對文本進行自動分類。文獻[5]提出基于多特征融合的方法來向量化表示短信文本,并分別比較了樸素貝葉斯(Na?ve Bayes, NB)、邏輯回歸(Logistic Regression, LR)、支持向量機(Support Vector Machine, SVM)和隨機森林(Random Forest, RF)等分類器的性能差別,各分類器的識別效果較好,但是特征提取較為復雜。文獻[6]提出一種文本加權K最近鄰(K Nearest Neighbor, KNN)算法,通過特征詞在短信中出現的頻率賦予合適的權重,同時對垃圾短信數據集進行頻繁詞挖掘,并以此提高垃圾短信文本的權重,雖然在性能上有所提升,但仍然沒有解決垃圾短信語法和句法格式干擾的問題。文獻[7]用信息增益矩陣作為提取短信特征的方法,并在樸素貝葉斯和隨機森林這兩種分類器上進行垃圾短信的識別。文獻[8]針對基于對抗環境下的垃圾短信短信檢測技術進行研究,提出了基于特征長度與權重相結合的好詞攻擊和feature reweighting防御方法來識別垃圾短信。文獻[9]提出了消息主題模型(Message Topic Model, MTM)方法提取短信特征,并利用k-means算法將垃圾短信訓練成不規則的類,然后把所有的垃圾短信聚合為單個文件以捕獲單詞的共現模式。文獻[10]通過深入研究垃圾短信的特征后發現了10個特征可以有效地過濾垃圾短信,并在隨機森林分類器上實現了96.5%的真陽性率和1.02%的假陽性率。這些分類算法使用的前提都是先利用人工設計的文本特征選擇方法來提取短信文本的特征,但這些特征提取方法忽略了短信文本長度比較短且上下文的關聯性比較強的特點,導致數據特征稀疏,無法體現短信上下文語義之間的聯系,并且丟棄了詞序、語法等文本結構信息,阻礙了垃圾短信識別效果的提升。相比人工設計文本特征的方式,深度學習能夠高效便捷地完成文本特征提取。文獻[11]將詞向量與卷積神經網絡(Convolutional Neural Network, CNN)相結合用于癌癥特征文本分類,引入最新的癌癥領域數據集進行評估,并獲得了良好的效果。文獻[12]將CNN用于情感分析和主題模型的分類,模型在測試數據上的準確率相比傳統的情感分析模型有顯著的提升。
為了提高垃圾短信識別的準確率,針對人工設計特征選擇方法提取短信特征時產生的數據稀疏、文本特征信息共現不足和文本特征提取困難等問題,本文嘗試將基于Word2Vec模型的詞向量特征提取方法和CNN模型相結合,進行垃圾短信識別。詞向量方法的優勢在于可以通過控制向量的維數來解決“維數災難”的問題,并且詞向量在訓練過程中注重詞與詞之間的位置關系,保留詞組在語義之間的聯系。CNN是一種出色的深度學習算法,尤其在特征提取方面有更加優異的性能。CNN起初主要應用于圖像處理領域,以圖像像素矩陣作為模型的輸入,因此需要將短信數據轉化為圖像像素矩陣的形式。首先利用Word2Vec中的Skip-Gram模型根據維基中文語料訓練出每個詞的詞向量;然后由訓練好的詞向量按照短信的詞序組合成表示每條短信的特征矩陣;最后將特征矩陣作為CNN的輸入參與到模型的訓練測試過程中。為了驗證詞向量和CNN在垃圾短信識別中的性能優勢,本文用同樣的數據集和特征提取方法在文獻[5]、文獻[7]和文獻[10]中所采用的分類器即樸素貝葉斯、邏輯回歸、支持向量機和隨機森林四種機器學習模型上進行對比實驗。實驗結果表明本文所設計的基于深度學習的詞向量和CNN模型相比機器學習模型具有更強的特征提取能力,能有效提高識別的準確率。
本文是以詞向量作為組成文本特征矩陣的基本單位,因此應該以分開的具有獨立語言意義的詞組作為文本的最小組成要素。
在以單詞作為文本基本組成元素的拉丁語言中,單詞之間都會以空格分開,因此對這些語言進行分詞并不困難。
然而這種天然優勢在漢語里并不存在,主要原因是中文文本是由中文詞組無空格緊密地連接在一起所組成的,因此中文文本預處理的首要任務是先對文本進行中文分詞,將詞與詞分隔開來。有研究表明,分詞質量高低與最終的文本分類效果息息相關,因此,快速準確的分詞算法是非常重要的。
目前,研究人員不斷開發出一些中文分詞器,中文分詞技術不斷地趨向成熟。比較流行的有NLPIR(Natural Language Processing & Information Retrieval)、THULAC (THU Lexical Analyzer for Chinese)、 jieba分詞和 SnowNLP等分詞器,使用者可以根據應用場景選用適合的中文分詞器。由于jieba分詞器是一個用python語言開發的免費開源的分詞工具,并且用戶可以根據自己的任務環境自定義詞典和詞庫,所以本文采用jieba分詞器中比較適合于文本分析的精確分詞模式對短信文本進行分詞處理。
目前文本表示通常采用向量空間模型(Vector Space Model,VSM)。VSM是20世紀70年代由Salton等提出的,并在SMART文本檢索系統中成功應用[13]。簡要概括,VSM用統計的方法提取文本特征的向量表示,然后計算向量之間的距離從而判斷文本之間在語義上是否相似[14-16]。VSM的建模過程如下:文本集D中某個文本d∈D含相互獨立的q個不同的關鍵詞,即d=(x1,x2,…,xq);以這q個關鍵詞在文本中的權重組成的向量Vd=(w1,w2,…,wq)作為文本d的特征表示。在VSM的建模思想中,如何給各個關鍵詞賦予合適的權重值是最為關鍵的問題。權重的計算方法一般是利用文本的統計信息,主要是詞頻,給關鍵詞賦予一定的權重。常用的權重計算方法有布爾權重、詞頻率-逆文檔頻率(Term Frequency-Inverse Document Frequency, TF-IDF)和熵權重等。
VSM在表示文本的特征向量時可以降低向量計算的復雜度,具有簡單易行的優點,但同時也存在很多缺陷和不足:1)當樣本數據集比較大,含有較多的關鍵詞時,文本的特征向量維度較高,可能導致維數災難。2)VSM只是單純地將每個詞的詞頻或者權重值作為統計量,割裂了前后文之間的語義聯系,造成語義信息的丟失。對于維數災難問題,可以考慮用文檔頻率(Document Frequency, DF)、信息增益(Information Gain, IG)、χ2統計量(Chi-square, CHI)和互信息(Mutual Information, MI)等特征選擇方法進行降維。這些特征選擇方法雖然可以使“維數災難”問題在某種程度上得到緩解,但是也加劇了信息的流失。
進而,當面對通常只有幾個到幾十個詞且整個詞匯空間非常大的短信文本時,用傳統特征提取方法提取短信的文本特征時將產生數據稀疏、文本特征信息共現不足的問題。因此針對傳統的特征提取方法存在的不足,為更好地提取短信文本特征,應該嘗試新的特征提取方法。
為解決文本數據特征稀疏的問題,Hinton[17]提出了一種叫作word embedding的詞向量方法,其核心理論是將詞從高維度的向量空間分布式地投影到低維度空間,不同詞之間的語義關聯性可以由它們所分別對應的詞向量之間的位置關系反映,這種方法保留了詞序、語法等文本結構信息,有助于提升文本分類效果[18-19]。
Mikolov等[20]提出了針對語料庫能夠快速高效訓練詞向量的 Word2Vec模型。Word2Vec中的Skip-Gram模型可以根據所給語料庫快速地訓練出每個詞的詞向量。
Skip-Gram的主要思想是由當前詞Wt的概率來預測前后文詞Wi的概率,即預測P(W(i)|W(t)|),其中t-c≤i≤t+c,每個詞向量反映了前后文詞的位置情況,并且其訓練方式如圖1所示。

圖1 Skip-Gram模型結構
假設有一條短信文本經過分詞、去除停用詞等預處理步驟后,產生一系列詞為W(1),W(2),…,W(n)。Skip-Gram模型的目的是使式(1)的值最大化:
(1)
其中:c表示窗口的長度,即當前詞W(t)的前面的c個詞和后面的c個詞。
綜上所述,相較于傳統的人工提取特征的方法,詞向量方法的優勢在于可以控制特征向量維數、在解決維數災難問題的同時,不會忽略詞組在文本中的相對位置關系,而且保留了詞組在語義之間的關聯。
在完成提取短信文本特征的任務后,后續步驟就是用分類器過濾識別。目前可以完成文本分類的算法主要有兩類:一類是當前在研究應用上已經十分成熟的機器學習算法;另一類是時下熱點之一的基于深度學習理論的算法。
本文涉及的CNN模型是深度學習理論中應用最為廣泛的一種結構,具有很多顯著的特性:特有的卷積層和池化層使得模型對微小的局部特征十分敏感;模型在訓練數據時既可以提取出更加抽象完備的特征信息,也可以完成分類任務。CNN的諸多優勢使其在圖像處理和語音識別中大獲成功。然而文本數據與圖像語音有很大的不同點,文本數據不單是由詞語所組成,它更包含了屬于人類特有的語義信息,因此文本處理過程中需要更完備可靠的特征信息。鑒于CNN的優異的特征提取能力,本文嘗試將其用于垃圾短信識別。
垃圾短信識別總體流程如圖2所示。

圖2 垃圾短信識別流程
Fig. 2 Spam message recognition flow chart
短信作為日常的通信交流的工具,行文比較隨意,結構也不規范;因此在獲得短信樣本后,首先必須對原始的短信作預處理以得到較為純凈的文本。進一步純文本數據仍無法被計算機所識別,需要將短信文本轉化為計算機可以處理的形式,即用特征提取的結果來表示短信文本, 然后使用已經提取到的短信文本特征和類別已知的樣本將垃圾短信識別任務轉化為有監督的學習問題,設計算法完成最終的識別任務。
由于原始的短信文本數據的格式沒有統一的規范,包含許多標點符號和表情圖形或顏文字等特殊元素,無法直接處理,需要先對其進行數據清洗。
原始的短信文本數據里的標點符號、表情圖和顏文字等與短信的上下文語境之間沒有語義關聯,首先需要將這些特殊元素過濾掉,只保留具有語言信息意義的中文詞組和一些專有的外文詞匯。
全半角轉換。有一些外文字符是在全角狀態下輸入的,有些是在半角狀態輸入的,這導致文本格式都不盡相同,為使下一步的分詞操作順利進行,需要將這些不規范的地方進行格式統一。
原始的短信文本經過數據預處理步驟后,格式更為統一規范,為后續的分詞處理奠定了良好的基礎。
由于中文不像英文以空格作為單詞之間的分隔符,中文詞匯之間沒有明確的界限,因此需要先對短信進行中文分詞處理,以詞作為短信的組成要素。本文采用python第三方庫中的jieba分詞器里的精確分詞模式作為分詞工具。

分詞完畢后,還要去除短信文本中的停用詞,減少冗余,使文本分類更準確。常見的停用詞有“的”“如果”“可以”“要”和“而且”等對垃圾短信識別不重要的詞。上述短信在去除停用詞后最終的分詞結果為“天氣 逐漸 變涼 記得 添加 衣服 注意 防寒 保暖”,取得了較好的分詞效果。
短信文本在經過中文分詞處理并濾去停用詞后,可以使用Word2Vec工具并結合Skip-Gram模型訓練數據集中各詞的詞向量。由于python語言在自然語言處理任務中的優勢,本文使用python的第三方開源庫Gensim作為訓練詞向量的工具。
若要得到質量較高的詞向量,需要具備較大規模的語料庫,目的是為了充分地反映出詞組在語義空間的位置關系。而維基中文語料是公認的大型中文語料,本文擬用維基中文語料訓練詞向量。
Skip-Gram模型有兩個重要的參數需要設置,分別是窗口長度參數c和詞向量維數k。
原則上c值越大,考慮前后文的關系就更全面,一般能使預測的結果更加精確,但也會使訓練時間更長,因此需要不斷嘗試來確定c值的大小。由于短信文本的長度較短,故c的值不宜太大,否則容易引起關聯到很多語義不相關的詞匯。
詞向量維數k可以根據所解決問題的要求和語料庫的大小確定。為更能體現各個詞組在語義空間上的分布情況,應該使詞向量的維數盡量大一些,但前提是需要有大而均勻的語料庫作為支撐,為避免發生過擬合現象,也需要更高要求的模型表達能力和硬件計算能力。
在確定了合適的c和k以后,模型可根據數據集訓練出各個詞組的詞向量。
在短信文本中,詞與詞、句子與句子之間在語境上更依賴前后文的關系,而不是割裂孤立起來的,這種語義關聯直接影響到最終的識別結果[21]。與用向量空間模型作為特征提取方法相比,Word2Vec更重視詞組前后文之間的語序和語法上的聯系;而且所有詞組的詞向量各個維度上都有數值,這解決了傳統特征提取方法中數據稀疏和維數災難問題。
CNN是深度學習中一種具有代表性的結構。CNN由多層神經網絡組成,本質上是神經網絡的一種拓展,一個典型的CNN由輸入層、卷積層、池化層和全連接層四部分構成。
CNN區別于其他神經網絡之處在于CNN采用了局部連接和權值共享技術,對局部微小的特征更加敏感,這更有利于提取短信文本的特征信息。通過對短信文本進行卷積和池化操作,可以在詞和詞的位置信息之間提取出更多的抽象特征值和相關語義信息。CNN模型起初用在圖像處理領域中,以每張圖片的像素矩陣作為模型的輸入。灰度圖像以一個二維矩陣表示,由于每個像素點只能有一個值表示顏色,因此灰度圖像也稱為單通道圖像;彩色圖像也叫RGB通道圖像,以一個三維矩陣表示,每一維矩陣分別代表紅色(R)通道、綠色(G)通道和藍色(B)通道。本文用于垃圾短信識別的CNN模型如圖3所示,模型的輸入層是類似于灰度圖像的表示各個短信文本的二維特征矩陣,因此每條短信都只有一個通道。

圖3 垃圾短信識別的CNN結構
輸入層的作用是把提取到的表示短信的特征矩陣作為輸入數據傳送到CNN模型中,并和下一層的卷積層連接起來。為了在垃圾短信識別任務中應用卷積神經網絡模型,模型的輸入應該是類似于圖像像素的特征矩陣。
要實現以詞向量來表示整個短信文本,可以采取一種較為簡單的組織詞向量的方式:假設一條短信文本經過分詞處理后由“天氣 逐漸 變涼 記得 添加 衣服 注意 防寒 保暖”組成。這9個詞語的詞向量依次為Ω1,Ω2,…,Ω9,按照詞組的順序作縱向排列,就得到一個表示該短信的特征矩陣Ω,可表示為:
(2)
式(2)的排列方式可以通過圖像形象化地表示為圖3的文本輸入層所示的格式。
為便于后續的卷積層和池化層提取出更加抽象的高層次文本特征,需要將各條短信的特征矩陣設置為同一大小。取特征矩陣的寬度為各個詞組的詞向量的維數k。然而由于短信長短不一,特征矩陣的高度應該由短信數據集D中長度最長的短信決定。若短信數據集D中各條短信在經過中文分詞處理后,詞組數目最多的一條短信含有m個詞,則該短信由m個k維向量按照詞組的順序進行縱向排列成m×k的特征矩陣表示。

(3)
卷積層作為CNN的核心組成部分,其主要功能是用卷積核對輸入層的各個特征矩陣進行卷積操作,得到更加抽象的高層文本特征。卷積核是一個h×k的權重矩陣,可表示為:
(4)
高度h可根據文本的長度設置合適的值,本文設計的卷積核的寬度等于詞向量的維數k,用符號W∈Rhk代表整個卷積核。卷積核以大小為1的步長從文本特征矩陣的頂部由上至下開始掃描并和卷積核窗口內的矩陣進行卷積計算,每一步都提取出一個新的特征值。用Xi表示一條短信中每一個詞的詞向量,也是卷積核窗口中第一個詞的詞向量。Xi,Xi+1,…,Xi+h-1依次表示卷積核窗口中h個詞的詞向量。卷積核窗口中的部分特征矩陣可表示為:
(5)
每一步的特征值可以通過式(6)得到:

(6)
其中:b為偏置量,符號*為卷積運算符,f(·)為激活函數。常見的激活函數有邏輯函數、正切函數和線性整流函數等。本文采用線性整流函數即Relu函數[22]作為激活函數,可以使模型較快地收斂,其計算公式為:
f(x)=max(0,x)
(7)
V=(V1,V2,…,Vm-h+1)T
(8)
V表示卷積核對整個特征矩陣掃描完畢后提取出的新的特征圖。由于卷積核的窗口高度為h,特征矩陣為m行,所以掃描完一個特征矩陣需要m-h+1次,即特征圖V的高度也為m-h+1;卷積核的窗口寬度等于詞向量的維數,所以特征圖V的寬度為1。窗口高度不同的卷積核可以提取出高度也不同的特征圖V,意味著可以從不同的角度提取短信特征,得到更為完善的特征信息。
根據上述分析可知,CNN的強大之處就在于其卷積塊強大的特征提取能力。為了從不同角度提取特征而不增加計算的復雜度,Kim所提出的模型[12]使用了三種不同的卷積窗口。由于不同的短信,其前后文的語義關聯不一樣,為從短信文本中提取較為完備的特征,因此本文也使用三種窗口高度不同的卷積核提取相應的局部語義特征。因短信文本的長度一般在幾個到幾十個詞之間,可將卷積核的高度分別設置為3、4、5,最終得到3種不同粒度的特征。CNN提取特征的具體流程如圖4所示。

圖4 CNN提取特征流程
三種卷積核的大小分別設置為3×k、4×k、5×k,通過卷積核掃描運算后,獲得3種粒度大小分別為(m-2)×1、(m-3)×1和(m-4)×1的特征圖,其過程如圖4的卷積處理所示。本文設置每種尺寸卷積核各128個,即對每條短信文本的特征矩陣輸入,一種卷積核可得到128個特征圖,卷積層輸出384個特征圖。
針對自然語言處理過程中卷積操作的結果,CNN的池化層的功能是對局部信息再總結,使卷積層提取到的文本向量維數減小,防止出現過擬合。池化操作包括常用的Max-Pooling和Average-Pooling。Max-Pooling是輸出所接收到特征圖V中的最大值,可以認為這個最大值是短信的最顯著的特征。 Average-Pooling是輸出特征圖V中所有值的平均值。常見的自然語言處理任務中通常使用Max-Pooling方法, 而且文獻[23]也認為Max-Pooling更適合于文本分類,因此本文以Max-Pooling為基礎進行研究。


(9)

池化操作得到的384個特征值是對垃圾短信識別最具影響的局部特征。全連接的操作是對這384個特征值進行融合,本文以串接的方式把這384個特征值串聯起來,形成一個固定長度的融合特征向量來表示短信的語義特征,過程如式(10)所示:

(10)
其中⊕表示串接操作。從式(10)可以看出,特征向量的長度不再與短信的長度相關聯,每條短信的有效特征都是一個384維的向量。把表示短信的語義特征向量Vmessage輸入最后的softmax Regression分類器[24],從全局的角度對特征進行分析,進而完成垃圾短信的識別。
本文的實驗環境:編程語言為python3.6,深度學習框架為Tensorflow1.0,內存8 GB,操作系統為Windows 10,處理器為Intel Core i5。
本文訓練詞向量所使用的維基中文語料庫包含232 894個中文文本。所有文本經過分詞處理后,共有1億多個中文詞組和少量的英語單詞。
參與實驗的短信數據集分為垃圾短信(negative)和正常短信(positive)兩大類,短信樣本總數量為10萬條,其中正常短信數量為5萬條,垃圾短信數量為5萬條。這些數據在初始時即具有特征標簽。
維基中文語料庫的規模足以訓練高質量和高維度的詞向量,而且每個詞組所附帶的語義信息也可以被盡量地保存下來。高維度的詞向量雖然可以更充分地表達詞組的語義特征,但它也會增加CNN模型參數的數量,同時增加過擬合的風險。因此經過綜合權衡之后,本文將詞向量的維度設置為100,即k=100。在訓練詞向量時為避免關聯到更多語義不相關的詞匯和縮短訓練的時間,窗口大小設置為5,即c=5。本文用到的短信數據集在通過中文分詞、去除停止詞等操作后,長度最長的一條短信含有100個詞,即m=100;因此,每條短信都須表示為100×100的特征矩陣。
在以詞向量組成表示短信文本特征矩陣的基礎上,結合CNN模型來完成垃圾短信的識別,并與傳統的機器學習模型進行比較以驗證CNN模型的性能優勢,具體的實驗設計方案如下:
1)詞向量+CNN模型。將表示短信文本的100×100特征矩陣作為CNN的輸入參與到模型的訓練測試過程中。
2)詞向量+傳統的機器學習模型。在同一數據上,同樣用分布式特征提取方法獲取每個詞組的詞向量,以每條短信中各個詞所對應的詞向量的各維度上的均值組合成表示短信的特征向量。該組實驗采用文獻[5]、文獻[7]和文獻[10]所用到的分類器模型,包括:樸素貝葉斯、邏輯回歸、支持向量機和隨機森林。樸素貝葉斯是基于貝葉斯定理與特征條件獨立假設的分類方法,而且模型比較簡單,在處理大量數據時效率較高。邏輯回歸是用于二分類最基本的算法之一,該模型處理數據時計算量非常小,效率高,所需的存儲資源較低。支持向量機可以解決高維的大型特征空間問題,能夠處理非線性特征。隨機森林是通過集成學習的思想將多棵決策樹集成的一種算法,具有模型簡單、容易實現和計算開銷小的特點,適合用于大型數據集。
目前在訓練CNN時所采用的方法仍然是傳統的梯度下降法。欲使收斂效果最佳,可以采用批量梯度下降法,但是這種方法需要所有的短信文本數據參與每一次的迭代過程,這使收斂速度受到嚴重限制。欲使收斂速度較高,亦可采用隨機梯度下降法,每次只需要一個短信文本數據參與迭代過程,但這種方法在每次迭代中沒有用到全部信息,收斂效果不佳,很可能最終只是收斂到局部最優解。為使訓練過程既可以獲得較好的收斂效果也可以達到較高的收斂速度,本文使用mini-batch梯度下降法進行CNN模型的訓練,即用一部分短信參與迭代過程。短信樣本容量為100 000,為實現收斂效果和收斂速度之間的平衡,將每批樣本大小設置為1 000。


(11)
交叉熵損失約束表示如式(12)所示:

(12)

在訓練全連接層參數時,為避免發生過擬合,采取dropout策略使部分神經節點失效,即一些已經訓練過的參數在每一次更新時將被隨機選擇丟棄[25]。本文參照Kim所提出的模型[12],在訓練神經網絡模型的參數時將dropout策略的概率值設置為0.5,選擇隨機拋棄一半的參數。本文選擇應用最廣泛、一般而言效果最好的AdamOptimizer優化器。
CNN模型訓練的參數設置如表1所示。

表1 CNN算法參數設置


(13)
其中|·|是指示函數,當里面的內容為真時取值為1,當內容為假時取值為0。
本文為驗證CNN模型在垃圾短信識別中的可靠性,采取十折交叉驗證法來評判模型在短信測試集上的準確率。具體措施為:將短信數據集中的所有100 000個樣本分為10等份,每份包含5 000條正常短信和5 000條垃圾短信。每次實驗以其中1份樣本進行測試,另外9份樣本進行訓練。10份樣本輪流作為測試集,共進行10次實驗,以這10次實驗所測得結果的平均值作為評估模型的指標。
4.6.1 CNN模型實驗結果
CNN的收斂速度與學習率的大小有關,當學習率過小時,無法快速找到好的下降方向,導致訓練時間較長,收斂較慢;當學習率太大時,會造成神經網絡出現超調或劇烈振蕩;因此需設置合理的學習率以獲得預期的結果。實驗結果如圖5所示,可以觀測出當學習率分別為0.1和0.8時,整個神經網絡收斂相對穩定,但是收斂的速度相對較低;當學習率為0.5時模型收斂得最快,準確率最高。從圖6可以觀測出,隨著學習的不斷深入,損失在不斷減小,當學習率為0.5時損失收斂得最快。最終準確率收斂為99.5%,損失收斂為0.03。

圖5 不同學習率下的準確率變化

圖6 不同學習率下的損失變化
4.6.2 模型對比分析
本文使用樸素貝葉斯(NB)、邏輯回歸(LR)、支持向量機(SVM)和隨機森林(RF)四種機器學習模型與CNN模型進行對比實驗,不同模型下的準確率對比如圖7所示。使用CNN模型的識別準確率為99.5%,而使用樸素貝葉斯、邏輯回歸、支持向量機和隨機森林四種機器學習模型的準確率分別為94.4%、97.1%、96.3%和95.8%??梢钥闯?,基于深度學習的CNN模型對垃圾短信的識別準確率高于傳統的機器學習模型,因此CNN模型在垃圾短信識別任務中能有效提高識別的準確率。

圖7 不同模型下的準確率比較
樸素貝葉斯、邏輯回歸、支持向量機和隨機森林對垃圾短信識別率偏低的主要原因分別是:1) 樸素貝葉斯模型比較簡單,在處理大量數據時效率較高,但由于樸素貝葉斯模型假設樣本各個特征之間是相互獨立的,而這個假設在垃圾短信識別中往往不成立。主要因為訓練的詞向量不僅僅表示單個詞組,而且還保留了詞組在語義空間上的聯系。當特征個數較多或各特征之間關聯性較大時,分類效果不好。樸素貝葉斯模型在預測時需要知道先驗概率,而先驗概率的計算取決于模型的假設,很多時候因為模型假設的原因導致預測效果不佳。2) 邏輯回歸模型處理數據時計算量非常小,效率高,所需的存儲資源較低;但是當特征空間較大時,容易出現欠擬合,阻礙了分類效果的提升。3)支持向量機可以解決高維的大型特征空間問題,能夠處理非線性特征,但是當樣本容量比較大時,數據處理的速度較低、耗時長;對非線性特征的處理沒有通用的方法,選取合適的核函數也較困難。4)隨機森林模型的訓練和預測速度較高,能有效處理大型數據集;但是當數據集中的樣本數據的噪聲較大時,隨機森林模型容易引起過擬合。究其原因,傳統的機器學習模型在訓練的過程中對輸入的特征沒有更進一步的分析;而CNN首先利用卷積層和池化層對輸入的特征矩陣提取出更高層次的文本特征,然后再通過分類器進行模式分類。
因此,通過對以上結果的分析可知,在同一短信樣本集和特征提取方法下,基于深度學習的CNN模型相比傳統的機器學習算法,在垃圾短信識別任務中有更出色的性能優勢,能有效提高識別的準確率,同時也證明CNN模型在短信數據有噪聲的情況下有更好的健壯性。
垃圾短信泛濫一直是一個使人們非常困擾的社會問題。為有效識別垃圾短信并建立可靠的模型,本文首先深入研究了常用的文本特征提取方法,提出了一組更適合于垃圾短信識別的文本數據特征提取方法和識別分類方法:采用Skip-Gram模型根據維基中文語料庫自動訓練出短信樣本集中所有中文詞組的詞向量,這在一定程度上解決了短信表示面臨的數據稀疏、維數過高和詞間語義關系建模困難等問題,并且將詞向量按照詞序縱向排列成每條短信的分布式特征矩陣。然后在充分了解了深度學習的理論和應用后,嘗試用深度學習中的CNN模型的來解決垃圾短信識別問題。將表示文本的特征矩陣作為CNN的輸入層,然后利用3個窗口大小不同的卷積核提取3種相應粒度的更高層的文本特征。為使所提取到的特征向量的維數進一步減小,防止出現過擬合,采用1-max pooling策略進一步篩選特征,再將篩選出來的特征在全連接層重新組合成特征向量輸入分類器中完成垃圾短信識別任務。模型對比實驗表明,CNN模型在垃圾短信識別任務中相比傳統的機器學習模型有更高的準確率,證明了CNN模型在垃圾短信識別任務中的有效性和性能優勢。
然而,基于CNN模型的垃圾短信識別分類任務中也存在著一些不足需要加以改進,如網絡結構中參數過多、訓練時間過長。因此為了提高短信文本識別分類的效率,縮短訓練的時間,未來將嘗試在分布式平臺上進行卷積神經網絡的訓練測試。為了不使識別的準確率因樣本數據類別分布的差異而產生偏差,本文使用的短信據集在類別分布上保持均衡,但是現實中往往是正常短信多于垃圾短信,而現有的分類器在設計時都假設數據集中的樣本類別分布均衡,如果用這些分類器對樣本類別分布不均衡的數據集進行分類,將導致分類器性能的下降并且也會因數據分布不均衡引入額外的誤差而對最終的分類結果產生影響。對類別分布不均衡的短信數據集進行垃圾短信識別將是下一步的研究重點。