1
本文作者: 李尊 | 2016-08-19 18:32 |
導(dǎo)讀:Facebook聲稱fastText比其他學(xué)習(xí)方法要快得多,能夠訓(xùn)練模型“在使用標(biāo)準(zhǔn)多核CPU的情況下10分鐘內(nèi)處理超過10億個(gè)詞匯”,特別是與深度模型對(duì)比,fastText能將訓(xùn)練時(shí)間由數(shù)天縮短到幾秒鐘。
Facebook FAIR實(shí)驗(yàn)室在最新博客中宣布將開源資料庫(kù)fastText,聲稱相比深度模型,fastText能將訓(xùn)練時(shí)間由數(shù)天縮短到幾秒鐘。
理解人們交談時(shí)的內(nèi)容,或者敲打文章時(shí)的內(nèi)容——這對(duì)于人工智能研究者來說是最大的技術(shù)挑戰(zhàn)之一,但是也確實(shí)是關(guān)鍵的一個(gè)需求。自動(dòng)文本處理在日常計(jì)算機(jī)使用中相當(dāng)關(guān)鍵,在網(wǎng)頁搜索和內(nèi)容排名以及垃圾內(nèi)容分類中占重要組成部分。且當(dāng)它運(yùn)行的時(shí)候你完全感受不到它。隨著在線數(shù)據(jù)總量越來越大,需要有更靈活的工具來更好的理解這些大型數(shù)據(jù)集,來提供更加精準(zhǔn)的分類結(jié)果。
為了滿足這個(gè)需求,F(xiàn)acebook FAIR實(shí)驗(yàn)室開源了fastText。fastText是一個(gè)資料庫(kù),能針對(duì)文本表達(dá)和分類幫助建立量化的解決方案。關(guān)于fastText具體實(shí)現(xiàn)原理,F(xiàn)acebook另外發(fā)表了兩篇相關(guān)論文,兩篇論文具體信息如下:
Bag of Tricks for Efficient Text Classification(高效文本分類技巧)
Enriching Word Vectors with Subword Information(使用子字信息豐富詞匯向量)
fastText結(jié)合了自然語言處理和機(jī)器學(xué)習(xí)中最成功的理念。這些包括了使用詞袋以及 n-gram 袋表征語句,還有使用子字(subword)信息,并通過隱藏表征在類別間共享信息。我們另外采用了一個(gè)softmax層級(jí)(利用了類別不均衡分布的優(yōu)勢(shì))來加速運(yùn)算過程。這些不同概念被用于兩個(gè)不同任務(wù):
有效文本分類
學(xué)習(xí)詞向量表征
舉例來說:fastText能夠?qū)W會(huì)“男孩”、“女孩”、“男人”、“女人”指代的是特定的性別,并且能夠?qū)⑦@些數(shù)值存在相關(guān)文檔中。然后,當(dāng)某個(gè)程序在提出一個(gè)用戶請(qǐng)求(假設(shè)是“我女友現(xiàn)在在兒?”),它能夠馬上在fastText生成的文檔中進(jìn)行查找并且理解用戶想要問的是有關(guān)女性的問題。
在文本處理領(lǐng)域中深度神經(jīng)網(wǎng)絡(luò)近來大受歡迎,但是它們訓(xùn)練以及測(cè)試過程十分緩慢,這也限制了它們?cè)诖髷?shù)據(jù)集上的應(yīng)用。
fastText能夠解決這個(gè)問題,其實(shí)現(xiàn)過程如下所示:
對(duì)于有大量類別的數(shù)據(jù)集,fastText使用了一個(gè)分層分類器(而非扁平式架構(gòu))。不同的類別被整合進(jìn)樹形結(jié)構(gòu)中(想象下二叉樹而非 list)。
考慮到線性以及多種類別的對(duì)數(shù)模型,這大大減少了訓(xùn)練復(fù)雜性和測(cè)試文本分類器的時(shí)間。fastText 也利用了類別(class)不均衡這個(gè)事實(shí)(一些類別出現(xiàn)次數(shù)比其他的更多),通過使用 Huffman 算法建立用于表征類別的樹形結(jié)構(gòu)。因此,頻繁出現(xiàn)類別的樹形結(jié)構(gòu)的深度要比不頻繁出現(xiàn)類別的樹形結(jié)構(gòu)的深度要小,這也使得進(jìn)一步的計(jì)算效率更高。
Huffman 算法
fastText 另外使用了一個(gè)低維度向量來對(duì)文本進(jìn)行表征,通過總結(jié)對(duì)應(yīng)文本中出現(xiàn)的詞向量進(jìn)行獲得。在 fastText 中一個(gè)低維度向量與每個(gè)單詞都相關(guān)。隱藏表征在不同類別所有分類器中進(jìn)行共享,使得文本信息在不同類別中能夠共同使用。這類表征被稱為詞袋(bag of words)(此處忽視詞序)。在 fastText中也使用向量表征單詞 n-gram來將局部詞序考慮在內(nèi),這對(duì)很多文本分類問題來說十分重要。
實(shí)驗(yàn)表明 fastText 在準(zhǔn)確率上與深度學(xué)習(xí)分類器具有同等水平,特別是在訓(xùn)練和評(píng)估速率上要高出幾個(gè)數(shù)量級(jí)。使用 fastText能夠?qū)⒂?xùn)練時(shí)間從幾天降至幾秒,并且在許多標(biāo)準(zhǔn)問題上實(shí)現(xiàn)當(dāng)下最好的表現(xiàn)(例如文本傾向性分析或標(biāo)簽預(yù)測(cè))。
FastText與基于深度學(xué)習(xí)方法的Char-CNN以及VDCNN對(duì)比
文本分類對(duì)于商業(yè)界來說非常重要。垃圾郵件或釣魚郵件過濾器可能就是最典型的例子。現(xiàn)在已經(jīng)有能為一般分類問題(例如 Vowpal Wabbit 或 libSVM)設(shè)計(jì)模型的工具,但是 fastText 專注于文本分類。這使得在特別大型的數(shù)據(jù)集上,它能夠被快速訓(xùn)練。我們使用一個(gè)標(biāo)準(zhǔn)多核 CPU,得到了在10分鐘內(nèi)訓(xùn)練完超過10億詞匯量模型的結(jié)果。此外, fastText還能在五分鐘內(nèi)將50萬個(gè)句子分成超過30萬個(gè)類別。
除了文本分類以外,fastText也能被用來學(xué)習(xí)詞匯向量表征。利用其語言形態(tài)結(jié)構(gòu),fastText能夠被設(shè)計(jì)用來支持包括英語、德語、西班牙語、法語以及捷克語等多種語言。它還使用了一種簡(jiǎn)單高效的納入子字信息的方式,在用于像捷克語這樣詞態(tài)豐富的語言時(shí),這種方式表現(xiàn)得非常好,這也證明了精心設(shè)計(jì)的字符 n-gram 特征是豐富詞匯表征的重要來源。FastText的性能要比時(shí)下流行的word2vec工具明顯好上不少,也比其他目前最先進(jìn)的詞態(tài)詞匯表征要好。
不同語言下FastText與當(dāng)下最先進(jìn)的詞匯表征進(jìn)行比較
fastText基于Mac OS或者Linux系統(tǒng)構(gòu)筑,使用 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實(shí)驗(yàn)室最新開源工具fastText能將訓(xùn)練時(shí)間由數(shù)天縮短到幾秒鐘,相較于基于深度學(xué)習(xí)的模型方法,在保證同等精度的前提下fastText速度上快了幾個(gè)數(shù)量級(jí)。此外,fastText還能作為文本分類在實(shí)際應(yīng)用中的專業(yè)工具,特別是對(duì)于大型數(shù)據(jù)集能實(shí)現(xiàn)相當(dāng)快的訓(xùn)練速度。另外因其自身語言形態(tài)結(jié)構(gòu),fastText還能支持包括英語、德語、西班牙語、法語以及捷克語等多種語言。
PS : 本文由雷鋒網(wǎng)編譯,未經(jīng)許可拒絕轉(zhuǎn)載!
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。