寬、窄卷積神經(jīng)網(wǎng)絡
當我在上文中解釋卷積的時候,我忽略了一點運用過濾器的小細節(jié)。我們在一個矩陣的中心有3×3的過濾器工作得很棒,但是它在邊界的表現(xiàn)如何呢?你應該如何應用這個過濾器于矩陣的第一個元素(沒有任何相鄰的上方元素和左邊元素)? 你可以用0來填充邊界。所有超過矩陣邊界的元素都當做0來處理。這么做之后呢,你就可以將過濾器用于矩陣中的每一個元素,并且獲得更大的等大小的輸出。使用0填充的(zero-padding)也稱為寬卷積(wide convolution),不用0填充稱為窄神經(jīng)網(wǎng)絡。下面是一個例子。
步長(Stride size)
另一個卷積的超參是步長,也就是每一步你想移動你的過濾器多少距離。上述的所有的例子,步長均為1。對連續(xù)應用過濾器采樣子矩陣,就會導致采樣信息的重疊。一個更大的步長意味著更少地使用過濾器和更小的輸出。下面的例子來自于the Stanford cs231 website 展示了步長為1和步長為2運用于一維輸入的情況:
Convolution Stride Size.?
Left: Stride size 1. Right: Stride size 2. Source: ?
在文獻中我們通常看到的都是步長大小為1的情景,但是較大的步幅讓你建立一個處理過程類似RNN的模型,就像樹型結構。
池層(POOLING LAYERS)
卷積神經(jīng)網(wǎng)絡的另一個關鍵在于Pooling layers,它通常在卷積層后面使用。Pooling layers用于下采樣上一層的輸入。最簡單也是最常見的做法是,取每個過濾器中的最大值為輸出。你不必對一個完整的矩陣都做pooling操作,你可以對一個小窗口做pooling。如下圖,展示一個在2×2窗口的max pooling操作(在NLP問題中,我們通常要對整個輸入進行pooling操作,產(chǎn)生每個過濾器產(chǎn)生一個單獨的數(shù)字輸出):
Max pooling in CNN. Source:
為什么要進行Pooling操作呢?有以下這么幾個原因。
Pooling操作的一個優(yōu)勢在于它能夠產(chǎn)生一個固定大小的輸出矩陣。這個矩陣通常被用于分類。例如,如果你有1000個過濾器并且你對每一個過濾器都進行了Max Pooling操作,那么你就得到了1000維的輸出。不管你過濾器的大小,也不管你輸入的大小,你的輸出大小就是固定的。這樣你就可以用各種各樣長度的句子和各種各樣大小的過濾器,但是總會得到相同的輸出維度,從而進行分類。
Pooling的使用也可以減少輸出的維度,同時(我們希望這樣)保存最顯著的信息。你可以想象一下,每個過濾器能夠識別出一種特征,例如,識別出這個句子有沒有含有一個類似”not amazing”的否定詞。如果句子中的某個地方出現(xiàn)了這個詞組,那么掃描采樣這一塊的過濾器就會產(chǎn)生一個大的數(shù)值,在別的區(qū)域產(chǎn)生一個小的值。這樣做之后呢,你就能夠保持那些關于某些特征有沒有出現(xiàn)在句子中的信息,而損失了這個特征究竟出現(xiàn)在句子的哪個位置的信息。但是,損失的這個信息并沒有什么用途吧?對啊,這是有一點像a bag of n-grams model所做的那樣。你損失了關于定位的全局信息(某些東西出現(xiàn)在句子中的某些地方),但是你保留下來了被你的過濾器采樣到的局部信息,就像”not amazing”與”amazing not”非常不同一樣。(這就是我上文說的一個有疑問的說法)
在圖像識別中,Pooling也可以提供基礎的平移、旋轉不變性。當你對于某個區(qū)域進行Pooling操作的時候,結果通常來說會保持一致,無論你是旋轉還是平移你圖像的像素,因為Max Pooling會最終識別出同樣的數(shù)值。
通道(CHANNELS)
我們需要理解的最后一個理論是通道。通道是輸入數(shù)據(jù)的一種不同的‘樣子’。例如,在圖像識別中,我們一般使用的是RGB(red, green, blue) 通道。在通道里應用卷積的時候,你可以采用不同的或者相同的權值。在NLP問題中,你可以想到通道的種類是非常多的:用不同的word embeddings(word2vec and GloVe for example)來區(qū)分通道,或者,你可以為不同的語言表達的同樣意思的句子、單詞設計一個通道。
用于NLP的CNN
現(xiàn)在讓我們看看一些CNN在自然語言處理中的應用。我會嘗試總結一些研究成果與結論。總之,我會漏了描述很多有趣的應用(請在評論中告訴我),但我希望至少覆蓋一些比較流行的結果。
CNN天生就適合用于分類任務,例如情感分析,垃圾郵件檢測或主題分類。卷積和池操作會丟失單詞的局部順序,所以呢,句子標記,例如詞性標注或實體提取,是有點難以適應純CNN架構(也不是不可能,你可以添加位置特征的輸入)。
[1] 評估一個CNN結構在各種分類數(shù)據(jù)集中的表現(xiàn),主要包括情感分析和主題分類的任務。 CNN結構跨數(shù)據(jù)集的問題上有著非常不錯的表現(xiàn),同時最新的技術也使得它在小數(shù)據(jù)上表現(xiàn)優(yōu)異。 出人意料的是,論文中使用的網(wǎng)絡是非常簡單的,這就是為什么它非常的有效。輸入層是一個由連續(xù)的word2vec word embeddings組成的句子。在卷積層的后面跟著多個過濾器,然后是一個max-pooling layer,最后是一個softmax分類器。該論文也對兩個不同的通道做實驗,通道是以靜態(tài)和動態(tài)word embeddings形式的,并且其中一個能夠在訓練中被調整,一個不能被調整。一個相似的但是更加復雜的結構在[2]中被提出。[6] 加入了一個新增的層用于在網(wǎng)絡結構中進行“語義聚合”(semantic clustering) 。
[4]從頭訓練一個CNN,不需要pre-trained word向量,例如word2vec或者GloVe。它直接將卷積用于one-hot向量。作者還提出了一種空間節(jié)約的bag-of-words似的輸入數(shù)據(jù)表示方法 ,減少了網(wǎng)絡需要訓練的參數(shù)個數(shù)。在[5]中,作者用一個二外的無監(jiān)督“region embedding”擴展了這個模型,該擴展是學習用CNN來預測文本區(qū)域的內容。這些論文中使用的方法似乎在長文本(例如,電影評論)的處理中做得不錯,但是他們在短文本(例如,微博)中的處理效果還不得而知。直觀地來看,這確實很有道理。對短文本使用pre-trained word embeddings將會產(chǎn)生更大的收益,相比將它們用于處理長文本。
建立一個CNN解耦狗意味著許多超參可供選擇,就像我上文提到的那樣:輸入表示法(word2vec, GloVe, one-hot),卷積過濾器的數(shù)量和大小,池操作的策略(max, average),以及激活函數(shù)(ReLU, tanh)。[7]通過調整CNN結構的超參,多次運行程序,研究、分析其的性能和方差,從而得出驗證性的評價。如果你想要將你的CNN用于文本分類,用這篇論文的結論作為基礎起始點是再好不過的了。一些脫穎而出的結論是,max-pooling的效果總是好于average_pooling;一個理想狀況下的過濾器大小是很重要的,但是大部分還是依具體情況而定;正則化與否在NLP問題中似乎沒有多大影響。這項研究的需要注意的是,在文件長度方面,所有的數(shù)據(jù)集都頗為相似。所以呢,同樣的準則看清了并不適用于那些看起來相當不同的數(shù)據(jù)。
[8]研究了CNN對關系抽取和關系分類的應用。除了單詞向量,作者用了單詞與關注的實體(譯者:attention mechanism里的概念)之間的相對位置作為卷積層的另一個輸入。這個模型假定實體的位置已經(jīng)被給定,并且各實例的輸入包含一個上述的關系。[9]和[10]也研究的是同樣的模型。
在微軟的[11]和[12]研究中,能夠發(fā)現(xiàn)一個CNN在NLP中有趣的應用。這些論文描述的是如果得知那些可以被用于信息檢索的句子的語義上有意義的表示方法。論文中的例子包括,根據(jù)讀者現(xiàn)在閱讀的文章,推薦出讀者可能感興趣的文章。句子的表示方法是用基于搜索引擎的日志數(shù)據(jù)來進行訓練的。
大多數(shù)的CNN結構以用這種或者那種方式從embeddings (低維表示法) 中學習作為它們訓練過程的一部分。并非所有的論文都關注于如果訓練或者研究分析learned embeddings意義何在。[13]展示了一個CNN結構。這個結構用于預測Facebook的位置標簽,同時,產(chǎn)生有意義的單詞和句子的embeddings。這些learned embeddings隨后被成功地用于其他的問題: 以點擊流數(shù)據(jù)作為訓練集,將用戶可能產(chǎn)生潛在興趣的文章推薦給用戶。
字符級CNN(CHARACTER-LEVEL CNNS)
這個專業(yè)名詞翻譯是我自己猜的,也可能是漢字、個性之類的。
目前為止,所有模型的表示方法都是基于單詞的。但是也有將CNN應用于字符的研究。 [14] 研究了character-level embeddings,將它們和pre-trained word embeddings結合在一起,并且將CNN用于詞性標注 (Part of Speech tagging). [15][16] 研究了直接用CNN從字符中進行訓練,不需要接住任何的pre-trained embeddings。值得注意的是,作者用了一個共9層的深度神經(jīng)網(wǎng)絡,并將其用于情感分析和文本分類的作用。結果表明,在大數(shù)據(jù)的情況下,直接從字符級輸入的學習效果非常好(百萬級的例子),但是在較小的數(shù)據(jù)集上面表現(xiàn)得比較差(百條、千條例子)。 [17] 研究了字符級CNN在語言模型(Language Modeling)上面的應用,用字符級CNN的輸出作為LSTM(長期短期記憶單元)的輸入。同樣的模型可以用于多個語言。
最讓人驚奇的是上面所說的所以論文都是在最近的1-2年內發(fā)表的。非常明顯的,CNN在NLP問題上面很早就取得了很好的成績,。雖然自然語言處理(幾乎)是剛剛開始起步,但是新成果和新技術的發(fā)展步伐正在顯著加快。
[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.
評論
查看更多