FastText是Facebook開發的一款快速文本分類器,提供簡單而高效的文本分類和表征學習的方法,性能比肩深度學習而且速度更快。
- fastText 原理
fastText 方法包含三部分:模型架構、層次 Softmax 和 N-gram 特征。下面我們一一介紹。
1.1 模型架構
fastText 模型架構如下圖所示。fastText 模型輸入一個詞的序列(一段文本或者一句話),輸出這個詞序列屬于不同類別的概率。序列中的詞和詞組組成特征向量,特征向量通過線性變換映射到中間層,中間層再映射到標簽。fastText 在預測標簽時使用了非線性激活函數,但在中間層不使用非線性激活函數。
fastText 模型架構和 Word2Vec 中的 CBOW 模型很類似。不同之處在于,fastText 預測標簽,而 CBOW 模型預測中間詞。
1.2 層次 Softmax
在某些文本分類任務中類別很多,計算線性分類器的復雜度高。為了改善運行時間,fastText 模型使用了層次 Softmax 技巧。層次 Softmax 技巧建立在哈弗曼編碼的基礎上,對標簽進行編碼,能夠極大地縮小模型預測目標的數量。具體細節參見 文章 。
1.3 N-gram 特征
fastText 可以用于文本分類和句子分類。不管是文本分類還是句子分類,我們常用的特征是詞袋模型。但詞袋模型不能考慮詞之間的順序,因此 fastText 還加入了 N-gram 特征。“我 愛 她” 這句話中的詞袋模型特征是 “我”,“愛”, “她”。這些特征和句子 “她 愛 我” 的特征是一樣的。如果加入 2-Ngram,第一句話的特征還有 “我-愛” 和 “愛-她”,這兩句話 “我 愛 她” 和 “她 愛 我” 就能區別開來了。當然啦,為了提高效率,我們需要過濾掉低頻的 N-gram。
- fastText VS Tagspace
Mikolov 在 fastTetxt 的論文中報告了兩個實驗,其中一個實驗和 Tagspace 模型進行對比。實驗是在 YFCC100M 數據集上進行的, YFCC100M 數據集包含將近 1 億張圖片以及摘要、標題和標簽。實驗使用摘要和標題去預測標簽。Tagspace 模型是建立在 Wsabie 模型的基礎上的。Wsabie 模型除了利用 CNN 抽取特征之外,還提出了一個帶權近似配對排序 (Weighted Approximate-Rank Pairwise, WARP) 損失函數用于處理預測目標數量巨大的問題。
上面就是實驗結果,從實驗結果來看 fastText 能夠取得比 Tagspace 好的效果,并擁有無以倫比的訓練測試速度。但嚴格來說,這個實驗對 Tagspace 有些不公平。YFCC100M 數據集是關于多標記分類的,即需要模型能從多個類別里預測出多個類。Tagspace 確實是做多標記分類的;但 fastText 只能做多類別分類,從多個類別里預測出一個類。而評價指標 prec@1 只評價一個預測結果,剛好能夠評價多類別分類。
- 總結
Facebook Research 已經在 Github 上公布了 fastText 的 項目代碼 。不過這個項目其實是有兩部分組成的,一部分是這篇文章介紹的 fastText 文本分類,另一部分是詞嵌入學習。按論文來說只有文本分類部分才是 fastText,但也有人把這兩部分合在一起稱為 fastText,比如這篇文章 Comparison of FastText and Word2Vec 。fastText 的詞嵌入學習比 word2vec 考慮了詞組成的相似性。比如 fastText 的詞嵌入學習能夠考慮 english-born 和 british-born 之間有相同的后綴,但 word2vec 卻不能。fastText 的詞嵌入學習的具體原理可以參照 論文 。
文章轉載自 開源中國社區[http://www.oschina.net]