當前位置:
首頁 > 科技 > 一文綜述經典的深度文本分類方法

一文綜述經典的深度文本分類方法

作者 | 何從慶

轉載自AI演算法之心(ID:AIHeartForYou)

筆者整理最近幾年比較經典的深度文本分類方法,希望幫助小夥伴們了解深度學習在文本分類中的應用。

Convolutional Neural Networks for Sentence Classification (EMNLP 2014)

Kim在EMNLP2014提出的TextCNN方法,在多個數據集上取得了很好的效果。由於其計算速度快以及可並行性,在產業界得到了廣泛使用。TextCNN的模型示意圖如下圖所示。

TextCNN模型首先將文本映射成向量,然後利用多個濾波器來捕捉文本的局部語義信息,接著使用最大池化,捕捉最重要的特徵。最近將這些特徵輸入到全連接層,得到標籤的概率分布。

代碼參考:

1) https://github.com/alexander-rakhlin/CNN-for-Sentence-Classification-in-Keras

2) https://github.com/brightmart/text_classification

Document Modeling with Gated Recurrent Neural Network for Sentiment Classification (EMNLP 2015)

Tang等人提出了一種利用GRU對文檔進行建模的情感分類模型。模型如下圖所示。

該模型首先將文本映射為向量,然後利用CNN/LSTM(論文中使用3個濾波器的CNN)進行句子表示。另外,為了捕獲句子的全局語義表徵,將其輸送給平均池化層,再接入tanh激活函數。最後將整個句子的不同寬度卷積核的向量表示接入一個Average層,從而得到句子平均向量表示。

然後將得到的句子表示,輸入到GRU中,得到文檔向量表示。最後將文檔向量輸送給softmax層,得到標籤的概率分布。

Recurrent Convolutional Neural Networks for Text Classification (AAAI 2015)

Lai等人提出了一種無人工特徵的循環卷積神經網路分類方法,簡稱RCNN。

RCNN首先利用Bi-RNN來捕捉前後的上下文表徵,然後將其concat起來,接著使用濾波器filter_size=1的卷積層,並使用最大池化操作得到與文檔最相關的向量表徵,最後將這些向量輸入到softmax層,得到標籤的概率表徵。

代碼參考:

1) https://github.com/roomylee/rcnn-text-classification

2) https://github.com/brightmart/text_classification

Recurrent Neural Network for Text Classification with Multi-Task Learning (IJCAI 2016)

Liu等人針對文本多分類任務,提出了基於RNN的三種不同的共享信息機制對具有特定任務和文本進行建模。

模型1(Uniform-Layer Architecture):所有任務共享同一個LSTM層,並在每個特定任務後面拼接一個隨機生成可訓練的向量。LSTM層的最後一個時刻的隱藏層作為輸入傳入到softmax層。

模型2(Coupled-Layer Architecture): 每個任務具有自己獨立的LSTM層,但是每一時刻所有任務的hidden state則會和下一時刻的character一起作為輸入,最後一個時刻的hidden state進行分類。

模型3(Shared-Layer Architecture):除了一個共享的BI-LSTM層用於獲取共享信息,每個任務有自己獨立的LSTM層,LSTM的輸入包括每一時刻的character和BI-LSTM的hidden state。

Hierarchical Attention Networks for Document Classification (NAACL 2016)

Yang等人提出了一種用於文檔分類的層次注意力機制網路,簡稱HAN。這篇文章和Tang等人都是針對於文檔分類的問題,然而,這篇文章在句子級別以及文檔級別提出了注意力機制,使得模型在構建文檔時是能夠賦予重要內容不同的權重,同時,也可以緩解RNN在捕捉文檔的序列信息產生的梯度消失問題。HAN模型的模型示意圖如下所示。

HAN模型首先利用Bi-GRU捕捉單詞級別的上下文信息。由於句子中的每個單詞對於句子表示並不是同等的貢獻,因此,作者引入注意力機制來提取對句子表示有重要意義的辭彙,並將這些信息辭彙的表徵聚合起來形成句子向量。具體的注意力機制的原理可以參考:

FEED-FORWARD NETWORKS WITH ATTENTION CAN SOLVE SOME LONG-TERM MEMORY PROBLEMS

然後,對於所有的句子向量輸入到Bi-GRU中,捕捉句子級別的上下文信息,得到文檔向量。同樣地,為了獎勵對文檔進行正確分類的線索句,作者再次使用注意力機制,來衡量句子的重要性,得到文檔向量。最後將文檔向量均輸入到softmax層,得到標籤的概率分布。

代碼參考:

1) https://github.com/richliao/textClassifier

2) https://github.com/brightmart/text_classification

Bag of Tricks for Efficient Text Classification (EACL 2017)

Joulin等人提出了一種簡單而又有效的文本分類模型,簡稱fastText。

