基於 CNN 的文本分類算法

CNN 是卷積神經網絡,通常用於圖像領域,並且在圖像分類取得非常好的效果。2014 年 Yoon Kim 在論文《Convolutional Neural Networks for Sentence Classification》中將 CNN 的思想應用到文本處理中,後續很多把 ConvNet 用在 NLP 任務上的工作都是基於這篇論文進行的。

1. CNN 文本分類模型

本文主要是對原始論文《Convolutional Neural Networks for Sentence Classification》內容的整理,首先了解 CNN 文本分類模型整體結構,下圖是論文中的模型圖。

基於 CNN 的文本分類算法

CNN 文本分類模型

可以看到模型比較簡單,主要分為四個部分:輸入層、卷積層、最大池化層、全連接層。

1.1 輸入層

給定一個句子,輸入層接收的輸入是一個句子單詞詞向量矩陣 XX 是一個 (n×k) 的矩陣,n 表示句子中單詞數量,k 表示詞向量維度。可以看到 X 的每一行對應了一個單詞的詞向量,而單詞的詞向量按照它們在句子中的順序進行排列。

1.2 卷積層

在得到輸入的詞向量矩陣 X 之後,需要對 X 進行卷積操作。卷積核是一個 (h×k) 的矩陣,注意卷積核的列數是固定的 (為 k),與詞向量維度一樣。卷積核不斷地向下移動,得到卷積後的值。

基於 CNN 的文本分類算法

卷積核

因為卷積核的列數與詞向量矩陣 X 是一樣的,所以經過卷積後的 feature map 也只有一列。有多個卷積核會生成多列向量,如下圖所示,下圖為 4 個卷積核卷積後的輸出。

基於 CNN 的文本分類算法

卷積後的輸出

1.3 最大池化層

在卷積層中,多個不同的卷積核會生成多列向量 (feature map),最大池化會取出每一列中的最大值,最終形成一個一維向量。

1.4 全連接層

最後一層是全連接層,全連接層使用了 Dropout 防止過擬合,然後利用 Softmax 進行分類。

2. 模型的其他細節

2.1 使用多個不同尺寸的卷積核

剛剛我們瞭解到這個模型的卷積核列數必須為 k,但是其高度 (行數) 是可以變的,在使用的過程中可以採用不同高度的卷積核進行卷積操作,如下圖所示。

基於 CNN 的文本分類算法

採用不同尺寸的卷積核

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 通常在小數據集效果更好。

基於 CNN 的文本分類算法

4 種 CNN 模型的效果

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/


分享到:


相關文章: