深度學習演算法哪些適用於文本處理?

初涉深度學習,需要做一些文本數據的處理,哪種演算法會更好一些,感覺CNN和DBN之流主要都是圖像和語音識別,不知道文字處理會怎麼樣?向各位請教


文本並不像圖像那樣有天然的格子結構,它更傾向於多個詞構成序列來組成句子,以及多個句子構成序列組成一個段落。因此基於序列的模型諸如 recurrent neural network, LSTM 等比較適合。

如果是考慮使用 Stanford Parser 這樣的句法樹來生成句子表示,可以使用 recursive neural network 或者 tree-structure RNN/LSTM.

而具體到各種文本的任務諸如情感/詞性分類,機器翻譯或者 語言生成模型,常見的模式有下面幾種:

使用 RNN/LSTM 等去 model 一個詞序列組成的句子,從最後一個詞得出的隱狀態來表示整個句子的信息,然後用 softmax 可以做分類任務。

如果是機器翻譯任務,則是訓練兩個 RNN/LSTM, 一個作為 encoder, 另一個做 decoder。大體思想是根據編碼好的源語料的句子表示,在解碼時,每次根據上次出現的詞來預測接下來會出現的詞概率分布,然後每次都取那個概率最大的詞作為翻譯出的當前詞,最後直到預測出了停止符(句號)為止。根據已有的大量預料去訓練這樣一個 encoder-decoder, 就可以得到一個翻譯模型。

語言生成的方法與上文類似。

根據需要,再去添加 Bi-RNN/LSTM, stack-LSTM, 以及取每次產生的隱狀態均值作為句子表示,或者加入 attention-based model 等改進方法。

還有一個用CNN來通過已有的詞向量生成句子向量的方法, http://emnlp2014.org/papers/pdf/EMNLP2014181.pdf 不過效果沒有 LSTM 那麼好,就不詳細說了。


現在實踐證明,對supervised-learning而言,效果較好的應該算是Recurrent Neural Network (RNN)吧,目前比較火的一類RNN是LSTM -- Long Short Term Memory。

對於這個model而言,最初的發明見於論文--Long Short Term Memory by Hochreiter and Schmidhuber,而之後較好的歸納和實現可以參考Frame Phoneme Classification with Bidirectional LSTM by Alex Graves,後者有比較清晰的back propagation的公式。

最近兩年這個model在speech,language以及multimodal with vision等方面可謂是大展宏圖,一再的刷新實驗結果,重要工作可以參考:

Speech recognition with Deep Recurrent Neural Networks by Graves

Sequence to Sequence Learning with Neural Networks by Sutskever

Show Attend and Tell by Kelvin Xu

至於具體的實現,希望避免造輪子的可以參考這個非常famous的github:karpathy (Andrej) · GitHub,Andrej Karpathy最近發了很多很有趣的RNN的fun project,可以borrow一些代碼。

希望自己造輪子的,可以選擇用Theano或者Torch,用畫data flow的方法來code整個structure,很簡潔實用,我個人一直用Theano,給個好評。:)

當然啦,至於你要研究什麼問題,還是具體問題具體分析的好。可以去搜搜有沒有研究類似問題的paper,看看目前的最好的技術是什麼。Deep Learning不一定是萬能的啦。



任何一個廣受推崇的模型通常不會僅僅局限於處理某一類具體問題。

CNN的確成名於圖像識別,RNN也的確成名於語言識別。

但為什麼這些模型可以成功應用在上述的領域?

(個人的一些粗淺觀點)

CNN的局部感知,其卷積核可以發現特定的Pattern。局部Pattern的組合可以在上層構建更加「高級」的Pattern。我們相信,任何複雜的圖像都是由簡單的特定模式(例如邊緣、色彩、灰度等)構成,那麼我們就需要來尋找這種模式。

但我們很難估計,究竟是10層的模型,還是20層的模型會有更好的識別效果。

RNN的時序特性,天然利於語音的時序建模。HMM-GMM過去的成功,證明了語音信號時序的重要性,那麼RNN的成功則多少有其必然性。但也不可否認RNN的強時間序列性,也或許是模型本身的局限。

而Auto Encoder和DBN,則更像是在進行重構輸入,以尋找新的輸入表達。Auto Encoder強調對輸入本身的重構,而DBN強調對輸入分布的重構。

所以,通常我們認為,深度學習避免了特徵工程。或者說,深度學習模型是在尋找信息的特徵,以及進行特徵的組合。

那麼我們回過頭來談文本。

對應不同的文本任務,來尋找任務與模型的相似度,儘可能應用現有的先驗知識,來構建方案,才能篩選出相對合適的模型。

總體而言,我認為文本信息是信號的一種表現形式,而所有的深度學習模型都可以應用在各類信號裡面。


樓主可以參考參考阿里的實踐:

鏈接:阿里巴巴吳煒:深度學習原理和在自然語言處理上的應用

還有這篇:深度學習:推動NLP領域發展的新引擎


關於CNN在NLP中的應用總結,可以看下這篇博客

卷積神經網路CNN在自然語言處理中的應用

一般來講,CNN在nlp中的應用,由於文本的不定長問題,通常採用單層模型和max-pooling來解決。這更符合關鍵詞的概念。

如何進行多層分析?有沒有必要進行深層處理?仁者見仁,期待更好的實驗結果。


Manning大神寫的概覽.

http://nlp.stanford.edu/courses/NAACL2013/NAACL2013-Socher-Manning-DeepLearning.pdf


RNN CNN 都有例子。 但是具體用什麼需要根據任務來決定啦, 有的時候完全不適合用呢。

w2v這種其實感覺跟深度學習已經不是很有關係了。

PS,小任務還是直接上模板吧, 簡單、粗暴、有效, 一般任務兩三天就能搞完。


推薦閱讀:

什麼是圖像分類的Top-5錯誤率?
自動控制、機器人、人工智慧等領域有哪些值得引進「影印版」的專業書籍?
聚類和協同過濾是什麼關係?
主題模型(topic model)到底還有沒有用,該怎麼用?
bp演算法中為什麼會產生梯度消失?

TAG:機器學習 | 自然語言處理 | 神經網路 | 深度學習DeepLearning |