《Character-level Convolutional Networks for Text Classification》
Character-level Convolutional Networks for Text Classification
概述:驗證使用字元級的CNN進行文字分類任務的可能性
筆記:
1.文字分類是個nlp經典問題,從人工標註特徵到選擇最好的機器學習分類器,目前,幾乎所有的文字分類都是基於詞的(截止2016年4月)。
2.後來人們發現cnn對於原始資料提取特徵很有用,就從cv到語音識別都開始用cnn,有種叫time-delay的網路,和後來的cnn本質相同,用來對序列資料建模。
3.本文構造了幾個大資料集,用一個文字分類任務舉例,提供了一套廣泛的對比。
4.char cnn不僅可以不依靠句法資訊和語義資訊,甚至連詞的資訊都不需要。十分方便工程實現,因為不管幹什麼語言都是最終以字元為單位的,還有一個好處就是對於拼寫錯誤和特殊符號表情等有更好的魯棒性。
5.本文中max-pooling可以使cnn達到6層,其他層都失敗了,論文A theoretical analysis of feature pooling in visual recognition.對池化的一些原理進行了解釋。
6.文中的非線性單元用的是整流器或者閾值函式max{0,x},類似於Relu。使用batch為128的隨機梯度下降,學習率為0.01動量為0.9每三個epoch減半10次……,使用Torch 7 框架實現。
7.和wordEmbedding不同,輸入由根據語言事先指定size為m的編碼表編碼,每個字元會轉為由這個size為m的編碼表編碼的土製one-hot向量。前向順序向量化整個句子,方便fullyconnect的時候關聯上一個最近的讀取。本文中的字母表size為70,26英文字母,10個數字,33個特殊字元。
8.本文還對不同字母表進行了建模,也有區分大小寫的操作。
9.本文建立2個結構,一個Large的一個Small的。都是9層,包括6層卷積層,3層fullyconnect,三層fullyconnect之間有兩層dropout來正則化,dropoutKeepprob為0.5。
10.輸入向量化為長度70寬度為字元數的矩陣,1014維的特徵層。
11.使用同義詞替換進行資料增強,使用的同義詞詞典來自LibreOffice的mytheas元件,其中的詞典來自WordNet,也不是全都換的,有trick在裡面。
12.本文涉及的傳統方法是人工特徵提取器+一個線性分類器,分類器都是多項式logistics regression。
13.傳統文字分類方法:
Bag-of-words and its TFIDF
Bag-of-ngrams and its TFIDF
Bag-of-means on word embedding
深度學習的方法:
ConvNet based words with word2vec
lstm based words with word2vec,使用了“vanilla”的變體,為了防止梯度爆炸進行了梯度裁剪gradient clipping。
14.關於字母表的選擇,區分大小寫不是個明智的選擇,會得出更差的結果。推測是因為語義不會因為字母的大小寫而發生改變,全部轉為小寫是有好處的,即正則化是有好處的。
15.構建了數幾個測試集。從數十萬到數百萬不等。
16.傳統方法在十萬級的訓練集上傳統方法表現更好,當上百萬的訓練集上char cnn表現更好。
17.char cnn對於一些使用者自創的資料有更好的效果,本文並無明確證據證明char cnn擅長容錯拼寫錯誤和表情符號。
18.在Bag-of-means 上使用wordembedding效果非常差,比其他所有模型都差,說明word2vec並不是所有模型都適用的,尤其是簡單的方法上。
19.There is no free lunch,本文中沒有一個模型能在所有資料集上保持統治地位。
結論:
char cnn是有效的方法,但是受各種因素影響,比如資料集大小、文字是否經過curated、字母表的選擇。