楊瑋祺,杜曄
(北京交通大學計算機與信息技術學院,北京100044)
文本分類是指計算機將一篇文章映射到給定的某一類別或某幾個類別的過程。文本分類在生活中有著廣泛的應用,根據任務領域可以分為網絡輿情分析、新聞主題分類以及評論情感分析等。隨著移動互聯網的普及,越來越多的信息以文本的形式展現在人們的面前,對文本信息的準確分類顯得愈發重要。
近年來,研究者們大多使用深度學習方法進行文本分類。與傳統的文本分類方法相比,使用深度學習的文本分類方法不需要人工設計復雜的特征工程,從而可以實現端到端的學習。然而,使用深度學習方法進行NLP 領域的工作時,首先需要考慮設計語言模型,即如何去用計算機能理解的方式去表示一個詞,一個句子和一篇文章。這始終是一個十分困難且無法繞過的問題。NLP 領域預訓練模型的出現,在一定程度上解決了這個問題。研究者們可以利用預訓練模型得到文本的初級特征表示,進行自己的NLP 任務。
此外,在文本分類過程中,如何捕捉上下文關系是研究的重點。學界普遍使用RNN 網絡來捕捉這種關系,但是,對于長度較長的文本,RNN 網絡中前序節點對后續節點的影響會遞減,從而導致序列特征提取效果不佳,這就是RNN 網絡的短期記憶問題。雖然LSTM 和GRU 結構的出現,在一定程度上緩解了這個問題,但是這兩類結構在長文本分類任務上的表現仍然有提升的空間。
本文在文本分類任務中使用預訓練模型,主要進行了如下工作:
(1)提出了一種適合處理文本信息的模塊,CGA 模塊,該模塊由三個隱藏層組成,可以較好地提取文本的局部信息和序列信息。
(2)將CGA 模塊并行使用,提出基于預訓練模型和CGA 模塊的文本分類網絡,TextCGA,并通過實驗驗證該文本分類網絡在公開數據集上有著良好的表現。
遷移學習是一種很流行的深度學習技術,是將從源領域(Source Domain)學習到的東西應用到目標領域(Target Domain)上去[1]。通過將已訓練好的模型、參數等遷移到新的模型中,來幫助新的模型進行訓練,以達到建立精確的模型,縮短訓練時間的目的。利用遷移學習,使得學習并不是從零開始,而是從之前解決各種問題時學到的模式開始,即將之前從某一任務中學到的知識遷移到同一學科空間中的另一任務中,其中的數據或任務是存在相關性的[2]。
預訓練模型就是我們之前所提到的這種已經經過良好訓練的模型。當前的預訓練模型主要分為兩大類:
(1)基于特征:如Word2Vec、Sent2Vec、Para2Vec。這類預訓練模型都是用一個算法或者模型,如Word2Vec 里的Skip-Gram,在大規模語料上進行訓練,將特征進行保存,并用于今后需要使用的地方。
(2)基于微調(fine-tuning):這類預訓練模型也是在大規模語料上,結合特定的目標任務訓練的。使用時,需要在預模型后面接上自己的網絡,用下游的訓練任務的數據進行微調,才能夠取得比較好的效果。
在圖像領域,人們采用預訓練的大型網絡來提取圖像的初級特征,利用這些特征進行自己具體的下游任務。例如在CTPN 網絡中[3],首先使用VGG16 前5層結構提取圖像特征,之后再使用自己的網絡結構做文本檢測。近兩年,許多大型研究機構陸續公開了一些NLP 領域的預訓練模型,如ELMo[4]和BERT[5],這些預訓練模型大部分屬于第二種基于微調的預訓練模型,并且都是在大量語料上,結合特定的任務和訓練技巧所得到的,具有很強的文本表示能力。這使得研究者可以使用這些預訓練模型所提取的文本特征,進行自己下游的NLP 任務。
NLP 研究者使用深度學習方法在文本分類領域進行了許多的研究。2013 年,Google 開源了一種用于詞向量計算的工具——Word2Vec[6],該工具可以很好地度量詞與詞之間的相似性。后續的研究者們也都是使用詞向量工具,對文本進行表示,來進行自己的分類任務的。Tomas Mikolov 等人提出了在工業上使用廣泛的FastText 網絡[7]。該網絡將輸入的詞向量序列進行線性變換,映射到中間層和輸出層。同時,使用了層次Softmax 替代傳統的Softmax 方法,提高了計算效率。但是FastText 方法在準確率上并沒有優勢,并且所采用的線性變換方法,并沒有很好地可解釋性。
Kim 等人提出TextCNN 網絡[8]。TextCNN 使用詞向量矩陣對文本進行表示,并使用CNN 捕捉文本特征。該網絡使用不同大小的濾波器對文本進行特征提取,將池化后的特征進行拼接,輸入Softmax 層進行分類。TextCNN 可以提取到多種層面的特征,但是并沒有很好地利用詞與詞之間的順序上的關系。
為了更好地利用文本上下文之間的關系,Siwei Lai等人提出使用RCNN 網絡[9],可以在時間復雜度為O(n)的前提下,使用雙向的RNN 捕捉單詞的上下文關系,對文本進行良好的表示,提升文本分類的準確率;Chunting Zhou 等人提出C-LSTM 網絡[10],使用CNN 提取詞向量特征,使用LSTM 捕捉詞與詞之間的序列特征,達到了較好的分類結果。但是,這些使用RNN 的分類網絡,在文本句子較長時,存在著短期記憶問題。
為了克服RNN 網絡的這一缺點,Jader Abreu 等人提出了一種用于文本分類的層級注意力機制網絡,HAN[11]。該網絡拋棄了以往網絡使用RNN 的做法,在句子級別以及文檔級別提出了注意力機制,使得模型對于重要程度不同的內容賦予不同的權重,開創了Attention 機制在文本分類任務中應用的先河。
TextCGA 網絡以預訓練模型為基礎,在網絡上中使用多個CGA 模塊,每個CGA 模塊都由卷積層、RNN層和Self-Attention 層構成,將所有CGA 模塊的輸出進行拼接,輸入Softmax 層進行分類。模型結構和CGA模塊結構如圖1 所示。
模型處理文本數據的步驟如下:
(1)將文本切分成獨立的句子,利用預訓練模型將句子轉換為句向量,將文本表示為句向量矩陣。
(2)將句向量矩陣輸入多個CGA 模塊。每個CGA模塊首先使用不同卷積核的CNN 提取矩陣的局部特征信息,作為后續的輸入。
(3)對于CNN 提取到的特征圖,使用RNN+Self-Attention 結構強化序列特征建模,作為每個CGA 模塊的輸出。
(4)將所有CGA 模塊的輸出進行拼接,經過一層全連接層,使用Softmax 分類器輸出每一個類別的概率。

