宋 巖 劉漢永 寧向南 孟憲哲
(國網天津市電力公司信息通信公司 天津 300000)
文本分類是自然語言處理研究中最為廣泛的任務之一,也是其他自然語言處理任務的基礎。文本分類是指通過構建模型實現對文本內容進行自動分類,文本分類在文本挖掘中有很多應用場景。比如:① 新聞過濾[1-2]。因為當今時代新聞數量龐大,很難手動過濾新聞文章,因此自動地對新聞文章過濾十分重要;② 意見挖掘。客戶評論或意見通常都是較短的文本,通過挖掘這些文本來從評論中獲得有用信息,包括客戶的情感傾向等。③ 垃圾郵件過濾。通過對電子郵件進行分類來確定垃圾郵件。
傳統的文本分類方法是使用稀疏詞匯的特征來表示文本,然后用一個線性模型進行分類,研究工作通常是利用主成分分析[3]、主題模型[4]或計算TF-IDF[5-6]等方法得到文本的語義表示,而這種淺層的表示方法難以全面地捕獲文本描述中所蘊含的隱藏語義信息。近年來,大部分研究采用深度學習的方法學習文本的表示,比如:利用Word2vec[7]模型學習文本中的詞向量表示,進而得到文本的語義表示用于文本分類[8],以及采用卷積神經網絡(CNN)[9]、 長短期記憶網絡(LSTM)[10]
等神經網絡模型提取特征并進行分類。
通過觀察發現,文本是有層次結構的,文本是由句子組成,句子是由單詞組成。雖然基于神經網絡的文本分類方法已經相當有效,但是這些方法忽視了文本的層次結構。針對上述問題,本文提出了基于層次特征提取的文本分類方法,對于待分類的文本,分別使用CNN學習到句子特征,然后用LSTM學習文本的特征,最后進行文本類別劃分。
文本分類的流程:文本預處理,抽取文本特征,構造分類器。其中最關鍵部分為文本特征的抽取。關于抽取文本特征,目前最有效的方法就是采用神經網絡模型,下面介紹三種采用神經網絡進行文本分類的模型。
文獻[11]針對句子級的文本使用卷積神經網絡進行文本分類,該方法使用一層簡單的卷積神經網絡在詞向量的基礎上卷積,詞向量是在公開的谷歌新聞的數據集上訓練的,數據集規模為1 000億詞。
該方法的處理流程如圖1所示,首先句子的表示可以看作一個矩陣,行代表單詞,列代表詞向量維度,然后經過不同的卷積核卷積,可以得到多個向量,之后經過最大池化,再經過一個全連接層輸出該文本對應的標簽。

圖1 卷積神經網絡的文本分類模型
Johnson等[12]對基于CNN的文本分類進行研究,利用文本數據的一維結構(即詞序)進行精確預測。他們直接將CNN應用于高維文本數據,輸入的是詞的熱編碼,維度為字典大小,而不是像上一種方法那樣使用學好的低維的詞向量作為輸入,從而直接學習用于分類的小文本區域的表示,在學習過程中也不需要學習單詞的表示。因為可以在GPU上有效處理高維稀疏的數據,所以該方法是可行的。
為了獲得更高的精度,Johnson等還探索了將多個卷積層結合起來的擴展。實驗證明他們的方法是有效的,且具有訓練速度快、簡化系統(需要調整的參數較少)的優點。
之前的基于神經網絡的方法都是在更高層面的單元對文本進行建模,比如單詞層面、短語層面等,Zhang等[13]提出基于字符層面進行建模來對文本進行分類,這樣就不需要使用預訓練好的詞向量和語法句法結構信息。通過實驗證明,當訓練集規模足夠大的時候,卷積網絡不需要單詞層面的意義,也不需要語言的語法句法結構等信息就能達到較好的效果,因此基于字符級的方法可以很容易地推廣到所有語言。
模型的輸入是字符序列,首先需要將字符轉化為可處理的數字序列,每個字符都轉化為字典長度的熱編碼向量,然后將字符序列變換成固定長度的序列,長度不夠的進行填充。模型結構為六層卷積層之后加上三層全連接層,在三個全連接層之間加入兩個丟棄層(dropout)來實現模型的正則化。
此外,作者還使用詞典來進行數據的擴充。實驗表明,合適的數據擴充可以降低泛化誤差,但是文本的數據擴充不能像圖像處理中對圖片進行縮放、平移、旋轉等操作那樣進行數據轉換,在文本處理中,不能隨意調換字符順序,因為順序代表了語義。最理想的數據增強方法是使用人工復述句子的方式,但是對大規模語料來說代價昂貴。因此使用詞語的同義詞進行替換更為合適,可以達到數據增強的目的。
本文提出了基于層次特征提取的文本分類模型,將文本分為多個句子進行處理。句子分為多個單詞進行處理。首先分別對句子中單詞使用卷積神經網絡進行處理,得到句子的表示,然后按照文本中句子的順序將得到的對應句子的表示依次輸入到長短期記憶網絡中,并取最后一層的隱藏層表示當作文本的表示并對其進行分類。本文使用的模型的主體結構如圖2所示。

圖2 基于層次特征提取的文本分類模型
下面將沿自頂向下的方向,對模型的具體結構進行詳細介紹。
卷積神經網絡(CNN)是近些年逐步興起的一種人工神經網絡模型,在圖像和語音識別方面被廣泛使用。其同樣可以用于自然語言處理任務中,用于解決語義分析、搜索結果提取、句子建模、分類、預測、和其他傳統的自然語言處理任務等。
卷積神經網絡的輸入層可以處理多維數據,在本文的工作中則是使用二維的輸入值,對于待分類的文本d,將其按句分割為d={s1,s2,…,sT},T代表文本所包含的句子的個數,每一個句子si均為一個二維向量,其每一行均為一個單詞的向量表示。在本文的實際處理中對句子的個數進行了一定的對齊操作,如截斷、填充等手段,使得模型的輸入具有相同的結構。
在接受句子s的輸入后,使用卷積操作來提取句子級的特征表示。在二維數組離散的輸入形式下,卷積運算一般可以定義為:

(1)
式中:I為輸入的二維句子矩陣,K為指定大小的卷積核,S為卷積結果。在二維矩陣的(i,j)位置上進行卷積就是使用卷積核在(i,j)及其對應的卷積核的位置上對應位置的元素相乘,然后結果相加作為在該點卷積的結果。卷積核在輸入矩陣上不斷調整位置,得到輸出的特征表示S。在本文的工作中,以單詞為基本單位來進行卷積操作,一次卷積過程用來提取幾個相鄰單詞的之間的相關特征,其過程如圖3所示,其中wi為一個單詞通過隨機初始化方法產生的向量表示。

圖3 對句子矩陣進行卷積計算
在獲得句子級特征表示后,使用池化(pooling)的方法來對其進行處理,可以有效地減少模型的參數并防止過擬合。常用的池化方法主要有最大池化、平均池化等,在本文中選用最大池化來處理特征表示向量S,進一步提取句子向量的特征,然后將提取后的特征作為LSTM網絡的輸入。
在完成對句子級的特征提取之后,是對句子之間的時序關系的建模,循環神經網絡(RNN)通常是最佳的選擇。該網絡使用循環單元來保存信息,具有強大的時序關系捕捉能力來建模長時間的序列依賴關系。對于循環神經網絡,可以將其沿時間展開,基本結構如圖4所示。

圖4 循環神經網絡的基本結構
而在實際應用中,循環神經網絡通常會存在梯度消失和梯度爆炸的問題,長短期記憶網絡(LSTM)則是一種循環神經網絡的特殊類型,適合處理和預測時間序列中間隔和延遲相對較長的情況,因此選擇使用LSTM來完成本文的工作。LSTM依靠三個部分來完成對細胞狀態的保護和處理,分別為輸入門、遺忘門和輸出門,其中的門結構均是通過Sigmoid函數以及按位乘運算操作來實現的。其中Sigmoid函數的計算方式如下:
(2)
Sigmoid函數對于任意范圍的x值的輸入,均可以將結果映射到0到1的范圍內,該輸出值代表有多少量可以通過,其中1代表允許任何量通過,為0則代表不允許任何量通過。
在時間序列的第t個時間段,長短期記憶網絡的各個部分的計算方法如下:
ft=σ(Wf·[ht-1,xt]+bf)
(3)
it=σ(Wi·[ht-1,xt]+bi)
(4)
(5)
(6)
ot=σ(Wo·[ht-1,xt]+bo)
(7)
ht=ot⊙tanh(Ct)
(8)

在完成了CNN提取句子級特征的過程后,對于每個文本d,可以將其表示為d={v1,v2,…,vT},其中T為該文本所包含的句子的個數,每一個向量vi均為文本中一句話的特征表示,使用長短時記憶網絡LSTM來對d中的向量進行時序關系的建模,來提取文本級特征表示,進而利用該特征表示進行分類。
在通過上述的CNN和LSTM模塊來完成層次級特征提取后,我們選用LSTM的最后時刻的隱藏層狀態作為文本的最終表示,該狀態包含了層次化的深度語義信息,可以用于文本分類的特征向量。在本文的工作中使用一個softmax層來實現文本類別的劃分,具體的計算方法如下:
p=softmax(Wd+b)
(9)
式中:W和b為待學習權重矩陣和偏置向量。softmax(·)函數為歸一化指數函數,其形式為:
(10)
該函數值代表了特征x劃分為類別的概率。因此文本分類的損失函數可以寫為如下負對數似然函數的形式:
(11)
式中:l為文本d的所屬類別標簽。通過最小化上述損失函數來完成整體模型的訓練。
為了證明本模型的有效性,本文分別在中文和英文數據集上進行了分類結果測試。其中在英文數據集上的實驗使用cora數據集來進行效果的驗證,在實驗中采用了cora數據集中的一部分數據進行實驗,該部分數據一共包含了2 211條文本內容,其中每一個文本為一篇論文的摘要內容以及其所屬的學科類別,共分為7類,包含人工智能、數據庫、信息檢索等學科內容。
而在中文數據集的測試結果方面,現存的中文文本數據集均存在文本長度不一致的問題,文本之間的長度相去甚遠,并不能很好地證明本文方法的有效性。因此為了進行在中文文本數據上的分類測試實驗,我們使用網絡爬蟲來進行數據集的收集,其數據來源于新浪新聞,一共2 605條新聞文本,每一個文本均包含不定長的句子,每個句子的長度均在十句到四十句之間,一共包含了經濟、政治、體育和科技等四大類別。
為了驗證本文方法的實際效果,本文將數據集以0.1、0.3、0.5、0.7、0.9等比例劃分訓練集和測試集,以此來分別檢驗在不同訓練集比例下測試模型的效果。
為了證明所提出方法的性能,將其與其他幾種常用的文本分類方法的實驗效果進行了對比。所選擇的方法如下:
Doc2vec-LR:又稱文本向量化算法,它接受不同長度的句子做訓練樣本,通過無監督的學習方式生成文本的向量表示。該方法首先利用Doc2vec算法對文本的內容進行特征向量表示,然后基于該特征向量表示利用邏輯斯諦回歸(LR)進行文本所屬類別劃分。
LSTM:該方法利用LSTM訓練得到文本表示的特征向量,然后基于該特征向量表示利用一層Softmax進行文本分類。
本實驗中所有的特征表示向量都使用隨機初始化,在英文數據集cora上進行實驗時,詞特征向量的維度設為256,模型中所有權重矩陣均為隨機初始化,偏置向量初始化為0,神經網絡的層數均為一層。對于我們的CNN-LSTM模型,均使用大小為3×256的卷積核,其中3為每次卷積涉及的內容為前后三個單詞,256為單詞向量的維度。卷積核個數為256。對于LSTM模型以及CNN-LSTM模型,其在LSTM層的神經元單元數為CNN的卷積核個數。由于數據較多,為了提升訓練速度采用批處理的方式進行訓練,batch的大小設為50。在參數優化過程中,本文選擇Adam進行優化,訓練的學習率設為0.001,最大迭代次數設為50輪。此外,本文在訓練過程中引入dropout策略和正則化項來防止出現過擬合的現象,dropout比率設為0.3,正則化項使用L2正則化,系數為0.05。而在中文數據集上進行實驗時,針對于中文的特殊性,我們首先去除一些中文的特殊字符,然后使用開源工具jieba分詞對文本進行了分詞處理,再依次完成詞表生成、劃分句子以及網絡模型訓練的過程。為了達到更好的精確率,我們設定詞向量的維度為128維,權重矩陣同樣選用隨機初始化的方式,卷積核的個數為128個,每個卷積核的大小為3×128,長短時記憶網絡LSTM的神經元個數為128,為了避免一些生僻漢字的影響,設定頻度達到3的詞組才會加入詞表中。其他參數設定與在英文數據集上的實驗一致。
基于上述實驗設置,本文在兩個數據集上進行文本分類對比實驗,使用判斷分類結果的精確度作為評價指標,該值越大代表分類性能越好。在英文測試集上的實驗結果如表1所示。

表1 英文數據集分類實驗結果
表1中首列為訓練集所占總體數據的比例。由表1可以看出,無論是在以何種比例劃分的測試集上,本文所提出的基于層次特征提取的文本分類模型(CNN-LSTM)都具有優于其他對比方法的分類效果,在使用較小的訓練集的情況下,依然具有較高的準確率,證明了本文方法的有效性。而在中文數據集上的文本分類結果如表2所示,相較于傳統的文本分類方法,本文使用的基于層次特征提取的方法在中文文本分類任務上同樣具有較好的效果。

表2 中文數據集分類實驗結果
除上述對比實驗外,本文同時也對模型的參數敏感性進行分析。相對于傳統方法如LSTM等,我們使用了CNN模型來提取出句子級的語義表示,然后再對句子級表示使用LSTM進行文本向量建模,其句子級特征的提取在本文提出的方法中扮演著重要的角色。因此這里主要研究了用于提取句子級特征的CNN模型的參數對于模型分類效果的影響。圖5展示了卷積核個數從16變化到128的過程中模型在cora數據集上分類準確率的變化情況。

圖5 分類性能隨卷積核個數變化情況
從圖中可以看出,當卷積神經網絡的卷積核的個數增加時,模型的分類性能在整體趨勢上有所上升。但當卷積神經網絡的卷積核的個數過多時,模型的性能反而會略微下降,原因是卷積核的個數過多,神經網絡模型過于復雜,很容易處于過擬合的狀態,不能很好地完成預測任務。因此本實驗使用256個卷積核進行句子級特征的提取,以達到最佳的分類效果。
文本分類是一個值得研究的問題,這個任務有很多應用場景,因此具有很重要的意義。本文提出了一個基于層次特征提取的文本分類方法,使用卷積神經網絡模型完成句子級的文本建模,然后使用長短時記憶網絡提取文本級特征進行分類,并在真實的數據集上驗證了本文模型的有效性。
在本文提出的模型中,均是通過截斷的方式對句子級和文本級特征進行處理,并沒有完全利用文本的完整信息,因此在后續的研究工作將對模型進行進一步改進,使得模型可以接受不同長度的句子、段落作為輸入,以達到更好的分類效果。