1. 程式人生 > >KIM2014_Convolutional Neural Networks for Sentence Classification

KIM2014_Convolutional Neural Networks for Sentence Classification

Convolutional Neural Networks for Sentence Classification

1. Abstract

  • 證實了:
    • 一個簡單的CNN結構 + 微調少許超參 + 靜態向量
      = 效能超好
    • 在fine-tuning階段學習task-specific向量能進一步提升效能
  • 為了能同時使用靜態向量和task-specific向量,對結構進行小調整,提出了Text CNN
  • 在情感分析、問題分類等4個領域達到了十分好的效果

所謂靜態向量就是指預訓練好的詞向量;task-specific向量是指詞向量也可以在下游任務中,隨著模型一同微調。

2. Introduction

  • Kim之前利用預訓練好的詞向量(全程保持不變,也就是靜態向量)載入到具體任務中,並只對模型的少許引數做微調,發現模擬結果也很好,證實了詞向量可以作為一個通用的特徵提取部件
    ,並可被廣泛用於各類分類任務中。當然從今天的角度來看,這已經是共識了。
  • 不過Kim認為工作不止於此,如何在fine-tuning中學習task-specific向量更加重要。

3. Model

k k x
i R k x_i∈R^k
n n 輸入文字
詞向量維度 輸入文字第 i i 個詞的詞向量 輸入文字長度(不足補全,超過截斷) 聯接符 x 1 : n = x 1 x 2 . . . x n x_{1:n}=x_1⊕x_2⊕...⊕x_n
  • 一次卷積操作:
    • 給定一個 f i l t e r filter w R h k w∈R^{hk} ,代表對一個 w i n d o w = h window=h 的視窗內詞語的卷積,並生成一個新的feature
    • c i = f ( w x i : i + h 1 + b ) c_i=f(w·x_{i:i+h-1}+b) b b 為偏置,可加可不加, f f 為非線性函式
    • 將這個 w w 應用於一個輸入文字,即視窗 { x 1 : h , x 2 : h , . . . , x n h + 1 : n } \{x_{1:h},x_{2:h},...,x_{n-h+1:n}\} ,可以得到一個feature map c = [ c 1 , c 2 , . . . , c n h + 1 ] c=[c_1,c_2,...,c_{n-h+1}]
    • 進行一次最大池化,得到 c ^ = m a x { c } \hat{c}=max\{c\} ,用以捕捉最重要的feature map
  • 上述過程中,每個feature對應於一個 f i l t e r filter ,而模型會使用不同的 f i l t e r s filters (帶有不同的window sizes)以得到不同的特徵
  • 對雙通道(每個通道輸入不同的詞向量)CNN進行了模擬實驗,一個通道為靜止向量,另一個通道會在bp過程中不斷微調,且每個 f i l t e r filter 會被用於每個通道,結果在計算 c i c_i 時進行累加,具體結構如下圖所示
    在這裡插入圖片描述

4. Datasets and Experimental Set up

4.1 Hyperparameters and Training

f i l t e r filter w i n d o w s windows f e a t u r e feature m a p s maps d r o u p o u t droupout r a t e rate l 2 l_2 constraint mini-batch size
[ 3 , 4 , 5 ] [3,4,5] 100 maps for each filter 0.5 0.5 3 3 50 50

5. Results and Discussion

在這裡插入圖片描述

  • 所有詞的詞向量均隨機初始化,在訓練過程中不斷調整的baseline模型CNN-rand,果不其然效果比較差
  • 在baseline基礎上加了個靜態向量的CNN-static,果然提升很大
  • 原以為使用多通道的CNN-multichannel能夠防止過擬合,(尤其在小資料集的情況下)比單通道的效能更好,結果發現並不盡然
  • CNN-non-static相比CNN-static,在一些情況下還是很有用的

總結

  • 儘管沒怎麼對超參做調整,一個簡單的單卷積層CNN已經很牛逼了
  • 如何用Pytorch實現一個Text CNN