讀FastText文章

    這篇博客主要針對Bag of Tricks for Efficient Text Classification文章的一些理解。主要是介紹FastText算法是速度多塊,通過標籤預測和情感分析兩個任務來說明。

 

1. 模型的結構,文章中給出了這樣的圖

上圖註解中提到,x1,x2,,xN都是一個詞向量,那麼hidden是對N個詞的詞向量求平均,那麼具體怎麼計算呢? 

這個圖不是非常直觀能看出如何計算的,文章中提到了結構和cbow很類似,於是找到了介紹word2vec的文章,見下圖

這裏說明幾點:

  • V表示詞典的大小,即一個詞的embedding的長度
  • C表示詞序列的長度
  • W對每個詞是共享的,這點要注意

Hidden layer怎麼算呢? 文章中也給出公式了

x1,x2,xC均爲詞向量, V*1 , W是V*N維,N表示隱藏層的神經元的個數,所以h的結構爲N*V*V*1=N*1 

對於FastText算法而言,隱藏層的平均同這裏是一致的;

 

2. 損失函數

  • 最小化損失函數
  • A就是input layer 到hidden layer的矩陣,也就是word2vec中的W
  • B就是hidden layer 到 output layer的矩陣,也就是word2vec中的W‘
  • 訓練中採用SGD ,學習率是線性衰減的
  • 這裏的xn表示的第n個document的特徵集 ,N表示文檔的數量,yn表示標籤

 

3.層次SoftMax

如果要分的類是非常非常多的,比如cbow中,需要根據上下文的詞預測中間詞,中間詞的類別是巨大的,等同於詞典的數量,

所以word2vec中用到了softmax,那麼fasttext中也用到該技術

  • 將所有的類別作爲二叉樹的葉子節點,共有V個類,那麼二叉樹的內部節點就有V-1個;(這種說法應該針對的是完全二叉樹)
  • 對於每個葉子節點,都有唯一的從根節點到該葉子節點的路徑
  • 葉子節點可以用路徑來替代

目標函數轉變爲:

  • 要求的參數是,這個參數對於每個葉子節點也是共享的,其中n(w,j) 中 j表示到w葉子節點要走的第j步
  •  這個東西看上去很複雜,實際意思就是走左邊的時候,取值爲1,走右邊,取值爲-1
  • L(w) 就是走到w的長度,例如L(w2)爲4,實際走了三步,所以目標函數中 L(w) 需要 -1  =>>> L(w)-1
  • 拿w2舉例,目標函數爲
  • 採用對數似然,那麼目標函數就轉變爲
  • 經過一些列推導,得到參數的更新
  • 好處:訓練的時候,對於每個文本的分類,複雜度從O(V) 降低到O(logV),參數量由V個變爲V-1個

 

4. 一些實驗的結果

基於情感分析8個數據集

  • 準確度上

fasttext 用了5個epoch,學習率的集合爲 0.05,0.1,0.2,0.5,如果用bigram,那麼準確率有1%-4%的提升,如果用trigrams,準確率可以達到97.1%

  • 訓練時間上,下面是每個epoch的耗費的時間

 

參考:

https://arxiv.org/pdf/1607.01759.pdf  Bag of Tricks for Efficient Text Classification

https://arxiv.org/pdf/1411.2738.pdf word2vec Parameter Learning Explained

 

 

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