1. 參考資料
論文1:FastText1詞向量,《Enriching Word Vectors with Subword Information》,作者Bojanowski et al. (包括Mikolov),FAIR(Facebook AI Research)
論文2:FastText2文本分類模型,《Bag of Tricks for Efficient Text Classification》,作者Joulin et al. (包括Mikolov),FAIR(Facebook AI Research)
博客文:《fastText 源碼分析》
FastText源代碼(C++)
主要參考資料如上,其實還有其他博客文,然而很多博客文都是互相抄襲的……而且很多都是講解FastText文本分類模型 ,而非FastText詞向量 ,前者基於後者建模。FastText文本分類模型原理簡單易懂,然而詞向量的訓練原理有某些地方講的很含糊。基於以上參考資料,我只能做出個人理解。(因為看源碼看了很久,還是感覺沒能解決我的核心疑惑……)
FastText其實是包括2個東西的:
FastText詞向量(PS:和Word2vec、GloVe一樣,FastText詞向量也屬於靜態詞向量 ),對應論文1
FastText文本分類模型,對應論文2
雖說本系列文章主題是:Word Embedding詞向量 ,但是由於FastText特殊性,這裡一起講FastText文本分類模型 。
FastText的最大優點:快速。
《Efficient estimation of word representations in vector space》
摘要部分:
We can train fastText on more than
one billion words in less than ten
minutes using a standard multicore CPU,
and classify half a million sentences
among 312K classes in less than a minute.
2. FastText原理1:詞向量訓練
關於FastText詞向量資料,原論文《Enriching Word Vectors with Subword Information》的原理部分提及得相當簡略。
FastText詞向量框架是基於Word2vec框架的,區別主要如下:
前者利用n-grams向量之和作為詞向量(key point & 疑惑點 )
圖1- FastText詞向量表示 即單詞w對應1個n-grams集合(原論文為提取3-grams ~ 6-grams的所有子串),每個字串會有對應的向量,因此該單詞w的詞向量 = 所有n-grams字串向量求和。
關於n-grams,原論文有以下例子:
圖2- n-grams解釋 這裡,以where
為例,其對應的3-grams子串集合G={"<wh","whe","her","ere","re>","<where>"}
,其中每一個子串對應1個向量表示,則where
詞向量則為求和。同理對於中文,舉例蘇格拉底
的3-grams子串集合G_1={"<蘇格","蘇格拉","格拉底","拉底>,"<蘇格拉底>"}
。
以上原理都不難理解,關鍵在於:原論文貌似沒給出子串向量是如何獲得! 當然n-grams向量理應是訓練得到,然而如何訓練,網路結構如何,原論文沒提及,只是說基於Word2vec架構。Word2vec原理如下文:
Road 2 NLP- Word Embedding詞向量(Word2vec) | Eajacks Blog ?
eajack.github.io本人一直卡在如何訓練n-grams子串向量 這問題上。涉及資料主要是:博客文《fastText 源碼分析》、FastText源代碼(C++)。經過多次分析猜測(由於本人最後還是放棄通讀C++源碼…我看了挺久,但還是不知道如何訓練n-grams子串獲得向量的,只發現了如何獲取子串string 代碼)。
FastText默認Skip-Gram模型,對比Word2vec的Skip-Gram模型,有以下個人理解 (由於畫圖較為複雜,此處文字描述):
圖3- Word2vec的Skip-Gram框架 如上圖為Word2vec原Skip-Gram模型。
輸入層:輸入為當前單詞w的n-grams的index集合,從輸入向量矩陣 中挑出對應n-grams向量求和,作為輸入層的 。因此,FastText的輸入層和Word2vec的區別在於:前者取n-gram求和作為詞向量,後者取One-Hot詞向量;前者輸入向量矩陣 ,其N為所有語料的n-grams總數,後者則為語料word總數。
隱含層&輸出層:Word2vec & FastText一致。
因此,FastText詞向量訓練框架 & Word2vec不一致僅在於輸入層。(PS:個人理解)
3. FastText原理2:文本分類模型
FastText文本分類模型和詞向量訓練框架差不多,有了詞向量的原理基礎,該模型可以很簡單地用下圖總結:
圖4- FastText文本分類框架 如上圖,FastText文本分類模型僅3層。
輸入層:句子的n-grams表示向量(PS:此處的n-grams向量為經過FastText詞向量訓練獲得 )
隱藏層:n-grams向量求平均(PS:FastText詞向量訓練則是求和 )
輸出層:softmax層(PS:沿用Word2vec的Hierarchical Softmax )
由此可以看出,關鍵是輸入層的n-grams向量 ,而這個便是FastText詞向量訓練步驟。所以,FastText文本分類模型包括2步:1- FastText詞向量訓練;2- FastText文本分類模型構建 。
推薦閱讀: