王 勇,何養明,鄒 輝,黎 春,陳薈西
(重慶理工大學 計算機科學與工程學院,重慶 400054)
文本特征提取(文本輸入表示)作為文本分類技術里重要的一環,其質量決定了分類系統的分類效果.傳統文本輸入表示方法的主要問題是表示文本或詞語的向量具有高緯度、高稀疏性,對特征語義的表達能力不足,而且神經網絡模型不擅長對此類數據的處理,此外依賴人工進行特征處理,效率難以支撐數據量越來越大的文本分類任務.近年來隨著深度神經網絡的逐漸興起,相關理論模型(如卷積神經網絡、循環神經網絡等)最初在圖像和語音領域得到較為成功的應用,主要原因在于圖像和語音可以轉換成計算機可以識別和處理的具有連續和稠密性的數據,數據特點是有局部關聯性.可見,使用深度神經網絡解決大數據的文本分類問題最重要的是解決文本輸入表示問題,再利用深度神經網絡模型能自動提取深層次特征的能力,去掉繁雜低效的人工特征工程.
詞的分布式表示(Distributed Representation)是較早的一種文本輸入表示方法,其原理是把詞語映射成固定維數的稠密數據向量,即詞嵌入(WordEmbedding)或詞向量(Wordvector),傳統對應的獨熱編碼(One-hotencoding)模型用“0”和“1”來表示詞向量空間,其中“1”的位置代表詞語在詞典中的位置索引.分布式表示的優點是有較好的語義特征表達能力,同時數據形式能夠被神經網絡高效讀取和處理.詞嵌入(詞向量)近年來能夠廣泛流行于文本語義建模領域,得益于谷歌2013年開源了Word2vec詞向量模型,該模型的推出是文本分類模型研究從傳統的淺層機器學習模型轉向深度學習模型的關鍵所在.至此,文本詞語利用數學向量的表達方式,把文本輸入映射成低維、連續和稠密的向量矩陣(類似圖像數據形式),使得深度神經網絡模型得以遷移到文本分類領域,極大促進了相關研究的進程.
然而,實際上Word2vec學習到的“向量特征”和實際語義特征有一定的區別,更多學到的是具備相似上下文的詞或相似語義的獨立詞,如“工資”和“薪水”,“解決”和“處理”等,但不能考慮到局部詞序特征,如“我負天下人”和“天下人負我”這兩個不同的語句,在傳統的Word2vec中的特征都是:[“我”、“負”、“天下人”],在特征語義上是沒有區別的,如果加入2-gram(bigram)特征,前后兩句話的特征還有:[“我負”、“負天下人”]和[“天下人負”、“負我”],這樣兩個句子就能區分開來了.這無疑會增強文本特征的表達能力,提升文本的分類效果.
Hinton在1986年提出詞的分布式表示,將每個詞表達成 n 維稠密、連續的實數向量,奠定了文本詞語建模的發展理論基礎[1].Bengio在2003年提出了三層語言模型(輸入層,隱含層和輸出層)的思路,用上下文的詞向量來預測中間詞,但是計算復雜度較高,對于較大的數據集運行效率低[2].2013年,谷歌的Mikolov等人推出Word2vec,也是三層的語言模型,其中包含了兩個詞向量模型CBOW(Continuous Bag-of-Words Model)和Skip-gram(Continuous Skip-gram Model),在語義和語法上都得到了很好的驗證,推動了文本語義分析的進程[3,4].基于word2vec的思想,Mikolov 于2014年又提出Sentence2vec和Doc2vec,提出了一種更加簡單的網絡結構來訓練任意長度的文本表示方法,這樣好處是減少了參數,加快了模型訓練,避免模型過擬合[5].
Word2vec在詞語建模方面產生了巨大的貢獻,然而其依賴于大量的文本數據進行學習,如果一個詞出現次數較少那么學到的向量質量也不理想.針對這一問題Mikolov提出使用subword信息來彌補這一問題,簡單來說就是通過詞綴的向量來表示詞,即用一串字符級的n-gram向量來表示一個詞[6].Facebook于2016年開源的文本分類工具FastText在詞嵌入訓練時加入了字符級的n-gram特征,用若干個字符n-gram向量的疊加來表示某個單詞,這樣的好處是對于低頻詞生成的詞向量效果會更好,因為它們的n-gram可以和其它詞共享;對于訓練詞庫之外的單詞,仍然可以通過疊加它們的字符級n-gram向量構建它們的詞向量[7].Johnson等人直接使用局部小區域的一段文本進行詞嵌入轉換,代替詞向量作為CNN分類模型的輸入,在更高維層面充分利用了詞序信息進行文本的分類[8].王鵬使用快速聚類算法提取出文本中的語義集,接著對文本n-gram片段進行語義合成,形成候選語義單元,然后根據設置的閾值篩選出合適的語義單元組成語義矩陣,作為CNN的輸入,解決了文本特征矩陣語義稀疏的問題[9].王儒等人針對短文本分類任務上的數據稀疏等難點,嘗試在短文本特征輸入上進行改進.Wordembedding訓練時采取non-static和static兩種方式,將訓練好的Wordembedding進行聚類處理,聚類得到的Wordembedding庫作為模型輸入的詞典庫[10].隨著詞語建模的不斷成熟,越來越多的學者開始嘗試利用卷積神經網絡(CNN)等深度學習方法進行文本分類,Yoon Kim的經典模型TextCNN在句子分類方面取得不錯的成果,成為后續相關研究的模型基準[11].
利用形態學改進詞嵌入的工作十分豐富,但中文領域似乎很難利用這一思路,雖然中文中也有類似于詞綴的單位,比如偏旁部首等等,只不過不像使用字母系統的語言那樣容易處理.文本借鑒文獻[6]、文獻[7]的思想,提出結合N-Gram特征與Word2vec的詞向量模型WordNG-Vec,提取出文本句子的局部詞序特征,增強文本特征的表達能力,實驗表明這個方法有效提高文本分類的效果.
N-Gram語言模型是基于一個假設:第n個詞出現與前n-1個詞相關,而與其他任何詞不相關.整個句子出現的概率就等于各個詞出現的概率乘積.各個詞的概率可以通過語料中統計計算得到.假設句子S是由詞序列w1,w2,…,wn組成,用公式表示N-Gram語言模型如下:
P(s)=p(w1,w2,…,wn)=
p(w1)p(w2|w1)…p(wn|w1,w2,…,wn-1)
(1)
詞語wn出現的概率依賴于它前面n-1個詞,當n很大時,P(s)的計算是非常麻煩甚至無法估算,于是出現了著名的馬爾科夫假設,即馬爾科夫模型.馬爾科夫假設的意思是:“當前這個詞僅僅跟前面一個或幾個有限的詞相關”,即概率計算時不用考慮最前面的詞,這就大大簡化了計算的復雜度.即:
p(wi|w1,w2,…,wi-1)=p(wi|wi-n+1,…,wi-1)
(2)
特別地,對于n取得較小值的情況,當n=1,就是一元模型(unigrammodel),即為:
(3)
當n=2,就是一個二元模型(bigrammodel),即為:
(4)
當n=3,就是三元模型(trigrammodel),即為:
(5)
在實踐中用的最多的就是二元模型和三元模型了,而且效果很不錯,四元或高于四元的模型由于需要的訓練語料過于龐大,訓練時間較長,而且精度效果提升不明顯而較為少用.本文使用二元模型(bigrammodel)來提取文本的2-gram特征(bigram特征),并使用卡方統計方法過濾掉低頻的bigram特征.
如表1所示,我們對兩種特征的文本用Word2vec工具進行處理,得到原始的文本詞向量和bigram文本詞向量.
表1 兩種模型的特征向量
Table 1 Characteristic vectors of the two models

原句美國對中國發起了貿易戰Word2vec特征‘美國’‘對’‘中國’‘發起了’‘貿易戰’ Bigram 特征 ‘美國/對’‘對/中國’‘中國/發起了’ ‘發起了/貿易戰’
結合這兩種詞向量(Word-NG向量)作為文本的總特征,不但考慮了“詞語相似性”,還兼顧了“局部詞序特征”,這樣就可以區分出到底是“美國對中國發起了貿易戰”,還是“中國對美國發起了貿易戰”了.WordNG-Vec詞向量模型構建流程如圖1所示.
卷積神經網絡(CNN)是一種有監督的分類模型,具有強大的局部特征提取能力,在語音和圖像處理方面已取得巨大的成功,近年來逐漸被引入到自然語言處理領域.
本文借鑒文獻[11]中經典的卷積神經網絡分類模型(TextCNN),在結構上做以下改進形成本文的分類模型(DC-CNN),如圖2所示.
1http://thuctc.thunlp.org/message
模型輸入層:為了豐富文本的特征信息,把文本詞向量和Word-NG向量作為模型兩個通道的輸入,輸入分別表示為T1=[x1,x2,…,xn]T,T2=[y1,y2,…,ym]T,其中,T1,T2為輸入矩陣,xi,yi為第i個相應的詞向量,設定為100維.

圖1 WordNG-Vec模型構建流程Fig.1 WordNG-Vec model building process
卷積層:為了在卷積操作的過程中避免損壞bigram特征信息,同時能捕獲更多的上下文信息,本文在T1通道上采用unigram、bigram、trigram三組卷積核,即每次卷積操作分別覆蓋一個詞、兩個詞和三個詞,每組卷積核20個;在T2通道上只采用unigram卷積核,共60個.卷積運算操作如下:
C1=f(W1·T1+b1)
(6)
C2=f(W2·T2+b2)
(7)
其中,W1,W2為兩個通道上的卷積核權重,b1,b2表示偏置,f(·)選擇常用的非線性激活函數ReLU,f(x)=max(0,x).

圖2 DC-CNN模型Fig.2 DC-CNN model
池化層:池化操作是對卷積特征進行再次篩選,提取出主要的特征,對特征向量進行降維,減少模型的計算量,并提升模型的畸變容忍能力.常見的池化方法有平均池化(averagepooling)、最大池化(maxpooling)和K_max池化(K_maxpooling).文本采用K_max池化方法(K取2,取最大的兩個值)以保留更多的特征.假設句子的長度為L,卷積核高度為h,則池化操作表示為:
C=K_max[c1,c2,…,cL-h+1]
(8)

輸出層(Softmax層):假設有M個類別的文本,那么特征向量C′經過Softmax層的處理后映射為M個概率的序列P.表示為P=[p1,p2,…,pM].其中判定輸入x為第i類的概率由下面的公式得到:
(9)
模型的訓練過程使用誤差后向傳播算法(EBP)和隨機梯度下降法(SGD)對模型參數進行調整.
實驗平臺:ubuntu17.04.
實驗工具:數據預處理基于jieba分詞庫、nltk自然語言處理工具、Word2vec詞向量訓練工具;分類模型基于Tensorflow搭建,編程語言采用Python.
本文使用的數據來源于清華大學THUCTC文本分類工具提供的新聞文本語料1,選取其中的6個類別:娛樂、體育、房產、游戲、股票、彩票.在每個類別中各選取10000個文檔組成訓練集和測試集,即訓練集和測試集各3萬篇.
首先對文本進行數據清洗,去掉標點符號和特殊符號,然后用jieba分詞工具進行分詞,處理之后的數據形式為詞與詞之間用空格分開,單個文本與標簽之間用“__label__”分隔.接著用自然語言處理工具nltk完成bigram文本的提取,最后用Word2vec工具對語料進行訓練得到bigram詞向量和文本詞向量(詞向量維度為100).
在T1通道上采用unigram、bigram、trigram三組卷積核,每組卷積核20個,在T2通道上只采用unigram卷積核,共60個;每輪的迭代樣本數(batch_size)為64,共迭代訓練20輪;訓練過程中使用L2正則化方法對參數進行約束,使用dropout機制隨機丟棄一部分神經元的更迭,設定值為0.5,防止模型過擬合.
在機器學習領域,常用的評價指標有精確率(precision)、召回率(recall)和F1值.在測試集中,假設在判斷是否是某類別的樣本中,所有被正確檢索到的樣本記為TP,實際檢索到的總樣本記為TA,被誤檢索到其他類別的樣本記為FN.則精確率為P=TP/TA,召回率為R=TP/(TP+FN),F1值就是精確率和召回率的調和均值,即F1=2PR/(P+R).
本文設置了三組對比實驗來評估所提出的分類模型和詞向量模型的性能.
a)分類模型對比.實驗采用Yoon Kim 提出的模型—TextCNN(雙通道模型),作為對比模型和本文的模型(DC-CNN)進行對比,輸入數據都是Word-NG詞向量,對比結果如表2所示.
表2 模型實驗對比結果
Table 2 Model experimental comparison results