fastText模型輸入一個詞序列(一段文本或者一句話),序列中的詞與片語成特徵向量,然後特徵向量通過線性變換映射到中間層,中間層再映射到標籤。輸出這個詞序列屬於不同類別的概率。其中fastText在預測標籤是使用了非線性激活函數,但在中間層不使用非線性激活函數。

代碼參考:

1) https://github.com/facebookresearch/fastText

2) https://radimrehurek.com/gensim/models/fasttext.html

Deep Pyramid Convolutional Neural Networks for Text Categorization (ACL 2017)

Johnson 和Zhang 提出了一種單詞級別的深層CNN模型,來捕捉文本的全局語義表徵,該模型在不增加太多的計算開銷的情況下,通過增加網路深度可以獲得最佳的性能,簡稱DPCNN。模型結構示意圖如下所示。

DPCNN模型首先利用「text region embedding」,將常用的word embedding 推廣到包含一個或多個單詞的文本區域的embedding,類似於增加一層卷積神經網路。

然後是卷積快的疊加(兩個卷積層和一個shortcut連接,其中shortcut連接類似於殘差連接),與步長為2的最大池化層進行下採樣。最後使用一個最大池化層,得到每個文檔的文檔向量。

代碼參考:

https://github.com/Cheneng/DPCNN

Using millions of emoji occurrences to learn any-domain representations for detecting sentiment, emotion and sarcasm (EMNLP 2017)

Felbo等人使用數以百萬計的表情符號來學習任何領域的表情符號來檢測情緒、情緒和諷刺,提出了DeepMoji模型,並取得了具有競爭性的效果。同時,DeepMoji模型在文本分類任務上也可以取得不錯的結果。

DeepMoji模型首先使用embedding層將單詞映射成向量,並將每個embedding維度使用雙正切函數映射到[-1,1]。然後,作者使用兩層的Bi-LSTM捕捉上下文特徵。接著作者提出了一種新的注意力機制,分別將embeddding層以及2層的Bi-LSTM作為輸入,得到文檔的向量表徵。最後,將向量輸入到softmax層,得到標籤的概率分布。

代碼參考:

https://github.com/bfelbo/DeepMoji

Investigating Capsule Networks with Dynamic Routing for Text Classification (EMNLP 2018)

Zhao等人提出了一種基於膠囊網路的文本分類模型,並改進了Sabour等人提出的動態路由,提出了三種穩定動態路由。模型如下所示:

該模型首先利用標準的卷積網路,通過多個卷積濾波器提取句子的局部語義表徵。然後將CNN的標量輸出替換為向量輸出膠囊,從而構建Primary Capsule層。接著輸入到作者提出的改進的動態路由(共享機制的動態路由和非共享機制的動態路由),得到卷積膠囊層。最後將卷積膠囊層的膠囊壓平,送入到全連接膠囊層,每個膠囊表示屬於每個類別的概率。

代碼參考:

https://github.com/andyweizhao/capsule_text_classification.

Sentiment Analysis by Capsules (WWW 2018)

Wang等人提出了一種用於情感分類的RNN膠囊網路模型,簡稱RNN-Capsule。(這篇文章在可視化方面做的還是不錯的)模型結構示意圖如下所示。

RNN-Capsule首先使用RNN捕捉文本上下文信息,然後將其輸入到capsule結構中,該capsule結構一共由三部分組成:representation module, probability module,和reconstruction module。具體地,首先用注意力機制計算capsule 表徵;然後用capsule表徵計算capsule狀態的概率;最後用capsule表徵以及capsule狀態概率重構實例的表徵。

Graph Convolutional Networks for Text Classification (AAAI 2019)

Yao等人提出了一種基於graph convolutional networks(GCN)進行文本分類。作者構建了一個包含word節點和document節點的大型異構文本圖,顯式地對全局word利用co-occurrence信息進行建模,然後將文本分類問題看作是node分類問題。

代碼參考:

https://github.com/yao8839836/text_gcn

BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (NAACL 2019)

Google提出的BERT模型,突破了靜態詞向量無法解決一詞多義的問題。BERT是基於語言模型的動態詞向量,在自然語言處理的多項任務中取得了最優秀的結果。筆者對BERT模型進行微調,在文本分類的多個領域,諸如法律、情感等,取得了非常有競爭性的性能。

BERT的模型架構是一個多層的雙向Transformer編碼器(Transformer的原理及細節可以參考 Attention is all you need)。作者採用兩套參數分別生成BERTBASE模型和BERTLARGE模型(細節描述可以參考原論文),所有下游任務可以在這兩套模型進行微調。

代碼參考:

https://github.com/google-research/bert

(*本文為 AI科技大本營轉載文章,轉載請聯繫原作者)

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI科技大本營 的精彩文章:

Python處理文件系統的10種方法
谷歌開源新模型EfficientNet,或成計算機視覺任務新基礎

TAG:AI科技大本營 |