CNN for NLP (CS224D)


斯坦福課程CS224d: Deep Learning for Natural Language Processing

lecture13:Convolutional neural networks -- for sentence classification

  主要是學習筆記,卷積神經網絡(CNN),因為其特殊的結構,在圖像處理和語音識別方面都有很出色的表現。這里主要整理CNN在自然語言處理的應用和現狀。

一、RNNs to CNNs

  學過前面lecture的朋友,應該比較清楚。RNNs一般只能獲得符合語法規則的短語的向量,對於RecursiveNN,需要依賴parser將句子進行解析,獲得語法樹結構,而對於RecurrentNN,需要依賴前面的詞來獲得短語向量,可以認為訓練過程將句子的語義壓縮在最后的詞向量中(個人理解)。

  

  而CNN考慮的是能否為所有可能的短語組合生成向量,不在乎是否符合語法,自然也就不需要parser。比如“The country of my birth”,計算所有可能出現的短語的向量:the country、country of、of my、my birth、the country of、country of my、of my birth、the country of my、 country of my birth。

二、CNN

  1. 什么是Convolution(卷積)?

  數學上定義的卷積:函數f 與g 的卷積記作f * g,它是其中一個函數翻轉並平移后與另一個函數的乘積的積分,是一個對平移量的函數。

  個人對於一維變量的卷積是這么理解的,可以認為是多項式系數乘積。例如f(x)=(x^2+3x+2), g(x)=(2x+5), 則f(x)對應系數向量(2,3,1),g(x)對應(5,2),f(x)與g(x)卷積可認為是系數向量不斷內積,對g(x)向量做個翻轉后不斷左移,與f(x)重疊部分向量做內積。

  在圖像處理中,對圖像用一個卷積核進行卷積運算,實際上就是一個濾波過程。例如下圖,綠色表示輸入的圖像,可以是一張黑白圖片,0是黑色像素點,1是白色像素點。黃色就表示濾波器(filter),也叫卷積核(kernal)或特征檢測器(feature detector)。通過卷積,對圖片的像素點進行加權,作為這局部像素點的響應,獲得圖像的某種特征。

 

http://deeplearning.stanford.edu/wiki/index.php/Feature_extraction_using_convolution

  舉個例子:上圖中輸入的綠色矩陣表示一張人臉,黃色矩陣表示一個眼睛,卷積過程就是拿這個眼睛去匹配這張人臉,那么當黃色矩陣匹配到綠色矩陣(人臉)中眼睛部分時,對應的響應就會很大,得到的值就越大。(粗俗地這么理解了)在圖像處理中,卷積操作可以用來對圖像做邊緣檢測,銳化,模糊等。

http://www.flickering.cn/ads/2015/02/語義分析的一些方法二/

  2.什么是Convolutional Neural Network(卷積神經網絡)?

  最早應該是LeCun(1998)年論文提出,其結果如下:運用於手寫數字識別。詳細就不介紹,可參考zouxy09的專欄,主要關注convolution、pooling,個人理解是這樣的,convolution是做特征檢測,得到多個feature maps,而pooling是對特征進行篩選,提取關鍵信息,過濾掉一些噪音,另一方面是減少訓練參數。

  其中的Local Receptive Field 和Weight Sharing,可進一步參考:Ranzato:NEURAL NETS FOR VISION ,下圖便出自此處。

  

http://cs.nyu.edu/~fergus/tutorials/deep_learning_cvpr12/tutorial_p2_nnets_ranzato_short.pdf

三、CNN for NLP

  1、Single Layer CNN

  與圖像處理不同,對於自然語言處理任務來說,輸入一般是用矩陣表示的句子或文檔。對於句子矩陣,每一行表示一個單詞,每個詞可以用向量表示(word2vec or GloVe, but they could also be one-hot vectors)。下面介紹一種簡單的cnn結構,一層convolution+一層pooling。來自Yoon Kim(2014)的論文。

  首先做一些符號說明:輸入是詞向量Xi(長度是k),句子向量Xi:n是詞向量的級聯(拼接成長向量),filter是w,可看成一個滑動窗口,這里的w是向量,長度是hk(滑動窗口包含h個詞)。

  Convolution:卷積操作,f是激活函數,ci表示卷積得到的特征。通過滑動filter w,與句子所有詞進行卷積,可得到feature map 

   

  Pooling:使用max-pooling獲得feature map中最大的值,然后使用多個filter獲得不同n-grams的特征。

  Multi-Channel:這里很有意思,輸入句子時,使用兩個通道(channel,可以認為是輸入copy一份),都用word2vec初始化,其中一個詞的向量保持不變(static),另一個是non-static,在BP過程不斷修改,最后再pooling前對兩個通道得到的卷積特征進行累加。

  Classification:通過pooling,得到句子最后的特征向量,然后直接用softmax進行分類。

  另外還有一些Tricks:Dropout 和 Regularization,應該是Hinton(2012)提出的方法。

  Training: BP,SGD,ADADELTA: an Adaptive Learning Rate Method.(M.Zeiler.2012)

  另外,網絡中的hyperparameters,是訓練過程,用grid search方法在dev數據集上跑出來的,並且不斷記錄最優參數。結果感人,7項任務中4項得到很好結果。

  簡單的cnn結構+word2vec獲得很不錯的結果,然后multi-channel還能學習一些相似詞,比如word2vec中bad和good相似度高的問題。

 

   2、Multi-Layer CNN

    前面介紹的是單層卷積層+pooling層的CNN,下面看一個結構相對復雜一點的CNN。來自Nal Kalchbrenner (2014)的論文。文章主要提出Dynamic Convolutional Neural Network,下面只介紹一些與單層cnn不同的部分。下圖是主要結構

  

  Wide Convolution:與Narrow相對而言,wide convolution指用filter 對句子中的所有可能組合進行卷積,句子左右可以補零,從而得到比原句子長度更長的feature map,能夠獲得句子中詞語盡可能多的不同組合。例如下圖:

 

  K-Max Pooling:與普通max-pooling取最大的feature不同,這里取最大的k個值,一定程度上保留了這些feature的順序。

  Dynamic K-Max Pooling:k的大小與卷積得到的feature map長度、以及當前pooling層數有關,公式如下:

 

  Folding:兩行變一行,將同一個詞的第1,2特征疊加,3,4特征疊加,我的理解是可能特征間存在某種聯系,進行疊加能綜合特征,又降低維數。

  介紹差不過就這樣,該結構不需要parse tree,而且能生成隱含的特征圖,捕捉短的和長的語義關系(k-max pooling生成的樹結構)。

四、目前一些研究方向

  (1)卷積之前添加一層Multi-scale SUs

  Wang, P., et al (2015). Semantic Clustering and Convolutional Neural Network for Short Text Categorization. Proceedings ACL 2015, 352–357.
  (2)Bag of words:

  Johnson, R., & Zhang, T. (2015). Effective Use of Word Order for Text Categorization with Convolutional Neural Networks. To Appear: NAACL-2015
  Johnson, R., & Zhang, T. (2015). Semi-supervised Convolutional Neural Networks for Text Categorization via Region Embedding.
  (3)關系提取、實體識別:

  Nguyen, T. H., & Grishman, R. (2015). Relation Extraction: Perspective from Convolutional Neural Networks. Workshop on Vector Modeling for NLP, 39–48.
  Sun, Y., Lin, L., et al. (2015). Modeling Mention , Context and Entity with Neural Networks for Entity Disambiguation, (IJCAI), 1333–1339.
  Zeng, D., Liu, K., Lai, S., Zhou, G., & Zhao, J. (2014). Relation Classification via Convolutional Deep Neural Network. Coling, (2011), 2335–2344.

  (4)字符級別:

  Santos, C., & Zadrozny, B. (2014). Learning Character-level Representations for Part-of-Speech Tagging. Proceedings of the 31st International Conference on Machine Learning, ICML-14(2011), 1818–1826.

  Zhang, X., Zhao, J., & LeCun, Y. (2015). Character-level Convolutional Networks for Text Classification, 1–9.

  Zhang, X., & LeCun, Y. (2015). Text Understanding from Scratch. arXiv E-Prints, 3, 011102.

  Kim, Y., Jernite, Y., Sontag, D., & Rush, A. M. (2015). Character-Aware Neural Language Models.

 

Reference

[1] LeCun Y, Bottou L, Bengio Y, et al. Gradient-based learning applied to document recognition[J]. Proceedings of the IEEE, 1998, 86(11): 2278-2324.

[2] Kim Y. Convolutional neural networks for sentence classification[J]. arXiv preprint arXiv:1408.5882, 2014.

[3] Hinton G E, Srivastava N, Krizhevsky A, et al. Improving neural networks by preventing co-adaptation of feature detectors[J]. arXiv preprint arXiv:1207.0580, 2012.

[4] Kalchbrenner N, Grefenstette E, Blunsom P. A convolutional neural network for modelling sentences[J]. arXiv preprint arXiv:1404.2188, 2014.

[5] Denny Britz (2015). Blog: understanding-convolutional-neural-networks-for-nlp

[6] @火光搖曳Flickering. Blog:語義分析的一些方法

[7] @zouxy09. Blog:Deep Learning(深度學習)學習筆記整理系列


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM