何 鎧,管有慶,龔 銳
(南京郵電大學 物聯網學院,江蘇 南京 210003)
NLP(Natural Language Processing,自然語言處理)作為人工智能的子領域,其研究的重點在于實現人與計算機之間的信息交互,讓計算機能夠理解使用人類的語言[1]。自然語言作為人與人進行交流溝通的重要工具,常用的語言包括英語、漢語、俄語等。自然語言處理主要針對詞語、段落或者篇章進行處理。主要使用的方法分為基于規則和基于統計兩種。基于規則的方法是根據語言相關的規則人工對文本數據進行處理;基于統計的方法是通過大規模的數據集統計分析[2],最終實現對文本數據的處理。數據集的好壞對自然語言處理模型的性能有著很大影響。所以,擁有強大的數據支撐才可以更好地對文本進行進一步的處理和分析。基于中文的自然語言處理主要研究的內容包括分詞、詞性標注、詞義消歧、文本分類和語言建模等,但由于機器學習的文本分類算法較為強調文本中特征詞語的選取,且屬于淺層學習方法,不能有效地繼續深層挖掘分類信息[3],基于神經網絡的深度學習算法應運而生。其中,基于深度學習的卷積神經網絡模型,作為機器學習的一個重要分支,在文本分類領域取得了不錯的效果。將CNN(Convolutional Neural Network,卷積神經網絡)模型應用于文本分類,只需要將完成預處理的文本集導入輸入層,通過模型訓練,將自動生成特征詞語,大大簡化了特征詞語的選取。隨著自然語言處理技術的不斷發展,文本分類算法的研究也取得了巨大的突破。文本分類由最初依靠人工進行規則提取的方式,轉向基于機器學習的自動分類方式[4]。通過機器學習方法提取文本規則進行自動分類,將機器學習算法應用到文本分類領域中。例如支持向量機[5]、神經網絡[6]和決策樹[7]等機器學習領域的重要算法,在文本分類領域都得到了廣泛的應用。已有的CNN-SVM(Support Vector Machine,支持向量機)的文本分類算法中,文獻[8]將傳統的卷積網絡更改為5個平行放置的CNN模型進行訓練,最后采用SVM分類器輸出結果。而文獻[9]的CNN網絡采用一維卷積提取特征,將經過最大池化處理的特征通過一對多的SVM分類器得出結果。文獻[10]中CNNSVM模型使用了一種特殊的卷積模塊,通過一維卷積減少輸入通道數、卷積核參數以及計算復雜度,與文獻[9]相似,依然是構建SVM多分類器來獲得分類結果。
該文提出一種將CNN與SVM分類算法進行結合的改進模型CNNSVM。該模型一方面使用SVM替換傳統CNN中的softmax歸一化函數實現模型的分類功能,以便解決原模型泛化能力不足的問題;另一方面,相比于傳統CNN模型,CNNSVM模型增加了注意力機制[11],該機制的作用是對特征詞語進行精煉,選取類別代表性更強的特征詞語,以提升模型分類的準確度。
CNN模型最初被應用于圖像識別[12]和語音分析[13]領域。近年來,隨著NLP技術的蓬勃發展,深度學習中的CNN模型越來越多地被應用于文本分類[14]和情感分析[15]領域。傳統CNN模型一般是由輸入層、卷積層、池化層、全連接層和輸出層構成。其中,卷積層作為CNN模型中十分重要的一層,卷積層設計的成功與否將直接決定CNN模型的分類效果。CNN模型發展自神經網絡,CNN與傳統神經網絡最明顯的區別在于CNN模型中的卷積層和池化層。在傳統神經網絡模型中,相鄰的兩層隱藏層往往通過全連接的方式進行相連。這就會導致隱藏層與隱藏層之間的權重參數數量十分巨大,隨著隱藏層中權值的不斷更新,整個神經網絡的運行速度也會受到很大的影響。為解決這一問題,CNN模型在傳統神經網絡模型的基礎上,增加了卷積層與池化層。通過卷積層與池化層替代部分全連接層,并且依靠CNN模型特有的權值共享和局部感知野特性,達到簡化模型的運算,提升模型訓練效果的目的。
CNN模型最初被應用于圖像識別領域,由于圖像數據是由像素點矩陣構成,矩陣中的像素點具有稠密性,便于直接用于CNN模型進行訓練。而在進行文本分類時,則需要將原本高維且稀疏的詞語進行向量化,使之映射到低維且稠密的詞向量空間中,才能進行模型訓練。同時,傳統CNN模型使用softmax層作為輸出層,該層的本質是一層全連接層,作用是將特征詞語通過線性組合的方式計算出不同類別的概率,最終實現分類。由于softmax層在針對非線性且稀疏的數據時,其分類效果不如基于傳統機器學習的分類算法[16]。針對這一現象,提出了基于CNN模型與SVM分類器組合的CNNSVM模型。該模型使用基于有監督學習[17-18]的SVM分類器實現文本分類,CNN模型實現特征詞語的選取,從而達到簡化特征提取的目的。
除此之外,CNNSVM模型相比于傳統CNN模型還增加了注意力機制[19]。注意力機制源于人類感官的研究,聽覺、視覺、觸覺和味覺都存在注意力。在通過感官進行信息處理時,人類往往會選擇性地屏蔽掉一些不重要可以忽略的信息,而將更多的注意力投入在認為是重要的信息上。該技術在RNN(Recurrent Neural Networks,循環神經網絡)和圖像領域已經有了較為成熟的應用,在文本分類領域的應用還在探索階段。
CNNSVM模型在傳統CNN模型的池化層之后,增加注意力層,該層的主要作用是進一步提升特征詞語的選取,通過更新特征詞語的權重,從而選取出更具有類別區分能力的特征詞語。CNNSVM模型的具體結構圖如圖1所示。

