天天看點

自然語言處理 | (21) 基于TextCNN的文本分類原理

目錄

1.文本分類任務介紹

2.TextCNN原理概述

3.TextCNN處理步驟

4. 拓展閱讀

1.文本分類任務介紹

文本分類是自然語言處理的一個基本任務,試圖推斷出給定文本(句子、文檔等)的标簽或标簽集合。

文本分類的應用非常廣泛,如:

  • 垃圾郵件分類:2分類問題,判斷郵件是否為垃圾郵件
  • 情感分析:2分類問題:判斷文本情感是積極還是消極;多分類問題:判斷文本情感屬于{非常消極,消極,中立,積極,非常積極}中的哪一類。
  • 新聞主題分類:判斷一段新聞屬于哪個類别,如财經、體育、娛樂等。根據類别标簽的數量,可以是2分類也可以是多分類。
  • 自動問答系統中的問句分類
  • 社群問答系統中的問題分類:多标簽多分類(對一段文本進行多分類,該文本可能有多個标簽),如知乎看山杯
  • 讓AI做法官:基于案件事實描述文本的罰金等級分類(多分類)和法條分類(多标簽多分類)
  • 判斷新聞是否為機器人所寫:2分類

不同類型的文本分類往往有不同的評價名額:

  • 2分類:accuracy,precision,recall,f1-score...
  • 多分類(單标簽多分類):Micro-Averaged-F1,Macro-Averaged-F1...
  • 多标簽多分類:Jaccard相似系數...

2.TextCNN原理概述

卷積神經網絡主要是用于解決計算機視覺方面的任務。在本篇部落格中我們将示範如何在自然語言處理任務---文本分類中使用卷積神經網絡CNN,這裡的文本可以一個句子,文檔(短文本,若幹句子)或篇章(長文本),是以每段文本的長度都不盡相同。在對文本進行分類時,我們一般會指定一個固定的輸入序列/文本長度:該長度可以是最長文本/序列的長度,此時其他所有文本/序列都要進行填充以達到該長度;該長度也可以是訓練集中所有文本/序列長度的均值,此時對于過長的文本/序列需要進行截斷,過短的文本則進行填充。總之,要使得訓練集中所有的文本/序列長度相同,該長度除之前提到的設定外,也可以是其他任意合理的數值。在測試時,也需要對測試集中的文本/序列做同樣的處理。

假設訓練集中所有文本/序列的長度統一為n,我們需要對文本進行分詞,并使用詞嵌入得到每個詞固定次元的向量表示。此時對于一段文本,我們的輸入就可以表示為一個n*d的數字矩陣,類似于圖像分類任務中的圖像。我們曾使用過CNN處理圖像分類任務,類似的,接下來我們看一下如何用CNN進行文本分類。

3.TextCNN處理步驟

TextCNN結構:

embedding--->conv--->(activation)--->max pooling--->fully connected layer-------->softmax/sigmoid

  • 首先我們要對輸入矩陣進行卷積操作。我們可以使用不同大小的卷積核,每種類型的卷積核可以有多個。假設卷積核的大小是(f,d),f可以是不同的取值(如f=2,3,4),而d是固定的,是詞向量的次元,并且假設總共使用了k個卷積核,步長為1。經過卷積操作後我們會得到k個向量,每個向量的長度是n-f+1. 我們使用不同大小的卷積核,從輸入文本中提取豐富的特征,這和n-gram特征有點相似(f=2,3,4分别對應于2-gram,3-gram-4-gram)。
  • 接下來,我們對卷積操作的輸出進行max-pooling操作。作用于k個長度為n-f+1的向量上,最每個向量整體取最大值,得到k個标量數字。
  • 然後把k個标量數字拼接起來,組成一個向量表示最後提取的特征。他的長度是固定的,取決于我們所使用的不同大小的卷積核的總數。
  • 最後在接一個全聯接層作為輸出層,如果是2分類的話使用sigmoid激活函數,多分類則使用softmax激活函數,得到模型的輸出。

下圖是TextCNN的圖示,可以直覺的反映他的操作流程:

自然語言處理 | (21) 基于TextCNN的文本分類原理

4. 拓展閱讀

  • TextCNN論文: Convolutional Neural Networks for Sentence Classification
  • 為了使用TextCNN得到一個好結果, 可以仔細的閱讀下面這篇論文 A Sensitivity Analysis of (and Practitioners' Guide to) Convolutional Neural Networks for Sentence Classification。它可以給你一些能影響任務性能的直覺和領悟,盡管你需要根據特定的任務修改一些設定。

繼續閱讀