基於深度學習的文本分類

曾幾何時, SVM一統江湖, Lecun見證的Vapnik和Larry Jackel的世紀之賭, 從95年堅持到2000年依然巋然不動。 但是再過10年, 到2010年, 深度學習橫空出世。 SVM在圖像,文本這些高維數據領域全面停滯。 反倒是Lecun的CNN網路一路挺進!

「基於深度學習的圖像目標檢測」提到, 在圖像分類和目標檢測領域基本全是CNN網路。 那麼文本分類領域呢?

前言

傳統機器學習時代的主流分類器主要是基於Naive Bayes,Maximum Entropy, K-NN,和SVM的。 其中分類中還有些經典特徵模型:經典距離定義模型Vector Space Model(Rocchio), N-grams等等。其中SVM一直保持不錯的效果!

一, 待選模型

本人嘗試過使用word2vec詞嵌入+Boosting和Text-CNN模型的對比, 發現效果不如Text-CNN。 或許和圖像檢測裡面一樣, Fast R-CNN比SPPNet優的一點就是整合起來聯動的參數優化。 所以這裡也默認, 利用詞嵌入這樣的2階段的模型效果不會比端到端的聯動參數學習的模型效果好。

1)Text-RNN

就是對文本看成編碼後的信息流, 然後用RNN來編碼:

復旦大學 Recurrent Neural Network for Text Classification with Multi-Task Learning發表在了ijca2016上,目前有40次引用了。 雖然著重點在Multi-Task Learning, 但是可以參考下下。

2) Text-CNN

哈佛的PhD帥哥Yoon Kim的 「Convolutional Neural Networks for Sentence Classification」 文章引用率1700多次了。已經成為文本分類中深度學習的經典!

但是在這片2014年的文章中, CNN是基於Pretrained的Word2vec的結果去做的, 其實效果還沒有完全超越SVM。

但是現在更為流行的是直接基於帶參數的Embedding去做, 這樣效果會更好!

來自University of Texas at Austin的張曄,在他2016年的文章 A Sensitivity Analysis of (and Practitioners』 Guide to) Convolutional Neural Networks for Sentence Classification, 詳細介紹了一些調參數的經驗,也有超過150的引用率, 自從調參數成為很好的職業(Amazon SageMaker啟示錄), 調參數也成為了很好的論文。

這片文章裡面給出一個單層CNN進行測試典型參數的使用:

* 詞嵌入維度: 300維, 主要針對預訓練

* Filter大小:7的filter最優,不同數據集上最優組合不一致, 但相差不多

* Filter的個數:推薦100 ~ 600個, 最好靠近600

* 激活函數:Iden, ReLU, tanh比sigmoid,cube要好, 默認ReLU好。

* Pooling技術:推薦1-max pooling,不要用average,效果不好。

* 正則化:dropout rate不要超過0.5, l2正則化效果不明確。

最後強調下, filter大小和數量可以調一調, 其他調不調意義一般。

3)EntNet

LeCun的團隊在ICLR2017上提出了Recurrent Entity Network, 簡稱為EntNet, 但是EntNet是為了QA問題提出來的, 對應論文為Tracking the World State with Recurrent Entity Networks, 有28次引用。

EntNet延續了Facebook基於Memory Network(MemNN)在QA問題上的模型和成功經驗。 MemNN相比RNN或者LSTM來說,強調專門的外部存儲來保存以前的樣本。

最簡單的Memory實現,可以是輸入數據的自己的某種特徵值的表達, 譬如和問題q的點積的Softmax輸出。

也可以變得複雜, 可以多層次迭代。

還可以更複雜, 變成KV-MemNN, 深化對問題和答案兩邊的記憶的存儲。

也可以引入Episodic Memory Module變形成Dynamic Memory Networks(DMN)。

一般通過GRU的attention網路實現,並且也可以雙向多通道。

如果加上控制網路和定址讀寫機制,就是Neural Turing Machines(NTM),所以NTM可以說是DMN的升級版。

和MemNN相比, 除了記憶狀態的延續, 還有控制狀態的延續。

在NTM基礎上細化具體的地址讀寫機制和記憶鏈接機制,就會得到Differential Neural Computer (DNC), DNC使得性能和穩定都比LSTM和MemNN好很多。

而EntNet本質就是希望達到DNC的並行模式, 能夠並行更新記憶地址。

一種簡單的實現就是用多個RNN並行來記錄多個Memory Slot, 所以又叫Recurrent Entity。

對於QA的問題, EntNet要比DNC更加穩定和準確。

當我們把QA問題弱化到A是句子的分類標籤的時候, 我們就能用到文本分類問題上, 有點點殺雞用牛刀的感覺。

4)HAN

Alex Smola的團隊提出了Hierarchical Attention Networks(HAN)做文本分類, 他們的論文Hierarchical Attention Networks for Document Classification發表在NAACL16上。 有接近200次的應用。

這樣兩層分層,就可以從字組成句子, 再進一步句子組成段落。 然後就訓練分類網路Softmax。

