卷積神經網絡(CNN)應用於自然語言處理(NLP)

說到CNN,大家自然想到圖像處理。
說到NLP,大家自然想到LSTM,RNN。
但是,去年的斯坦福論文表明,CNN照樣可以應用於NLP,並且效果可能更好。

博主做了實驗,爬取了各類新聞並對新聞進行分類。這樣的分類問題,RNN和CNN都可以達到99%左右的效果,但是,CNN幾乎比RNN快了5倍。於是,博主主要針對CNN對於NLP處理中的細節展開討論。

1.CNN爲什麼可以處理NLP
隨着詞向量的發展,word2vec,Glove等現有的詞向量庫已經能較好的表達詞語的含義。因此,我們用N維-詞向量就可以度量詞語之間的距離,想象N維空間,每個詞語是其中的一點。

2.CNN做NLP,輸入是什麼?
作爲卷積操作,類似於圖像,輸入也是一個二維矩陣,(圖像可以說是三維的,因爲還有一維是通道數吧)。然後每一行是一個詞語的向量,每個輸入的二維矩陣就是M個詞語,N維度的詞向量組成的M*N的矩陣。

3.CNN做NLP,怎麼卷積?
選擇好了輸入,接下來就是卷積。不同於圖像處理的卷積,CNN對NLP的卷積核大小有要求,一般來說,卷積核的長度和詞向量的維度應該是一致的。比如一個詞向量是N維的,那麼卷積核就應該是X*N維的,我一般X取(1,2,3。借鑑斯坦福論文)。所以卷積就是提取1個詞、2個詞、3個詞之間的特徵。

4.CNN做NLP,還要注意啥?
比如雙通道的輸入。一般的embedding-layer是可訓練的,我使用的模型是2-embedding-layer,一層設置:trainable = false , 一層設置:trainable = true。
這樣可以避免在訓練過程中的過度擬合。

5.博主能想到的優化?
我能想到的優化有:
試試改變卷積核的大小,看看效果?(帶實驗)
試着加入類似殘差網絡的效果,進行損失信息的疊加。(DenseNet)

6.各種模型對比

  1. 首先用的最簡單的:雙通道+多卷積(1*vector_length、2*vector_length、3*vector_length)+maxpooling+全連接(86%,快)
  2. 然後增加一層卷積:雙通道+多卷積(1*30、2*20、3*10)+多卷積(1*10、2*20、3*30)+maxpooling+全連接(85%,慢)
  3. 調整卷積池化順序:雙通道+多卷積+maxpooling+多卷積+全連接(85%,慢)
  4. 然後採用densenet:(85%,慢)

7.總結
對於NLP的卷積,小卷積相比大卷積,性能雖沒有提高,但是差別不算很大。

未完待續。。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章