分類模型精確率P召回率RF1值TextCNN0.8530.8390.846DC-CNN0.8550.8410.848
表2展示了DC-CNN和TextCNN模型的試驗對比結果,可以看出兩者都有著不錯的分類效果,但DC-CNN的效果要提升一點,主要原因是DC-CNN在池化層使用K_max池化代替了最大池化,保留了更多的特征.
b)文本詞向量對比.由于“文本詞向量”和“bigram向量”均為單一文本向量,為了解決模型的輸入問題,借鑒了文獻[11]中TextCNN模型通道調整方法(static和non-static兩個通道的動態調整,以減少由于訓練集和測試集語料不一致導致“詞向量”存在的偏差,以及提升訓練時的收斂速度和模型效果),在DC-CNN模型中,以“文本詞向量”作為輸入時,關閉T2通道,以“bigram向量”作為輸入時,關閉T1通道,而以“Word-NG向量”作為輸入時,不關閉任何通道.模型內部參數保持不變.實驗對比結果如表3所示.
表3展示了不同文本詞向量的實驗對比結果,可以看出,單獨使用“bigram向量”的效果最差,原因是很多相鄰上下詞之間的組合并不能構成有意義的詞組,訓練的詞組向量往往不能代表原文語義;使用原始的“文本詞向量”比“bigram向量”提在F1值上升了0.159,說明訓練出能夠代表原文語義的獨立詞向量對提升文本的分類效果有著重要意義;當以“Word-NG向量”作為輸入時,效果最佳,在精確率、召回率、F1值三個指標上都有明顯的提升,因為結合這兩種詞向量能夠兼顧獨立詞的語義以及局部的詞序信息,極大豐富了文本輸入表示的特征.
表3 不同文本詞向量的實驗對比結果
Table 3 Contrast results of word vector experiments

模型輸入精確率P召回率RF1值原始文本向量 0.8870.8710.878bigram文本向量0.7150.7240.719Word-NG向量 0.9020.9130.908
c)詞語建模方法對比.為了研究局部詞序信息對文本分類效果的影響,Johnson在文獻[8]中提出了經典的Bow-CNN模型,將附近的連續幾個單詞映射成一個詞向量,在更高維的層面提取出詞序特征.本文提出的WordNG-Vec詞向量模型和Bow-CNN模型的對比結果如表4所示.
表4 詞語建模方法對比
Table 4 Comparison of the modeling of word vector

詞向量模型精確率P召回率RF1值Bow-CNN 0.8130.8080.810WordNG-Vec0.9020.9130.908
表4展示了WordNG-Vec與Bow-CNN模型的實驗對比結果,可以看出WordNG-Vec的各項指標相比后者均有明顯的提高.原因是Bow-CNN模型在對文本向量的預處理過程中還是顯得略微粗糙,直接將附近的連續幾個詞映射成一個詞向量,雖然在一定程度上能夠提取出“詞序特征”,但忽略了單個詞語語義特征對整體文本特征的作用,而WordNG-Vec模型能夠很好的把兩者結合起來,提升了文本特征的表達能力.
本文借鑒文獻[6]、文獻[7]的思想,提出了結合N-Gram特征與Word2vec的詞向量模型WordNG-Vec,該模型利用N-Gram模型中的二元模型提取出bigram特征文本,并用Word2vec工具訓練得到了融合單個語義特征和局部詞序特征的Word-NG向量.該向量作為文本的輸入表示,能夠捕獲文本內在的局部詞序特征,提升文本輸入表示的特征表達能力;在分類模型上借鑒文獻[11]的TextCNN模型,在結構上進行局部優化,形成本文的DC-CNN模型.通過對清華大學THUCTC的新聞文本數據進行實驗對比表明,本方法在精確率、召回率、F1值三個指標上相對基準模型有一定的提升,證明了本方法的有效性和可行性.