CNN為什麼能使用在NLP?

CNN在自然語言處理的領域中的問題:在CNN處理圖像的時候,是考慮到圖像的局部信息可以共享,但是在NLP中應用的時候為什麼也可以使用呢?另外,在如果CNN的處理相當於特徵提取的話,經過CNN處理的句子提取的是什麼句子特徵嗎?


我理解,CNN就是一個超級N-Gram,而N-Gram就是考慮局部統計信息的語言模型,CNN相當於在低維向量空間中實現了它。


(稍作補充,見後)

前面有人提到了CNN和n-gram 的相關性,這個認識差不多是正確的。稍微攤開說一下。

如果我們用一個滑動窗口(比如寬度是2)滑過一個句子,那麼,我們便可以提取到句子中的所有2-gram。假設句子中的字都是用向量 x_1, x_2, ldots, x_n 表示的,那麼,如果用卷積核 (a, b) 跟這個序列卷積就得到了向量序列 ax_1+bx_2, ax_2+bx_3, ldots, ax_{n-1}+bx_n ,也就是對句子中的每個2-gram 構造了個向量表示。

不過這種向量表示真的合理嗎?構造出的向量真能表達2-gram的語義嗎?假設句子中包括這樣兩個2-gram,「吃飯」和「美麗」。有什麼理由認為「吃」和「飯」的加權方式應該跟「美「和」麗「的加權方式一樣?注意前者是動賓結構,後者是並列結構,分別對應於不同意義上的語義組合。所以這其實是卷積類的語義表達面臨的問題。 這個問題有多嚴重不太好說,因為每個詞向量 x_i 通常也跟著卷積核一起被訓練調整,在一定程度上緩解了這個問題。

解決這個問題一個最直接的辦法就是讓每個窗口裡的權重 (a, b) 隨著它見到的詞變化,這可以通過 attention 來給每個窗口生成 (a, b) 。當然,這樣做法的代價是會引入更多的參數,不如直接卷積經濟。

題外話,最近attention 有取代卷積的趨勢,變成"all you need" 的了,呵呵,也是有些道理的。 不過即使這樣,不管CNN,LSTM, 還是 attention, 目前 NLP 的這些深度模型其實還很原始。特別是對語言理解這樣的任務,俺覺得我們還沒入門。

== 以上是原來給的答案 ==

評論區的討論搬出來一些分享。

王宇:他們(不同的語義組合)可以對應不同的卷積核啊 不就很自圓其說么?

俺答案里只提到了用單個卷積核。用多個卷積核,類似於用CNN 做圖像特徵提取時用多channel,也確實可以解決上述問題。目前大家也在這麼做。至於這樣做究竟能做多好,估計也是仁者見仁吧。

Weijie Huang:有點道理吧 不過cnn用在nlp是關鍵還是多層layers之後可以獲得一個高層次的組合的多個n-gram 糾結在其中一個小層就意義不大了 當一個蛋白質表達的時候 還看鹼基atgc的話 是不是太過細節

的確多層的網路結構實現了更豐富的層級式的語意表達。俺答案里只是講了n-gram 和卷積的關係。畢竟這最底層是對句子輸入的最基本的處理,還能說出點道理。網路一深,就只能泛泛地解釋了,具體網路如何起作用就跟神經網路在其他領域的應用一樣,很難說出精確的道理了。

肖寒: 你這麼說,只是豐富地闡明了 @劉知遠 老師的說法,你能依據某一篇 CNN 做自然語言的論文,來具體闡述 CNN 是怎樣對應多碼來讓模型起效的么?如果不能用原理解釋模型,那與其說不入門,倒不如說還不懂。哈哈,期待你的補充。

實話說,俺確實不懂。深度神經網路的擬合原理目前還超出了俺腦容量能夠認識的範疇,所以也就只能在卷積這個層面瞎比劃兩下 :)

==

剛剛看到@Milky 答案里提到CNN 在NLP 上跟n-gram 的不同,俺倒是覺得兩者更本質的不同是: n-gram 是基於 symbolist 的思想,而CNN是基於 connectionist 的思想。另外 @蕭瑟 認為的卷積就是通過模式匹配來提取常出現或出現過的短語,以及相當於詞袋模型的觀點,俺不太認同,不過不展開說了。關於卷積,其實電子工程系做信號處理的同學有更深刻的認識。如果想深刻理解卷積的本質以及它為什麼可以提取特徵,還是得讀一些信號處理的經典教材,就像 @馬進 在他答案評論區里說的那樣:

馬進:可以先去了解一下卷積和傅里葉變換的意義,然後看一下基本的信號系統,了解裡面卷積的應用,差不多就能明白CNN裡面這個C到底怎麼回事兒了。


CNN應用的條件一般是要求卷積對象有局部相關性,而文本是符合這個條件的。

卷積的過程實際上是一種模式匹配的過程,在CV的人臉識別中一個卷積核匹配的可能是眼鏡或者鼻子等局部部位,而對於NLP的文本分類任務,一個卷積核匹配的則是特定的關鍵詞或關鍵短語。後面提取出來的特徵實際上就是表示句子中是否出現過這樣的關鍵詞或者關鍵短語,相當於低維空間的詞袋模型,這樣的特徵信息對文本分類任務自然是非常有用的。


特徵提取很大意義上就是在提取該數據對於當前分類要求最有用的信息。

但是general的機器學習模型,很難直接將數據之間的關聯分析出來,所以需要設計特定的模型來分析這些關聯,可以看我之前的一個回答從lasso的套路了解怎麼樣利用數據的特性設計模型,你實踐中學到的最重要的機器學習經驗是什麼? - 知乎

