CNN for NLP (CS224D)

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

lecture13:Convolutional neural networks -- for sentence classificationhtml

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

1、RNNs to CNNsapp

  學過前面lecture的朋友,應該比較清楚。RNNs通常只能得到符合語法規則的短語的向量,對於RecursiveNN,須要依賴parser將句子進行解析,得到語法樹結構,而對於RecurrentNN,須要依賴前面的詞來得到短語向量,能夠認爲訓練過程將句子的語義壓縮在最後的詞向量中(我的理解)。ide

  

  而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。函數

2、CNN學習

  1. 什麼是Convolution(卷積)?.net

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

  我的對於一維變量的卷積是這麼理解的,能夠認爲是多項式係數乘積。例如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)重疊部分向量作內積。htm

  在圖像處理中,對圖像用一個卷積核進行卷積運算,實際上就是一個濾波過程。例以下圖,綠色表示輸入的圖像,能夠是一張黑白圖片,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

3、CNN for NLP

  一、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類似度高的問題。

 

   二、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生成的樹結構)。

4、目前一些研究方向

  (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(深度學習)學習筆記整理系列