[NLP]文本分類-textCNN

1、簡要git

卷積神經網絡的核心思想是捕捉局部特徵,對於文原本說,局部特徵就是由若干單詞組成的滑動窗口,相似於N-gram.github

卷積神經網絡的優點在於可以自動地對N-gram特徵進行組合和篩選,得到不一樣抽象層次的語義信息。網絡

2、textCNN函數

 

 

具體描述:性能

一、 第一層是輸入層,輸入層是一個n*d矩陣,其中n表示輸入文本的長度,d表示每一個詞/字向量的維度。學習

注:每一個詞向量既能夠是預先在其餘語料庫中訓練好的,也能夠做爲未知的參數由網絡訓練而獲得。兩者各有優點,前者能夠利用其餘語料庫獲得的先驗知識,後者能夠更好的抓取與當前任務相關聯的特徵。所以,圖中的輸入層實際採用了雙通道的形式,即有兩個n*d矩陣,其中一個用預訓練好的詞向量特徵,而且在訓練過程當中再也不發生變化;另外一個是用預訓練好的詞向量作初始化,可是會做爲參數,隨着網絡的訓練過程發生改變。優化

二、 第二層是卷積層,第三層是池化層。scala

卷積層:咱們用大小分別爲2,3,4的filter來對輸入層進行卷積,每一個大小的filter各有2個(對應產生2個feature map),分別於輸入的詞向量作卷積後會獲得6個feature map。blog

池化層:使用1-max pooling分別對6個feature map作池化操做,最終會生成6個scalar,將其拼接後生成的向量通過softmax完成分類。get

注1:卷積核的大小與詞向量的維度相同,且卷積核只會在高度方向上行動,說明卷子操做會在完整的單詞上進行,而不會對幾個單詞的一部分vector進行卷積,這保證了word做爲語言中最小粒度的合理性。

注2:使用多個相同size的filter是爲了從同一個窗口學習相互之間互補的特徵。好比能夠設置size爲3的filter有64個卷積核。

3、textCNN的缺點:它的全局max pooling丟失告終構信息,所以很難去發現文本中的轉折關係等複雜模式。(改進方法:使用k-max pooling作優化,k-max pooling會針對每一個卷積覈保留前k個最大值,而且保留這些值出現的順序,即按照文本中的位置順序來排列這k個最大值,在某些比較複雜的文本上相對於1-max pooling會有提高)

代碼流程:

 

 

 

4、textCNN的超參數調參

輸入詞向量表徵:詞向量表徵的選取(如選word2vec仍是GloVe)

卷積核大小:一個合理的值範圍在1~10。若語料中的句子較長,能夠考慮使用更大的卷積核。另外,能夠在尋找到了最佳的單個filter的大小後,嘗試在該filter的尺寸值附近尋找其餘合適值來進行組合。實踐證實這樣的組合效果每每比單個最佳filter表現更出色

feature map特徵圖個數:主要考慮的是當增長特徵圖個數時,訓練時間也會加長,所以須要權衡好。當特徵圖數量增長到將性能下降時,能夠增強正則化效果,如將dropout率提升過0.5

激活函數:ReLU和tanh是最佳候選者

池化策略:1-max pooling表現最佳

正則化項(dropout/L2):相對於其餘超參數來講,影響較小點

 

參考文獻:

[1] https://zhuanlan.zhihu.com/p/77634533

[2]https://github.com/jeffery0628/text_classification

相關文章
相關標籤/搜索