fastText 模型輸入一個詞的序列(一段文本或者一句話),輸出這個詞序列屬於不同類別的概率。
序列中的詞和詞組組成特征向量,特征向量通過線性變換映射到中間層,中間層再映射到標簽。
fastText 在預測標簽時使用了非線性激活函數,但在中間層不使用非線性激活函數。
fastText 模型架構和 Word2Vec 中的 CBOW 模型很類似。不同之處在於,fastText 預測標簽,而 CBOW 模型預測中間詞。
fasttext結構
x
- $X_i$: 一個句子的特征,初始值為隨機生成(也可以采用預訓練的詞向量)
- hidden:$X_i$的平均值 x
- output: 樣本標簽
目標函數
N:樣本個數
$y_n$:第n個樣本對應的類別
f:損失函數softmaxt
$x_n$:第n個樣本的歸一化特征
A:權重矩陣(構建詞,embedding)
B:權重舉證(隱層到輸出層)
詞向量初始化
一個句子的embedding為[$iw_1,iw_2,....iw_n,ow_1,ow_2,...ow_s$]
$iw_i$:語料中出現的詞,排在數組的前面
$ow_i$:n-gram或n-char特征
初始化為隨機數, 如果提供預訓練的詞向量,對應的詞采用預訓練的詞向量
hierarchical Softmax
當語料類別較多時,使用hierarchical Softmax(hs)減輕計算量
hs利用Huffman 樹實現,詞(生成詞向量)或label(分類問題)作為葉子節點
根據詞或label的count構建Huffman 樹,則葉子到root一定存在一條路徑
利用邏輯回歸二分類計算loss
n-gram和n-char
asttext方法不同與word2vec方法,引入了兩類特征並進行embedding。其中n-gram顆粒度是詞與詞之間,n-char是單個詞之間。兩類特征的存儲均通過計算hash值的方法實現。
n-gram
示例: who am I? n-gram設置為2
n-gram特征有,who, who am, am, am I, I
n-char
示例: where, n=3, 設置起止符<, >
n-char特征有,<wh, whe, her, ere, er>
FastText詞向量與word2vec對比
FastText= word2vec中 cbow + h-softmax的靈活使用
模型的輸出層:word2vec的輸出層,對應的是每一個term,計算某term的概率最大;而fasttext的輸出層對應的是
分類的label。不過不管輸出層對應的是什么內容,起對應的vector都不會被保留和使用;
模型的輸入層:word2vec的輸入層,是 context window 內的term;而fasttext 對應的整個sentence的內容,包括term,也包括 n-gram的內容;
兩者本質的不同,體現在 h-softmax的使用。
Word2vec的目的是得到詞向量,該詞向量 最終是在輸入層得到,輸出層對應的 h-softmax 也會生成一系列的向量,但最終都被拋棄,不會使用。
fasttext則充分利用了h-softmax的分類功能,遍歷分類樹的所有葉節點,找到概率最大的label(一個或者N個)。