CNN介紹及程式碼實現

哈工大SCIR發表於2019-01-24

一、介紹

1.1 文章組織

本文簡要介紹CNN的基本原理,並以句子級情感分類任務為例介紹使用CNN方法進行特徵抽取建模。文章的最後,我們給出Pytorch下CNN的實現程式碼,供讀者參考。

1.2 情感分類任務

自然語言處理中情感分類任務是對給定文字進行情感傾向分類的任務,粗略來看可以認為其是分類任務中的一類。對於情感分類任務,目前通常的做法是先對詞或者短語進行表示,再通過某種組合方式把句子中詞的表示組合成句子的表示。最後,利用句子的表示對句子進行情感分類。

舉一個對句子進行褒貶二分類的例子。

句子:我愛賽爾

情感標籤:褒義

1.3 什麼是CNN

CNN的全稱是Convolutional Neural Network, 是一種前饋神經網路。由一個或多個卷積層、池化層以及頂部的全連線層組成,在影象處理領域表現出色。本文主要講解CNN如何在自然語言處理方面的運用。

1.4 為什麼使用CNN

卷積神經網路主要用於提取卷積物件的區域性特徵,當卷積物件是自然語言文字時,比如一個句子,此時其區域性特徵是特定的關鍵詞或關鍵短語,所以利用卷積神經網路作為特徵提取器時相當於詞袋模型,表示一個句子中是否出現過特定的關鍵詞或關鍵短語。用在分類任務上,相當於提取出對於分類最有用的特徵資訊。

相比其他模型,卷積神經網路引數更少。還有一個優點是CNN不存在序列依賴問題,可以平行計算。

二、CNN原理簡介

以早期將CNN引入NLP的一篇工作為例(EMNLP 2014. Convolutional Neural Networks for Sentence Classification),進行講解。

CNN介紹及程式碼實現

我們將上圖分成4部分,分別進行介紹:

第一部分,將句子“wait for the video and do n’t rent it”向量化。利用word embedding的方法得到每個詞xi的向量表示,向量的維度為k。對於長度為n的句子,其向量表示如下(即n*k的矩陣):

CNN介紹及程式碼實現

這裡的static channel和non-static channel分別指詞向量固定(即在訓練過程中不進行調節)和詞向量更新(通過反向傳播進行fine-tuning)。

第二部分,帶有多個卷積核的卷積層以及特徵對映。圖中紅顏色和黃顏色的虛線代表著卷積操作提取出來的特徵,對映得到的輸出。圖示中展示了4個卷積核。下面介紹一下卷積操作的公式:

CNN介紹及程式碼實現

對於包含h個單詞的滑動視窗,其數學符號表示為xi:i+h-1。w表示卷積核,每次通過滑動h個單詞,得到特徵ci。每個卷積核對句子進行h個單詞的視窗滑動,分別得到對應的特徵對映

CNN介紹及程式碼實現

第三部分,最大池化。本文采用的是最大池化的方法,還可以採用平均池化。針對每個卷積核得到的特徵對映向量,從中分別挑選出最大的值。這種想法的出發點是提取出每個特徵對映中最重要的資訊,池化過程還可以應對句子長度可變的情況。

CNN介紹及程式碼實現

第四部分,全連線層。將池化層得到的特徵通過全連線softmax層後,能夠得到每個類別的概率。

三、CNN程式碼實現樣例

程式碼地址:https://github.com/Shijihao/CNN_for_classification

3.1 模型搭建

CNN介紹及程式碼實現

CNN介紹及程式碼實現

示例程式碼使用了兩個卷積核,卷積核的滑動視窗分別為2個詞和3個詞。本示例的資料採用的是MR資料(Movie Review Data),該資料用於情感分析任務,利用電影評論文字進行情感極性(positive或negtive)的分類。

3.2 模型訓練

CNN介紹及程式碼實現

3.3 模型測試

CNN介紹及程式碼實現

CNN介紹及程式碼實現

CNN介紹及程式碼實現

四、總結

本文介紹了卷積神經網路模型如何與NLP任務相結合的早期運用。隨著近幾年的不斷髮展,CNN模型不斷完善,也出現了一系列的改進,例如可以用dilated卷積、增加網路深度等方法捕獲長距離依賴特徵。感興趣的讀者可參閱參考資料中的相關文獻。

五、參考資料

[1]  KIM Y. Convolutional Neural Networks for Sentence Classification[C]//Proceedings of the 2014 Conference on Empirical Methods in Natural Language Processing (EMNLP). Association for Computational Linguistics, 2014: 1746–1751.

[2]  YU F, KOLTUN V. Multi-scale context aggregation by dilated convolutions[J]. arXiv preprint arXiv:1511.07122, 2015.

[3]  KALCHBRENNER N, ESPEHOLT L, SIMONYAN K et al. Neural Machine Translation in Linear Time[J]. CoRR, 2016, abs/1610.10099.

[4]  GEHRING J, AULI M, GRANGIER D et al. Convolutional Sequence to Sequence Learning[C]//PRECUP D, TEH Y W. Proceedings of the 34th International Conference on Machine Learning. International Convention Centre, Sydney, Australia: PMLR, 2017, 70: 1243–1252.

相關文章