理解卷積神經網路應用在自然語言處理

理解卷積神經網路應用在自然語言處理

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.

文章轉載自:http://blog.csdn.net/zhdgk19871218/article/details/51387197