CNN 是卷積神經網絡,通常用於圖像領域,並且在圖像分類取得非常好的效果。2014 年 Yoon Kim 在論文《Convolutional Neural Networks for Sentence Classification》中將 CNN 的思想應用到文本處理中,後續很多把 ConvNet 用在 NLP 任務上的工作都是基於這篇論文進行的。
1. CNN 文本分類模型
本文主要是對原始論文《Convolutional Neural Networks for Sentence Classification》內容的整理,首先了解 CNN 文本分類模型整體結構,下圖是論文中的模型圖。
可以看到模型比較簡單,主要分為四個部分:輸入層、卷積層、最大池化層、全連接層。
1.1 輸入層
給定一個句子,輸入層接收的輸入是一個句子單詞詞向量矩陣 X,X 是一個 (n×k) 的矩陣,n 表示句子中單詞數量,k 表示詞向量維度。可以看到 X 的每一行對應了一個單詞的詞向量,而單詞的詞向量按照它們在句子中的順序進行排列。
1.2 卷積層
在得到輸入的詞向量矩陣 X 之後,需要對 X 進行卷積操作。卷積核是一個 (h×k) 的矩陣,注意卷積核的列數是固定的 (為 k),與詞向量維度一樣。卷積核不斷地向下移動,得到卷積後的值。
因為卷積核的列數與詞向量矩陣 X 是一樣的,所以經過卷積後的 feature map 也只有一列。有多個卷積核會生成多列向量,如下圖所示,下圖為 4 個卷積核卷積後的輸出。
1.3 最大池化層
在卷積層中,多個不同的卷積核會生成多列向量 (feature map),最大池化會取出每一列中的最大值,最終形成一個一維向量。
1.4 全連接層
最後一層是全連接層,全連接層使用了 Dropout 防止過擬合,然後利用 Softmax 進行分類。
2. 模型的其他細節
2.1 使用多個不同尺寸的卷積核
剛剛我們瞭解到這個模型的卷積核列數必須為 k,但是其高度 (行數) 是可以變的,在使用的過程中可以採用不同高度的卷積核進行卷積操作,如下圖所示。
2.2 模型的變種
作者在論文中還提出了模型的 4 種變種
- CNN-rand,單詞的詞向量是隨機初始化的,並且在訓練的過程中不斷地更新。
- CNN-static,使用已經訓練好的詞向量,例如 Word2Vec,並且在後續訓練中保持詞向量不變。
- CNN-non-static,與 CNN-static 類似,都是使用已經訓練好的詞向量,但是在後續的訓練中還會繼續微調詞向量。
- CNN-multichannel,使用兩套詞向量,均是用 Word2Vec 進行初始化,其中一套詞向量在訓練中保持不變,另一套會在訓練中微調。輸入的句子可以獲取兩種不同的詞向量。可以理解為類似圖像中的 RGB 通道,在這裡兩個通道分別表示兩種詞向量。
下圖是 4 種模型的結果,可以看到 CNN-static 比 CNN-rand 效果更好,說明使用預訓練的詞向量比較有效;另外 CNN-non-static 比 CNN-static 效果要好,說明微調會使詞向量更加適合當前任務。在實驗中 CNN-multichannel 通常在小數據集效果更好。
3. CNN 文本分類總結
CNN 用於 NLP 任務中與 N-Gram 有相似之處,我們定義卷積核的高度為 3,則相當於使用卷積核在句子中進行一個 3-Gram 的操作,同時 CNN 具有很高的效率,比傳統 N-Gram 要快很多。
CNN 中的卷積核寬度要與詞向量的維度一樣大,並且卷積核是在句子中單詞的方向上進行移動的。
參考文獻
1.論文:Convolutional Neural Networks for Sentence Classification
https://aclweb.org/anthology/D14-1181
2.Understanding Convolutional Neural Networks for NLP
http://www.wildml.com/2015/11/understanding-convolutional-neural-networks-for-nlp/
閱讀更多 NLP與人工智能 的文章