轉帖|實施案例|編輯:龔雪|2017-03-28 17:47:43.000|閱讀 6480 次
概述:用深度學習(CNN RNN Attention)解決大規模文本分類問題 - 綜述和實踐
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
案例分享|用深度學習(CNN RNN Attention)解決大規模文本分類問題 (一)
詞向量解決了文本表示的問題,該部分介紹的文本分類模型則是利用CNN/RNN等深度學習網絡及其變體解決自動特征提取(即特征表達)的問題。
fastText fastText
是上文提到的 word2vec 作者 Mikolov 轉戰 Facebook 后16年7月剛發表的一篇論文 Bag of Tricks for Efficient Text Classification。把 fastText 放在此處并非因為它是文本分類的主流做法,而是它極致簡單,模型圖見下:
原理是把句子中所有的詞向量進行平均(某種意義上可以理解為只有一個avg pooling特殊CNN),然后直接接 softmax 層。其實文章也加入了一些 n-gram 特征的 trick 來捕獲局部序列信息。文章倒沒太多信息量,算是“水文”吧,帶來的思考是文本分類問題是有一些“線性”問題的部分[from項亮],也就是說不必做過多的非線性轉換、特征組合即可捕獲很多分類信息,因此有些任務即便簡單的模型便可以搞定了。
TextCNN
本篇文章的題圖選用的就是14年這篇文章提出的TextCNN的結構(見下圖)。fastText 中的網絡結果是完全沒有考慮詞序信息的,而它用的 n-gram 特征 trick 恰恰說明了局部序列信息的重要意義。卷積神經網絡(CNN Convolutional Neural Network)最初在圖像領域取得了巨大成功,CNN原理就不講了,核心點在于可以捕捉局部相關性,具體到文本分類任務中可以利用CNN來提取句子中類似 n-gram 的關鍵信息。
TextCNN的詳細過程原理圖見下:
TextCNN詳細過程:第一層是圖中最左邊的7乘5的句子矩陣,每行是詞向量,維度=5,這個可以類比為圖像中的原始像素點了。然后經過有 filter_size=(2,3,4) 的一維卷積層,每個filter_size 有兩個輸出 channel。第三層是一個1-max pooling層,這樣不同長度句子經過pooling層之后都能變成定長的表示了,最后接一層全連接的 softmax 層,輸出每個類別的概率。
特征:這里的特征就是詞向量,有靜態(static)和非靜態(non-static)方式。static方式采用比如word2vec預訓練的詞向量,訓練過程不更新詞向量,實質上屬于遷移學習了,特別是數據量比較小的情況下,采用靜態的詞向量往往效果不錯。non-static則是在訓練過程中更新詞向量。推薦的方式是 non-static 中的 fine-tunning方式,它是以預訓練(pre-train)的word2vec向量初始化詞向量,訓練過程中調整詞向量,能加速收斂,當然如果有充足的訓練數據和資源,直接隨機初始化詞向量效果也是可以的。
通道(Channels):圖像中可以利用 (R, G, B) 作為不同channel,而文本的輸入的channel通常是不同方式的embedding方式(比如 word2vec或Glove),實踐中也有利用靜態詞向量和fine-tunning詞向量作為不同channel的做法。
一維卷積(conv-1d):圖像是二維數據,經過詞向量表達的文本為一維數據,因此在TextCNN卷積用的是一維卷積。一維卷積帶來的問題是需要設計通過不同 filter_size 的 filter 獲取不同寬度的視野。
Pooling層:利用CNN解決文本分類問題的文章還是很多的,比如這篇 A Convolutional Neural Network for Modelling Sentences 最有意思的輸入是在 pooling 改成 (dynamic) k-max pooling ,pooling階段保留 k 個最大的信息,保留了全局的序列信息。比如在情感分析場景,舉個例子:
“ 我覺得這個地方景色還不錯,但是人也實在太多了 ”
雖然前半部分體現情感是正向的,全局文本表達的是偏負面的情感,利用 k-max pooling能夠很好捕捉這類信息。
TextRNN
盡管TextCNN能夠在很多任務里面能有不錯的表現,但CNN有個最大問題是固定 filter_size 的視野,一方面無法建模更長的序列信息,另一方面 filter_size 的超參調節也很繁瑣。CNN本質是做文本的特征表達工作,而自然語言處理中更常用的是遞歸神經網絡(RNN, Recurrent Neural Network),能夠更好的表達上下文信息。具體在文本分類任務中,Bi-directional RNN(實際使用的是雙向LSTM)從某種意義上可以理解為可以捕獲變長且雙向的的 “n-gram” 信息。
雙向LSTM算是在自然語言處理領域非常一個標配網絡了,在序列標注/命名體識別/seq2seq模型等很多場景都有應用,下圖是Bi-LSTM用于分類問題的網絡結構原理示意圖,黃色的節點分別是前向和后向RNN的輸出,示例中的是利用最后一個詞的結果直接接全連接層softmax輸出了。
TextRNN + Attention
CNN和RNN用在文本分類任務中盡管效果顯著,但都有一個不足的地方就是不夠直觀,可解釋性不好,特別是在分析badcase時候感受尤其深刻。而注意力(Attention)機制是自然語言處理領域一個常用的建模長時間記憶機制,能夠很直觀的給出每個詞對結果的貢獻,基本成了Seq2Seq模型的標配了。實際上文本分類從某種意義上也可以理解為一種特殊的Seq2Seq,所以考慮把Attention機制引入近來,研究了下學術界果然有類似做法。
Attention機制介紹: 詳細介紹Attention恐怕需要一小篇文章的篇幅,感興趣的可參考14年這篇paper NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE。
以機器翻譯為例簡單介紹下,下圖中 xt 是源語言的一個詞,yt是目標語言的一個詞,機器翻譯的任務就是給定源序列得到目標序列。翻譯t的過程產生取決于上一個詞 yt-1 和源語言的詞的表示 hj(xj的 bi-RNN 模型的表示),而每個詞所占的權重是不一樣的。比如源語言是中文 “我 / 是 / 中國人” 目標語言 “i / am / Chinese”,翻譯出“Chinese”時候顯然取決于“中國人”,而與“我 / 是”基本無關。下圖公式, αij 則是翻譯英文第 i 個詞時,中文第 j 個詞的貢獻,也就是注意力。顯然在翻譯“Chinese”時,“中國人”的注意力值非常大。
Attention的核心point是在翻譯每個目標詞(或 預測商品標題文本所屬類別)所用的上下文是不同的,這樣的考慮顯然是更合理的。
TextRNN + Attention 模型:
我們參考了這篇文章 Hierarchical Attention Networks for Document Classification,下圖是模型的網絡結構圖,它一方面用層次化的結構保留了文檔的結構,另一方面在word-level和sentence-level。淘寶標題場景只需要 word-level 這一層的 Attention 即可。
加入Attention之后最大的好處自然是能夠直觀的解釋各個句子和詞對分類類別的重要性。
TextRCNN(TextRNN + CNN)
我們參考的是中科院15年發表在AAAI上的這篇文章 Recurrent Convolutional Neural Networks for Text Classification 的結構:
利用前向和后向RNN得到每個詞的前向和后向上下文的表示:
這樣詞的表示就變成詞向量和前向后向上下文向量concat起來的形式了,即:
最后再接跟TextCNN相同卷積層,pooling層即可,唯一不同的是卷積層 filter_size = 1就可以了,不再需要更大 filter_size 獲得更大視野,這里詞的表示也可以只用雙向RNN輸出。
更多行業資訊,更新鮮的技術動態,盡在。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn