張小川,戴旭堯,劉 璐,馮天碩
(1.重慶理工大學兩江人工智能學院,重慶 401135;2.重慶理工大學計算機科學與工程學院,重慶 400054)
(?通信作者電子郵箱das7575@163.com)
文本分類是自然語言處理領域中的一項重要的基本任務,是解決如何有效獲取和管理海量電子文本信息的關鍵技術[1-2]。
在傳統的文本分類研究中,文本表示常利用基于分布假設的word2vec[3]或Glove[4]方法,以對大量無標簽文本進行訓練,并將其表示為Word Embedding[5]。它們的結果除詞嵌入本身外,還封裝了上下文信息,具有較好的特征表達能力。但在模型訓練時,該類方法存在利用文本上下文信息的范圍有限,從而導致語義特征不豐富的問題。
經Word Embedding 處理的短文本僅包含相互獨立的詞特征,還需利用神經網絡模型來建立非線性詞向量之間的相互作用關系,通過學習句子的表述來捕捉句子的語義。文獻[6]提出將卷積神經網絡(Convolution Neural Network,CNN)應用到文本分類任務,利用多個不同大小的卷積核來捕捉局部相關性以提取句子中的特征信息。文獻[7]提出了一種利用單詞上下文信息的循環CNN(Recurrent CNN,RCNN)把每個單詞的無語義向量與上下文單詞的向量進行拼接作為詞嵌入向量,有效地緩解了循環神經網絡(Recurrent Neural Network,RNN)[8]存在的梯度消失的問題,也避免了CNN需要通過窗口大小來設定上下文依賴長度。在中文場景下,文獻[9]將文本使用句向量表示,并輸入到雙向門控循環單元(Bidirectional Gated Recurrent Unit,BGRU)與CNN 的混合模型BGRU-CNN中,在THUCNews數據集上取得了較好的效果;文獻[10]使用自注意力機制對詞向量進行處理,提出一種關鍵詞提取與CNN 相結合的文本分類模型,其模型在復旦數據集上取得了較好的效果。以上研究雖取得了不錯的效果,但都只能保留文本的局部特征,不能充分利用上下文,且傳統文本表示方法不能解決多義詞的問題,導致模型精確率較低。
近年來,深度學習方法在單標簽文本分類任務上取得了較優成績[11-13],其在解決文本分類任務時常劃分為文本預處理、文本表示、特征提取和分類器四個部分。本文針對其中文本表示和特征提取兩個部分進行改進,提出了一種融合卷積神經網絡和多頭自注意力機制(combing Convolutional Neural Network and Multi-Head self-Attention mechanism,CNN-MHA)的中文短文本分類模型,主要工作如下:
1)在一般文本分類任務的過程中,不再使用靜態文本表示方法word2vec,而是結合預訓練語言模型的思想,使用基于Transformer 的雙向編碼器表示(Bidirectional Encoder Representations from Transformers,BERT)預訓練語言[14]對文本進行Word Embedding。在詞嵌入的過程中,充分利用BERT在海量文本數據集上的預訓練結果,動態地表示在不同語境中含有不同語義的文本。
2)在CNN 模型的基礎上,對特征提取層的策略進行改進,引入多頭自注意力機制。在特征提取的過程中,根據詞本身對分類結果的重要程度,為其分配不同的權重,增強文本內部的詞依賴關系。為降低模型在語義識別上的局限性,在多個特征表示的子空間內分別進行特征提取,再將各結果融合,提高模型的學習能力。
傳統語言模型的表示方法是靜態的,無法充分利用上下文表征字詞的多義性,為此,本文使用BERT模型,將傳統靜態表征方法優化為動態表征方法。如圖1所示,BERT 模型輸入層由字符級向量(Token_Embeddings)、位置向量(Position_Embeddings)和分段向量(Segment_Embeddings)相加組成。

圖1 BERT模型簡圖Fig.1 BERT model diagram
Token_Embeddings為中文文本中每個字對應的向量;Position_Embeddings給每個字添加時序信息;Segment_Embeddings的作用是將文本按句分段,并對語句做段定位,即利用標記符號[CLS]和[SEP]來區分不同的句子并同時保存每句話的位置信息。
把三層向量疊加之后輸入到Transformer 編碼器[15]中,對每個字進行雙向的編碼表示。Transformer編碼器以字符級向量疊加為輸入,先后通過自注意力層、殘差連接與歸一化層、前向神經網絡層,最終輸出帶有語義信息的隱藏層向量。
研究發現,注意力可選擇性地關注文本的重要信息。本文以此為啟發并借鑒Transformer 模型,采用多頭自注意力機制(Multi-head self-Attention mechanism,MHA)提取不同語義空間中的詞依賴關系。多頭自注意力以縮放點積注意力(Scaled Dot-product Attention,SDA)為原理,其計算式如下:

其中:Q、K、V分別為計算自注意力的查詢、鍵、值矩陣;QKT為注意力矩陣,對V矩陣加權;dk表示鍵的維數,而則是把注意力矩陣變為標準的正態分布,以使得結果更穩定且在反向傳播時能夠獲取平衡的梯度。
在式(1)計算的SDA基礎上,從包含不同語義信息的子空間中,集成如圖2所示的語義特征。

圖2 多頭自注意力簡圖Fig.2 Multi-head self-attention diagram
進而,通過如下兩步求得多頭注意力MultiHead數值:
1)先將Q、K、V矩陣分別映射到多個不同的子空間中:

其中:Qi、Ki、Vi為各子空間的查詢、鍵、值矩陣;W(Qi)、W(Ki)、W(Vi)為轉換矩陣;h為頭數。
2)并行地計算各子空間中的SDA,再將所得結果拼接,經線性變換后得句子矩陣:

其中:headi為每個子空間的SDA;MultiHead為最終結果。
采用卷積神經網絡獲取文本特征。先將文本經Word Embedding 后得到矩陣X,輸入到CNN 中,再經卷積操作后輸出每個句子對應的特征矩陣C:

其中:L為文本長度;xi為序列中第i個詞的向量;ω為濾波器;t為卷積核的大小;f為卷積非線性函數;b為偏差項。
通過上述步驟求得多頭注意力MultiHead、特征矩陣C,從而完成建模預處理目標。
CNN-MHA 模型結構如圖3 所示,由詞嵌入層、多頭自注意力層、卷積層和輸出層組成。

圖3 CNN-MHA模型簡圖Fig.3 CNN-MHA model diagram
本文采用BERT 預訓練語言模型作為CNN-MHA 的詞嵌入層。為學習到每個字的多重含義表達,在詞嵌入層對字向量做線性映射:設置文本序列矩陣X=[x1,x2,…,xN]T,N表示序列長度,當其在Word Embedding 之后,得到矩陣A=[a1,a2,…,aN]T。接著,構建Q、K、V三個矩陣,分別來建立當前字與其他字的關系,并生成特征向量。首先,初始化權重矩陣WQ、WK、WV,經矩陣計算得Q、K、V矩陣,而且在模型訓練過程中,WQ、WK、WV不斷地優化和更新并獲得SDA:

在文本輸入中,存在batch 序列長短不一現象,需要對短句中空白處以0 填充。作為計算SDA的關鍵環節,softmax函數存在產生無意義值的情況,從而導致結果出現較大偏差。為解決此問題,本文提出對無效填充區域增加平滑項的做法,經實際計算SDA,并對結果做殘差連接,使梯度跨層由后向前傳播,從而有效地避免傳統RNN方法的梯度消失的問題。

進一步對結果進行歸一化操作,以將隱藏層轉化為正態分布,加快了訓練和模型的收斂。
在經過所有計算后,結束BERT 的操作,通過多層迭代,最終得到經詞嵌入層后對應的融合上下文信息的隱藏層向量encodeToken=[et1,et2,…,etN]T。
所有文本數據經Word Embedding 操作之后,所得的encodeToken對應為每個字的向量表示,仍可以進行進一步的語義特征提取,因此,本文利用多頭自注意力機制單獨作為CNN-MHA中語義增強層,并行地進行h次自注意力運算:

再融合所有子空間的語義信息:

最后,將MultiHead以式(10)與最初輸入的文本序列進行殘差連接,最終得到句子向量。
在數據通過Multi-head Attention 層后,所有文本序列內部都獲得全局范圍內的上下文詞依賴關系,但是模型缺少捕獲局部特征的能力。為提升模型的表征能力,將經Multi-head Attention 層輸出的句子向量再輸入到CNN 中,以捕捉相應的局部特征:

其中,為Multi-head Attention 層的輸出矩陣A從第j行到第j+t-1行的局部特征。
本文使用m種卷積核,得到最終的卷積結果Ck(1 ≤k≤m)輸入到池化層進行特征采樣,目的是在保持主要特征的情況下,降低模型的參數數目,同時也降低過擬合的風險。最終,將池化后的特征矩陣C輸入到帶有dropout 操作的全連接層里,得到最終的分類特征向量:

在文本經詞嵌入層后,得到encodeToken為每一個文本序列所對應的包含上下文語義信息的向量,如圖1 中輸出層的表示,而encodeToken中只包含[CLS]對應的頭向量clsToken,可作為每句話的向量表示,即為每句話的分類特征向量,如圖4所示。

圖4 分類特征向量簡圖Fig.4 Classification feature vector diagram
為最大化獲取文本特征信息,本文將經CNN 輸出的特征向量y與Word Embedding 時生成的clsToken向量進行特征融合:

其中,H作為融合特征向量輸入到分類器中,進行最終的中文短文本分類任務。
本文實驗使用的數據來自搜狗實驗室提供的搜狐新聞標題數據[16]。本文從中選取金融、股票、房產、科學、體育、教育、社會、政治、游戲、娛樂十個類別的數據,進行分類任務。為了保證測試數據評估效果與在真實場景下模型對未知數據預判的結果相近[17],數據集被劃分為訓練集50 000 條、驗證集5 000條、測試集10 000條。
本文的實驗環境為:操作系統Windows 10;CUDA10.0;cudnn 10;處理器Intel I7 8700,GPU NVIDIA GeForce GTX 1070;內存16 GB;顯存8 GB;編譯平臺Pycharm Professional;Python 3.6;Pytorch 1.3.1。
本文模型實驗的所有參數為:訓練輪數epoch=10,batch_size=64,每條文本的長度text_size=32,學習率learning_rate=5E-5,BERT模型的隱藏單元數hidden_num=768,CNN 的卷積核尺寸filter_size=(2,3,4),卷積核數量filter_num=256,dropout=0.1。為了降低模型過擬合的風險,設置檢測參數detect_imp=3 000,即若模型在持續3 000個batch 的訓練中所得結果沒有明顯的提升,就提前結束訓練。
由于實驗用數據集的標簽具有不規則、不平衡等特性,為了能客觀準確地衡量模型在數量少的類別上的分類性能,實驗主要采用F1值作為性能評價指標,并以準確率、精確率、召回率作參考:

其中:Precision代表準確率;Recall代表召回率;F1 越大,模型的分類效果則越好。
實驗將本文構建的CNN-MHA 模型與如下基準模型進行了對比。
1)TextCNN:將經Word Embedding 的詞向量通過一層卷積和一層池化來構造更好的特征向量。
2)TextRCNN:將經Word Embedding 的詞向量通過雙向RNN和一層最大池化來構造更好的特征向量。
3)BERT:利用預訓練模型,直接將文本嵌入為詞向量,再輸入到分類器中分類。
在實驗中,訓練和測試時的各項參數都保持統一,評價指標采用準確率、精確率、召回率、F1值。本文實驗數據共有10個類別,為方便對比各模型性能,評價指標的實驗結果皆取10個類別的均值,如表1所示。

表1 不同模型實驗結果對比 單位:%Tab.1 Comparison of experimental results of different models unit:%
由表1 可見,CNN-MHA 模型在各項指標上都是最優的,其中F1 值比TextCNN 模型提高了3.99%,比BERT 模型提高了0.76%,比TextRCNN 模型高出2.89%。如果采用BERT 模型作為嵌入層:BERT-CNN 與傳統靜態表征方法的TextCNN相比,其各項指標平均提高了3.92%;BERT-RCNN 與TextRCNN 相比,其各項指標平均提高了2.63%。因此,從以上實驗結果來看,由于BERT 模型在海量文本數據集上進行了預訓練,其動態文本表征方法相較于傳統靜態文本表征方法,對文本分類任務有明顯影響且性能有顯著提升。
本文CNN-MHA 模型與BERT-CNN 相比,各項指標平均提升了0.06%,其精確率提升了0.08%、F1 值提升了0.06%。通過在BERT-RCNN 中添加了Multi-head Attention 層得到MHA-RCNN,由表1 所示,二者相比,MHA-RCNN 準確率提高了0.04%、精確率提高了0.05%、召回率提高了0.05%、F1 值提高了0.07%,這表明Multi-head Attention 在構建含有更豐富的語義信息特征向量時具有有效性,且CNN 專注于局部特征提取這一特性,相較于RCNN 效果更好,計算效率更高,并很好地彌補了Multi-head Attention 缺少的局部特征提取功能的不足。
在訓練過程中發現,由于本文模型存在較大的參數量,其各項指標所對應的結果體現出模型存在著輕微的過擬合現象。為此,本文采取在Multi-head Attention 層后加入dropout操作的方法,由表1 的結果可以看出,與沒有dropout 操作的CNN-MHA*相比,CNN-MHA 模型的各項指標平均提升了0.2%,其中精確率和F1 值增長了0.22%,表明dropout操作對本文模型具有較大的影響。
通過各實驗對比發現,本文的CNN-MHA 模型具有良好的泛化能力,在中文短文本分類任務上具有良好的效果。
本文針對中文短文本分類任務,特別針對文本表示和特征提取部分,提出了一種融合多頭自注意力機制的中文短文本分類模型CNN-MHA。該模型的核心思想是先利用BERT預訓練模型對文本進行Word Embedding;再利用短文本的海量性,針對獨立且不同的上下文語境,通過多頭自注意力機制在全局范圍內進一步學習文本序列內部的詞依賴關系,增強模型的表意能力;然后,將結果輸入到CNN 中,捕捉局部特征;最終,將得到的特征向量與Word Embedding 時生成的句特征向量進行特征融合,并以此融合向量作為分類器的輸入進行短文本分類任務。實驗結果表明,本文改進后的模型在中文短文本分類任務上具有較好的效果。
本文所提模型雖然達到了一定的效果,但也有一些明顯的缺陷:在語料數據噪聲較大時,模型效果會產生波動;模型的參數量較大,計算成本較高。下一步工作將考慮這些不足,對模型進行更細粒度的研究。