有答主提到了N-gram模型,其實可以這麼說,N-gram模型就是從語句中找N個詞之間的關係,把所有的訓練數據中N個詞之間的關係變成一個統計模型,然後利用這個統計模型對之後的數據進行分析。而這N個詞之間的關係,就是一個局部的N個詞之間的關係,如果N過大,用於統計的數據不夠,就會導致模型的過擬合,而N太小則會導致欠擬合。

CNN和N-gram的最大不同之處就在於

N-gram是直接統計不同的N個詞之間組合在一起的概率

CNN是通過學習得到不同片語合的每個kernel的權重,加權和來達到某種分類或者其他目的

所以在我看來,CNN的優勢在於可以自動計算出片語組合的權重,訓練得當可以有效的得到有用信息,所以在一些NLP的應用會有明顯的效果。但是反之,有些NLP的應用不需要這種片語權重組合,或者這種組合的效果沒有N-gram好,那麼就不要採用他。


來用通俗的話來解釋一下,CNN的核心是來提取local repeating feature,只要數據存在這種local repeating feature,CNN就可以用。@月光寶盒娛樂頻道 的答案里已經解釋了為什麼語言中存在這種repeating feature了,語言和圖像的唯一區別就是,語言是1D的,但是圖像是2D的,假定kernel dize是2,對1D的東西,只有2個數據點,但是2D的情況下,就有4個,所以整體來說,CNN對圖片這種2D的數據表現更好一些,可能這也是CNN在圖像上首先獲得突破的原因。同類,類似1D數據,在生物里也存在,比如DNA序列,所以2015年時候,2片很好的工作就用CNN來處理DNA序列問題,放狗搜DeepBind和DeepSEA就能搜到。

經常有人問我,這東西能用CNN處理嗎,我的回答就是,把所有input都shuffle了,如果不影響結果,就不行。比如說,把圖片的pixel shuffle了,或者把句子里的詞語shuffle了,或者把DNA序列shuffle了,就是完全不同的東西了,可以說明,這幾種數據中,local connectivity的存在。

另一個例子,給定血壓血糖血脂,判斷一個人有沒有高血壓,三個變數無論怎麼shuffle,都不影響最終的結果,所有這3個變數之間不存在local connectivity,所有就無法使用CNN


nlp裡面一個很重要的矛盾就是粒度和語意的矛盾。如果粒度過大,則太稀疏沒法玩,粒度過小則意思就不對了。

以漢語為例,句子可以切分為很多詞,但是詞和片語合之後,會產生出超出這兩個詞本身的意思。

而句子可以分成若干個有『局部語意』的小塊。

綜上,一個卷積窗口可以認為是對窗口內的詞進行組合,其輸出可以看做組合之後產生的語意向量。

通俗的說,句子的意思怎麼計算?如果只是每個詞的意思放在一起,有點太糙。卷積之後,就可以把每k個片語合之後的意思放在一起,這就不那麼糙了。k就是卷積窗口的長度!


我是被這個提問的英語語法吸引進來的

正常提問不是「CNN為什麼能在NLP中使用」嗎


首先我問一個問題:

題主覺得CNN用在圖像上提取的是什麼特徵?


補充一點:CNN的一大特性是用局部連接代替了全連接,適用於圖像是因為圖像的特徵是局部強相關的,而文本也有這樣的特性。

CNN提取的是詞的組合特徵,相當於由網路自己實現n-gram。

在CNN之前,RNN被廣泛應用於NLP領域,用於對

P(w1,w2,...,wn)=P(w1)P(w2|w1)...P(wn|w1w2...wn-1)

建模,比CNN更容易理解,即考慮在前面的詞後面接後面的詞的條件概率。但這樣的模型很依賴登入詞,對於未登入效果很不好。而CNN就很好的解決了這個問題,因為提取的是組合特徵,並不太受未登入詞的影響,因此CNN被廣泛應用於NLP領域。


每個模型都有自己的assumption,數據只有符合模型的assumption,應用該模型才會有效。就如同你生病了會找醫生,買房子會找中介一樣。

CNN的assumption是數據在二維空間上存在著局部相關性;RNN的assumption是數據在時序(更準確地說是一維空間)上存在相關性。

因為圖像的二維空間存在著局部相關性,所以CNN可以用來處理圖像問題,文本在時序上存在著相關性,一維空間是二維空間的特例,當然也可以用CNN處理。

文本和語音在時序上存在相關性,所以常常用RNN處理。而手寫體也存在著時序上的相關性,所以即使手寫體識別是圖像問題,依然可以用RNN處理。

關於特徵,其實不管是CNN還是RNN,loss function的前一層輸出都可以認為是特徵。


一段話n個詞,用k維詞向量處理下,不就變成n*m的矩陣了么,和圖片是不是神似?另外既然相似意義詞的詞向量也相似,那麼從向量的維度上看,也是存在一定結構規律的(記不清是不是wordvector,它生成的時候是由頂至下類似樹狀的結構)


沒錯,CNN本來是在圖像領域上得到廣泛驗證的。效果非常好原因之一,是可以進行組合特徵提取。

要想CNN解決NLP問題,首先就是把文本處理成「圖像」,比如用word embedding來表示詞語,維度相同;另一個就是調整下CNN的過濾器的大小,因為word embedding的跨行過濾是沒有意義的。

處理好這幾個問題,CNN完全可以處理NLP任務,像文本分類,情感分析等,實際使用效果也不錯。


推薦閱讀:

學習神經網路,需要哪些前導知識?
基於深度學習的單目圖像深度估計有哪些比較好的參考資料(書籍、博客、論文.....)?求大神指點。
Google 人工智慧引擎 TensorFlow 開源會帶來哪些影響?
如何評價Google即將發表在ICML17上的Placement Optimization的論文?
如何在沒有有效指導的情況下學習深度學習?

TAG:自然語言處理 | 深度學習DeepLearning |