基於 word2vec 和 CNN 的文本分類:綜述 & 實踐

Word 機器學習 CNN 深度學習 騰訊雲技術社區 騰訊雲技術社區 2017-09-04

更多騰訊海量技術文章,請關注騰訊雲技術社區:https://cloud.tencent.com/community

作者:牛亞峰

導語

傳統的向量空間模型(VSM)假設特徵項之間相互獨立,這與實際情況是不相符的,為了解決這個問題,可以採用文本的分佈式表示方式(例如 word embedding形式),通過文本的分佈式表示,把文本表示成類似圖像和語音的連續、稠密的數據。

這樣我們就可以把深度學習方法遷移到文本分類領域了。基於詞向量和卷積神經網絡的文本分類方法不僅考慮了詞語之間的相關性,而且還考慮了詞語在文本中的相對位置,這無疑會提升在分類任務中的準確率。 經過實驗,該方法在驗證數據集上的F1-score值達到了0.9372,相對於原來業務中所採用的分類方法,有20%的提升。

1.業務背景描述

  • 分類問題是人類所面臨的一個非常重要且具有普遍意義的問題,我們生活中的很多問題歸根到底都是分類問題。

  • 文本分類就是根據文本內容將其分到合適的類別,它是自然語言處理的一個十分重要的問題。文本分類主要應用於信息檢索,機器翻譯,自動文摘,信息過濾,郵件分類等任務。

2.文本分類綜述

2.1 文本分類的發展歷史

基於 word2vec 和 CNN 的文本分類:綜述 & 實踐

  • 文本分類最早可以追溯到上世紀50年代,那時主要通過專家定義規則來進行文本分類

  • 80年代出現了利用知識工程建立的專家系統

  • 90年代開始藉助於機器學習方法,通過人工特徵工程和淺層分類模型來進行文本分類。

  • 現在多采用詞向量以及深度神經網絡來進行文本分類。

2.2 文本分類的流程

基於 word2vec 和 CNN 的文本分類:綜述 & 實踐

2.3 文檔表示

如何把文檔表示為算法能夠處理的結構化數據無疑是文本分類非常重要的環節。

根據文本表示過程所使用的數學方法不同,可以分為以下幾類:

1.基於集合論模型

  • a 布爾模型 b. 基於模糊集的模型 c.擴展的布爾模型

2.基於代數論模型

  • a 向量空間模型(VSM) b 基於語義的文本表示

3.基於概率統計模型

  • a 迴歸模型 b.二元獨立概率模型 c. 語言模型建模IR模型

接下來會詳細介紹一下布爾模型、向量空間模型(VSM)、基於語義的文本表示。

2.3.1 布爾模型

布爾模型:查詢和文檔均表達為布爾表達式,其中文檔表示成所有詞的“與”關係,類似於傳統的數據庫檢索,是精確匹配。

例如:

查詢:2006 AND 世界盃 AND NOT 小組賽

文檔1:2006年世界盃在德國舉行

文檔2:2006年世界盃小組賽已經結束

基於 word2vec 和 CNN 的文本分類:綜述 & 實踐

文檔相似度計算:查詢布爾表達式和所有文檔的布爾表達式進行匹配,匹配成功得分為1,否則為0.

布爾模型的優缺點:

優點:簡單、現代搜索引擎中依然包含了布爾模型的理念,例如谷歌、百度的高級搜索功能。

缺點:只能嚴格匹配,另外對於普通用戶而言構建查詢並不容易。

2.3.2 向量空間模型

向量空間模型:把對文本內容的處理簡化為向量空間的向量計算。並且以空間上的相似度表達文檔的相似度。

基於 word2vec 和 CNN 的文本分類:綜述 & 實踐

每篇文檔由T1、T2、...、Tn一共N個特徵項來表示,並且對應著Wi1、Wi2、... 、Win個權重。通過以上方式,每篇文章都表示成了一個N維的向量。

相似度計算:兩個文檔的相似程度可以用兩向量的餘弦夾角來進行度量,夾角越小證明相似度越高。

優缺點:

優點:1.簡潔直觀,可以應用到很多領域(文本分類、生物信息學等)2.支持部分匹配和近似匹配,結果可以排序 3. 檢索效果不錯

缺點:1.理論上支持不夠,基於直覺的經驗性公式。 2. 特徵項之間相互獨立的假設與實際不符。例如,VSM會假設小馬哥和騰訊兩個詞語之間是相互獨立的,這顯然與實際不符。

基於 word2vec 和 CNN 的文本分類:綜述 & 實踐

2.3.3 基於語義的文本表示

基於語義的文本表示方法:為了解決VSM特徵相互獨立這一不符合實際的假設,有人提出了基於語義的文本表示方法,比如LDA主題模型,LSI/PLSI概率潛在語義索引等方法,一般認為這些方法得到的文本表示是文檔的深層表示。而word embedding文本分佈式表示方法則是深度學習方法的重要基礎。

基於 word2vec 和 CNN 的文本分類:綜述 & 實踐

