這篇文章提出的fastText既是一種詞向量訓(xùn)練工具又是一種文本分類工具坯钦。它同時具備這兩項功能是因為它在訓(xùn)練分類器的同時也訓(xùn)練了詞向量求妹。我們知道韭脊,詞向量訓(xùn)練的思路無非就是讓模型在做有監(jiān)督的任務(wù)過程中痊土,學(xué)習(xí)得到詞向量的表達(dá)把篓。即使Word2Vec號稱是利用無標(biāo)簽文本做無監(jiān)督學(xué)習(xí)纫溃,其實在訓(xùn)練的時候也是在無標(biāo)簽文本上面構(gòu)建了有監(jiān)督學(xué)習(xí)的任務(wù)——利用上下文單詞預(yù)測中間單詞(CBOW)。fastText訓(xùn)練詞向量也是這個思路韧掩,讓模型在做有監(jiān)督的文本分類任務(wù)過程中學(xué)習(xí)詞向量紊浩。
fastText模型結(jié)構(gòu)
相比于其它深度的分類模型,fastText模型結(jié)構(gòu)非常淺疗锐,非常簡單坊谁,如下圖所示。
可以看到滑臊,fastText模型只包含輸入層口芍、一層隱含層、輸出層雇卷,總共三層鬓椭。輸入層就是某條文本中的單詞序列w1,w2,...wn-1,wn颠猴。當(dāng)然這里不是單詞的符號,而是單詞的詞向量小染,其實前面還有一層embedding層翘瓮,可以看做詞向量的lookup table,輸入單詞符號或索引就可以找到對應(yīng)的詞向量裤翩。當(dāng)然訓(xùn)練開始前资盅,lookup table 里面的詞向量是隨機初始化的。中間的隱層也很簡單踊赠,并沒有多余的參數(shù)呵扛,就是把所有單詞的詞向量相加,得到的向量可以看做是這個文本的embedding臼疫,然后加一個softmax激活函數(shù)择份。輸出層就是文本屬于每個類別的概率,這里的類別是事先定義好的烫堤,訓(xùn)練文本也是有類別標(biāo)簽的荣赶。
N-gram feature
fastText值得一說的一個改進(jìn)在于N-gram 特征。fastText采用字符級別的N-gram鸽斟。以trigram為例拔创,單詞<apple>就可以分為<ap,app富蓄,ppl剩燥,ple,le>立倍。那么在輸入層就要做修改灭红,lookup table 里隨機初始化的是trigram的向量,由于字符的個數(shù)很有限(26個字母加幾個特殊字符)口注,所以其實trigram總的數(shù)量并不會很多变擒。以單詞apple為例,有了trigram向量寝志,就可以將拆分的所有trigram向量SUM起來就得到了apple詞向量娇斑。用N-gram feature的好處是能讓詞向量能學(xué)習(xí)到單詞的morphology(詞形)信息。比如change和changed其實是一個意思材部,如果用word2vec訓(xùn)練毫缆,它兩的詞向量可能很不一樣,但是用fastText訓(xùn)練它兩的詞向量就很接近乐导。另外的好處就是有了N-gram向量也能生成未登錄詞(out-of-vocabulary)的詞向量苦丁。
層次化softmax
層次化softmax是fastText從Word2Vec借鑒過來的,主要作用是降低softmax的復(fù)雜度兽叮。如果用一般的softmax芬骄,由于類別太多猾愿,每個類別都要計算概率。采用層次化softmax時账阻,由于Hoffman樹特有的性質(zhì)蒂秘,只要計算幾次可能就能分到正確的類別。
fastText淘太、Word2Vec姻僧、Glove對比
fastText的模型結(jié)構(gòu)跟Word2Vec中的CBOW模型非常像。如下圖所示蒲牧,唯一的差別是CBOW是利用上下文單詞預(yù)測中間單詞撇贺,而fastText是根據(jù)文本中全部單詞預(yù)測它的分類。另外就是CBOW沒有引入N-gram特征冰抢。fastText的訓(xùn)練同時得到了一個文本分類器松嘶。
還有一個比較常用的詞向量訓(xùn)練工具是Glove。相比于Word2Vec挎扰,Glove更加簡潔翠订。GLove主要利用單詞在文本中的“co-occurance”信息來構(gòu)建一個加權(quán)最小二乘回歸模型,通過最優(yōu)化這個最小二乘回歸模型遵倦,就得到了每個單詞的詞向量尽超。構(gòu)建的最小二乘回歸模型如下:
其中f(Xij)是權(quán)重函數(shù),V是詞匯集梧躺,wi是單詞i的詞向量似谁,Xij是單詞i和單詞j的共現(xiàn)概率。
所以掠哥,可以把Word2Vec和fastText是“predictive”模型巩踏,而Glove是“count-based”模型。
顯然在訓(xùn)練速度上续搀,GLove比Word2Vec和fastText都更快蛀缝。
一般認(rèn)為在詞向量的性能上CBOW < skip-Gram == Glove < fastText。