【關(guān)于 fastText】 那些你不知道的事
作者:楊夕
項目地址:https://github.com/km1994/NLP-Interview-Notes
個人論文讀書筆記:https://github.com/km1994/nlp_paper_study
【注:手機(jī)閱讀可能圖片打不開!!!】
一、fastText 動機(jī)篇
1.1 word-level Model 是什么?
介紹:基于word單詞作為基本單位的,這種方式雖然能夠很好的對詞庫中每一個詞進(jìn)行向量表示
1.2 word-level Model 存在什么問題?
OOV 問題
問題描述:容易出現(xiàn)單詞不存在于詞匯庫中的情況;
解決方法:最佳語料規(guī)模,使系統(tǒng)能夠獲得更多的詞匯量;
誤拼障礙
問題描述:如果遇到了不正式的拼寫, 系統(tǒng)很難進(jìn)行處理;
解決方法:矯正或加規(guī)則約束;
做翻譯問題時, 音譯姓名比較難做到
1.3 Character-Level Model 是什么?
介紹:基于 Character 作為基本單位的,這種方式雖然能夠很好的對字庫中每一個 Char 進(jìn)行向量表示
1.4 Character-Level Model 優(yōu)點(diǎn)?
能夠解決 Word-level 所存在的 OOV 問題;
拼寫類似的單詞 具有類似的 embedding;
1.5 Character-Level Model 存在問題?
Character-level 的輸入句子變長;
數(shù)據(jù)變得稀疏;
對于遠(yuǎn)距離的依賴難以學(xué)到;
訓(xùn)練速度降低;
1.6 Character-Level Model 問題的解決方法?
Lee 等 提出了利用多層 conv 和 pooling 和 highway layer 的方式來解決該問題,其結(jié)構(gòu)如下所示:
輸入的字符首先需要經(jīng)過 Character embedding 層,并被轉(zhuǎn)化為 character embeddings 表示;
采用 不同窗口大小的卷積核對輸入字符的 character embeddings 表示進(jìn)行卷積操作,論文中采用的窗口的大小分別為 3、4、5 ,也就是說學(xué)習(xí) Character-level 的 3-gram、4-gram、5-gram;
對不同卷積層的卷積結(jié)果進(jìn)行 max-pooling 操作,即捕獲其最顯著特征生成 segment embedding;
segment embedding 經(jīng)過 Highway Network (有些類似于Residual network,方便深層網(wǎng)絡(luò)中信息的流通,不過加入了一些控制信息流量的gate);
輸出結(jié)果 再經(jīng)過 單層 BiGRU,得到最終 的 encoder output;
之后,decoder再利用Attention機(jī)制以及character level GRU進(jìn)行decode
通過這種方式不僅能夠解決 Word-level 所存在的 OOV 問題,而且能夠捕獲 句子的 3-gram、4-gram、5-gram 信息,這個也是 后期 FastText 的想法雛形;

二、 詞內(nèi)的n-gram信息(subword n-gram information) 介紹篇
2.1 引言
在前面,我們已經(jīng)介紹和比較了 word-level 和 character-level 的優(yōu)缺點(diǎn),并根據(jù)其特點(diǎn),提出一種介于 word-level Model 和 Character-level 之間的 Model —— Subword Model。
那么,我們可不可以采取類似于上面的subword的思路來產(chǎn)生更好的word embedding呢?
FAIR的FastText就是利用subword將word2vec擴(kuò)充,有效的構(gòu)建embedding。
2.2 fastText 是什么?

2.3 fastText 的結(jié)構(gòu)是什么樣?
每個單詞通過嵌入層可以得到詞向量;
然后將所有詞向量平均可以得到文本的向量表達(dá);
在輸入分類器,使用softmax計算各個類別的概率;

2.4 為什么 fastText 要使用詞內(nèi)的n-gram信息(subword n-gram information)?
之前方法:
以詞匯表中的獨(dú)立單詞作為基本單元來進(jìn)行訓(xùn)練學(xué)習(xí)的
存在問題:
低頻詞、罕見詞:由于在語料中本身出現(xiàn)的次數(shù)就少,得不到足夠的訓(xùn)練,效果不佳
未登錄詞:如果出現(xiàn)了一些在詞典中都沒有出現(xiàn)過的詞,或者帶有某些拼寫錯誤的詞,傳統(tǒng)模型更加無能為力
2.5 fastText 詞內(nèi)的n-gram信息(subword n-gram information) 介紹?
s1. 將一個單詞打散到字符級別;
s2. 利用字符級別的n-gram信息來捕捉字符間的順序關(guān)系
目的:以此豐富單詞內(nèi)部更細(xì)微的語義
舉例:
對于一個單詞“google”,為了表達(dá)單詞前后邊界,我們加入<>兩個字符,即變形為“
”; 抽取所有的tri-gram信息:G = { <go, goo, oog,ogl, gle, le>};
通過這種方式:原始的一個單詞google,就被一個字符級別的n-gram集合所表達(dá);
2.6 fastText 詞內(nèi)的n-gram信息 的 訓(xùn)練過程?
s1:每個n-gram都會對應(yīng)訓(xùn)練一個向量;
s2:原來完整單詞的詞向量就由它對應(yīng)的所有n-gram的向量求和得到;
s3:所有的單詞向量以及字符級別的n-gram向量會同時相加求平均作為訓(xùn)練模型的輸入;
2.7 fastText 詞內(nèi)的n-gram信息 存在問題?
由于需要估計的參數(shù)多,模型可能會比較膨脹
壓縮模型的建議:
采用hash-trick:由于n-gram原始的空間太大,可以用某種hash函數(shù)將其映射到固定大小的buckets中去,從而實現(xiàn)內(nèi)存可控;
采用quantize命令:對生成的模型進(jìn)行參數(shù)量化和壓縮;
減小最終向量的維度。
三、 層次化Softmax回歸(Hierarchical Softmax) 介紹篇
3.1 為什么要用 層次化Softmax回歸(Hierarchical Softmax) ?

3.2 層次化Softmax回歸(Hierarchical Softmax) 的思想是什么?
將一個全局多分類的問題,轉(zhuǎn)化成為了若干個二元分類問題,從而將計算復(fù)雜度從O(V)降到O(logV);
每個二元分類問題,由一個基本的邏輯回歸單元來實現(xiàn)
3.3 層次化Softmax回歸(Hierarchical Softmax) 的步驟?

步驟:
從根結(jié)點(diǎn)開始,每個中間結(jié)點(diǎn)(標(biāo)記成灰色)都是一個邏輯回歸單元,根據(jù)它的輸出來選擇下一步是向左走還是向右走;
上圖示例中實際上走了一條“左-左-右”的路線,從而找到單詞w?。而最終輸出單詞w?的概率,等于中間若干邏輯回歸單元輸出概率的連乘積;

四、fastText 存在問題?



參考資料
神經(jīng)網(wǎng)路語言模型(NNLM)的理解
NLP 面試題(一)和答案,附有參考URL