2.3.4 文本的分佈式表示:詞向量(word embedding)

文本的分佈式表示(Distributed Representation)的基本思想是將每個詞表示為n維稠密,連續的實數向量。

分佈式表示的最大優點在於它具有非常強大的表徵能力,比如n維向量每維k個值,可以表徵k的n次方個概念。

事實上,不管是神經網絡的影層,還是多個潛在變量的概率主題模型,都是在應用分佈式表示。下圖的神經網絡語言模型(NNLM)採用的就是文本分佈式表示。而詞向量(word embedding)是訓練該語言模型的一個附加產物,即圖中的Matrix C。

基於 word2vec 和 CNN 的文本分類:綜述 & 實踐

神經網絡語言模型(NNLM)

儘管詞的分佈式表示在86年就提出來了,但真正火起來是13年google發表的兩篇word2vec的paper,並隨之發佈了簡單的word2vec工具包,並在語義維度上得到了很好的驗證,極大的推動了文本分析的進程。

文本的表示通過詞向量的表示方法,把文本數據從高緯度稀疏的神經網絡難處理的方式,變成了類似圖像、語言的連續稠密數據,這樣我們就可以把深度學習的算法遷移到文本領域了。下圖是google的詞向量文章中涉及的兩個模型CBOW和Skip-gram。

基於 word2vec 和 CNN 的文本分類:綜述 & 實踐

CBOW:上下文來預測當前詞

基於 word2vec 和 CNN 的文本分類:綜述 & 實踐

Skip-gram:當前詞預測上下文

2.4 特徵提取

特徵提取對應著特徵項的選擇特徵權重的計算。

特徵項的選擇就是指根據某個評價指標獨立的對原始特徵項(詞語)進行評分排序,從中選取得分最高的一些特徵項,過濾掉其餘的特徵項。

特徵權重的計算:主要思路是依據一個詞的重要程度與類別內的詞頻成正比(代表性),與所有類別中出現的次數成反比(區分度)。

當選用數學方法進行特徵提取時,決定文本特徵提取效果的最主要因素是評估函數的質量。常見的評估函數主要有如下方法:

2.4.1 TF-IDF

TF:詞頻,計算該詞描述文檔內容的能力

IDF:逆向文檔頻率,用於計算該詞區分文檔的的能力

  • 思想:一個詞的重要程度與在類別內的詞頻成正比,與所有類別出現的次數成反比。

  • 評價:a.TF-IDF的精度並不是特別高。b.TF-IDF並沒有體現出單詞的位置信息。

2.4.2 詞頻(TF)

詞頻是一個詞在文檔中出現的次數。通過詞頻進行特徵選擇就是將詞頻小於某一閾值的詞刪除。

  • 思想:出現頻次低的詞對過濾的影響也比較小。

  • 評價:有時頻次低的詞彙含有更多有效的信息,因此不宜大幅刪減詞彙。

2.4.3 文檔頻次法(DF)

它指的是在整個數據集中,有多少個文本包含這個單詞。

  • 思想:計算每個特徵的文檔頻次,並根據閾值去除文檔頻次特別低(沒有代表性)和特別高的特徵(沒有區分度)

  • 評價:簡單、計算量小、速度快、時間複雜度和文本數量成線性關係,非常適合超大規模文本數據集的特徵選擇。

2.4.4 互信息方法(Mutual information)

互信息用於衡量某個詞與類別之間的統計獨立關係,在過濾問題中用於度量特徵對於主題的區分度。

  • 思想:在某個特定類別出現頻率高,在其他類別出現頻率低的詞彙與該類的互信息較大。

  • 評價:優點-不需要對特徵詞和類別之間關係的性質做任何假設。缺點-得分非常容易受詞邊緣概率的影響。實驗結果表明互信息分類效果通常比較差。

2.4.5 期望交叉熵

交叉熵反映了文本類別的概率分佈和在出現了某個特定詞的條件下文本類別的概率分佈之間的距離

思想:特徵詞t 的交叉熵越大, 對文本類別分佈的影響也越大。

評價:熵的特徵選擇不考慮單詞未發生的情況,效果要優於信息增益。

2.4.6 信息增益

信息增益是信息論中的一個重要概念, 它表示了某一個特徵項的存在與否對類別預測的影響。

  • 思想:某個特徵項的信息增益值越大, 貢獻越大, 對分類也越重要。

  • 評價:信息增益表現出的分類性能偏低,因為信息增益考慮了文本特徵未發生的情況。

2.4.7 卡方校驗

它指的是在整個數據集中,有多少個文本包含這個單詞。

  • 思想:在指定類別文本中出現頻率高的詞條與在其他類別文本中出現頻率比較高的詞條,對判定文檔是否屬於該類別都是很有幫助的.

  • 評價:卡方校驗特徵選擇算法的準確率、分類效果受訓練集影響較小,結果穩定。對存在類別交叉現象的文本進行分類時,性能優於其他類別的分類方法。

