1. 程式人生 > >FastText快速文字分類

FastText快速文字分類

FastTest架構

fastText 架構原理

fastText 方法包含三部分:模型架構、層次 Softmax 和 N-gram 特徵

fastText 模型輸入一個詞的序列(一段文字或者一句話),輸出這個詞序列屬於不同類別的概率。 

序列中的詞和片語組成特徵向量,特徵向量通過線性變換對映到中間層,中間層再對映到標籤。

fastText 在預測標籤時使用了非線性啟用函式,但在中間層不使用非線性啟用函式。 

fastText 模型架構和 Word2Vec 中的 CBOW 模型很類似。不同之處在於,fastText 預測標籤,
而 CBOW 模型預測中間詞

這裡寫圖片描述

改善運算效率——softmax層級

對於有大量類別的資料集,fastText使用了一個分層分類器(而非扁平式架構)。不同的類別被整合進樹形
結構中(想象下二叉樹而非 list)。在某些文字分類任務中類別很多,計算線性分類器的複雜度高。為了改善執行時間,fastText 模型使用了層次 Softmax 技巧。層次 Softmax 技巧建立在哈弗曼編碼的基礎上,對標籤進行編碼,能夠極大地縮小模型預測目標的數量。
這裡寫圖片描述
考慮到線性以及多種類別的對數模型,這大大減少了訓練複雜性和測試文字分類器的時間。fastText 也利用了類別(class)不均衡這個事實(一些類別出現次數比其他的更多),通過使用 Huffman 演算法建立用於表徵類別的樹形結構。因此,頻繁出現類別的樹形結構的深度要比不頻繁出現類別的樹形結構的深度要小,這也使得進一步的計算效率更高。
這裡寫圖片描述

FastText的詞向量表徵

FastText的N-gram特徵

常用的特徵是詞袋模型。但詞袋模型不能考慮詞之間的順序,因此 fastText 還加入了 N-gram 特徵。
“我 愛 她” 這句話中的詞袋模型特徵是 “我”,“愛”, “她”。這些特徵和句子 “她 愛 我” 的特徵是一樣的。
如果加入 2-Ngram,第一句話的特徵還有 “我-愛” 和 “愛-她”,這兩句話 “我 愛 她” 和 “她 愛 我” 就能區別開來了。當然,為了提高效率,我們需要過濾掉低頻的 N-gram。
在 fastText 中一個低維度向量與每個單詞都相關。隱藏表徵在不同類別所有分類器中進行共享,使得文字資訊在不同類別中能夠共同使用。這類表徵被稱為詞袋(bag of words)(此處忽視詞序)。在 fastText中也使用向量表徵單詞 n-gram來將區域性詞序考慮在內,這對很多文字分類問題來說十分重要。
舉例來說:fastText能夠學會“男孩”、“女孩”、“男人”、“女人”指代的是特定的性別,並且能夠將這些數值存在相關文件中。然後,當某個程式在提出一個使用者請求(假設是“我女友現在在兒?”),它能夠馬上在fastText生成的文件中進行查詢並且理解使用者想要問的是有關女性的問題。

FastText詞向量優勢

(1)適合大型資料+高效的訓練速度:能夠訓練模型“在使用標準多核CPU的情況下10分鐘內處理超過10億個詞彙”,特別是與深度模型對比,fastText能將訓練時間由數天縮短到幾秒鐘。使用一個標準多核 CPU,得到了在10分鐘內訓練完超過10億詞彙量模型的結果。此外, fastText還能在五分鐘內將50萬個句子分成超過30萬個類別。
(2)支援多語言表達:利用其語言形態結構,fastText能夠被設計用來支援包括英語、德語、西班牙語、法語以及捷克語等多種語言。它還使用了一種簡單高效的納入子字資訊的方式,在用於像捷克語這樣詞態豐富的語言時,這種方式表現得非常好,這也證明了精心設計的字元 n-gram 特徵是豐富詞彙表徵的重要來源。FastText的效能要比時下流行的word2vec工具明顯好上不少,也比其他目前最先進的詞態詞彙表徵要好。
這裡寫圖片描述

(3)fastText專注於文字分類,在許多標準問題上實現當下最好的表現(例如文字傾向性分析或標籤預測)。FastText與基於深度學習方法的Char-CNN以及VDCNN對比:
這裡寫圖片描述

(4)比word2vec更考慮了相似性,比如 fastText 的詞嵌入學習能夠考慮 english-born 和 british-born 之間有相同的字尾,但 word2vec 卻不能。

FastText詞向量與word2vec對比

FastText= word2vec中 cbow + h-softmax的靈活使用
靈活體現在兩個方面:
1. 模型的輸出層:word2vec的輸出層,對應的是每一個term,計算某term的概率最大;而fasttext的輸出層對應的是 分類的label。不過不管輸出層對應的是什麼內容,起對應的vector都不會被保留和使用;
2. 模型的輸入層:word2vec的輸出層,是 context window 內的term;而fasttext 對應的整個sentence的內容,包括term,也包括 n-gram的內容;
兩者本質的不同,體現在 h-softmax的使用。
Wordvec的目的是得到詞向量,該詞向量 最終是在輸入層得到,輸出層對應的 h-softmax 也會生成一系列的向量,但最終都被拋棄,不會使用。
fasttext則充分利用了h-softmax的分類功能,遍歷分類樹的所有葉節點,找到概率最大的label(一個或者N個)

引數方面

loss function選用hs(hierarchical softmax)要比ns(negative sampling) 訓練速度要快很多倍,並且準確率也更高。
wordNgrams 預設為1,設定為2以上可以明顯提高準確率。
如果詞數不是很多,可以把bucket設定的小一點,否則預留會預留太多bucket使模型太大。

相關博文