1. 程式人生 > >詞向量原始碼解析:(6.1)fasttext原始碼解析

詞向量原始碼解析:(6.1)fasttext原始碼解析

fasttext是word2vec的作者mikolov參與的製作的一個工具包,可以用來訓練詞向量和進行文字分類。目前已經引起了廣泛的關注。這個工具包在github上面的地址是 https://github.com/facebookresearch/fastText 這個專案是C++寫的,和之前的專案相比這個專案更加專業,涉及的內容也比之前的專案多很多。所以我們對fasttext的連載也會比較多。

fasttext工具包可以用來生成詞向量,也可以用來得到文字向量,進行文字分類。fasttext在生成詞向量的時候用到了subword資訊,也就是連續的字元資訊。fasttext在生成文字向量的時候用到了ngram的資訊。其實fasttext模型的原理和word2vec差不多。在word2vec中是通過單詞預測單詞。比如CBOW是上下文單詞的詞向量的平均去預測中心詞。在fasttext訓練詞向量的過程中是用連續字元的向量的平均得到單詞向量,後面都和word2vec一樣。在fasttext訓練文字向量進行分類的過程是用這個文件所有單詞的詞向量的平均預測標籤。如果瞭解word2vec的程式碼,看懂fasttext程式碼也不是那麼困難。首先我們還是看一下fasttext的目錄。所有的C++程式碼都在src中。然後就是一些linux指令碼檔案


我們進入src目錄看看有哪些C++檔案。從上往下看,args是專門儲存超參的類。dictionary是詞典類,構建儲存詞典,支援把單詞轉成id。fasttext是訓練測試等的核心檔案,會呼叫model進行詞向量文字向量的訓練。main是主函式負責接受超參轉成args類,根據不同目的呼叫不同的方法。剩下的matrix,vector等檔案都是輔助fasttext,model以及dictionary詞典的。


由於這個工具包內容比較多,所以我會先從面向任務的角度去介紹fasttext怎麼得到文字向量進行分類以及得到詞向量。然後我們再一個一個檔案去解析。