楊瑋祺,杜曄
(北京交通大學(xué)計(jì)算機(jī)與信息技術(shù)學(xué)院,北京100044)
文本分類是指計(jì)算機(jī)將一篇文章映射到給定的某一類別或某幾個(gè)類別的過程。文本分類在生活中有著廣泛的應(yīng)用,根據(jù)任務(wù)領(lǐng)域可以分為網(wǎng)絡(luò)輿情分析、新聞主題分類以及評論情感分析等。隨著移動互聯(lián)網(wǎng)的普及,越來越多的信息以文本的形式展現(xiàn)在人們的面前,對文本信息的準(zhǔn)確分類顯得愈發(fā)重要。
近年來,研究者們大多使用深度學(xué)習(xí)方法進(jìn)行文本分類。與傳統(tǒng)的文本分類方法相比,使用深度學(xué)習(xí)的文本分類方法不需要人工設(shè)計(jì)復(fù)雜的特征工程,從而可以實(shí)現(xiàn)端到端的學(xué)習(xí)。然而,使用深度學(xué)習(xí)方法進(jìn)行NLP 領(lǐng)域的工作時(shí),首先需要考慮設(shè)計(jì)語言模型,即如何去用計(jì)算機(jī)能理解的方式去表示一個(gè)詞,一個(gè)句子和一篇文章。這始終是一個(gè)十分困難且無法繞過的問題。NLP 領(lǐng)域預(yù)訓(xùn)練模型的出現(xiàn),在一定程度上解決了這個(gè)問題。研究者們可以利用預(yù)訓(xùn)練模型得到文本的初級特征表示,進(jìn)行自己的NLP 任務(wù)。
此外,在文本分類過程中,如何捕捉上下文關(guān)系是研究的重點(diǎn)。學(xué)界普遍使用RNN 網(wǎng)絡(luò)來捕捉這種關(guān)系,但是,對于長度較長的文本,RNN 網(wǎng)絡(luò)中前序節(jié)點(diǎn)對后續(xù)節(jié)點(diǎn)的影響會遞減,從而導(dǎo)致序列特征提取效果不佳,這就是RNN 網(wǎng)絡(luò)的短期記憶問題。雖然LSTM 和GRU 結(jié)構(gòu)的出現(xiàn),在一定程度上緩解了這個(gè)問題,但是這兩類結(jié)構(gòu)在長文本分類任務(wù)上的表現(xiàn)仍然有提升的空間。
本文在文本分類任務(wù)中使用預(yù)訓(xùn)練模型,主要進(jìn)行了如下工作:
(1)提出了一種適合處理文本信息的模塊,CGA 模塊,該模塊由三個(gè)隱藏層組成,可以較好地提取文本的局部信息和序列信息。
(2)將CGA 模塊并行使用,提出基于預(yù)訓(xùn)練模型和CGA 模塊的文本分類網(wǎng)絡(luò),TextCGA,并通過實(shí)驗(yàn)驗(yàn)證該文本分類網(wǎng)絡(luò)在公開數(shù)據(jù)集上有著良好的表現(xiàn)。
遷移學(xué)習(xí)是一種很流行的深度學(xué)習(xí)技術(shù),是將從源領(lǐng)域(Source Domain)學(xué)習(xí)到的東西應(yīng)用到目標(biāo)領(lǐng)域(Target Domain)上去[1]。通過將已訓(xùn)練好的模型、參數(shù)等遷移到新的模型中,來幫助新的模型進(jìn)行訓(xùn)練,以達(dá)到建立精確的模型,縮短訓(xùn)練時(shí)間的目的。利用遷移學(xué)習(xí),使得學(xué)習(xí)并不是從零開始,而是從之前解決各種問題時(shí)學(xué)到的模式開始,即將之前從某一任務(wù)中學(xué)到的知識遷移到同一學(xué)科空間中的另一任務(wù)中,其中的數(shù)據(jù)或任務(wù)是存在相關(guān)性的[2]。
預(yù)訓(xùn)練模型就是我們之前所提到的這種已經(jīng)經(jīng)過良好訓(xùn)練的模型。當(dāng)前的預(yù)訓(xùn)練模型主要分為兩大類:
(1)基于特征:如Word2Vec、Sent2Vec、Para2Vec。這類預(yù)訓(xùn)練模型都是用一個(gè)算法或者模型,如Word2Vec 里的Skip-Gram,在大規(guī)模語料上進(jìn)行訓(xùn)練,將特征進(jìn)行保存,并用于今后需要使用的地方。
(2)基于微調(diào)(fine-tuning):這類預(yù)訓(xùn)練模型也是在大規(guī)模語料上,結(jié)合特定的目標(biāo)任務(wù)訓(xùn)練的。使用時(shí),需要在預(yù)模型后面接上自己的網(wǎng)絡(luò),用下游的訓(xùn)練任務(wù)的數(shù)據(jù)進(jìn)行微調(diào),才能夠取得比較好的效果。
在圖像領(lǐng)域,人們采用預(yù)訓(xùn)練的大型網(wǎng)絡(luò)來提取圖像的初級特征,利用這些特征進(jìn)行自己具體的下游任務(wù)。例如在CTPN 網(wǎng)絡(luò)中[3],首先使用VGG16 前5層結(jié)構(gòu)提取圖像特征,之后再使用自己的網(wǎng)絡(luò)結(jié)構(gòu)做文本檢測。近兩年,許多大型研究機(jī)構(gòu)陸續(xù)公開了一些NLP 領(lǐng)域的預(yù)訓(xùn)練模型,如ELMo[4]和BERT[5],這些預(yù)訓(xùn)練模型大部分屬于第二種基于微調(diào)的預(yù)訓(xùn)練模型,并且都是在大量語料上,結(jié)合特定的任務(wù)和訓(xùn)練技巧所得到的,具有很強(qiáng)的文本表示能力。這使得研究者可以使用這些預(yù)訓(xùn)練模型所提取的文本特征,進(jìn)行自己下游的NLP 任務(wù)。
NLP 研究者使用深度學(xué)習(xí)方法在文本分類領(lǐng)域進(jìn)行了許多的研究。2013 年,Google 開源了一種用于詞向量計(jì)算的工具——Word2Vec[6],該工具可以很好地度量詞與詞之間的相似性。后續(xù)的研究者們也都是使用詞向量工具,對文本進(jìn)行表示,來進(jìn)行自己的分類任務(wù)的。Tomas Mikolov 等人提出了在工業(yè)上使用廣泛的FastText 網(wǎng)絡(luò)[7]。該網(wǎng)絡(luò)將輸入的詞向量序列進(jìn)行線性變換,映射到中間層和輸出層。同時(shí),使用了層次Softmax 替代傳統(tǒng)的Softmax 方法,提高了計(jì)算效率。但是FastText 方法在準(zhǔn)確率上并沒有優(yōu)勢,并且所采用的線性變換方法,并沒有很好地可解釋性。
Kim 等人提出TextCNN 網(wǎng)絡(luò)[8]。TextCNN 使用詞向量矩陣對文本進(jìn)行表示,并使用CNN 捕捉文本特征。該網(wǎng)絡(luò)使用不同大小的濾波器對文本進(jìn)行特征提取,將池化后的特征進(jìn)行拼接,輸入Softmax 層進(jìn)行分類。TextCNN 可以提取到多種層面的特征,但是并沒有很好地利用詞與詞之間的順序上的關(guān)系。
為了更好地利用文本上下文之間的關(guān)系,Siwei Lai等人提出使用RCNN 網(wǎng)絡(luò)[9],可以在時(shí)間復(fù)雜度為O(n)的前提下,使用雙向的RNN 捕捉單詞的上下文關(guān)系,對文本進(jìn)行良好的表示,提升文本分類的準(zhǔn)確率;Chunting Zhou 等人提出C-LSTM 網(wǎng)絡(luò)[10],使用CNN 提取詞向量特征,使用LSTM 捕捉詞與詞之間的序列特征,達(dá)到了較好的分類結(jié)果。但是,這些使用RNN 的分類網(wǎng)絡(luò),在文本句子較長時(shí),存在著短期記憶問題。
為了克服RNN 網(wǎng)絡(luò)的這一缺點(diǎn),Jader Abreu 等人提出了一種用于文本分類的層級注意力機(jī)制網(wǎng)絡(luò),HAN[11]。該網(wǎng)絡(luò)拋棄了以往網(wǎng)絡(luò)使用RNN 的做法,在句子級別以及文檔級別提出了注意力機(jī)制,使得模型對于重要程度不同的內(nèi)容賦予不同的權(quán)重,開創(chuàng)了Attention 機(jī)制在文本分類任務(wù)中應(yīng)用的先河。
TextCGA 網(wǎng)絡(luò)以預(yù)訓(xùn)練模型為基礎(chǔ),在網(wǎng)絡(luò)上中使用多個(gè)CGA 模塊,每個(gè)CGA 模塊都由卷積層、RNN層和Self-Attention 層構(gòu)成,將所有CGA 模塊的輸出進(jìn)行拼接,輸入Softmax 層進(jìn)行分類。模型結(jié)構(gòu)和CGA模塊結(jié)構(gòu)如圖1 所示。
模型處理文本數(shù)據(jù)的步驟如下:
(1)將文本切分成獨(dú)立的句子,利用預(yù)訓(xùn)練模型將句子轉(zhuǎn)換為句向量,將文本表示為句向量矩陣。
(2)將句向量矩陣輸入多個(gè)CGA 模塊。每個(gè)CGA模塊首先使用不同卷積核的CNN 提取矩陣的局部特征信息,作為后續(xù)的輸入。
(3)對于CNN 提取到的特征圖,使用RNN+Self-Attention 結(jié)構(gòu)強(qiáng)化序列特征建模,作為每個(gè)CGA 模塊的輸出。
(4)將所有CGA 模塊的輸出進(jìn)行拼接,經(jīng)過一層全連接層,使用Softmax 分類器輸出每一個(gè)類別的概率。
圖1 Text-CGA網(wǎng)絡(luò)與CGA模塊
模型的輸入為一篇文章。在輸入層之后,我們將預(yù)訓(xùn)練模型作為第一層,用于對文本進(jìn)行特征表示。對于每一個(gè)輸入,我們?nèi)☆A(yù)訓(xùn)練模型倒數(shù)第二層(具有m 個(gè)節(jié)點(diǎn)的隱層)的輸出,作為該詞或句子的表示。我們通過預(yù)處理將文章劃分成句子,對每一個(gè)句子進(jìn)行向量化,從而將一篇具有n 個(gè)句子的文章表示為n*m的句向量矩陣。文檔的表示過程如圖2 所示。
CGA 模塊包括卷積層、RNN 層以及Self-Attention層三個(gè)部分。卷積層能夠捕捉局部特征,Bi-GRU 層用來捕捉序列特征,Self-Attention 層可以解決序列過長時(shí)的短期記憶問題。每一個(gè)CGA 模塊,我們?yōu)榫矸e層設(shè)置不同的卷積核大小,旨在從不同的感受野捕捉矩陣的局部特征。
(1)卷積層
其中,i 的范圍為從1 到(l-k+1),j 的范圍為從1到(d^w-d+1),代表點(diǎn)乘操作,b ∈R 為偏置項(xiàng),f 為非線性激活函數(shù)。對于整個(gè)矩陣H,可以得到feature map O:
這里,O ∈R(l-k+1)×(dw-d+1)。
(2)RNN 層
在一篇文章中,句子與句子之間存在順序和邏輯上的關(guān)系,為了捕捉這種關(guān)系,我們使用RNN 機(jī)制來捕捉句向量之間的序列關(guān)系。GRU(Gated Recurrent Unit)是RNN 網(wǎng)絡(luò)的一種,結(jié)構(gòu)簡單,參數(shù)較少,效果也很好。一個(gè)GRU 單元的結(jié)構(gòu)如圖3 所示。
圖3 GRU單元
⊕表示將兩個(gè)向量進(jìn)行連接的操作,*表示矩陣乘法,σ與tanh 表示所用到的兩種激活函數(shù),Wr、Wz和Wh?和為反向傳播過程中需要學(xué)習(xí)的權(quán)重。為了更好地提取時(shí)序特征,我們使用雙向的GRU 結(jié)構(gòu),Bi-GRU,如圖4 所示。
GRU 主要包括兩個(gè)的門結(jié)構(gòu),圖中,zt表示更新門,rt表示重置門。更新門控制前一時(shí)刻的狀態(tài)信息被帶入到當(dāng)前狀態(tài)中的程度,重置門控制前一狀態(tài)有多少信息被寫入當(dāng)前的候選集上。對于前向傳播過程,有:
圖4 雙向GRU
其中,ti表示i 時(shí)間步的輸入,和表示正向和反向GRU 單元的輸出,hi表示當(dāng)前步的最終輸出。使用Bi-GRU 結(jié)構(gòu),既可以提取正向序列特征,也可以提取反向序列特征。對于和,我們將二者拼接在一起即可得到hi,即:
(3)Self-Attention 層
我們引入Self-Attention 機(jī)制的目的,主要在于解決當(dāng)句子很多時(shí),RNN 網(wǎng)絡(luò)不能很好地進(jìn)行序列建模的問題。Self-Attention 機(jī)制不同于傳統(tǒng)的Attention 機(jī)制,旨在挖掘輸入序列中各個(gè)節(jié)點(diǎn)之間的關(guān)系。Self-Attention 的主要思想是加權(quán)求和,但是這里的權(quán)重是神經(jīng)網(wǎng)絡(luò)在學(xué)習(xí)的過程中確定的。在本文中,即使在RNN 網(wǎng)絡(luò)中,某個(gè)重要節(jié)點(diǎn)對后續(xù)節(jié)點(diǎn)的影響一直在遞減,但是在Self-Attention 層中仍然還會因?yàn)檩^大的權(quán)重,而對最后的輸出產(chǎn)生影響。
對于輸入X,Self-Attention 機(jī)制首先產(chǎn)生3 個(gè)向量Q,K,V:
WQ,Wk,Wv為初始化的權(quán)重。隱藏層的輸出hi可以表示為:
其中,S 被稱為打分函數(shù)。通常使用縮放點(diǎn)積作為打分函數(shù),因此輸出向量序列可以寫為:
其中,dk為Q 或K 的維度,用以防止結(jié)果過大,使得Softmax 輸出都接近1。Self-Attention 層的輸出,即為CGA 模塊的輸出。
對于每個(gè)CGA 模塊的輸出向量Ci,我們對其進(jìn)行拼接,得到向量C:
之后,我們對C 進(jìn)行drop out 操作來防止過擬合,隨后與全連接層相連,激活函數(shù)采用Softmax,進(jìn)行分類。對于標(biāo)簽y?的預(yù)測過程則有:
其中,h 為上一隱藏層的輸出,W 和b 為全連接層的權(quán)重和偏置。
我們選擇了以下的中文新聞數(shù)據(jù)集進(jìn)行實(shí)驗(yàn)以測試網(wǎng)絡(luò)分類效果。
THUCNews:由清華大學(xué)NLP 實(shí)驗(yàn)室推出的數(shù)據(jù)集[12],整理了2005-2011 年間的新浪新聞,共包含74萬篇新聞文檔,14 個(gè)類別。在我們的實(shí)驗(yàn)中,我們選取了10 個(gè)類別的新聞,每個(gè)類別中包含有24000 篇文檔,總計(jì)24 萬篇文檔,并按照18:1:1 的比例劃分訓(xùn)練集、驗(yàn)證集及測試集。
Fudan set:由復(fù)旦大學(xué)計(jì)算機(jī)信息與技術(shù)系國際數(shù)據(jù)庫中心自然語言處理小組整理,共計(jì)包含20 個(gè)類別的中文文檔,我們從中挑選12500 篇文檔作為訓(xùn)練集,2500 篇作為驗(yàn)證集,2500 篇作為測試集。
Sogou set:由搜狗實(shí)驗(yàn)室整理,數(shù)據(jù)來自2012 年6月-7 月期間的18 個(gè)類別的搜狐新聞。我們從中挑選10 個(gè)類別的新聞對其進(jìn)行分類,訓(xùn)練集包含62500 篇文章,驗(yàn)證集包含2500 篇文章,測試集包含2000 篇文章。
表1 數(shù)據(jù)集及劃分情況
以下為本次實(shí)驗(yàn)所使用的對比模型:
Average Embedding(AE):對于一片文章,將所有詞向量取算數(shù)平均值,直接使用全連接網(wǎng)絡(luò)進(jìn)行分類。該方法優(yōu)點(diǎn)是速度較快,在工業(yè)界使用較為廣泛。
TextCNN:由Kim 等人提出,使用3 種不同卷積核,進(jìn)行三次卷積操作并將結(jié)果進(jìn)行拼接,使用Softmax 層進(jìn)行分類。該網(wǎng)絡(luò)僅使用CNN 做特征提取,缺失文本的序列特征。
C-LSTM:由Zhou 等人提出,該模型融合了CNN特征提取的能力,也采用了LSTM 提取序列特征的能力。由于使用了RNN 結(jié)構(gòu),該網(wǎng)絡(luò)在文本較長時(shí)可能會出現(xiàn)分類不準(zhǔn)確的問題。
Attention-based C-GRU(Att C-GRU):由楊東等人提出[13],該模型將GRU 與Attention 機(jī)制結(jié)合,驗(yàn)證了Attention 機(jī)制可以優(yōu)化語義特征表示。但是此結(jié)構(gòu)并沒有采用模塊化的設(shè)計(jì),初步的特征提取存在局限性。
模型中存在著多個(gè)超參數(shù),其中最重要的參數(shù)為CGA 模塊的數(shù)量。為了測試CGA 模塊的數(shù)量對模型分類準(zhǔn)確率的影響,我們改變模型中CGA 模塊的數(shù)量,在THUCNews、Sogou 以及Fudan 數(shù)據(jù)集上進(jìn)行實(shí)驗(yàn),結(jié)果如表2 所示。
表2 CGA 模塊數(shù)量對準(zhǔn)確率的影響
實(shí)驗(yàn)結(jié)果表明,并非CGA 模塊越多分類效果越好。在CGA 模塊數(shù)量為6 和7 時(shí),已經(jīng)出現(xiàn)了準(zhǔn)確率的極值。當(dāng)CGA 模塊數(shù)量繼續(xù)增加時(shí),并不會給準(zhǔn)確率帶來提升。由于CGA 模塊之間是并行的關(guān)系,因此網(wǎng)絡(luò)的訓(xùn)練時(shí)間并不會有顯著增加。我們將CGA 模塊的數(shù)量設(shè)定為7 個(gè)。
我們在這三個(gè)數(shù)據(jù)集上繼續(xù)進(jìn)行實(shí)驗(yàn),測試模型的分類準(zhǔn)確率。實(shí)驗(yàn)結(jié)果如表3 所示,我們使用準(zhǔn)確率來評估模型。
表3 實(shí)驗(yàn)結(jié)果
從整體上來看,我們的模型在所有數(shù)據(jù)集上的表現(xiàn),都超過了對照的方法,這證明了本文提出的模型在文本分類任務(wù)中是有效的。但是在Sogou 和Fudan 文本分類任務(wù)中,模型表現(xiàn)較對比模型雖有較大提升,但是并沒有達(dá)到如THUCNews 任務(wù)中的準(zhǔn)確率。結(jié)合數(shù)據(jù)分析后,我們發(fā)現(xiàn),Sogou 和Fudan 數(shù)據(jù)集中的新聞數(shù)據(jù),平均文本長度在25 句左右,而THUCNews 數(shù)據(jù)集的文本長度在50 句左右。當(dāng)句子數(shù)量相對較少時(shí),Self-Attention 機(jī)制和雙向GRU 機(jī)制無法較好發(fā)揮自身的學(xué)習(xí)能力。因此本文的模型更適合于長文本分類,而不適合彈幕、評價(jià)等短文本分類任務(wù)。
本文提出了一種基于預(yù)訓(xùn)練模型的文本分類模型,并在3 個(gè)數(shù)據(jù)集上進(jìn)行了評估,驗(yàn)證了本文模型在文本分類任務(wù)上的有效性。通過與經(jīng)典的分類模型進(jìn)行實(shí)驗(yàn)比較,本文模型可以很好地發(fā)揮預(yù)訓(xùn)練模型的文本表示能力,并且在捕捉文章上下文關(guān)系時(shí),使用CGA 模塊避免了傳統(tǒng)RNN 網(wǎng)絡(luò)的短期記憶問題。同時(shí),并行使用的CGA 模塊可以在不增加訓(xùn)練時(shí)間的條件下,有效地提升網(wǎng)絡(luò)的分類結(jié)果。
在未來的工作中,我們將繼續(xù)探究如何更好地對文章上下文關(guān)系進(jìn)行捕捉,以實(shí)現(xiàn)更準(zhǔn)確的文本分類效果。