趙云山, 段友祥
中國石油大學(xué)(華東) 計算機(jī)與通信工程學(xué)院,山東青島266580
隨著文本分類研究的深入,涌現(xiàn)出了支持向量機(jī)、樸素貝葉斯等諸多方法.這些方法因以單詞或者詞組作為分類特征而導(dǎo)致特征孤立,不但丟棄了文本序列上下文信息,而且也沒考慮序列中詞組之間的相互影響.然而,文本是一個由有序單詞和符號組成的序列,與分類相關(guān)的重要信息可以出現(xiàn)在句子的任何位置,且序列中的特征普遍存在長程依賴現(xiàn)象,因此利用特征上下文信息可以更加準(zhǔn)確地理解單詞或詞組在句子中的含義,從而提高分類精度.
近年來,深度學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)語言模型迅速發(fā)展[1-3],遞歸神經(jīng)網(wǎng)絡(luò)(recurrent neural network, RNN)和卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network, CNN)[4]成了處理自然語言任務(wù)的兩種主要模型,而之前人們普遍認(rèn)為RNN是一種較好的序列建模解決方案.如今,CNN 一是因為在計算機(jī)視覺和自然語言處理方面都取得了成功,二是因為擁有比RNN 更好的并行性、更強(qiáng)大的局部特征提取能力,也就更容易將已訓(xùn)練的模型擴(kuò)展到數(shù)據(jù)規(guī)模更大的應(yīng)用環(huán)境中[5],所以本文主要研究并對比基于卷積神經(jīng)網(wǎng)絡(luò)的文本分類模型.根據(jù)文本分類輸入特征粒度的不同,可以將文本分類的卷積神經(jīng)網(wǎng)絡(luò)模型分為詞級卷積神經(jīng)網(wǎng)絡(luò)模型和字符級卷積神經(jīng)網(wǎng)絡(luò)模型.
在以詞向量作為輸入的卷積神經(jīng)網(wǎng)絡(luò)方面,文獻(xiàn)[6]用詞向量作為模型輸入,訓(xùn)練了三層卷積神經(jīng)網(wǎng)絡(luò)用于問題分類和情感分類[7],大大提高了分類精度;文獻(xiàn)[8]在卷積神經(jīng)網(wǎng)絡(luò)中引入動態(tài)K 最大池化機(jī)制并提取全局句子特征;文獻(xiàn)[9]將卷積神經(jīng)網(wǎng)絡(luò)和長短期記憶(long short-term memory, LSTM)網(wǎng)絡(luò)結(jié)合,用卷積神經(jīng)網(wǎng)絡(luò)并行提取短語級特征,以LSTM 得到可用于文本分類的句子表示;文獻(xiàn)[10]將多個版本的詞向量作為模型輸入并提出了多通道的文本分類模型.
在以字符向量作為模型輸入的文本分類卷積神經(jīng)網(wǎng)絡(luò)模型方面,文獻(xiàn)[11-12]以字符向量作為卷積網(wǎng)絡(luò)模型的輸入訓(xùn)練了基于字符卷積的神經(jīng)網(wǎng)絡(luò)模型,并在多個自然語言處理任務(wù)上取得了成功,但這類卷積模型需要大量的數(shù)據(jù)進(jìn)行模型訓(xùn)練,且模型的復(fù)雜度更高,只適用于大數(shù)據(jù)集建模.文獻(xiàn)[13]證明了基于單詞的卷積神經(jīng)網(wǎng)絡(luò)比基于字符的卷積神經(jīng)網(wǎng)絡(luò)更有優(yōu)勢,且訓(xùn)練速度更快.
以上基于詞向量和字符向量的卷積神經(jīng)網(wǎng)絡(luò)模型與傳統(tǒng)的機(jī)器學(xué)習(xí)方法相比,大幅提升了文本分類任務(wù)的分類效果,但是仍然存在不足之處.因為卷積神經(jīng)網(wǎng)絡(luò)本身只能提取局部特征,所以這類模型只是以少數(shù)幾個詞級特征表示整個序列,而沒有考慮特征之間的聯(lián)系.此外,上述模型通常就單一任務(wù)進(jìn)行實驗驗證,其通用性也得不到保證.
為了讓提取局部特征的卷積神經(jīng)網(wǎng)絡(luò)能夠關(guān)注到非局部特征之間的依賴,本文在CNN 神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)上引入Attention 機(jī)制[14-16],建立了基于Attention 機(jī)制的卷積神經(jīng)網(wǎng)絡(luò)文本分類模型.只要借助Attention 機(jī)制,傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)也能計算當(dāng)前局部特征與非局部特征之間的依賴關(guān)系,為提取句子級分類特征提供有效保證.此外,本文就多個文本分類任務(wù)驗證了模型的通用性.
文本序列是不同長度單詞的組合,而卷積神經(jīng)網(wǎng)絡(luò)只接收固定長度的輸入,于是需要對所有輸入樣本進(jìn)行填充或者截斷處理,從而將不定長的樣本轉(zhuǎn)換成固定長度為S 的文本.處理方式包括長度不足時填充和長度超出時截斷兩種方式.截斷方式是只將樣本序列的前S 個字符輸入模型參與訓(xùn)練和分類的方式;填充方式是在填充樣本長度小于S 時再次向序列的尾部重復(fù)填充原序列直至被截斷的方式,這種方式可以增加序列中的有用序列特征.
文本向量表示是將長度為S 的文本序列表示成d 維單詞向量序列.經(jīng)單詞向量化處理后將自然語言序列轉(zhuǎn)換成定長詞向量序列作為模型的輸入,即[L1,L2,L3,L4,L5,··· ,Ls],L1:s∈Rs×d.文本的向量表示有多種方法,本文采用自訓(xùn)練詞向量和預(yù)訓(xùn)練詞向量.對于預(yù)訓(xùn)練單詞向量,本文采用GloVe[17]和Google News 兩個版本.這兩種版本詞向量模型中的單詞向量均為300 維的詞向量,即d=300.對于自訓(xùn)練詞向量,通過調(diào)用Google word2vec API 直接以每個任務(wù)的實驗語料訓(xùn)練語言模型.由于數(shù)據(jù)集中單詞量較?。?0 萬詞級),本文將數(shù)據(jù)集中的單詞訓(xùn)練為64 維的詞向量,即d=64.
詞匯層面特征是決定文本類型的重要線索.傳統(tǒng)詞匯層次特征主要包括單詞本身和單詞間的位置關(guān)系.卷積神經(jīng)網(wǎng)絡(luò)中的所有標(biāo)記都被表示為單詞向量,這是一種與人類對單詞相似性判斷相關(guān)聯(lián)的詞.很多基于詞級特征表示的文本分類模型盡管取得了一定成功,仍然難以捕捉到長距離特征依賴和語義,而自然語言的一個重要特性就是允許人類理解存在長程依賴的含義.為此,本文在CNN 網(wǎng)絡(luò)中加入Attention 機(jī)制并建立了A-CNN 模型.該模型通過Attention 機(jī)制為卷積過程提供詞匯特征之間的依賴關(guān)系,為提取句子級的分類特征提供依據(jù).詞級特征通過一個普通卷積分量和Attention 機(jī)制進(jìn)行特征變換,然后通過非線性激活函數(shù)生成語句級特征表示.
本文建立的A-CNN 模型結(jié)構(gòu)如圖1 所示:
圖1 A-CNN 模型結(jié)構(gòu)Figure 1 Structure of A-CNN model
該模型包括一個固定大小的輸入層、4 個寬度不同的Attention CNN 層、3 個大小不同的全連接層、一個作為模型輸出層的softmax 回歸層,其中Attention CNN 層是模型的核心結(jié)構(gòu).圖中卷積結(jié)果的每一列表示一個特征圖,模型前向傳播過程如下:
輸入的詞向量序列通過輸入層進(jìn)入模型,然后經(jīng)過4 個串行Attention CNN 結(jié)構(gòu)進(jìn)行特征提取,最后經(jīng)過全連接層得到分類結(jié)果.其中,Attention CNN 結(jié)構(gòu)中1?1 卷積用于增加不同特征圖之間的信息交互,2 d、3 d、4 d 大小卷積核為模型后續(xù)處理提供不同粒度的詞匯級特征表示.另外,全連接層中添加了Dropout[18],用來降低過擬合程度.
1.4.1 普通卷積
假設(shè)Li∈Rd是文本序列的第i 個待卷積特征,Li:j= [Li,Li+1,··· ,Li+j],卷積核W ∈Rk×d表示長寬分別為k 和d 的卷積核,這樣有利于卷積核和輸入的文本特征一起產(chǎn)生新的更高層的特征,例如生成一個新的特征fi為
式中,b ∈R 是偏置項;f 是模型非線性激活函數(shù),通常為Tanh 函數(shù)、Sigmoid 函數(shù)、ReLU 等,本文實驗中以ReLU 作為激活函數(shù).
1.4.2 Attention 機(jī)制
Attention 機(jī)制是人類視覺信號處理機(jī)制,最初用在計算機(jī)視覺方面完成圖片識別等任務(wù),后來被引入自然語言處理領(lǐng)域.在CNN 中引入Attention 機(jī)制的核心思想如下:根據(jù)注意力機(jī)制計算不同特征在序列中的重要程度,區(qū)分出決定文本類型的關(guān)鍵特征和干擾特征,利用池化操作抽取關(guān)鍵特征用于文本分類.Attention 機(jī)制原理如圖2 所示
圖2 Attention 機(jī)制Figure 2 Attention mechanism
在圖2 所示的CNN 的Attention 機(jī)制中,要計算當(dāng)前特征與序列中其他特征的相關(guān)度,就以當(dāng)前狀態(tài)為query,并以序列中其他特征為key,先根據(jù)一個能量函數(shù)E 計算當(dāng)前特征與序列中其他特征的相關(guān)度,再通過softmax 回歸得到每個全局特征對當(dāng)前特征的相關(guān)度系數(shù),具體計算過程如下:
1)利用能量函數(shù)計算當(dāng)前卷積狀態(tài)Li與Li的全局上下文H 之間的關(guān)系為
式中,Li表示當(dāng)前待卷積狀態(tài),Hj表示Li的第j 個全局上下文,Ei,j表示Li與Hj的相關(guān)度.
2)通過softmax 回歸計算特征的匹配分?jǐn)?shù)為
式中,s 表示與狀態(tài)相關(guān)度的歸一化分?jǐn)?shù),Ei,j表示能量函數(shù)計算結(jié)果矩陣E 中的第i 行第j 列的值.
3)求得全局特征Hi的加權(quán)的匹配分?jǐn)?shù)和對應(yīng)特征向量乘積的和,即特征的全局重要程度Ci的計算公式為
按能量函數(shù)計算方式的不同,Attention 機(jī)制主要分為加性Attention (additive attention, AA)和乘性Attention (dot-product Attention, DA)兩種,其定義如下:
1)加性Attention 的計算公式如式(5)或(6)所示:
或者
式中,Wl∈Rd,Wh∈Rd.
2)乘性Attention 的計算公式如式(7)或(8)所示:
或者
式中,We∈Rd×d.
乘性Attention 相比于加性Attention,矩陣運(yùn)算更快[13],于是本文使用乘性Attention 進(jìn)行特征相關(guān)度計算.
1.4.3 Attention CNN 層
Attention CNN 原理圖如圖3 所示:
如式(9)所示,Attention CNN層和普通卷積層有兩點區(qū)別:一是Attention CNN 用1.4.2 節(jié)介紹的能量函數(shù)和softmax 回歸來計算序列中的其他特征與當(dāng)前特征的相關(guān)度系數(shù)g,這個系數(shù)可用來表示當(dāng)前特征和全局特征之間的相關(guān)程度;二是Attention CNN 層的當(dāng)前卷積特征具有3 個上下文狀態(tài),即左邊的狀態(tài)Li?1、右邊的狀態(tài)Li+1、全局的狀態(tài)Ci,同時本文使用了不同寬度的卷積核,相當(dāng)于獲取不同數(shù)量單詞構(gòu)成的詞組作為局部特征.
如式(9)所示,Attention CNN 層由一個普通的局部特征卷積與一個非局部特征卷積組成,局部卷積計算特征局部重要程度,非局部特征卷積計算當(dāng)前特征全局重要程度
單獨計算局部特征和全局特征的重要程度可以減少模型的參數(shù)和計算量,于是可將式(9)可以拆分為
另外,在Attention CNN 層中也包括池化層.池化雖然在提取特征的同時會改變特征的絕對位置,但是不會改變特征的相對位置關(guān)系,本文的池化操作采用全局K 最大池化.
模型訓(xùn)練通過不斷最小化預(yù)測分布和真實分布的交叉熵誤差完成.模型的目標(biāo)函數(shù)是含有一組需要L2 正則化參數(shù)的交叉熵?fù)p失函數(shù),其中L2 正則化項包括卷積核權(quán)重和完全連接層權(quán)重.
假設(shè)一組樣本為X = [x1,x2,x3,··· ,xn],其目標(biāo)標(biāo)簽為Y = [y1,y2,y3,··· ,yn],通過模型之后的預(yù)測標(biāo)簽為則模型損失計算公式為
式中,l 表示模型損失,Ws表示包含卷積層和全連接層的權(quán)重矩陣,λ 為正則項系數(shù).
本文模型通過基于梯度的反向傳播算法進(jìn)行訓(xùn)練,同時在模型訓(xùn)練過程中用Dropout 來降低過擬合程度.本文實驗對比了隨機(jī)梯度下降(stochastic gradient descent, SGD)和自適應(yīng)矩估計(Adam)優(yōu)化函數(shù)[20],Adam 優(yōu)化函數(shù)總體上優(yōu)于SGD,因此在實驗結(jié)果中只列出通過Adam 優(yōu)化函數(shù)的訓(xùn)練和測試結(jié)果.
本文實驗中的超參數(shù)設(shè)置如下:
1)Attention CNN 層會有寬度為2、3、4 寬度的3 種卷積核,每種卷積核數(shù)量為128 個.
2)模型的初始學(xué)習(xí)率為1e-3.
3)按照均勻分布的方式來初始化各層的權(quán)值矩陣.
4)Dropout 層系數(shù)設(shè)置為0.5,L2 正則化系數(shù)為0.01.
5)最小批量(mini-batch)大小為64.
6)模型迭代120 輪(epochs),且在通常情況下不需要進(jìn)行完整的120 輪訓(xùn)練就可以提前終止.
3.1.1 Stanford Sentiment Treebank(SST)數(shù)據(jù)集
SST 數(shù)據(jù)集可用于電影評論情感分類任務(wù),其中包含8 544 個訓(xùn)練樣本、1 101 個交叉驗證樣本、2 210 個測試樣本.本文實驗將樣本按情感值劃分為積極和消極兩類,該任務(wù)的評價指標(biāo)為分類精度.
3.1.2 TREC 問題分類數(shù)據(jù)集
問題分類是問答系統(tǒng)中的一個重要步驟,其目的是將一個問題劃分到一個特定的問題類型集合中.TREC 問題類型數(shù)據(jù)集包含5 452 個訓(xùn)練樣本和500 個測試樣本,該任務(wù)的評價指標(biāo)為分類精度.
3.1.3 TREC 問題答案選擇數(shù)據(jù)集
問題答案選擇是在一個問題的多個回答中判斷正面的回答或者負(fù)面的答案.TREC 問答數(shù)據(jù)集包括47 315 個樣本,其中訓(xùn)練樣本為44 648 個,交叉驗證樣本為1 149 個,測試樣本為1 518 個.本文所用的問答任務(wù)評價指標(biāo)是問題和答案匹配的精度.
為了驗證Attention 機(jī)制對CNN 模型的提升以及A-CNN 模型在文本分類任務(wù)中的表現(xiàn),分別進(jìn)行了如下實驗并與經(jīng)典的深度學(xué)習(xí)模型進(jìn)行對比分析.本文模型使用tensorflow,Python3.5,并且在tesla m40 gpu 完成模型的訓(xùn)練和預(yù)測,具體實驗結(jié)果如下.
3.2.1 Attention CNN 層和普通卷積層對比結(jié)果
本節(jié)對比了A-CNN 模型中Attention CNN 層和普通卷積層對標(biāo)志文本類型的關(guān)系特征提取能力,并分別對它們進(jìn)行可視化處理.可視化處理時只選取卷積核寬度為3 的結(jié)果.
從訓(xùn)練集SST 中隨機(jī)抽取了一個句子,在下文和圖中標(biāo)記為s1.s1是一段電影影評,人類從被標(biāo)記為藍(lán)色的部分可以判斷出s1是段積極影評.
“hi for all the people who have seen this wonderful movie.i’m sure that you would have liked it as much as i.i love the songs once you have seen the show you can sing along as though you are part of the show singing and dancing.dancing and singing.the song ONE is an all time fave musical song too and the strutters at the end with the mirror its so oh you have to watch this one”
圖4 中的(a)、(b)、(c)分別展示了Attention CNN 層對句子s1訓(xùn)練1 代、100 代、10 000 代的結(jié)果.結(jié)果表明:在訓(xùn)練開始階段,s1各部分具有相似的重要性,但是隨著訓(xùn)練代數(shù)的增加,特征重要程度分化越來越明顯,這符合人類閱讀習(xí)慣.Attention 機(jī)制能使網(wǎng)絡(luò)忽略句子中無關(guān)特征,而關(guān)注到少數(shù)分類關(guān)鍵特征,并給予這些關(guān)鍵特征更高權(quán)值.圖(c)中顏色最深的方塊正好對應(yīng)了s1中詞組“this wonderful movie”,這說明Attention CNN 層能夠有效提取標(biāo)志句子類型的關(guān)鍵特征.圖4 中的(d)展示了普通卷積層對s1訓(xùn)練10 000 代之后句子各部分的重要程度變化.可以看出,經(jīng)過10 000 代訓(xùn)練之后的普通卷積層仍然沒有有效發(fā)現(xiàn)分類關(guān)鍵特征.
實驗結(jié)果表明,在普通卷積網(wǎng)絡(luò)中引入Attention 機(jī)制,可以為網(wǎng)絡(luò)提取文本序列分類特征提供可靠而有效的幫助,從而提高特征提取效率.
3.2.2 A-CNN 模型在文本分類任務(wù)上的表現(xiàn)
采用本文A-CNN 模型分別在情感分析任務(wù)、問題分類任務(wù)、問題答案匹配任務(wù)的數(shù)據(jù)集上進(jìn)行了文本分類實驗,同時與其他深度學(xué)習(xí)文本分類模型完成相同任務(wù)時進(jìn)行了實驗對比和分析.由于本文模型輸入用到了3 種不同版本的詞向量,表1~3 展示了以全部3 種詞向量作為模型輸入的實驗結(jié)果,Self train A-CNN 模型以自訓(xùn)練詞向量作為模型輸入,GloVe pre_train A-CNN 模型以GloVe 語言模型預(yù)訓(xùn)練詞向量作為模型輸入,Google_News pre_train A-CNN 模型以谷歌新聞預(yù)訓(xùn)練詞向量作為模型輸入.具體實驗及結(jié)果分析如下:
圖4 Attention CNN 和普通CNN 對比結(jié)果圖Figure 4 Comparison results between Attention CNN and CNN
3.2.2.1 情感分類任務(wù)
表1 列出了本文提出的分類模型和其他經(jīng)典情感分類任務(wù)模型在SST 數(shù)據(jù)集上的文本分類實驗結(jié)果,可以看出本文所提出的GloVe pre_train A-CNN 模型在測試集上的分類精度為91.3%,而其他對比模型的最高分類精度為89.4%.
表1 SST 數(shù)據(jù)集上的情感分類實驗結(jié)果Table 1 Sentiment classification experiment results on SST dataset results
3.2.2.2 問題分類任務(wù)
表2 列出了本文提出的分類模型和其他典型問題分類任務(wù)模型在TREC 問題分類數(shù)據(jù)集上的實驗結(jié)果,可以看出本文Google_News pre_train A-CNN 模型在測試集上的分類精度為99.3%,而其他對比模型的最高分類精度為95.0%.
表2 TREC 上6 類問題的分類結(jié)果Table 2 Classification results of 6 types on TREC
3.2.2.3 問題答案選擇任務(wù)
表3 列出了本文提出的分類模型和其他經(jīng)典問題答案選擇任務(wù)模型在TREC 問題分類數(shù)據(jù)集上的實驗結(jié)果,可以看出本文的GloVe pre_train A-CNN 模型在測試集上的分類精度為94.8%,而其他對比模型的最高分類精度為94.2%.
表3 TREC 問題答案匹配任務(wù)的對比結(jié)果Table 3 Comparison result of question-answer on TREC
本文建立了一種Attention CNN 模型.該模型結(jié)合了CNN 神經(jīng)網(wǎng)絡(luò)模型和RNN 中的Attention 機(jī)制,利用CNN 模型的并行特征轉(zhuǎn)換能力和Attention 機(jī)制提取特征之間非局部關(guān)系和語義信息,在保證局部特征提取的同時為卷積過程加入特征全局重要程度.通過可視化A-CNN 模型的Attention CNN 層和普通卷積網(wǎng)絡(luò)的卷積層發(fā)現(xiàn),Attention CNN 層能夠更準(zhǔn)確地提取文本分類的關(guān)鍵特征,從而使文本分類更加準(zhǔn)確高效.使用本文訓(xùn)練的4 層A-CNN 模型在SST 情感分析數(shù)據(jù)集、TREC 問題答案選擇數(shù)據(jù)集、TREC 問題答案匹配數(shù)據(jù)集上進(jìn)行了實驗驗證和分析,并對比了用于文本分類的經(jīng)典模型.實驗分析表明:本文的A-CNN 模型在上述的文本分類任務(wù)方面均優(yōu)于對比模型,在文本分類的不同任務(wù)上通用性好,準(zhǔn)精度高.
本文研究的文本分類任務(wù)分類對象都是句子或者較短段落,A-CNN 模型和Attention CNN 層結(jié)構(gòu)是否適用于更加細(xì)粒度的文本分類或者自然語言處理任務(wù),比如關(guān)系分類、文本蘊(yùn)含等,是以后進(jìn)一步的研究方向.