導讀:Facebook聲稱fastText比其他學習方法要快得多,能夠訓練模型“在使用標準多核CPU的情況下10分鐘內(nèi)處理超過10億個詞匯”,特別是與深度模型對比,fastText能將訓練時間由數(shù)天縮短到幾秒鐘。
Facebook FAIR實驗室在最新博客中宣布將開源資料庫fastText,聲稱相比深度模型,fastText能將訓練時間由數(shù)天縮短到幾秒鐘。
| 使用fastText實現(xiàn)更快、更好的文本分類
理解人們交談時的內(nèi)容,或者敲打文章時的內(nèi)容——這對于人工智能研究者來說是最大的技術挑戰(zhàn)之一,但是也確實是關鍵的一個需求。自動文本處理在日常計算機使用中相當關鍵,在網(wǎng)頁搜索和內(nèi)容排名以及垃圾內(nèi)容分類中占重要組成部分。且當它運行的時候你完全感受不到它。隨著在線數(shù)據(jù)總量越來越大,需要有更靈活的工具來更好的理解這些大型數(shù)據(jù)集,來提供更加精準的分類結(jié)果。
為了滿足這個需求,F(xiàn)acebook FAIR實驗室開源了fastText。fastText是一個資料庫,能針對文本表達和分類幫助建立量化的解決方案。關于fastText具體實現(xiàn)原理,F(xiàn)acebook另外發(fā)表了兩篇相關論文,兩篇論文具體信息如下:
Bag of Tricks for Efficient Text Classification(高效文本分類技巧)
Enriching Word Vectors with Subword Information(使用子字信息豐富詞匯向量)
fastText結(jié)合了自然語言處理和機器學習中最成功的理念。這些包括了使用詞袋以及 n-gram 袋表征語句,還有使用子字(subword)信息,并通過隱藏表征在類別間共享信息。我們另外采用了一個softmax層級(利用了類別不均衡分布的優(yōu)勢)來加速運算過程。這些不同概念被用于兩個不同任務:
有效文本分類
學習詞向量表征
舉例來說:fastText能夠?qū)W會“男孩”、“女孩”、“男人”、“女人”指代的是特定的性別,并且能夠?qū)⑦@些數(shù)值存在相關文檔中。然后,當某個程序在提出一個用戶請求(假設是“我女友現(xiàn)在在兒?”),它能夠馬上在fastText生成的文檔中進行查找并且理解用戶想要問的是有關女性的問題。
| fastText對于文本分類的實現(xiàn)過程
在文本處理領域中深度神經(jīng)網(wǎng)絡近來大受歡迎,但是它們訓練以及測試過程十分緩慢,這也限制了它們在大數(shù)據(jù)集上的應用。
fastText能夠解決這個問題,其實現(xiàn)過程如下所示:
對于有大量類別的數(shù)據(jù)集,fastText使用了一個分層分類器(而非扁平式架構)。不同的類別被整合進樹形結(jié)構中(想象下二叉樹而非 list)。
考慮到線性以及多種類別的對數(shù)模型,這大大減少了訓練復雜性和測試文本分類器的時間。fastText 也利用了類別(class)不均衡這個事實(一些類別出現(xiàn)次數(shù)比其他的更多),通過使用 Huffman 算法建立用于表征類別的樹形結(jié)構。因此,頻繁出現(xiàn)類別的樹形結(jié)構的深度要比不頻繁出現(xiàn)類別的樹形結(jié)構的深度要小,這也使得進一步的計算效率更高。
Huffman 算法
fastText 另外使用了一個低維度向量來對文本進行表征,通過總結(jié)對應文本中出現(xiàn)的詞向量進行獲得。在 fastText 中一個低維度向量與每個單詞都相關。隱藏表征在不同類別所有分類器中進行共享,使得文本信息在不同類別中能夠共同使用。這類表征被稱為詞袋(bag of words)(此處忽視詞序)。在 fastText中也使用向量表征單詞 n-gram來將局部詞序考慮在內(nèi),這對很多文本分類問題來說十分重要。
實驗表明 fastText 在準確率上與深度學習分類器具有同等水平,特別是在訓練和評估速率上要高出幾個數(shù)量級。使用 fastText能夠?qū)⒂柧殨r間從幾天降至幾秒,并且在許多標準問題上實現(xiàn)當下最好的表現(xiàn)(例如文本傾向性分析或標簽預測)。
FastText與基于深度學習方法的Char-CNN以及VDCNN對比
| fastText也可作為專業(yè)工具
文本分類對于商業(yè)界來說非常重要。垃圾郵件或釣魚郵件過濾器可能就是最典型的例子。現(xiàn)在已經(jīng)有能為一般分類問題(例如 Vowpal Wabbit 或 libSVM)設計模型的工具,但是 fastText 專注于文本分類。這使得在特別大型的數(shù)據(jù)集上,它能夠被快速訓練。我們使用一個標準多核 CPU,得到了在10分鐘內(nèi)訓練完超過10億詞匯量模型的結(jié)果。此外, fastText還能在五分鐘內(nèi)將50萬個句子分成超過30萬個類別。
| fastText對于許多語言都通用
除了文本分類以外,fastText也能被用來學習詞匯向量表征。利用其語言形態(tài)結(jié)構,fastText能夠被設計用來支持包括英語、德語、西班牙語、法語以及捷克語等多種語言。它還使用了一種簡單高效的納入子字信息的方式,在用于像捷克語這樣詞態(tài)豐富的語言時,這種方式表現(xiàn)得非常好,這也證明了精心設計的字符 n-gram 特征是豐富詞匯表征的重要來源。FastText的性能要比時下流行的word2vec工具明顯好上不少,也比其他目前最先進的詞態(tài)詞匯表征要好。
不同語言下FastText與當下最先進的詞匯表征進行比較
fastText具體代碼實現(xiàn)過程
fastText基于Mac OS或者Linux系統(tǒng)構筑,使用 C++11 的特性。需要python 2.6 或者更高版本支持,以及numpy &scipy等軟件支持。
示例:
$ git clone https://github.com/facebookresearch/fastText.git
$ cd fastText
$ make
$ ./fasttext supervised
Empty input or output path.
The following arguments are mandatory:
-input training file path
-output output file path
The following arguments are optional:
-lr learning rate [0.05]
-dim size of word vectors [100]
-ws size of the context window [5]
-epoch number of epochs [5]
-minCount minimal number of word occurences [1]
-neg number of negatives sampled [5]
-wordNgrams max length of word ngram [1]
-loss loss function {ns, hs, softmax} [ns]
-bucket number of buckets [2000000]
-minn min length of char ngram [3]
-maxn max length of char ngram [6]
-thread number of threads [12]
-verbose how often to print to stdout [10000]
-t sampling threshold [0.0001]
-label labels prefix [__label__]
總結(jié):Facebook FAIR實驗室最新開源工具fastText能將訓練時間由數(shù)天縮短到幾秒鐘,相較于基于深度學習的模型方法,在保證同等精度的前提下fastText速度上快了幾個數(shù)量級。此外,fastText還能作為文本分類在實際應用中的專業(yè)工具,特別是對于大型數(shù)據(jù)集能實現(xiàn)相當快的訓練速度。另外因其自身語言形態(tài)結(jié)構,fastText還能支持包括英語、德語、西班牙語、法語以及捷克語等多種語言。