論文筆記:Convolutional Nerual Network for Sentence Classification

Convolutional Nerual Network for Sentence Classification

論文鏈接:Convolutional Neural Network for Sentence Classification

文中建立了一個一層卷積層和一層全連接層組成的網絡,實現文本分類任務。

Introduction

在 Introduction 部分中,開始介紹了一些深度深度神經網絡在 NLP 任務的應用,以及CNN網絡在語義分析、問題檢索等任務上都有不錯的效果。

這一部分最後介紹了本文中建立的模型的一些特點,首先卷積層的處理是在詞向量之上的,文中對預訓練好的詞向量以及在訓練過程中動態調整的詞向量(也就是隨機初始化了詞向量矩陣,然後也對這些詞向量進行訓練)都做了測試。相較於隨機初始化的詞向量,使用預先訓練好的詞向量的效果更好(這裏使用的是 Mikolov 使用 Google News 進行訓練得到的詞向量),即使兩種任務相差甚遠,但是詞向量是通用的,這些詞向量都具有相似的特徵。此外,文中所建立的模型中,有一個很重要的是使用了兩個 “Channel” 的模型,也就是說,在卷積層的輸入上,一個 channel 是使用的 Pre-train 的詞向量,這些詞向量在訓練過程中是不會變化的,另一個 channel 則是動態詞向量,可以根據訓練進行 fine-tuning(大概是微調的意思)。

Model

這一部分詳細介紹了 TextCNN 模型,其實與圖像處理的卷積網絡結構一樣,Figure 1 展示了整個模型的運行情況,對於輸入的一個文本,將詞向量作爲卷積處理的單位,當然定義的 filter 也就只能上下(也就是單詞之間移動,不然橫移動表示在詞向量上進行移動,這樣就破壞了詞語的完整性,就沒有意義了),在這張圖上,也可以的看到之前提到的 channel 是什麼意思,其實本來輸入只有一層的,也就是 詞語數量 * 詞向量維度 這樣的,相當於又加了一層,只不過一層可以調整,一層不能調整而已。

此外,模型中還使用了不同尺寸的卷積核,這有點像 GooLeNet 模型中提出的並行卷積處理結構, 也就是在不同的池遜上提取句子的特徵,這種方式可以理解成統計機器學習模型的 N-Gram 模型,也就是相當於提取了詞語之間的順序關係,相對於只使用一種尺寸的卷積核,多種長度應該會得到更多信息,分類的效果應該會更好。

在經過卷積處理之後,接下來進行了一次 max-pool (最大池化),這裏的池化的範圍是整個特徵圖,可以想到,一個句子經過卷積處理與最大池化的依次處理之後,會成爲一個 單值, 這裏最大池化的解釋是找到最重要的特徵,這裏最重要的特徵也就是最大值了。。。(不過這樣之後的參數倒是節省了不少)。

經過最大池化之後就是非常基操的展平後接全連接分類了,如果假設 K 中不同尺寸的 filter, 每種尺寸的 filter 有 n 個,那麼展平後的維度就是 [batch_size, Kn ],個這裏假設每種尺寸都有 n 個了,如果數量之間不一樣的話就是相加了。

最後對於全連接層,使用 dropuout 方法(實話說,我覺得這裏的參數量也不算大啊。。)然後再訓練結束之後對這一層的參數 ,也就是 W 參數矩陣進行了 L2 正則化處理。

Experiments

文章的第三部分是對使用的一些數據集進行介紹,在實驗上,重點是文中進行測試所使用的不同模型,這裏主要是對模型使用的詞向量作爲劃分, 這一部分在 3.3中具體作了介紹,第一種是 CNN-rand,也就是使用完全隨機初始化的詞向量, CNN-static 使用的是 pre-train 的詞向量,詞向量在訓練過程中是不可訓練,也就是不改變的。第三種是 CNN-non-static,也就是使用的 pre-train 的詞向量,但是這些詞向量可以調整。最後一種是 CNN-multichannel ,也就是之前提到的,使用了兩種 channel ,分別是不可調整和可以及逆行微調的。

對於結果分析部分,文中做了詳細的數據對比。這四種方式中,可以看到即使是最簡單的完全隨機初始化的CNN結果,在結果上也是很不錯的,不過還是可以看出,如果使用了 pre-train 的詞向量,各個測試集上的數據結果都要提升了一些,相比之下,如果對這些 static 的詞向量進行微調, 在其中一些數據集上的結果會再提高一些。

按照一般規律,放在最後的模型都會有 buff 加成,而且雙 channel 確實感覺很厲害,但是數據集的結果卻不是這樣,從結果來看,這與使用進行微調的模型相比, 在大部分數據集上的表現反而不夠好,當然這些差距都很小,只有兩個數據集的效果更好一些,總之,不分伯仲,對於這個結果,文中也寫道,因此,可以使用一個 extra dimension 代替雙 channel。(這個地方我沒有搞懂這個增加一個額外的維度是什麼意思?)

在比較 static 和 non-static 的結果數據上,可以發現一些非常有趣的結果,文中列出了一些調整後的詞向量以及它們最相近的單詞,如果是static vector,good 與 bad 是非常相似的,因爲它們的使用場景很一致,但是在具體數據集上進行微調之後,good 就與 nice 之類的詞更爲接近了。這反映了對於具體數據的學習過程,此外,對於隨機初始化的詞向量們,甚至可以看到標點符號相似的單詞也是很不同的, 感嘆號作爲情感比較強烈的符號,就比較接近於一些表示情感的形容詞,比如 beautiful terrible 等等。但是逗號就更接近於 but and 等等連詞了。

在 Futher Observation 中,提到了 dropout 提高了模型的表現,可以提高大概 2%-4% , 另外, 對於使用不同數據集上pre-train 的詞向量也會影響模型表現,對於這個問題,文中也沒有給出具體的解釋。

Conclusion

結論部分,即使是一個非常簡單的一層卷積處理的CNN就可以達到很好的結果,作者認爲無監督預訓練好的詞向量將會成爲 NLP 相關任務中的重要組成部分。

摘要對模型結構

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