姜恬靜,和 欣,何 軍,馮 姣,李 鵬
1(南京信息工程大學 電子與信息工程學院,南京 210044)2(軍事科學院 系統(tǒng)工程研究院,北京 100039)
自然語言處理(Natural Language Processing,NLP)是深度學習的一個重要領域.文本分類是自然語言處理的一個重點研究方向,在信息檢索、情感分類、語音識別等領域起著重要的作用[1-3].文本分類通過建立完整的特征提取網(wǎng)絡,提取信息數(shù)據(jù)的具體特征,并給出一個清晰明確的標簽.常用的文本特征提取方法主要是基于本文的關鍵詞或關鍵語句,建立多隱層非線性的全連接神經(jīng)網(wǎng)絡,獲取特征數(shù)據(jù)[4].這種方法一方面計算復雜度較高,占用大量資源,另一方面,對于篇幅較長的文本,如小說、學術報告,特別是方向相近的科技論文和文獻等,容易遺漏細節(jié),區(qū)分度不高,標簽分類不夠準確.
為克服全連接神經(jīng)網(wǎng)絡計算復雜度高的缺點,Collobert和Weston先后在2008年和2011年發(fā)表了兩篇論文簡述了卷積神經(jīng)網(wǎng)絡(Convolutional Neural Network,CNN)在自然語言處理中的應用[5,6],2014年,Kim基于卷積神經(jīng)網(wǎng)絡展開對句子分類的研究,包括情感分析,語義分析等[7].Kim提出的CNN文本分類模型text_cnn包含一個卷積層(使用了多個不同尺寸的卷積核)和最大池化層,因為其結構簡單,效果良好,被廣泛的應用在NLP領域中.該方法能夠有效的對長度較短的文本進行分類,但是對于文度大于5000字甚至更多的文本,單層的CNN不能完整的提取長文特征.
當文本長度大于5000字時,CNN只能處理其一個卷積核中的信息,而相鄰卷積核的信息只能通過后一層的卷積層進行關聯(lián).信息的關聯(lián)取決于卷積核的大小和移動步長等參數(shù),因此,利用CNN對長度大于5000字的文本進行分類時,不能靈活調(diào)整參數(shù),導致訓練時間延長.
相比于CNN,長短期記憶網(wǎng)絡(Long Short-Term Memory,LSTM)能夠持續(xù)保留信息,記憶文本前后關聯(lián)性,可以更好地利用傳統(tǒng)神經(jīng)網(wǎng)絡無法建模的信息,處理與時間序列高度相關的問題[8].其特殊的門結構允許信息選擇性地影響神經(jīng)網(wǎng)絡每個時刻的狀態(tài),解決了傳統(tǒng)序列模型由于記憶信息太多產(chǎn)生的維度爆炸問題.但文本長度超過萬字時,LSTM由于輸入數(shù)據(jù)維度過大,容易引起資源耗盡、訓練緩慢,導致分類準確度下降[9].
2016年,Z Tian將這兩個網(wǎng)絡結合起來,建立了5個卷積層和128個隱層的LSTM網(wǎng)絡結構用于對自然圖像的研究,取得了良好的效果[10].但是Z Tian的網(wǎng)絡結構較為復雜,為了降低網(wǎng)絡的復雜度,本文提出了一種結合單層CNN和LSTM網(wǎng)絡的長文分類方法.本文首先提出了一類隨機抽樣算法,將整篇文檔隨機拆分成若干個部分.接著利用單層CNN提取長文各部分的局部特征,并利用LSTM進一步記憶CNN所提取的各個局部特征的關聯(lián)性,分析長文的全局特征,得出分類結果.實驗結果表明本文所提出的長文分類方法既降低了輸入維度和資源的浪費,提高了運算速度,又能學習全局信息,保證了特征提取的全面性,提高了分類準確度.
本文提出的深度學習模型如圖2所示,包括數(shù)據(jù)的預處理、卷積提取、LSTM記憶和分類器四個部分.
處理序列數(shù)據(jù)一個重要步驟是引入詞語的連續(xù)表示,詞嵌入(word embedding)將一個單詞轉(zhuǎn)換成固定長度的向量表示,使計算機能夠理解文本(語句),捕獲詞語的語義信息和相似性,是目前NLP中最有效最靈活的技術[11].大多數(shù)基于深度學習的訓練模型使用單詞(統(tǒng)計信息或N-gram,Word2VEC等[12]),短語,句子或語義和語法結構等單元對語言文本進行建模[13],本文將單詞作為基本單元,使用詞嵌入的方式對其進行描述.
為了使用單層CNN提取長文特征,本文提出了隨機抽樣的算法將長文隨機拆分成若干個部分,從而縮小單層CNN網(wǎng)絡的輸入維度,同時提取長文的全局信息,隨機抽樣過程如圖1所示.輸入X是長文的詞向量,維度為n×d,其中n是文檔中所有單詞的數(shù)量,d是詞向量的維數(shù).
圖1 隨機抽樣過程圖Fig.1 Random sampling process
隨機抽取函數(shù):
1.Input:長文檔X,統(tǒng)計量L,已設定的每次抽取的句子數(shù)K,隨機抽取次數(shù)N
2.Output:被隨機分成N組的新文檔Xi
3.Begin
4.num_input=int(len(X)/L)//計算拆分后的 文本量
5.i=0 //添加索引
6.New_X=[],Xi=[]
7.While i<=num_input://索引位置不超過文本最大值
8. start_index = i *L
9. end_index = min((i + 1)*L,len(X))
//按索引分割單詞防止重復抽取
10. New_X.append(X[start_index:end_index])
//append函數(shù)將分割好的句子添加到New_X
11. i+=1 //每L個單詞為有效句分割文本
12.if 遍歷長文未滿N次:
13. if 未抽滿K句話:
14. s=random.randint(0,len(New_X))
15.Xi.append(New_X[s])
16.ReturnXi//返回新文檔Xi
17.end
圖2 訓練模型結構圖Fig.2 Structure of training model
2.3.1 CNN
如圖2的左側虛線框,是卷積提取特征的過程.單層CNN使用多個不同尺寸的卷積核提取長文N組局部文本的抽象特征,具體公式如下:
yi1= Relu [conv 1D(Xi,wfj×d×m)]
(1)
(2)
其中,Xi是第i組隨機抽取文本的輸入,conv 1D是卷積運算符,wfj×d×m是大小為fj×d×m的卷積核,其中fj是卷積核的尺寸,下標j代表不同尺寸的卷積核,d是輸入詞向量的維度,m表示所有不同尺寸的卷積核個數(shù).使用Relu函數(shù)激活.公式(2)將所有卷積特征集和.
(3)
圖3 LSTM單個隱層內(nèi)部結構圖Fig.3 Structure of LSTM cell
(4)
2.3.2 LSTM
多層LSTM網(wǎng)絡如圖2右側的虛線框所示.LSTM是由N個隱層組成,圖3展示了LSTM單個隱層的內(nèi)部結構圖.
LSTM各個節(jié)點計算公式如下:
(5)
(6)
(7)
(8)
(9)
hi=oi*tanh(Ci)
(10)
本文選取了來自電子文本文獻arXiv的4類文章和11類文章進行訓練.訓練數(shù)據(jù)的詳細信息見表1,其中四類文章分別來自表1的1-4個類別,共3839篇長文;11類文章屬于表1中5-15個類別,共33213篇長文,可以看出長文的類別方向較為接近.數(shù)據(jù)集中每類文獻的單詞數(shù)都大于5000,平均單詞數(shù)量在6000個左右,明顯長于常用的文本數(shù)據(jù)集如(Yahoo! Answers,Amazon Review等).
表1 數(shù)據(jù)集信息
Table 1 Data set information
所屬類別文章個數(shù)文章平均詞數(shù)1.計算機視覺99556502.凝聚態(tài)99751863.定量生物學85242564.物理學99547455.物理學(高能物理晶體學)299562136.物理學(高能物理現(xiàn)象學)250557777.物理學(核試驗)252556318.物理學(核理論)413674399.計算機科學(因特網(wǎng)架構)3233630910.計算機科學(進化計算)3012552511.數(shù)學(量子代數(shù))2901713612.數(shù)學(度量幾何學)3106606613.數(shù)學(代數(shù)幾何)2885572914.數(shù)學(幾何學)3065652615.金融學28507157
1)實驗平臺:實驗平臺是一個具有48GbRAM和NVIDIA TITAN X(pascal)GPU、48Gb內(nèi)存的深層學習工作站,本文的工作站采用Ubuntu14.04系統(tǒng),借助TensorFlow1.1.0的框架實現(xiàn)提出的長文分類方法.
2)數(shù)據(jù)預處理:獲取文本數(shù)據(jù)后,根據(jù)章節(jié)2.1對數(shù)據(jù)進行預處理.刪除文檔內(nèi)的特殊符號,標點等非常規(guī)單詞.將所有英文單詞編入一個字典內(nèi)保存,為每個單詞隨機生成一個詞向量并為詞向量編號,通過查閱字典將文內(nèi)的單詞轉(zhuǎn)化成詞向量.以上操作將文內(nèi)單詞轉(zhuǎn)化為純數(shù)字的詞向量數(shù)組文件.
3)隨機抽樣:根據(jù)章節(jié)2.2的方法對數(shù)據(jù)進行隨機抽樣.為了比較不同的輸入文本長度對訓練結果的影響,實驗中將每句話的長度分別設為20、40和50個單詞,即L=20,40,50.為了減小CNN模型的輸入量,從長文檔中隨機抽取20和25個句子,即K=20,25,卷積層將同時捕獲這K個句子的特征.對同一篇長文檔中的句子重復遍歷5-25次,即N=5,10,15,20,25,來比較局部提取,即N=5,10,15和全局提取,即N=20,25分類正確率不同.由于長文本中平均單詞數(shù)超過6000個,必須保證一定量的抽樣個數(shù),以確保對整個文本進行分析,即L×K×N≥6000.
4)訓練參數(shù):實驗中,每一次輸入的數(shù)據(jù)量是64篇長文.按照數(shù)據(jù)量的大小將4類和11類數(shù)據(jù)集訓練集和測試集的分割比例分別定為0.1和0.05.所有的數(shù)據(jù)遍歷三次.利用Kim[7]的text_cnn初始化卷積層,使用卷積核尺寸為3*3、4*4和5*5,每種128個.同時建立具有N個隱含層的LSTM網(wǎng)絡,drop_out比例為0.5,采用adam最優(yōu)化方法以0.001學習速率訓練模型.
本節(jié)評估了3.2節(jié)不同配置下不同模型的性能,4類數(shù)據(jù)集和11類數(shù)據(jù)集的訓練結果分別顯示在表2和表3中.可以看出本文提出的隨機抽樣和卷積長短期記憶網(wǎng)絡的分類方法,在長文檔數(shù)據(jù)集上獲得了較高的分類正確率.
表2 4類數(shù)據(jù)集訓練正確率(百分比)
Table 2 Accuracy of four types of data sets(percentage)
K/NL20/520/1020/1520/2025/525/102098.8799.1599.754098.7598.8999.7199.7999.925099.9199.7999.9299.9299.91
4類數(shù)據(jù)集的訓練時間基本上在80-90分鐘,訓練次數(shù)在9000-11000次之間.11類數(shù)據(jù)集的訓練時間在33-40小時左右,訓練步驟數(shù)在65000~73000次之間.
表3 11類數(shù)據(jù)集訓練正確率(百分比)
Table 3 Accuracy of eleven types of data sets(percentage)
K/NL20/520/1020/1520/2025/525/102082.5383.7585.674083.3885.9986.0686.2486.135085.9086.2186.0785.8586.11
表2和表3可以看到,當每個句子的長度L固定時,抽取的單詞越多,文檔分類的精度越高,這表明當網(wǎng)絡能提取和記憶足夠多的特征時,分類的精度更高.當保持K和N不變,即隨機抽取的頻率不變,僅改變單詞的個數(shù)L時,分類的正確率沒有明顯變化,如表2和表3中每列所示,當L越大,訓練速度越快.
圖4 4類數(shù)據(jù)集下不同L的訓練結果Fig.4 Training results under four types of data sets with different L
圖4比較了4類數(shù)據(jù)集中,不同句子長度L對分類正確率的影響.如圖4所示,經(jīng)過2000次訓練后,L=50的準確性顯著提高至0.72.而此時L=40的準確率只有0.41,L=20的準確率仍為0.訓練4000次后,L=50準確率達0.95,而L=40和L=20的準確率均在0.9以下.當程序訓練次數(shù)達到8000次時,三種模型的精度基本穩(wěn)定.圖4同樣表明了在相同的訓練次數(shù)下,單一的CNN[7]和LSTM模型的分類正確率要比本文深度學習模型低很多.
本文提出了一個基于卷積長短期記憶網(wǎng)路的長文分類方法.該方法首先通過隨機抽樣的方式將文本分為N個組,然后利用CNN提取N組中每組的局部特征,并利用LSTM將這些局部特征聚合,關聯(lián)上下文特征.該方法即保留了全文重要細節(jié)信息又降低了每個特征提取時輸入詞向量維數(shù),從而減少了資源的浪費,降低了計算復雜度.實驗結果表明,對于長文分類,該方法具有較高的分類準確度.未來我們將繼續(xù)收集不同類型的數(shù)據(jù)集來驗證模型,研究細粒度分類,同時,對神經(jīng)網(wǎng)絡結構以及相關參數(shù)進行優(yōu)化,研究模型在訓練數(shù)據(jù)比較少的情況下獲得良好的性能的方法.