今天我們來看 Mikolov 大佬 2016 年的另一大巨作——fastText。2013 年大佬在 Google 開源了 Word2Vec,2016 年剛就職于 FaceBook 就開源了 fastText,全都掀起了軒然大波。
fastText 模型有兩篇相關論文:
《Bag of Tricks for Efficient Text Classification》
《Enriching Word Vectors with Subword Information》
截至目前為止,第一篇有 1500 多引用量,第二篇有 2700 多引用量。
從這兩篇文的標題我們可以看出來 fastText 有兩大用途——文本分類和Word Embedding。
由于 fastText 模型比較簡單,所以我們可以把兩篇論文放在一起看。
1. Introduction
fastText 提供了簡單而高效的文本分類和 Word Embedding 方法,分類精度比肩深度學習而且速度快上幾個數量級。
舉個例子:使用標準的 CPU 可以在十分鐘的時間里訓練超過 10 億個單詞,在不到一分鐘的時間里可以將 50 萬個句子分到 31 萬個類別中。
可以看到 fastText 的速度有多驚人。
2. fastText
fastText 之所以能做到速度快效果好主要是兩個原因:N-Gram 和 Hierarchical softmax。由于 Hierarchical softmax 在 Word2Vec 中已經介紹過了,所以我們只介紹一下 N-gram。
2.1 N-gram
N-gram 是一種基于統計語言模型的算法,常用于 NLP 領域。其思想在于將文本內容按照字節順序進行大小為 N 的滑動窗口操作,從而形成了長度為 N 的字節片段序列,其片段我們稱為 gram。
以“谷歌是家好公司” 為例子:
二元 Bi-gram 特征為:谷歌 歌是 是家 家好 好公 公司
三元 Tri-gram 特征為:谷歌是 歌是家 是家好 家好公 好公司
當然,我們可以用字粒度也可以用詞粒度。
例如:谷歌 是 家 好 公司二元 Bi-gram 特征為:谷歌是 是家 家好 好公司三元 Tri-gram 特征為:谷歌是家 是家好 家好公司
N-gram 產生的特征只是作為文本特征的候選集,后面還可以通過信息熵、卡方統計、IDF 等文本特征選擇方式篩選出比較重要的特征。
2.2 Embedding Model
這邊值得注意的是,fastText 是一個庫,而不是一個算法。類似于 Word2Vec 也只是一個工具,Skip-Gram 和 CBOW 才是其中的算法。
?
fastText is a library for efficient learning of word representations and sentence classification.
”
fastText 在 Skip-Gram 的基礎上實現 Word Embedding,具體來說:fastText 通過 Skip-Gram 訓練了字符級別 N-gram 的 Embedding,然后通過將其相加得到詞向量。
舉個例子:對于 “where” 這個單詞來說,它的 Tri-gram 為:“
這樣做主要有兩個好處:
低頻詞生成的 Embedding 效果會更好,因為它們的 N-gram 可以和其它詞共享而不用擔心詞頻過低無法得到充分的訓練;
對于訓練詞庫之外的單詞(比如拼錯了),仍然可以通過對它們字符級的 N-gram 向量求和來構建它們的詞向量。
為了節省內存空間,我們使用 HashMap 將 N-gram 映射到 1 到 K,所以單詞的除了存儲自己在單詞表的 Index 外,還存儲了其包含的 N-gram 的哈希索引。
2.3 Classification Model
一般來說,速度快的模型其結構都會比較簡單,fastText 也不例外,其架構圖如下圖所示:
fastText Architecture
其中, 為一個句子的 N-gram 特征。
我們看到這個架構是不是感覺似曾相似?
fastText 與 Word2Vec 的 CBOW 架構是非常相似的,但與 CBOW 不同的是:fastText 輸入不僅是多個單詞 Embedding 向量,還將字符級別的 N-gram 向量作為額外的特征,其預測是也不是單詞,而是 Label(fastText 主要用于文本分類,所以預測的是分類標簽)。
3. Experiment
我們簡單看下 fastText 的兩個實驗——Embedding 和文本分類;
3.1 Embeddng
sisg 是 fastText 用于 Embedding 的模型,實驗效果如下:
3.2 Classification
分類實驗的精度 fastText 比 char-CNN、 char-RCNN 要好,但比 VDCNN 要差。(但這里注意:fastText 僅僅使用 10 個隱藏層節點 ,訓練了 5 次 epochs。)
在速度上 fastText 快了幾個數量級。(此處注意:CNN 和 VDCNN 用的都是 Tesla K40 的 GPU,而 fastText 用的是 CPU)
下面是標簽預測的結果,兩個模型都使用 CPU 并開了 20 個線程:
4. Conclusion
一句話總結:fastText 是一個用于文本分類和 Embedding 計算的工具庫,主要通過 N-gram 和 Hierarchical softmax 保證算法的速度和精度。
關于 Hierarchical softmax 為什么會使 fastText 速度那么快?而在 Word2Vec 中沒有看到類似的效果?
我覺得是因為 fastText 的標簽數量相比 Word2Vec 來說要少很多,所以速度會變的非常快。其次 Hierarchical softmax 是必要的,如果不同的話速度會慢非常多。
另外,fastText 可能沒有什么創新,但他卻異常火爆,可能有多個原因,其中包括開源了高質量的 fastText,類似 Work2Vec,當然也會有 Mikolov 大佬和 Facebook 的背書。
總的來說,fastText 還是一個極具競爭力的一個工具包。
5. Reference
《Bag of Tricks for Efficient Text Classification》
《Enriching Word Vectors with Subword Information》
責任編輯:lq
-
算法
+關注
關注
23文章
4607瀏覽量
92842 -
文本分類
+關注
關注
0文章
18瀏覽量
7296 -
深度學習
+關注
關注
73文章
5500瀏覽量
121113
原文標題:fastText:極快的文本分類工具
文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論