5)RCNN

自動化所的趙軍老師團隊的論文Recurrent Convolutional Neural Networks(RCNN) for Text Classification, 發表在AAAI2015上, 有超過200次的引用。

通過Recurrent的思想, 定義了left context和right context模型。

然後基於拼接操作得到輸入, 然後利用tanh激活得到隱藏層的y。

其實仔細觀察很想雙向RNN的功能。

6)Dynamic Memory Networks

斯坦福Manning組的博士Richard Socher,畢業後成立了 MetaMind公司, 做了CEO的Richard Socher帶領團隊里的Ankit Kumar 在ICML2016上發表了基於DMN來做QA的論文Ask Me Anything: Dynamic Memory Networks for Natural Language Processing, 這麼牛掰的名字擁有300的引用量。

後來, 他們又提出了DMN+模型, Dynamic Memory Networks for Visual and Textual Question Answering。 引入雙向GRU作為句子間的融合。

再增加了雙通道

還進一步, 把第二層Attention採用GRU來實現。

改進後的DMN+比DMN效果更佳!但是相對也更為複雜了。

前面我們談到EntNet可以看成DMN+的改進版。 但是在具體實現上, 我們看到DMN的結構要比EntNet結構複雜。 而這種複雜性也會帶來計算上的時間開銷。

7)FastText

Tomas Mikolov所在團隊在EACL2017上提出了FastText, Bag of Tricks for Efficient Text Classification, 開啟了高效基於embedding的分類模型, 已有200多引用。

CNN跑一天, 他只要幾秒鐘。 還是非常誘惑的!

一般採用2-gram 或者 3-gram, 這樣把句子轉化n-gram的特徵.

很明顯的是更小單位的劃分,對於未知辭彙和縮率詞會有幫助,所以相比較的也是對於字元的CNN。 後面計算的時候,會採用Softmax的近似計算, 譬如分成Softmax或者NCE,NS等等。

用在分類問題的時候, 再加上Softmax分類器, 基本上就是一個線性的BoW分類器:

就會得到如下的訓練目標公式。

8)Seq2Seq

對於Seq2Seq模型,在「深度神經網路機器翻譯」裡面有詳細的解讀。

基於Seq2Seq可以實現QA系統, 所以類似的用來分類也是用了牛刀的感覺。

阿里巴巴在ACL2017上有篇問題中AliMe Chat: A Sequence to Sequence and Rerank based Chatbot Engine, 談論chatbot的,可以參考下下。

二, 模型選擇

1)CNN vs RNN的考量

IBM的文章Comparative Study of CNN and RNN for Natural Language Processing有個簡單比較CNN和RNN。

基本上的結論就是RNN不見得有CNN效果好, 但是Bi-RNN效果還是要好有點。

另外在github.com/brightmart/t 裡面提到一般來說RNN在分類上,訓練時間要長於CNN。

所以,綜合考慮效果和時間的話,所以建議還是採用Text-CNN

2)時間 vs 效果的考慮

依然根據github上的實踐, 牛刀模型EntNet和HAN的效果還是可以的, 而且時間也和Text-CNN接近。

從模型應用到文本分類上來說:

1. EntNet和DMN是看成一個類似模型分組

2. Bi-RNN和Seq2Seq可以看成一個類似模型分組

3. RCNN上下文的效果應該和Bi-RNN類似

4. HAN應該和各種Attention模型一個類似模型分組

這樣代表來說, Text-CNN, Text-Bi-RNN, EntNet和HAN可以分別為卷積,上下文, 存儲記憶和注意力機制的代表了

所以簡單來說, 追求極速, 先用fasttext分類試試, 然後想提升效果了,就要考慮Text-CNN, Text-Bi-RNN, EntNet和HAN了。

其他考量

強化學習RL用在QA或者優化深度網路上也有工作可以關注。

譬如Choi的 Coarse-to-Fine Question Answering for Long Documents工作發表在ACL2017上。 其中RL對於探索長文檔上起了一定作用。

但是要看到和Attention機制相比, 效果有所提升, 但是時間開銷也很大。

小結

文本分類在深度學習的時代逃過了特徵提取類似距離的定義的過程, 但是依然逃不了模型的選擇, 參數的優化,編碼和預處理的考量(one-hot, n-gram等等) ,以及時間的平衡。

概況說來,主要有5大類模型:

  1. 詞嵌入向量化:word2vec, FastText等等
  2. 卷積神經網路特徵提取:Text-CNN, Char-CNN等等
  3. 上下文機制:Text-RNN, BiRNN, RCNN等等
  4. 記憶存儲機制:EntNet, DMN等等
  5. 注意力機制:HAN等等

希望這裡列舉的模型和解釋,稍微有所幫助。

參考:

plus.google.com/+YannLe

github.com/brightmart/t

github.com/fendouai/Awe

github.com/brightmart/t


推薦閱讀:

TAG:深度學習DeepLearning | 文本分類 | 機器學習 |