基於卷積神經網路的中文文本分類
最近工作中一直在用基於CNN的文本分類模型,可平時太忙沒時間總結,藉此機會把最近的學習經驗再梳理一遍。
自然語言處理(NLP)技術已經不斷滲透並應用於互聯網垂直領域,在諸如文本分類、實體識別、問答系統、翻譯系統中扮演著重要角色。深度學習處理自然語言任務可以避免傳統演算法對特徵是重度依賴性,準確度也更高,近來頗受重視。作為深度學習領域兩大陣營的CNN和RNN各具特色,一般來說CNN適用於空間任務(如圖像),RNN適用於時序任務(如語音),自然語言處理任務一般以文本的形式出現,所以使用RNN較為自然,但有學者做了對比試驗發現CNN在一些任務上的表現要比RNN更為出色[1]。
經對比發現CNN在文本分類上表現良好,又因為RNN模型的訓練時間普遍較長,所以使用CNN做文本分類是更明智的選擇。用卷積網路做文本分類最著名的模型就是TextCNN[2]. 此模型簡單、高效、又能獲得很高的準確率,模型結構如下。
1.數據處理
1.1分詞
比如「這個地方景色不錯,但人也實在太多了」分詞之後的結果為"這個,地方,景色,不錯, ,但,人,也,實在,太多,了"。
對於中文文本分類,詞粒度遠好於字粒度。
1.2 Word Embedding.
分詞之後,建立辭彙表,每一個詞可用索引數字化為one-hot向量,但這樣辭彙變數維度與辭彙量相等,這顯然太高且太稀疏了。Word Embedding可以將辭彙向量化為較小的固定的維度,起到降維作用。目前最常用的就是Word2Vec方法,這一步可以單獨訓練也可以在分類訓練過程中不斷優化。
2.卷積
經過Embedding的一個句子實際上形成了一個矩陣,比如「這個,地方,景色,不錯」可轉化為4xn的矩陣,n為Embedding size. 與圖像處理的二維卷積不同,文本處理使用一維卷積,因為矩陣的每一行代表一個分詞,截斷分詞沒有數學意義,故卷積filter的長度恆等於n.
一維卷積需要多個寬度的filter來獲得不同的感受野,如上圖右側方框分別是1xn,2xn,3xn的filter.
3.池化
採用MaxPooling,選取卷積結果計算後的最強特徵。池化可自適應輸入寬度從而將不同長度的輸入轉化為統一長度的輸出。
4.全連接、分類
經池化後的數據按深度方向拼接成一個向量後提供給全連接層,經softmax激活後輸出最終結果。
Ref:
[1] https://arxiv.org/abs/1702.01923
[2] https://arxiv.org/abs/1408.5882
TAG:銳眼出版社 |