圖1 CNNSVM模型結構示意圖
輸入層:使用訓練集中不同類別的文本作為輸入,進行CNN模型訓練。在將文本導入輸入層之前,需要針對文本進行預處理操作。預處理操作包括分詞、去停頓詞和詞語向量化處理。不同于機器學習文本分類常常使用獨熱編碼[20]進行詞語向量化,CNN模型使用基于Word2vec工具的CBOW[21](Continuous Bag-of-Words,連續詞袋)模型進行詞語向量化。
卷積層:是CNN模型中十分重要的一層,主要通過局部感知和權值共享兩個特性來完成特征詞語的選取工作。
池化層:主要工作是對卷積后的數據進行降維,從而實現特征的進一步提取。使用池化函數調整這一層的輸出,從維數較高的特征詞向量中提取成維數較低的文本特征向量,來替代網絡在該位置的輸出。常見的池化方式有最大池化和平均池化,即提取局部特征向量的平均值和最大值。
1.1.1 注意力層
注意力機制源于人類視覺,通過視覺對圖像進行全局掃描,人類往往會選擇性地屏蔽掉一些不重要可以忽略的信息,而將更多的注意力投入在認為是重要的信息上,也稱為注意力焦點。深度學習中的注意力機制本質上與人類的選擇性視覺注意力機制類似,主要目的是將有限的注意力資源投入到對當前任務更為重要和關鍵的信息上。在文本分類的應用環境下,可以理解為將更多的權重賦值在對文本類別區分有影響的特征詞語或句子上。同時,對于類別區分意義較小的特征詞語或句子可以減少其權重。
在CNNSVM模型中,卷積層與池化層通過對輸入層詞向量的訓練,完成特征詞語的初步提取與降維工作。在池化層之后加入注意力層,可以更好地對特征詞語進行提煉,提取對類別區分能力更強的特征詞語。同時,減少類別區分能力較弱的特征詞語,簡化模型的參數。注意力機制的原理基于“編碼器-解碼器”結構,類似于計算機數據結構中的“鍵-值”結構。“編碼器-解碼器”結構如圖2所示。
在圖2中,輸入數據X={x1,x2,…,xn},輸出數據Y={y1,y2,…,yn},s1,s2,…,sn表示解碼器的隱藏狀態。將編碼過程設為En,解碼過程設為De。其中輸入數據X在完成編碼后變為中間語義Mid。編碼過程可以表示為:

圖2 “編碼器-解碼器”結構
Mid=En(x1,x2,…,xn)
(1)
解碼過程實際是將中間語義Mid解碼,可以表示為:
yn=De(y1,y2,…,yn-1,Mid)
(2)
由式(2)可以看出,在求解輸出yn時需要使用中間語義Mid和前n-1項的輸出值。并且在計算每項輸出時,所使用的中間語義保持不變。那么,由于編碼器和解碼器使用中間語義Mid作為信息傳遞的唯一橋梁,便存在著兩點弊端:首先,中間語義由輸入序列計算而得,若輸入序列中存在類別區分能力較弱或對文本分類無幫助的噪聲詞語時,會影響模型的分類能力。其次,由于y1的數值將對y2,y3,…,yn-1的求解產生影響,從而導致詞語輸入序列的先后順序就顯得尤為重要。
為彌補“編碼器-解碼器”框架中的兩點不足,Bahdanau等人提出了基于注意力機制的“編碼器-解碼器”模型,結構如圖3所示。
在圖3中,X={x1,x2,…,xn}來代表輸入數據,Y={y1,y2,…,yn}來代表輸出數據。在增加了注意力機制的“編碼器-解碼器”模型中,不再使用統一不變的中間語義Mid,取而代之的是c1,c2,…,cn,n個不同的中間語義進行表示。cn的數值是由注意力權重對所有編碼器的隱藏狀態進行加權求和得到。其中,注意力機制的具體結構如圖4所示。

圖3 基于注意力機制的“編碼器-解碼器”模型

圖4 注意力機制結構
圖4中,每一個輸入數據xj進行編碼后將變成一一對應的編碼器隱藏狀態hj,注意力模塊能夠自動地學習權重αij。通過αij來體現編碼器隱藏狀態si與解碼器隱藏狀態hj之間的相關性。中間語義cj的數值是由注意力權重對所有編碼器的隱藏狀態進行加權求和得到的,假設輸入序列的個數為n,那么計算cj的公式為:
(3)
注意力機制通過對輸入數據的不斷訓練,調整αij的權重值,從而提高對類別區分能力較強的特征詞語的權重,最終達到提升整體分類效果的目的。除此之外,通過減小不重要特征詞語的權重,可以降低文本中非重要信息的影響力。
1.1.2 全連接層
全連接層采用全連接方式進行連接,即每個神經元都與上一層所有的神經元進行連接。由于采用全連接方式,所以全連接層涉及到的參數會非常多。在CNNSVM模型中,全連接層在注意力層之后,使用注意力層的輸出作為輸入。為了提升卷積神經網絡的性能,全連接層一般選擇ReLu函數作為激活函數。全連接層在模型中最主要的功能是起到“分類器”的作用,傳統CNN模型將全連接層與softmax層結合完成分類。使用CNN模型進行文本分類時,由于輸入數據為非線性且稀疏的詞向量,針對這類數據,SVM相較于softmax層有著更好的分類效果。所以在CNNSVM模型中,使用SVM分類器對softmax層進行替換,實現最終的文本分類。CNNSVM模型的全連接層框架如圖5所示。

圖5 全連接層結構示意圖
圖5中,每一個神經元都與上一層神經進行連接。全連接層通過向前計算和反向傳播的方式來不斷更新權重系數W,使得模型達到預先設置的閾值。在全連接層中使用ReLu激活函數可以提高神經網絡對模型的表達能力,解決線性不可分問題。
1.2.1 詞向量維度
在預處理階段需要將文本數據集進行分詞、去停用詞和向量化處理。CNNSVM模型使用Word2vec工具中的CBOW(Continuous Bag-of-Words,連續詞袋)模型進行詞向量的訓練,具體訓練過程見1.2.2小節。在進行詞向量訓練時,確定詞向量的十分重要。當詞向量的維數過高時,會使系統的運算次數和運行時間增加;當詞向量維數過低時,不能很好地體現詞與詞之間的近似關系和類別差異,影響模型進行文本分類的效果。在類似于百度百科詞條和維基百科等量級較大的語料庫中,詞向量的維數常在300到500。在某些特定領域的語料中維數常在200以內。實驗中,分別通過測試32、64、128和256維,研究詞向量維數對精確率和訓練時間的影響,從而能兼顧二者的維數進行實驗。基于不同的詞向量維度,實驗結果如圖6所示。

圖6 詞向量維度與分類精確率和模型訓練時間的關系
從圖6可以看出,隨著詞向量維度的增加,模型訓練的精確度也在不斷增加。同時,模型訓練所需要的時間也在不斷增加。通過精確率和訓練耗時的斜率可以看出,當維度從64提升到128時,精確率增加了0.4%,但訓練時間卻增加了約69.3%,這樣的代價并不合適。所以,在實驗中需要根據不同數據集來選取合適的詞向量維度。鑒于所用的數據集,當詞向量度從64維提升到128維時準確率只是輕微提升,所以本實驗中將詞向量的維度選擇為64維。
1.2.2 文本序列長度
模型所能輸入的最大序列長度也將對模型時間的分類效果起到一定的影響作用。因此,在要針對文本序列的長度進行調整,以便CNNSVM優化模型能夠更好地進行文本分類。當文本數據作為輸入進入卷積神經網絡模型進行訓練時,需要先將文本長度與預先設置的最大長度進行比較。若文本長度大于預先設置的閾值,按閾值將文本分割成若干個文本,文本長度小于閾值時,需要使用空格字符進行填充。通過實驗進行分析,確定最佳的閾值長度。具體實驗結果如圖7所示。

圖7 確定最大文本序列長度
在圖7中可以看出,最大文本序列長度過低,會導致模型無法捕捉足夠的數據特征,精確率降低;當最大文本序列長度過大,會導致系統出現過擬合的情況,同時也會導致模型訓練時間過長,精確率也會出現降低和不穩定的情況。綜上,實驗中將最大文本序列閾值設置為600。
1.2.3 模型中其他參數
在構建CNNSVM模型的過程中,除了確定詞向量的維數和輸入的最大文本序列長度外,還有許多參數需要預先設置,再次進行說明:
通過1.2.1和1.2.2節可以確定詞向量維數為64,輸入的最長序列長度為600。CNNSVM模型中,卷積核的長度為5,卷積核個數為256,卷積核寬度與詞向量維數一致為64。實驗使用的數據集包括訓練集和測試集,文本種類為8。全連接層神經元個數為128。為防止模型出現過擬合,加入dropout層,其中dropout保留參數為0.5。過擬合是指模型過分依賴訓練集中的特征數據,使用訓練集進行測試時分類的準確率很高,但當運行新的數據集時,分類效果差別較大。
為評估該算法的性能,在相同數據集的情況下,使用傳統CNN模型、CNN與NBC分類器結合的模型與該文提出的CNNSVM模型進行對比實驗。通過精確率和召回率進行分析。
精確率是指正確分類的文本占所有文本的百分比,其定義如式(4)所示:
(4)
其中,TP表示分類正確的文本,(TP+FP)表示被正確分類的文本和被錯誤分類的文本。
召回率作為一項評估文本分類系統從數據集中分類成功度的指標,用來體現分類算法的完備性,數值越高代表算法的成功度越高。具體定義如式(5)所示:

(5)
其中,TP表示被正確分類的文本數量,FN表示應當被分到錯誤類別中的文本的數量。
實驗是在安裝了Windows10專業版操作系統,內存為16 GB,CPU主頻為2.8 GHz的PC機上進行的。主要使用的軟件環境是基于Python3.6.7內核和Pycharm 2018.12.5版本。具體實驗結果如圖8和圖9所示。
圖8和圖9中,CNN-NBayes代表CNN模型與NBC分類器結合的文本分類模型。從精確率和召回率這兩個指標來看,CNNSVM的結果相比于傳統CNN模型和CNN與NBC分類器結合的模型要好一些。傳統CNN模型的分類效果不如CNN-NBayes,但是相比于傳統的機器學習分類算法來說,準確性要更好一些。原因在于基于卷積神經網絡的分類模型可以更充分地對文本的特征進行提取,因而獲得了更好的特征詞向量,使得模型最終的分類效果有所提升。

圖8 不同分類算法的精確率

圖9 不同分類算法的召回率
提出了一種基于CNN與SVM相結合的文本分類模型,即CNNSVM模型。該模型主要使用SVM分類器替換傳統CNN中的softmax歸一化函數實現模型的分類功能,以解決原模型泛化能力不足的問題。其次,相比于傳統CNN模型,CNNSVM模型增加了注意力機制,提高了模型對特征詞語的選取能力,同時也減少了模型參數數量。相比于傳統CNN模型,提升了模型分類的準確性和運行效率。