【簡單總結】FastText的複習回顧

【簡單總結】FastText的複習回顧

1.FastText簡單介紹

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

模型架構:fastText 模型輸入一個詞的序列(一段文本或者一句話),輸出這個詞序列屬於不同類別的概率。序列中的詞和詞組組成特徵向量,特徵向量通過線性變換映射到中間層,中間層再映射到標籤。fastText 在預測標籤時使用了非線性激活函數,但在中間層不使用非線性激活函數。

層次softmax:在某些文本分類任務中類別很多,計算線性分類器的複雜度高。爲了改善運行時間,fastText 模型使用了層次 Softmax 技巧。層次 Softmax 技巧建立在哈夫曼編碼的基礎上,對標籤進行編碼,能夠極大地縮小模型預測目標的數量。

N-gram 特徵:fastText 可以用於文本分類和句子分類。不管是文本分類還是句子分類,我們常用的特徵是詞袋模型。但詞袋模型不能考慮詞之間的順序,因此 fastText 還加入了 N-gram 特徵。

2.FastText模型架構

fastText的架構和word2vec中的CBOW的架構類似,因爲它們的作者都是Facebook的科學家Tomas Mikolov,而且確實fastText也算是word2vec所衍生出來的。

  • CBOW的架構:輸入的是w(t)w(t)的上下文2d2d個詞,經過隱藏層後,輸出的是w(t)w(t)。

 

word2vec將上下文關係轉化爲多分類任務,進而訓練邏輯迴歸模型,這裏的類別數量是 |V||V| 詞庫大小。通常的文本數據中,詞庫少則數萬,多則百萬,在訓練中直接訓練多分類邏輯迴歸並不現實。

word2vec中提供了兩種針對大規模多分類問題的優化手段, negative sampling 和 hierarchical softmax。在優化中,negative sampling 只更新少量負面類,從而減輕了計算量。hierarchical softmax 將詞庫表示成前綴樹,從樹根到葉子的路徑可以表示爲一系列二分類器,一次多分類計算的複雜度從|V||V|降低到了樹的高度。

  • fastText模型架構:
    其中x1,x2,...,xN−1,xNx1,x2,...,xN−1,xN表示一個文本中的n-gram向量,每個特徵是詞向量的平均值。這和前文中提到的cbow相似,cbow用上下文去預測中心詞,而此處用全部的n-gram去預測指定類別。

 

2.2 層次SoftMax

對於有大量類別的數據集,fastText使用了一個分層分類器(而非扁平式架構)。不同的類別被整合進樹形結構中(想象下二叉樹而非 list)。在某些文本分類任務中類別很多,計算線性分類器的複雜度高。爲了改善運行時間,fastText 模型使用了層次 Softmax 技巧。層次 Softmax 技巧建立在哈弗曼編碼的基礎上,對標籤進行編碼,能夠極大地縮小模型預測目標的數量。

fastText 也利用了類別(class)不均衡這個事實(一些類別出現次數比其他的更多),通過使用 Huffman 算法建立用於表徵類別的樹形結構。因此,頻繁出現類別的樹形結構的深度要比不頻繁出現類別的樹形結構的深度要小,這也使得進一步的計算效率更高。

 

2.3 N-gram子詞特徵

fastText 可以用於文本分類和句子分類。不管是文本分類還是句子分類,我們常用的特徵是詞袋模型。但詞袋模型不能考慮詞之間的順序,因此 fastText 還加入了 N-gram 特徵。

3.FastText詞向量與word2vec對比

圖模型結構很像,都是採用embedding向量的形式,得到word的隱向量表達。

都採用很多相似的優化方法,比如使用Hierarchical softmax優化訓練和預測中的打分速度。

FastText= word2vec中 cbow + h-softmax的靈活使用

模型的輸出層:word2vec的輸出層,對應的是每一個term,計算某term的概率最大;而fasttext的輸出層對應的是
分類的label。不過不管輸出層對應的是什麼內容,起對應的vector都不會被保留和使用;

模型的輸入層:word2vec的輸入層,是 context window 內的term;而fasttext 對應的整個sentence的內容,包括term,也包括 n-gram的內容;

兩者本質的不同,體現在 h-softmax的使用。Word2vec的目的是得到詞向量,該詞向量 最終是在輸入層得到,輸出層對應的 h-softmax 也會生成一系列的向量,但最終都被拋棄,不會使用。fasttext則充分利用了h-softmax的分類功能,遍歷分類樹的所有葉節點,找到概率最大的label(一個或者N個)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章