2.4.8 其他評估函數

  • 二次信息熵(QEMI)

  • 文本證據權(The weight of Evidence for Text)

  • 優勢率(Odds Ratio)

  • 遺傳算法(Genetic Algorithm)

  • 主成分分析(PCA)

  • 模擬退火算法(Simulating Anneal)

  • N-Gram算法

2.5 傳統特徵提取方法總結

傳統的特徵選擇方法大多采用以上特徵評估函數進行特徵權重的計算。

但由於這些評估函數都是基於統計學原理的,因此一個缺點就是需要一個龐大的訓練集,才能獲得對分類起關鍵作用的特徵,這需要消耗大量的人力和物力。

另外基於評估函數的特徵提取方法建立在特徵獨立的假設基礎上,但在實際中這個假設很難成立。

2.6 通過映射和變化來進行特徵提取

特徵選擇也可以通過用映射或變換的方法把原始特徵變換為較少的新特徵

傳統的特徵提取降維方法,會損失部分文檔信息,以DF為例,它會剔除低頻詞彙,而很多情況下這部分詞彙可能包含較多信息,對於分類的重要性比較大。

如何解決傳統特徵提取方法的缺點:找到頻率低詞彙的相似高頻詞,例如:在介紹月亮的古詩中,玉兔和嬋娟是低頻詞,我們可以用高頻詞月亮來代替,這無疑會提升分類系統對文本的理解深度。詞向量能夠有效的表示詞語之間的相似度

2.7 傳統的文本分類方法。

  • 基本上大部分機器學習方法都在文本分類領域有所應用。

  • 例如:Naive Bayes,KNN,SVM,集合類方法,最大熵,神經網絡等等。

2.8 深度學習文本分類方法

  • 卷積神經網絡(TextCNN)

  • 循環神經網絡(TextRNN)

  • TextRNN+Attention

  • TextRCNN(TextRNN+CNN)

本文采用的是卷積神經網絡(TextCNN)

3.實踐及結果

基於 word2vec 和 CNN 的文本分類:綜述 & 實踐

TextCNN網絡概覽圖

3.1 實踐步驟

  • 根據警情詳情首先訓練詞向量模型,vector.model

  • 把警情詳情文本進行分詞,去除停用詞,然後利用詞向量來表示,每篇文檔表示為250*200的矩陣(250:文檔包含的詞語個數,不夠的以200維-5.0填充,200:每個詞語用200維向量來表示)

  • 把警情訓練樣本分割為train-set,validation set,test set。

  • 利用設計好的卷積神經網絡進行訓練,並測試。

3.2 設計的卷積神經網絡結構

基於 word2vec 和 CNN 的文本分類:綜述 & 實踐

3.3 實驗結果

基於 word2vec 和 CNN 的文本分類:綜述 & 實踐

為了檢驗模型在真實數據上的分類準確率,我們又額外人工審核了1000條深圳地區的案情數據,相較於原來分類準確率的68%,提升到了現在的90%,說明我們的模型確實有效,相對於原來的模型有較大的提升。

基於 word2vec 和 CNN 的文本分類:綜述 & 實踐

  • 紅色:word2vec+CNN(max_pooling)在驗證集上的準確率走勢圖

  • 黃色和藍色:word2vec+CNN(batch normalization & chunk max_pooling:2 chunk)在驗證集上的準確率走勢圖

基於 word2vec 和 CNN 的文本分類:綜述 & 實踐

紅色:word2vec+CNN(max_pooling) 在驗證集上的Loss走勢

黃色和藍色:word2vec+CNN(batch normalization & chunk max_pooling:2 chunk)在驗證集上的Loss走勢

3.4 一些感悟

  • 一定要理解你的數據

  • 做好實驗記錄和分析

  • 大量的數據樣本比改善模型來的更有效,但代價也很高

  • 閱讀paper,理解原理,開闊視野,加強實踐,敢於嘗試,追求卓越

4. 一些參考文獻

  1. CSDN-基於tensorflow的CNN文本分類

  2. CSDN-深度學習在文本分類中的應用

  3. 知乎-用深度學習解決大規模文本分類的問題-綜述和實踐

  4. 簡書-利用tensorflow實現卷積神經網絡做文本分類

  5. CSDN-利用word-embedding自動生成語義相近句子

  6. Github-Implementing a CNN for text classification in tensorflow

  7. 卷積神經網絡在句子建模上的應用

  8. CSDN-自然語言處理中CNN模型幾種常見的Max-Pooling操作

  9. WILDML-understanding convolutional neural network for NLP

  10. 博客園-文本深度表示模型--word2vec & doc2vec詞向量模型

  11. CSDN-用docsim/doc2vec/LSH比較兩個文檔之間的相似度

  12. Deeplearning中文論壇-自然語言處理(三)之 word embedding

  13. CSDN-DeepNLP的學習,詞嵌入來龍去脈-深度學習

  14. CSDN-自己動手寫word2vec

相關推薦

推薦中...