圖1 Text-CGA網絡與CGA模塊
模型的輸入為一篇文章。在輸入層之后,我們將預訓練模型作為第一層,用于對文本進行特征表示。對于每一個輸入,我們取預訓練模型倒數第二層(具有m 個節點的隱層)的輸出,作為該詞或句子的表示。我們通過預處理將文章劃分成句子,對每一個句子進行向量化,從而將一篇具有n 個句子的文章表示為n*m的句向量矩陣。文檔的表示過程如圖2 所示。
CGA 模塊包括卷積層、RNN 層以及Self-Attention層三個部分。卷積層能夠捕捉局部特征,Bi-GRU 層用來捕捉序列特征,Self-Attention 層可以解決序列過長時的短期記憶問題。每一個CGA 模塊,我們為卷積層設置不同的卷積核大小,旨在從不同的感受野捕捉矩陣的局部特征。
(1)卷積層


其中,i 的范圍為從1 到(l-k+1),j 的范圍為從1到(d^w-d+1),代表點乘操作,b ∈R 為偏置項,f 為非線性激活函數。對于整個矩陣H,可以得到feature map O:

這里,O ∈R(l-k+1)×(dw-d+1)。
(2)RNN 層
在一篇文章中,句子與句子之間存在順序和邏輯上的關系,為了捕捉這種關系,我們使用RNN 機制來捕捉句向量之間的序列關系。GRU(Gated Recurrent Unit)是RNN 網絡的一種,結構簡單,參數較少,效果也很好。一個GRU 單元的結構如圖3 所示。

圖3 GRU單元

⊕表示將兩個向量進行連接的操作,*表示矩陣乘法,σ與tanh 表示所用到的兩種激活函數,Wr、Wz和Wh?和為反向傳播過程中需要學習的權重。為了更好地提取時序特征,我們使用雙向的GRU 結構,Bi-GRU,如圖4 所示。
GRU 主要包括兩個的門結構,圖中,zt表示更新門,rt表示重置門。更新門控制前一時刻的狀態信息被帶入到當前狀態中的程度,重置門控制前一狀態有多少信息被寫入當前的候選集上。對于前向傳播過程,有:

圖4 雙向GRU
其中,ti表示i 時間步的輸入,和表示正向和反向GRU 單元的輸出,hi表示當前步的最終輸出。使用Bi-GRU 結構,既可以提取正向序列特征,也可以提取反向序列特征。對于和,我們將二者拼接在一起即可得到hi,即:

(3)Self-Attention 層
我們引入Self-Attention 機制的目的,主要在于解決當句子很多時,RNN 網絡不能很好地進行序列建模的問題。Self-Attention 機制不同于傳統的Attention 機制,旨在挖掘輸入序列中各個節點之間的關系。Self-Attention 的主要思想是加權求和,但是這里的權重是神經網絡在學習的過程中確定的。在本文中,即使在RNN 網絡中,某個重要節點對后續節點的影響一直在遞減,但是在Self-Attention 層中仍然還會因為較大的權重,而對最后的輸出產生影響。
對于輸入X,Self-Attention 機制首先產生3 個向量Q,K,V:

WQ,Wk,Wv為初始化的權重。隱藏層的輸出hi可以表示為:

其中,S 被稱為打分函數。通常使用縮放點積作為打分函數,因此輸出向量序列可以寫為:

其中,dk為Q 或K 的維度,用以防止結果過大,使得Softmax 輸出都接近1。Self-Attention 層的輸出,即為CGA 模塊的輸出。
對于每個CGA 模塊的輸出向量Ci,我們對其進行拼接,得到向量C:

之后,我們對C 進行drop out 操作來防止過擬合,隨后與全連接層相連,激活函數采用Softmax,進行分類。對于標簽y?的預測過程則有:

其中,h 為上一隱藏層的輸出,W 和b 為全連接層的權重和偏置。
我們選擇了以下的中文新聞數據集進行實驗以測試網絡分類效果。
THUCNews:由清華大學NLP 實驗室推出的數據集[12],整理了2005-2011 年間的新浪新聞,共包含74萬篇新聞文檔,14 個類別。在我們的實驗中,我們選取了10 個類別的新聞,每個類別中包含有24000 篇文檔,總計24 萬篇文檔,并按照18:1:1 的比例劃分訓練集、驗證集及測試集。
Fudan set:由復旦大學計算機信息與技術系國際數據庫中心自然語言處理小組整理,共計包含20 個類別的中文文檔,我們從中挑選12500 篇文檔作為訓練集,2500 篇作為驗證集,2500 篇作為測試集。
Sogou set:由搜狗實驗室整理,數據來自2012 年6月-7 月期間的18 個類別的搜狐新聞。我們從中挑選10 個類別的新聞對其進行分類,訓練集包含62500 篇文章,驗證集包含2500 篇文章,測試集包含2000 篇文章。

表1 數據集及劃分情況
以下為本次實驗所使用的對比模型:
Average Embedding(AE):對于一片文章,將所有詞向量取算數平均值,直接使用全連接網絡進行分類。該方法優點是速度較快,在工業界使用較為廣泛。
TextCNN:由Kim 等人提出,使用3 種不同卷積核,進行三次卷積操作并將結果進行拼接,使用Softmax 層進行分類。該網絡僅使用CNN 做特征提取,缺失文本的序列特征。
C-LSTM:由Zhou 等人提出,該模型融合了CNN特征提取的能力,也采用了LSTM 提取序列特征的能力。由于使用了RNN 結構,該網絡在文本較長時可能會出現分類不準確的問題。
Attention-based C-GRU(Att C-GRU):由楊東等人提出[13],該模型將GRU 與Attention 機制結合,驗證了Attention 機制可以優化語義特征表示。但是此結構并沒有采用模塊化的設計,初步的特征提取存在局限性。
模型中存在著多個超參數,其中最重要的參數為CGA 模塊的數量。為了測試CGA 模塊的數量對模型分類準確率的影響,我們改變模型中CGA 模塊的數量,在THUCNews、Sogou 以及Fudan 數據集上進行實驗,結果如表2 所示。

表2 CGA 模塊數量對準確率的影響
實驗結果表明,并非CGA 模塊越多分類效果越好。在CGA 模塊數量為6 和7 時,已經出現了準確率的極值。當CGA 模塊數量繼續增加時,并不會給準確率帶來提升。由于CGA 模塊之間是并行的關系,因此網絡的訓練時間并不會有顯著增加。我們將CGA 模塊的數量設定為7 個。
我們在這三個數據集上繼續進行實驗,測試模型的分類準確率。實驗結果如表3 所示,我們使用準確率來評估模型。

表3 實驗結果
從整體上來看,我們的模型在所有數據集上的表現,都超過了對照的方法,這證明了本文提出的模型在文本分類任務中是有效的。但是在Sogou 和Fudan 文本分類任務中,模型表現較對比模型雖有較大提升,但是并沒有達到如THUCNews 任務中的準確率。結合數據分析后,我們發現,Sogou 和Fudan 數據集中的新聞數據,平均文本長度在25 句左右,而THUCNews 數據集的文本長度在50 句左右。當句子數量相對較少時,Self-Attention 機制和雙向GRU 機制無法較好發揮自身的學習能力。因此本文的模型更適合于長文本分類,而不適合彈幕、評價等短文本分類任務。
本文提出了一種基于預訓練模型的文本分類模型,并在3 個數據集上進行了評估,驗證了本文模型在文本分類任務上的有效性。通過與經典的分類模型進行實驗比較,本文模型可以很好地發揮預訓練模型的文本表示能力,并且在捕捉文章上下文關系時,使用CGA 模塊避免了傳統RNN 網絡的短期記憶問題。同時,并行使用的CGA 模塊可以在不增加訓練時間的條件下,有效地提升網絡的分類結果。
在未來的工作中,我們將繼續探究如何更好地對文章上下文關系進行捕捉,以實現更準確的文本分類效果。