【簡單總結】TextCNN的複習回顧

【簡單總結】TextCNN

原文鏈接:Convolutional Neural Networks for Sentence Classification

1.簡單介紹TextCNN

TextCNN模型是由 Yoon Kim提出的使用卷積神經網絡來處理NLP問題的模型.相比較nlp中傳統的rnn/lstm等模型,cnn能更加高效的提取重要特徵,這些特徵在分類中佔據着重要位置.論文所提出的模型結構如下圖所示:

: 

與圖像當中CNN的網絡相比,textCNN 最大的不同便是在輸入數據的不同:

  1. 圖像是二維數據, 圖像的卷積核是從左到右, 從上到下進行滑動來進行特徵抽取。 

  2. 自然語言是一維數據, 雖然經過word-embedding 生成了二維向量,但是對詞向量做從左到右滑動來進行卷積沒有意義. 比如 "今天" 對應的向量[0, 0, 0, 0, 1], 按窗口大小爲 1* 2 從左到右滑動得到[0,0], [0,0], [0,0], [0, 1]這四個向量, 對應的都是"今天"這個詞彙, 這種滑動沒有幫助.

  TextCNN的成功, 不是網絡結構的成功, 而是通過引入已經訓練好的詞向量來在多個數據集上達到了超越benchmark 的表現,進一步證明了構造更好的embedding, 是提升nlp 各項任務的關鍵能力。

 

二. TextCNN 的優勢

  1. TextCNN最大優勢網絡結構簡單 ,在模型網絡結構如此簡單的情況下,通過引入已經訓練好的詞向量依舊有很不錯的效果,在多項數據數據集上超越benchmark。 

  2. 網絡結構簡單導致參數數目少, 計算量少, 訓練速度快,在單機單卡的v100機器上,訓練165萬數據, 迭代26萬步,半個小時左右可以收斂。

三.TextCNN 的流程T

1.Word Embedding 分詞構建詞向量

  如圖二所示, textCNN 首先將 "今天天氣很好,出來玩" 分詞成"今天/天氣/很好/,/出來/玩, 通過word2vec或者GLOV 等embedding 方式將每個詞成映射成一個5維(維數可以自己指定)詞向量, 如 "今天" -> [0,0,0,0,1], "天氣" ->[0,0,0,1,0], "很好" ->[0,0,1,0,0]等等。

 

  這樣做的好處主要是將自然語言數值化,方便後續的處理。從這裏也可以看出不同的映射方式對最後的結果是會產生巨大的影響, nlp 當中目前最火熱的研究方向便是如何將自然語言映射成更好的詞向量。我們構建完詞向量後,將所有的詞向量拼接起來構成一個6*5的二維矩陣,作爲最初的輸入

2. Convolution 卷積

在CNN 中常常會提到一個詞channel, 圖三 中 深紅矩陣與 淺紅矩陣 便構成了兩個channel 統稱一個卷積核, 從這個圖中也可以看出每個channel 不必嚴格一樣, 每個4*5 矩陣與輸入矩陣做一次卷積操作得到一個feature map. 在計算機視覺中,由於彩色圖像存在 R, G, B 三種顏色, 每個顏色便代表一種channel。

  根據原論文作者的描述, 一開始引入channel 是希望防止過擬合(通過保證學習到的vectors 不要偏離輸入太多)來在小數據集合獲得比單channel更好的表現,後來發現其實直接使用正則化效果更好。

  不過使用多channel 相比與單channel, 每個channel 可以使用不同的word embedding, 比如可以在no-static(梯度可以反向傳播) 的channel 來fine tune 詞向量,讓詞向量更加適用於當前的訓練。 

  對於channel在textCNN 是否有用, 從論文的實驗結果來看多channels並沒有明顯提升模型的分類能力, 七個數據集上的五個數據集 單channel 的textCNN 表現都要優於 多channels的textCNN。

3。TextCNN總結

 TextCNN結構簡單,精度比較高,只是速度相比沒有Fasttext快,模型這種東西,沒有絕對的好壞之說,所以根據不同數據集選擇不同的模型,也是一門技術.

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