fasttext是facebook tomas mikolov提出的,也是在其word2vec的cbow模型的衍生物,該模型僅用乙個隱層(僅僅求了平均,並未使用啟用函式的非線性變換,故在word2vec模型中其實被叫做投影層project layer),乙個分層的softmax,可以媲美深度神經網路,速度極快。在實際測試的時候,發現該模型比較適合資料量大的資料集,個人感覺他自己訓練詞向量如果資料太少的話,詞向量的語義就不能保證,並且相比於rnn其前後文捕獲能力,參數量等等也不夠。
**bag of tricks for efficient text classification中給出的用於文字分類的fasttext模型如下:
該模型看起來很簡單,輸入為乙個句子的embed+n-gram,hidden是求輸入的平均(未加入非線性),n-gram是加入順序。對於模型的介紹這裡就不說了,我們來關注一下embed+n-gram。
fasttext的官方文件:
文件中提到fasttext模型預設是unigram,unigram指的是單個未劃分單元,fasttext中在單詞級別上,故而unigram為單詞。
在word級別上,n-grams是第i個詞只與前面n-1個詞有關,如bigrams:
如想對模型進行微調或是通過使用n-grams提高模型效果,如下**(其中wordngrams為1-5,lr為0.1-1.0,當資料量很大尤其是標籤數很多時,可以選擇loss=『hs』,使用hierarchical softmax,dim為詞向量的維度dimension):
model = fasttext.train_supervised(
data_path+filename,
lr=0.1,
dim=
200,
epoch=20,
wordngrams=
2, loss=
'hs'
)
n-grams依據馬爾科夫假設(markov assumption):乙個詞的出現僅與它之前的若干個詞有關,表示如下:
以bigrams為例,即為:
每一項條件概率(wn|wn-1)使用極大似然估計計算,也就是詞頻:
舉個例子,假設我們有兩個句子:
我 喜歡 吃 蘋果
你 喜歡 吃 什麼
我 愛 吃 葡萄
那麼p(喜歡|我)=p(我喜歡)/p(我)=1/2=0.5
p(吃|喜歡)=p(喜歡吃)/p(喜歡)=1/2=0.5
nlp中的n-gram模型更加詳細的解說可參見
FastText 文字分類使用心得
最近在乙個專案裡使用了fasttext 1 這是facebook今年開源的乙個詞向量與文字分類工具,在學術上沒有什麼創新點,但是好處就是模型簡單,訓練速度又非常快。我在最近的乙個專案裡嘗試了一下,發現用起來真的很順手,做出來的結果也可以達到上線使用的標準。其實fasttext使用的模型與word2v...
帶監督的文字分類演算法FastText
該演算法由facebook在2016年開源,典型應用場景是 帶監督的文字分類問題 模型的優化目標如下 其中,是一條訓練樣本,y n 是訓練目標,x n 是normalized bag of features。矩陣引數a是基於word的look up table,也就是a是詞的embedding向量。...
文字分類 libsvm
關於 libsvm 的介紹以及相關 網上很多,感興趣可以找找。這是libsvm 這裡主要是針對之前學習過的幾種特徵篩選演算法用 libsvm 進行比較。採用搜狗實驗室的資料,選擇商業類文字 1001 篇,娛樂類文字 1208 篇,測試集 29904 篇。分別採用文件頻次,卡方分布,互資訊,資訊增益來...