邵 清,馬慧萍
(上海理工大學 光電信息與計算機工程學院,上海 200093)
隨著互聯(lián)網(wǎng)的不斷發(fā)展,基于自然語言表述的電子文本信息越來越多,如何有效地獲取和管理這些信息是自然語言處理中要解決的一個主要問題.而文本分類已成為解決該類問題的關(guān)鍵技術(shù)[1,2].為了將文本信息轉(zhuǎn)化為計算機所能識別的向量,傳統(tǒng)的文本分類方法采用向量空間模型表示文本,通過向量空間模型將文檔轉(zhuǎn)化為向量,向量中的每個元素對應(yīng)著一個詞.但是這類方法卻無法表示出詞與詞之間的關(guān)聯(lián)性,同時在處理過程中也無法辨析詞語在不同句子中的具體含義[3].近年來,深度學習技術(shù)開始應(yīng)用于自然語言處理領(lǐng)域[4],尤其是基于卷積神經(jīng)網(wǎng)絡(luò)的深度學習模型.
為了解決上述問題,本文提出一種自注意力機制與卷積神經(jīng)網(wǎng)絡(luò)相結(jié)合的文本分類模型,主要創(chuàng)新點包括:
1)通過自注意力機制捕獲同一個句子中單詞之間的一些句法特征或者語義特征;
2)通過卷積神經(jīng)網(wǎng)絡(luò)的多卷積核獲取文本特征.實驗驗證了該分類模型的準確性和有效性.
文本分類的應(yīng)用廣泛,其任務(wù)是在給定的訓練文本和類別下,自動判斷文檔類別.在文本分類的過程中,最關(guān)鍵的部分是特征表達.傳統(tǒng)的方法如樸素貝葉斯分類算法(Na?ve Bayes)、KNN、SVM、最大熵,它們須加入了大量的人工特征才能有較好的性能.
Hinton在1986年提出了分布式表示方法[5],核心思想是將每個詞表達成y維稠密、連續(xù)的實數(shù)向量.分布式表示的優(yōu)點在于其有著強大的特征表達能力.基于Hinton的思想,以往研究將文本的表示通過詞向量的方式,將文本數(shù)據(jù)從高緯度高稀疏的神經(jīng)網(wǎng)絡(luò)轉(zhuǎn)變成連續(xù)稠密的數(shù)據(jù).隨著研究的深入,人們發(fā)現(xiàn)深度學習算法卷積神經(jīng)網(wǎng)絡(luò)(CNN)[6]可以通過濾波器來自動獲取文本的局部特征.Kim等人[7]證明了使用簡單的CNN模型結(jié)合靜態(tài)詞向量可以獲得很好的效果.他們提出的模型包括輸入層、卷積層,最大池化層和Softmax分類器.模型的輸入是句子矩陣,其中矩陣的每一行是Word2vec[8,9]詞向量.句子矩陣經(jīng)過多個濾波器組成的卷積層,其結(jié)果進入最大池化層,最后是Softmax分類器.他們在不同的分類數(shù)據(jù)集上評估CNN模型.驗證結(jié)果表明CNN在每個分類數(shù)據(jù)集上都表現(xiàn)出色,同時也證明了深度學習技術(shù)在自然語言處理領(lǐng)域的應(yīng)用.Zhou C[10]提出了一種將CNN和RNN相結(jié)合的新模型,采用CNN網(wǎng)絡(luò)提取局部特征,再使用長短期記憶網(wǎng)絡(luò)(LSTM)[11]提取上下文依賴.分類效果優(yōu)于傳統(tǒng)的LSTM.Lai等人提出了一種RCNN(Recurrent Convolutional Neural Networks)文本分類方法[12],此方法采用雙向循環(huán)結(jié)構(gòu)獲取文本信息,無需人為設(shè)置特征,比傳統(tǒng)的基于窗口的神經(jīng)網(wǎng)絡(luò)減少更多噪聲,而且在學習文本表達時可以大范圍地保留詞序,但會忽略文檔的局部特征.
從上述研究可以看出,卷積神經(jīng)網(wǎng)絡(luò)在文本處理有一定的局限性.在將文檔轉(zhuǎn)化為詞向量進行處理的過程中忽視了詞在上下文的含義,且沒有考慮距離較遠的詞之間的聯(lián)系,影響了分類的準確性.夏從零[13]等人在2017年提出了一種基于事件卷積特征的文本分類方法,利用事件的語義特性彌補之前模型的不足.該方法使用依存關(guān)系抽取出文本中的事件集合,通過卷積神經(jīng)網(wǎng)絡(luò)進行事件特征提取,并在此基礎(chǔ)上進行文本分類.該方法較傳統(tǒng)的文本分類方法節(jié)省了大量的時間以及人力,同時提高了文本分類的準確率.
在2017年6月時谷歌發(fā)表了自注意力(self-attention)模型[14].self-attention模型可以從網(wǎng)絡(luò)中某些狀態(tài)集合中選取與給定狀態(tài)較為相似的狀態(tài),進而做后續(xù)的信息抽取.傳統(tǒng)CNN文本分類方法構(gòu)建的語言時序特征,詞信息是依次反饋的,比較耗時.而用self-attention可以直接挖掘句子內(nèi)部詞與詞的語義組合關(guān)系,并作為一個語義整體,使得在翻譯時能夠更好地利用單詞組合甚至是短語的信息.因此,本文選擇self-attention機制進行詞向量處理,以提高特征提取的精度和效率.
本文提出的文本分類模型整體框架如圖1所示.該模型主要由以下幾個部分組成:self-attention層、卷積層、池化層(MaxPooling)、關(guān)鍵詞層及softmax輸出層.在self-attention層,通過輸入文檔的詞向量矩陣獲取相互依賴的特征詞向量矩陣.在卷積層,根據(jù)不同的卷積核,得到更高級的文檔特征.
圖1 基于自注意力機制的卷積神經(jīng)網(wǎng)絡(luò)文本分類模型Fig.1 Convolutional neural network text classification model based on self-attention mechanism
在池化層捕獲文檔最重要的特征,并與tf-idf算法所選出的特征詞進行余弦相似度(Cosine)計算,最后在softmax輸出層實現(xiàn)文本分類.
傳統(tǒng)的詞向量處理方法通過計算詞頻實現(xiàn)[15],忽略詞與詞之間的關(guān)系.為了解決這一問題,本文采用self-attention對詞向量進行處理.self-attention可以捕獲同一個句子中單詞之間的一些句法特征或者語義特征,且更容易捕獲句子中長距離的相互依賴的特征.單純采用RNN或LSTM,需要依次計算,對于遠距離的相互依賴的特征,要經(jīng)過若干時間步驟的信息累積才能將兩者聯(lián)系起來,而距離越遠,有效捕獲的可能性越小.self-attention在計算時會將句子里面的任意兩個詞聯(lián)系起來,使得遠距離依賴特征之間的距離會被大大地縮短,可以有效利用這些特征.
如圖2所示,本文先對文檔進行self-attention操作,文檔表示為D={w1,w2,w3,…,wn},其中n是文檔的詞向量個數(shù),wi是文檔中第i個詞的詞向量,d是詞向量的維數(shù).將文檔D通過全連接,再激活,得到一個新的矩陣X,X∈Rn×d,X的表達公式如下:
X=σ(Ws1D+b)
(1)
其中表示s形函數(shù),如Log-Sigmoid函數(shù)、Relu函數(shù)和Tam-Sigmoid函數(shù)等,本文采用的Relu是函數(shù).
圖2 詞向量處理Fig.2 Word vector processing
(2)
激活得到的矩陣與原詞向量矩陣進行點乘:
B=DWs2X
(3)
A=softmax(B)
(4)
其中self-attention矩陣A中的每個元素是由矩陣B每一行進行softmax分類得到的,B∈Rn×n,A∈Rn×n,計算公式如下:
(5)
將self-attention矩陣A與文檔D進行計算,公式如下:
C=A?D
(6)
其中?表示矩陣C中的每一行是由矩陣A的每一行元素與D的每一向量相乘累加計算得出的,C∈Rn×d,計算公式如下:
(7)
其中aij指的是矩陣A中的第i行j列的元素,Dj指的是矩陣D中的第j行向量.
對于文本分類任務(wù),通常是文檔某些局部特征來決定文檔的類別,而不是整個文檔的平均值決定.在本文提出的文本分類模型中self-attention層之后加上一個卷積層.對在self-attention層生成的多維度特征矩陣C進行卷積操作,以獲取文檔局部特征.卷積核的大小m∈Rk×dw作用于特征矩陣的k個詞,且卷積核的大小與詞表示的維度相同.捕獲的每一個特征都可以由以下公式表示:
hi=f(m·Ci:i+k-1,1:dw+bc)
(8)
其中,i的范圍是1到n-k+1,f是一個非線性激活函數(shù),·表示的是點積操作,bc∈R是偏置矩陣.卷積核m應(yīng)用于特征矩陣C得到文檔的新的特征圖:
H={h1,h2,…,hn-k+1}
(9)
其中:H∈Rn-k+1.經(jīng)過卷積之后的文檔特征圖的維度是n-k+1.
以上是針對一個卷積核的情況,為了捕獲文檔不同層面的高級特征,進一步采用多個相同緯度的卷積核,對卷積得到的多個特征圖進行池化,并壓縮,以提取主要特征.
池化操作一般來說有兩種,一是Avy Pooling(平均池化層),一是max Pooling(最大池化層).本文采取max Pooling,即在每一個區(qū)域中尋找最大值.得到整個文檔的語義表示如下:
(10)
3.3.1 關(guān)鍵詞提取
一篇文檔主要由兩類詞構(gòu)成:功能詞和內(nèi)容詞.功能詞對文本內(nèi)容起修辭的作用,與文本主題關(guān)系不大;內(nèi)容詞則是文本的實詞,反映文本的主題.
還有一類停用詞,在文檔中出現(xiàn)最多,如“是”、“的”等,它們無法表示文本內(nèi)容.因此,在選取關(guān)鍵詞之前要對停用詞進行過濾.
過濾后使用tf-idf算法進行關(guān)鍵字的提取.tf-idf中tf表示“詞頻”(Term Freqency),即某一給定的詞語在文中出現(xiàn)的頻率.idf表示反文檔頻率(Inverse Document Frequency),即詞條在整個語料庫中的重要程度的度量.如果包含詞條的文檔越少,則idf越大,說明詞條具有很好的類別區(qū)分能力.tf和idf的計算方法如下所示:
tf的算法:
(11)
其中ni,j是詞在文件dj中出現(xiàn)次數(shù),分母是文件中所有字詞的出現(xiàn)次數(shù)之和.
idf的算法:
(12)
其中分子|D|是文件總數(shù),分母是包含詞的文件數(shù)目,由于可能會出現(xiàn)分母為0的特殊情況,所以加1.
由上可知,tf-idf的計算方式為:
fidfi,j=tfi,j×idfi
(13)
根據(jù)文本分類的類別,tf-idf算法計算關(guān)鍵詞的表達公式如下:
K={k1,k2,k3,…,ks}
(14)
其中,s指的是文本分類的類別數(shù).
3.3.2 余弦相似度計算
本文將根據(jù)tf-idf算法提取的關(guān)鍵詞和池化層的輸出做Cosine相似度操作,得到M,表達公式如下:
(15)
其中‖ ‖指的是取模操作.
3.3.3 softmax分類
模型最后部分對M進行softmax分類.由于M是一個向量,不能根據(jù)M直接判斷出文檔屬于何種類別,因此使用softmax進行歸一化處理方法,得到文檔D屬于具體某個類別的概率.其表達公式如下所示:
(16)
其中s表示類別的個數(shù).文檔預(yù)測的分類標簽是:
(17)
本文模型訓練的目標為最小化分類交叉熵損失:
(18)
其中p(mi)是softmax分類中每個類別的估計概率,s是文本分類的類別數(shù).
為了防止過擬合問題,我們引入了正則化思想,即在損失函數(shù)中加入刻畫模型復(fù)雜程度的指標.模型的復(fù)雜度一般是由權(quán)重w決定的,以下是對模型中所有權(quán)重正則化的公式.表達公式如下:
(19)
其中λ表示的是模型復(fù)雜損失在總損失中的比例,即正則化項的權(quán)重.
本文設(shè)計了兩個對比實驗.一是在相同數(shù)據(jù)集下不同模型的分類效果對比;另一個是在不同的數(shù)據(jù)集下模型的分類效果對比.針對英文語料的數(shù)據(jù)集,實驗中采用了Stanford Tokenizer[16]進行分詞;針對中文語料的數(shù)據(jù)集,采用了ICTCLAS[17]分詞.文本中的停用詞和特殊符號均當作普通單詞保留.
分類模型的評測指標主要包括正確率、召回率以及F1.正確率是指預(yù)測為正的樣本中真正的正樣本所占的比率.預(yù)測為正有兩種可能,一種是把正類預(yù)測為正類(TP),另一種是把負類預(yù)測為正類(FP),正確率可以由下式表達:
(20)
召回率是指樣本中正例被預(yù)測正確的比率.也有兩種情況,一是預(yù)測正確,即把原來的正類預(yù)測成正類(TP),另一種是預(yù)測失敗,即把原來的正類預(yù)測為負類(FN),公式如下:
(21)
有時準確率和召回率會出現(xiàn)相互矛盾的情況,為了綜合衡量,引入F-Measure方法.本文采用最常見的計算方法:
(22)
4.3.1 相同數(shù)據(jù)集下的測試
根據(jù)第一種對比實驗方案,為驗證本文分類模型的正確性和有效性,數(shù)據(jù)集統(tǒng)一使用的是20News[1].本文選取以下幾種經(jīng)典的文本分類方法進行對比實驗:
1)Average Embedding[18]:平均詞嵌入,通過對文本的所有詞取平均,然后通過softmax進行分類.
2)CNN[7]:使用卷積神經(jīng)網(wǎng)絡(luò),一層卷積之后池化,后是全連接和softmax.
3)RCNN[11]:通過雙向循環(huán)結(jié)構(gòu)獲取文本信息,用最大池化層獲取文本主要成分,自動判斷特征重要性.
4)LSTM[19]:使用不同的filter獲得feature map.通過feature map做組合,將相同顏色的放在一個序列中,然后依次排列下來.
表1 不同分類模型下的分類指標(%)
Table 1 Classification indicators under
different classification models(%)
方法macro-Pmacro-Rmacro-F1Average Embedding89.3989.3984.71CNN84.3286.3849885.34RCNN96.4979.591787.23LSTM93.5480.63686.61CNN+self-attention96.8680.1729287.73
表1以及圖3可以知道,CNN+self-attention比Average Embedding、CNN、LSTM準確率和F1值都有著明顯提高.和RCNN模型相比性能相當.這說明了混合模型在一定程度上可更好的彌補單一深度學習模型CNN、LSTM所缺失的學習能力.
圖3 不同分類模型下的分類指標柱狀圖Fig.3 Histogram of classification indicators under different classification models
4.3.2 不同數(shù)據(jù)集下的測試
根據(jù)第二種對比實驗方案,本次實驗用到以下幾種數(shù)據(jù)集,分別是:
1)20News1:英文數(shù)據(jù)集,屬于國際標準數(shù)據(jù)集之一.數(shù)據(jù)集收集了大約20000左右的新聞組文檔,均分到20個不同主題的新聞組集合之后.這些新聞組集合有相似的主題也有差別很大的主題.
2)Fudan2:中文數(shù)據(jù)集,該數(shù)據(jù)集一共有19637篇文檔,其中測試語料有9833篇,訓練語料9804篇,分為20個類別.
3)TREC3:英文數(shù)據(jù)集,該數(shù)據(jù)集一共有5452條帶有標簽的訓練集和500條的測試集,一共分為6大類.
4)SST4:英文數(shù)據(jù)集,該數(shù)據(jù)集包含11800條數(shù)據(jù).其中訓練集有8544條,開發(fā)集有1101條,測試集有2210條,一共分為5種類別.
從表2的對比結(jié)果可以看出使用卷積神經(jīng)網(wǎng)絡(luò)的模型比傳統(tǒng)的詞向量的方法準確率有明顯提升.雖然在TREC數(shù)據(jù)集中的分類效果沒有在20News數(shù)據(jù)集中的準確率高,但通過分析數(shù)據(jù)集的特點可知,TREC的平均句長要短于20News的平均句長.由于在本文提出的模型中self-attention機制都是基于歷史節(jié)點對當前節(jié)點的影響,當文本句長較長時,所提取特征會更加準確,在與關(guān)鍵詞進行相似度計算時能夠更加精確.此外,根據(jù)中文語料和英文語料的模型分類結(jié)果對比可知,本文提出的模型都有明顯的優(yōu)化.
表2 不同數(shù)據(jù)集下的分類模型準確率(%)
Table 2 Accuracy of classification models
under different data sets(%)
模型20NewsFudanTRECSSTAverage Embedding89.3986.8932.70CNN84.3294.0492.4344.64RCNN96.4995.2093.5647.21LSTM93.5492.4846.83CNN+self-attention96.8696.0394.3447.43
本文提出的模型利用self-attention機制對詞向量進行處理,得到相互距離依賴特征.self-attention的特點在于無視詞之間的距離,直接計算依賴關(guān)系,能夠?qū)W習一個句子的內(nèi)部結(jié)構(gòu),因此這樣得到的特征更準確.在此基礎(chǔ)上使用CNN進行局部特征提取來得到文檔的更高級抽象表示.根據(jù)CNN特征提取的結(jié)果與關(guān)鍵詞進行相似度匹配來確定最后文本的類別.通過在不同的數(shù)據(jù)集上進行深入分析,驗證了模型的正確性,同時發(fā)現(xiàn)在相同的數(shù)據(jù)集情況下,卷積核的大小影響文本分類的精確度,卷積核尺寸越大其分類精度越高.
在未來的工作中,我將繼續(xù)研究該模型能否適用于在其他自然語言處理場景中,如微博情感分析.