目錄
1.文本分類任務介紹
2.RCNN原理概述
3.RCNN模型處理步驟
4.RCNN小結
1.文本分類任務介紹
文本分類是自然語言處理的一個基本任務,試圖推斷出給定文本(句子、文檔等)的标簽或标簽集合。
文本分類的應用非常廣泛,如:
- 垃圾郵件分類:2分類問題,判斷郵件是否為垃圾郵件
- 情感分析:2分類問題:判斷文本情感是積極還是消極;多分類問題:判斷文本情感屬于{非常消極,消極,中立,積極,非常積極}中的哪一類。
- 新聞主題分類:判斷一段新聞屬于哪個類别,如财經、體育、娛樂等。根據類别标簽的數量,可以是2分類也可以是多分類。
- 自動問答系統中的問句分類
- 社群問答系統中的問題分類:多标簽多分類(對一段文本進行多分類,該文本可能有多個标簽),如知乎看山杯
- 讓AI做法官:基于案件事實描述文本的罰金等級分類(多分類)和法條分類(多标簽多分類)
- 判斷新聞是否為機器人所寫:2分類
不同類型的文本分類往往有不同的評價名額:
- 2分類:accuracy,precision,recall,f1-score...
- 多分類(單标簽多分類):Micro-Averaged-F1,Macro-Averaged-F1...
- 多标簽多分類:Jaccard相似系數...
2.RCNN原理概述
在之前的部落格中,我們學習了基于CNN和RNN的文本分類原理。RCNN是一種結合了RNN和CNN的模型用于文本分類。
這裡的文本可以一個句子,文檔(短文本,若幹句子)或篇章(長文本),是以每段文本的長度都不盡相同。在對文本進行分類時,我們一般會指定一個固定的輸入序列/文本長度:該長度可以是最長文本/序列的長度,此時其他所有文本/序列都要進行填充以達到該長度;該長度也可以是訓練集中所有文本/序列長度的均值,此時對于過長的文本/序列需要進行截斷,過短的文本則進行填充。總之,要使得訓練集中所有的文本/序列長度相同,該長度除之前提到的設定外,也可以是其他任意合理的數值。在測試時,也需要對測試集中的文本/序列做同樣的處理。
假設訓練集中所有文本/序列的長度統一為n,我們需要對文本進行分詞,并使用詞嵌入得到每個詞固定次元的向量表示。在RCNN中,我們不僅要考慮每個詞的詞向量還要考慮該詞上下文的向量表示,三者共同構成該詞最終的嵌入表示,作為CNN卷積層的輸入。接下來我們具體如何操作。
3.RCNN模型處理步驟
- RCNN模型圖解
上圖中中間是輸入序列中每個單詞的嵌入表示,左右使用雙向RNN分别學習目前詞
的左上下文表示
和右上下文表示
,在與目前詞
本身的詞向量連接配接,構成後續卷積層的輸入
。具體如下:
與TextCNN比較類似,都是把文本表示為一個嵌入矩陣,再進行卷積操作。不同的是TextCNN中的文本嵌入矩陣每一行隻是文本中一個詞的向量表示,而在RCNN中,文本嵌入矩陣的每一行是目前詞的詞向量以及上下文嵌入表示的拼接。
例如:上圖中的along這一個單詞,中間是他的詞向量,左邊利用一個RNN得到along之前上文所有單詞的嵌入表示(目前時間步驟上RNN的隐藏狀态),右邊同樣利用一個反向的RNN得到along之後所有單詞的嵌入表示(目前時間步驟上RNN的隐藏狀态)。三者共同構成along的嵌入表示,文本中的其他詞同理。最後文本被表示為上圖左邊的一個嵌入矩陣。
然後将
作為目前詞
的嵌入表示,輸入到卷積核大小為1*d(d為
的長度)激活函數為tanh的卷積層,得到
潛在的語義向量:
在TextCNN中我們曾經設定了多個卷積核f*d,RCNN中将卷積核大小設定為1*d的原因是
中已經包含了
左右上下文的資訊,無需再使用視窗大于1的卷積核進行特征提取。需要說明的是,實踐中依然可以同時使用多個不同大小的卷積核,如[1,2,3],可能會取得更好的實踐效果,一種解釋是視窗大于1的卷積核強化了
左右最近的上下文資訊。此外實踐中一般使用更複雜的RNN來捕捉
的上下文資訊,如LSTM和GRU等。
再經過卷積層以後,獲得了文本中所有詞的語義表示
,然後經過一個max-pooling層和softmax層(輸出層使用softmax激活函數)進行分類:
4.RCNN小結
- 在RCNN論文的所有實驗上,神經網絡比傳統方法效果好
- 基于CNN的方法比基于RNN的方法好
- RCNN可以捕獲更長的模式
- 在RCNN論文的使用實驗資料集上,RCNN比CNN好
- CNN使用固定詞視窗(捕獲上下文資訊),實驗結果受視窗大小的影響;RCNN使用循環結構捕獲廣泛的上下文資訊。
但是在實際應用中,CNN的效果已經足夠好了,RCNN未必能有比CNN更好的效果,而且CNN的訓練速度更快,可以嘗試多種方法,找一個效果最好的。