理解卷及神經網絡應用在自然語言處理的學習筆記

博客地址:http://www.wildml.com/2015/11/understanding-convolutional-neural-networks-for-nlp/

首先申明本人的英語很搓,看英文非常吃力,只能用這種笨辦法來方便下次閱讀。有理解錯誤的地方,請別噴我。


CNN怎麼應用到NLP

什麼是卷積和什麼是卷積神經網絡就不講了,自行google。從在自然語言處理的應用開始(SO, HOW DOES ANY OF THIS APPLY TO NLP?)。
和圖像像素不同的是,在自然語言處理中用矩陣來代表一句話或者一段話作爲輸入,矩陣的每一行代表一個token,可以是詞,也可以是字符。這樣每一行是一個向量,這個向量可以是詞向量像word2vec或者GloVe。也可以是one-hot向量。如果一句話有10個詞,每個詞是100維的詞向量,那麼得到10*100的矩陣,這就相當於圖像識別中的圖像(input)。
在圖像中,過濾器是在圖像的部分滑動,而在NLP中過濾器在整行上滑動。意思是過濾器的寬度和輸入矩陣的寬度是一致地。(就是說過濾器的寬度等於詞向量的維度。)在高度上常常是開2-5個詞的滑動窗口。總結起來,一個在NLP上的CNN長這樣:
這裏寫圖片描述
這裏有3種過濾器,滑動窗口爲2、3、4,每種有2個。後面闡述了CNN在NLP上的不足(沒看明白)。表示RNN更符合語言的理解習慣。後面又說模型跟實現的理解有偏差,但是CNN在NLP上的表現是不錯的。同時也吐槽了詞袋模型也一樣。(原因鬼知道)
CNN的另一個優勢是快,這裏用N-Gram模型做對比。我們都知道在VSM模型中採用3-gram的維度就很恐怖了,文中說google也處理不了超過5-gram的模型。這是CNN模型的優勢,同時在CNN的輸入層採用n-size的滑動窗口和n-gram處理是相似的。(不能同意再多,個人認爲部分功勞在word embeddings上。當然不全是,因爲即使採用one-hot,維度也不會隨着窗口的size變化。而在n-gram中是隨着n的變化爆發性增加的。)

CNN的超參

(乾貨,對理解模型和代碼都非常必要。)

窄卷積和寬卷積(NARROW VS. WIDE CONVOLUTION)

對於窄卷積來說,是從第一個點開始做卷積,每次窗口滑動固定步幅。比如下圖左部分爲窄卷積。那麼注意到越在邊緣的位置被卷積的次數越少。於是有了寬卷積的方法,可以看作在卷積之前在邊緣用0補充,常見有兩種情況,一個是全補充,入下圖右部分,這樣輸出大於輸入的維度。另一種常用的方法是補充一部0值,使得輸出和輸入的維度一致。這裏文中給了一個公式 。這裏npadding在全補充裏是filter-1,在輸入輸出相等時,就要主要奇偶性了,注意到卷積核常爲奇數,這裏應該有原因之一。(思考下爲什麼)
這裏寫圖片描述

步幅大小(STRIDE SIZE)

這個參數很簡單,就是卷積核移動的步長。下面兩幅圖左邊的步長爲1,右邊的步長爲2。(看出卷積核是啥了嗎)
這裏寫圖片描述
這裏說步幅常設置爲1,在一些更接近於RNN的模型中會設置更大的stride。

匯聚層(POOLING LAYERS)

一般在卷積層後會有匯聚層。最常用的是max-pooling(就是取最大的那個)。stride的大小一般和max-pooling的窗口大小一致。(在NLP中代表性的操作是在整個輸出上作匯聚,每個過濾器只輸出一個值。)
爲啥要做匯聚?講了兩個原因:一是可以提供確定的輸出,對於後面做全連接有用。二是可以在保存大部分信息的前提下降維(希望是這樣)。這裏說這樣的做法相當於某個詞是否在句子中出現,而不關心這個詞在句子的哪個位置出現。這和詞袋模型的思想相同。不同的是在局部信息中,“not amazing”和”amazing not“在模型中會有很大的不同。(這裏得好好想想,mark下)

通道(CHANNELS)

這沒啥好說的,就是輸入有幾層。在圖像中一般有1、3層(分別灰度圖和RGB圖)。在NLP中也可以有多個通道,比如說使用不同詞向量化方式,甚至不同的語言等

CNN應用到NLP

這裏說CNN在NLP中常應用到文本分類中,比如情感分析、垃圾信息識別、主題分類中。由於卷積的匯聚操作會遺失一些詞的位置信息,所以較難應用到詞性標註和實體抽取中。但是也不是不可以做,你需要把位置信息加入到特徵裏。下面是作者看的CNN在NLP方面的論文。
這裏舉了論文[1]中的例子,模型很簡單。輸入層是由word2vec詞向量表示的句子,後面跟着是卷基礎,然後是max-pooling層,最後是全連接的softmax分類器。同時論文中還實驗了使用兩個通道,一個靜態一個動態,一個會在訓練中變化(詞向量變化?參數誰不會變化,mark)。在論文[2][6]還有多加入一層來實現“情感聚類”。
這裏寫圖片描述
[4]中就沒有像word2vec這樣還要先訓練,直接簡單粗暴的使用one-hot向量。[5]的作者表示他的模型在長文本中表現非常好。總結了下,詞向量這種在短文本中比長文本表現更好。
構建CNN模型要做些啥:1、輸入的向量化表示。2、卷積核的大小和數量的設置。3、匯聚層類型的選擇。4、激活函數的選擇。一個好的模型的建立需要多次的實驗,這裏作者表示如果沒能力建立更好的模型,效仿他就足夠了。另外有幾點經驗:1、max-pooling好於average-pooling。2、過濾器的大小很重要。3、正則並沒有卵用。4、警告最好文本的長度都差不多。

剩下的論文就不說了。

[1] Kim, Y. (2014). Convolutional Neural Networks for Sentence Classification. Proceedings of the 2014 Conference on Empirical Methods in Natural Language Processing (EMNLP 2014), 1746–1751.
[2] Kalchbrenner, N., Grefenstette, E., & Blunsom, P. (2014). A Convolutional Neural Network for Modelling Sentences. Acl, 655–665.
[3] Santos, C. N. dos, & Gatti, M. (2014). Deep Convolutional Neural Networks for Sentiment Analysis of Short Texts. In COLING-2014 (pp. 69–78).
[4] Johnson, R., & Zhang, T. (2015). Effective Use of Word Order for Text Categorization with Convolutional Neural Networks. To Appear: NAACL-2015, (2011).
[5] Johnson, R., & Zhang, T. (2015). Semi-supervised Convolutional Neural Networks for Text Categorization via Region Embedding.
[6] Wang, P., Xu, J., Xu, B., Liu, C., Zhang, H., Wang, F., & Hao, H. (2015). Semantic Clustering and Convolutional Neural Network for Short Text Categorization. Proceedings ACL 2015, 352–357.
[7] Zhang, Y., & Wallace, B. (2015). A Sensitivity Analysis of (and Practitioners’ Guide to) Convolutional Neural Networks for Sentence Classification,
[8] Nguyen, T. H., & Grishman, R. (2015). Relation Extraction: Perspective from Convolutional Neural Networks. Workshop on Vector Modeling for NLP, 39–48.
[9] Sun, Y., Lin, L., Tang, D., Yang, N., Ji, Z., & Wang, X. (2015). Modeling Mention , Context and Entity with Neural Networks for Entity Disambiguation, (Ijcai), 1333–1339.
[10] Zeng, D., Liu, K., Lai, S., Zhou, G., & Zhao, J. (2014). Relation Classification via Convolutional Deep Neural Network. Coling, (2011), 2335–2344.
[11] Gao, J., Pantel, P., Gamon, M., He, X., & Deng, L. (2014). Modeling Interestingness with Deep Neural Networks.
[12] Shen, Y., He, X., Gao, J., Deng, L., & Mesnil, G. (2014). A Latent Semantic Model with Convolutional-Pooling Structure for Information Retrieval. Proceedings of the 23rd ACM International Conference on Conference on Information and Knowledge Management – CIKM ’14, 101–110.
[13] Weston, J., & Adams, K. (2014). # T AG S PACE : Semantic Embeddings from Hashtags, 1822–1827.
[14] 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.
[15] Zhang, X., Zhao, J., & LeCun, Y. (2015). Character-level Convolutional Networks for Text Classification, 1–9.
[16] Zhang, X., & LeCun, Y. (2015). Text Understanding from Scratch. arXiv E-Prints, 3, 011102.
[17] Kim, Y., Jernite, Y., Sontag, D., & Rush, A. M. (2015). Character-Aware Neural Language Models.

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