張凌慷
(上海電力大學電子與信息工程學院,上海 201306)
隨著互聯(lián)網(wǎng)的不斷發(fā)展,互聯(lián)網(wǎng)中的文本信息呈指數(shù)性增長。文本分類技術可以從純文本的大量冗余信息中分類出所需的信息,分類后的文本可以應用于自然語言處理的許多下游任務中,例如問答系統(tǒng)、主題分類、信息檢索和情感分析等領域。
文本分類主要可以分為特征提取、分類器選擇與訓練、評估分類結果與反饋等3 大過程。其中特征提取和分類器的選擇與訓練共同決定了文本分類任務的最終效果。在傳統(tǒng)的機器學習方法中,往往選擇提取詞頻和詞袋特征,再訓練模型。經(jīng)典的機器學習方法有樸素貝葉斯、支持向量機等。使用傳統(tǒng)的機器學習方法會導致文本分類準確率較低,存在特征提取時表征能力有限、數(shù)據(jù)稀疏和特征向量維度過高的問題。
隨著深度學習的流行,基于深度學習的神經(jīng)網(wǎng)絡也被應用于文本分類任務中,并取得了相對較好的分類效果[1]。Kim 等[2]在卷積神經(jīng)網(wǎng)絡(Convolutional Neural Network,CNN)的基礎上提出了TextCNN,直接對句子進行文本分類。長短時記憶網(wǎng)絡(Long-Short Term Memory,LSTM)[3]和基于序列的自動編碼器[4]和在LSTM 詞嵌入層加入對抗擾動[5],得益于該模型在文本表示和對復雜特征強大的表征能力,取得了較好的效果。文獻[6]提出使用門控循環(huán)單元GRU(Gated recurrent Unit)和注意力機制進行文本分類。
Zhao 等[7]首先在文本分類任務中引入了膠囊網(wǎng)絡(Capsule Network),減少了CNN 在池化操作中特征丟失的問題。
本文在膠囊網(wǎng)絡的基礎上,提出一種融合GRU,注意力機制的膠囊網(wǎng)絡文本分類模型。先使用GRU 取代原有的卷積神經(jīng)網(wǎng)絡來進行特征提取,結合注意力機制對GRU 提取的特征重新進行權重分配,對文本內容貢獻大的分配較大的權重,最后使用膠囊網(wǎng)絡進行文本分類,從而解決CNN 在池化過程中的特征丟失問題。
CNN 在每次卷積之后,都會進行池化操作對特征圖進行下采樣來簡化計算并改善局部特征。但池化操作從上一層傳遞到下一層的是標量,導致無法考慮一些位置與姿態(tài)的信息。因此CNN 在識別具有空間關系的特征時存在很大的局限性。
為了解決CNN 中存在的問題,Hinton[8]于2011 年首次提出了“膠囊”的概念。其創(chuàng)新之處就是使用向量膠囊來取代CNN 中的標量神經(jīng)元,使得膠囊可以保留輸入對象之間的空間信息。基于此,Sabour 等[9]在2017 年進一步提出了具有動態(tài)路由算法的膠囊網(wǎng)絡結構,該網(wǎng)絡包括一層卷積層來提取特征;初級膠囊層將標量特征圖編碼為向量膠囊;高層膠囊層進行分類。
Zhao 在句子中的不同位置用卷積操作提取局部特征,接著訓練2 層膠囊層提取全局特征,最后在全連接層輸出每個文本類的概率送入Softmax 分類器進行分類。Kim 等[10]將靜態(tài)路由代替動態(tài)路由機制,忽略句子中部分空間信息,達到簡化路由計算的目的。
本文提出一種融合了GRU 和注意力機制的膠囊網(wǎng)絡文本分類模型,主要由全局特征提取模塊和膠囊網(wǎng)絡文本分類模塊組成,結構如圖1 所示。

圖1 模型結構
2.1.1 GRU
GRU 是循環(huán)神經(jīng)網(wǎng)絡(Recurrent Neural Network,RNN)的一種,相比LSTM,使用GRU 能得到相當?shù)男Ч⑶腋菀子柧殻軌蚝艽蟪潭壬咸岣哂柧毿省RU 由更新門Zt、重置門rt組成,ht為記憶單元。其結構如圖2 所示。

圖2 GRU 結構圖
首先,通過上一個傳輸下來的狀態(tài)ht-1和當前節(jié)點的輸入xt來獲取重置門rt和更新門Zt的狀態(tài):

更新門Zt信號范圍為0~1。門控信號越接近1,代表記憶下的數(shù)據(jù)越多。GRU 的優(yōu)點在于使用同一個門控Zt同時進行遺忘和選擇。
2.1.2 注意力機制

在文本分類任務中,一個句子中的不同單詞對于分類效果的影響是不同的,引入注意力機制可以將較重要的單詞分配較大的權重。將GRU 輸出的ht作為輸入:其中:Wa為權重矩陣,b0為偏置,ai為經(jīng)過softmax 函數(shù)后得到的每個詞的標準化權重,然后通過加權計算得到注意力機制的輸出向量vi作為膠囊網(wǎng)絡的輸入。
膠囊網(wǎng)絡的核心思想就是用向量膠囊來取代CNN中的標量神經(jīng)元,通過動態(tài)路由算法來不斷迭代低層膠囊和高層膠囊之間的權重,以確保每個輸出發(fā)射到高層膠囊中。
動態(tài)路由中每個低層膠囊到高層膠囊的概率:

在公式(4)中,利用擠壓函數(shù)(Squash Function)進行歸一化后得到高層膠囊Vj:

動態(tài)路由多次迭代之后,不斷調整耦合系數(shù)Cij,得到修正后的高層膠囊Vj。
為了驗證算法在文本分類任務上的效果,采用基于Tensorflow 的Keras 進行開發(fā),編程語言為Python3.7。服務器配置如下:操作系統(tǒng)為Ubuntu16.04,內存為16G,GPU 為Nvidia GeForce Titan X。
采用今日頭條中文新聞分類數(shù)據(jù)集TNEWS 進行實驗,該數(shù)據(jù)集包含382 688 條新聞文本,可被標出類別的共有15 類,去掉5 類樣本數(shù)不足的數(shù)據(jù),保留剩下10 類樣本作為分類文本分解。每類數(shù)據(jù)都選取2 000 條文本,隨機打亂數(shù)據(jù)集。訓練集、驗證集和測試集的劃分比例為8∶1∶1。實驗的預處理部分先將下載好的文本轉碼,采用jieba 分詞工具對新聞文本數(shù)據(jù)進行分詞處理,再加上對應的標簽。
為了準確評價本文所提出的模型的性能,采用準確率(Accuracy)作為評價指標,其定義:

其中:TP代表正確識別的正樣本數(shù)量;FP代表實際為正樣本,識別為負樣本的數(shù)量。
將預訓練得到的word2vec 詞向量作為GRU 的輸入,文本長度100,詞向量維度300。訓練使用學習率0.001 的Adam 優(yōu)化器,在每個epoch 將學習率衰減為0.99。卷積層中將每個文本數(shù)據(jù)都處理成100×300 的矩陣形式。超過100 的文本截取前100 個詞,不足的文本加零補齊。GRU 單元設置為64 個,底層膠囊個數(shù)設置為32個。動態(tài)路由迭代次數(shù)為3 次,高層膠囊個數(shù)11 個,對應10 類新聞分類,其中標簽0 不用,膠囊的模長代表所屬分類的概率。采用TextCNN 和capsule-B 作為基線進行對比分析。
TextCNN、Capsule-B 與本文方法在TNEWS 上的實驗結果見表1。

表1 對比實驗分類結果(準確率)
3 種方法的epoch 都設置為40。由表1 可見,在TNEWS 數(shù)據(jù)集上,本文提出的模型分類效果比傳統(tǒng)的CNN 算法,以及原有的膠囊網(wǎng)絡算法的分類效果要好。本文模型在測試集上的分類準確率達到了87.88%,比TextCNN 的分類結果高2.81%,比Capsule-B 的分類結果高3.24%。驗證了本文提出的模型分類有效性。
本文融合GRU 和注意力機制的優(yōu)點,提出了一種融合GRU 和注意力機制的膠囊網(wǎng)絡文本分類方法。該方法使用GRU 有效提取文本的全局特征,用注意力機制進行權重分配,進一步關注文本序列中的關鍵信息。替換掉了原有膠囊網(wǎng)絡特征提取時使用的CNN,去除了池化操作帶來的信息丟失問題。實驗結果證明本文算法有效地提高了文本分類的準確性。下一步工作將對模型進一步優(yōu)化,提高分類的準確率。