fastText,智慧與美貌並重的文本分類及向量化工具

2021-03-01 雲腦科技CloudBrain

fastText是FAIR(Facebook AIResearch) 在2016年推出的一款文本分類與向量化工具。它的官網(fasttext.cc)上是這樣介紹的:

 

FastText is an open-source, free, lightweightlibrary that allows users to learn text representations and text classifiers.It works on standard, generic hardware. Models can later be reduced in size toeven fit on mobile devices.

 

fastText開源、免費、輕量級,適用於文本分類和文本向量化表示場景,運行於標準硬體環境。裁剪壓縮過的模型甚至可以輕鬆跑在行動裝置上。

 

fastText最驚豔的地方在於,和最前沿深度神經網絡模型相比,它在分類精度等指標毫不遜色的情況下,把訓練和推斷速度降低了幾個數量級!按Facebook的報告,在普通多核CPU上,10億詞的文本訓練時間小於10分鐘,50萬句子分到31.2萬類別用時小於1分鐘。

 

下面這張圖可以清楚地看到這一點,深度模型天級的訓練時間被壓榨到了秒級!

 

 

簡單介紹一下fastText的主要作者,這位高顏值的Facebook科學家Tomas Mikolov小哥。他2012年到2014年就職於Google,隨後跳到了Facebook至今。

 

 

他名揚天下的,主要是以下三篇重要論文:

1.Efficient Estimation of WordRepresentation in Vector Space, 2013 —— 這篇是word2vec的開蒙之作;

2.Distributed Representations ofSentences and Documents, 2014 —— 這篇將詞向量的思想擴展到了段落和文檔上;

3.Enriching Word Vectors withSubword Information, 2016 —— 這篇和fastText相關,引入了詞內的n-gram信息,豐富了詞向量的語義。

fastText能夠做到效果好,速度快,主要依靠兩個秘密武器:一是利用了詞內的n-gram信息(subword n-gram information),二是用到了層次化Softmax回歸(Hierarchical Softmax)的訓練trick。我們分別介紹一下。

Subword n-gramlnformation

在fastText的工作之前,大部分的文本向量化的工作,都是以詞彙表中的獨立單詞作為基本單元來進行訓練學習的。這種想法非常自然,但也會帶來如下的問題:

低頻詞、罕見詞,由於在語料中本身出現的次數就少,得不到足夠的訓練,效果不佳;

未登錄詞,如果出現了一些在詞典中都沒有出現過的詞,或者帶有某些拼寫錯誤的詞,傳統模型更加無能為力。

fastText引入了subword n-gram的概念來解決詞形變化(morphology)的問題。直觀上,它將一個單詞打散到字符級別,並且利用字符級別的n-gram信息來捕捉字符間的順序關係,希望能夠以此豐富單詞內部更細微的語義。我們知道,西方語言文字常常通過前綴、後綴、字根來構詞,漢語也有單字表義的傳統,所以這樣的做法聽起來還是有一定的道理。

 

舉個例子。對於一個單詞「google」,為了表達單詞前後邊界,我們加入<>兩個字符,即變形為「<google>」。假設我們希望抽取所有的tri-gram信息,可以得到如下集合:G = { <go, goo, oog,ogl, gle, le>}。在實踐中,我們往往會同時提取單詞的多種n-gram信息,如2/3/4/5-gram。這樣,原始的一個單詞google,就被一個字符級別的n-gram集合所表達。

 

在訓練過程中,每個n-gram都會對應訓練一個向量,而原來完整單詞的詞向量就由它對應的所有n-gram的向量求和得到。所有的單詞向量以及字符級別的n-gram向量會同時相加求平均作為訓練模型的輸入。

 

從實驗效果來看,subword n-gram信息的加入,不但解決了低頻詞未登錄詞的表達的問題,而且對於最終任務精度一般會有幾個百分點的提升。唯一的問題就是由於需要估計的參數多,模型可能會比較膨脹。不過,Facebook也提供了幾點壓縮模型的建議:

 

採用hash-trick。由於n-gram原始的空間太大,可以用某種hash函數將其映射到固定大小的buckets中去,從而實現內存可控;

採用quantize命令,對生成的模型進行參數量化和壓縮;

減小最終向量的維度。

需要注意的是以上幾種方法都會以一定的精度損失為代價,尤其是維度的壓縮,具體可以實踐中再權衡。

另一個效率優化的點是所謂的層次化Softmax。

 

Softmax大家都比較熟悉,它是邏輯回歸(logisticregression)在多分類任務上的推廣,是我們訓練的神經網絡中的最後一層。一般地,Softmax以隱藏層的輸出h為輸入,經過線性和指數變換後,再進行全局的歸一化處理,找到概率最大的輸出項。當詞彙數量V較大時(一般會到幾十萬量級),Softmax計算代價很大,是O(V)量級。

 

層次化的Softmax的思想實質上是將一個全局多分類的問題,轉化成為了若干個二元分類問題,從而將計算複雜度從O(V)降到O(logV)。

 

每個二元分類問題,由一個基本的邏輯回歸單元來實現。如下圖所示,從根結點開始,每個中間結點(標記成灰色)都是一個邏輯回歸單元,根據它的輸出來選擇下一步是向左走還是向右走。下圖示例中實際上走了一條「左-左-右」的路線,從而找到單詞w₂。而最終輸出單詞w₂的概率,等於中間若干邏輯回歸單元輸出概率的連乘積。

 

 

至此,我們還剩下兩個問題,一是如何構造每個邏輯回歸單元的輸入,另一個是如何建立這棵用於判斷的樹形結構。

邏輯回歸單元的參數

每個邏輯回歸單元中,sigmoid函數所需的輸入實際上由三項構成,如下公式所示:

記號說明如下:

1. ⟦x⟧是一個特殊的函數,如果下一步需要向左走其函數值定義為1,向右則取-1。在訓練時,我們知道最終輸出葉子結點,並且從根結點到葉子結點的每一步的路徑也是確定的。

2. v' 是每個內部結點(邏輯回歸單元)對應的一個向量,這個向量可以在訓練過程中學習和更新。

3. h 是網絡中隱藏層的輸出。

因此,我們以隱藏層的輸出、中間結點對應向量以及路逕取向函數為輸入,相乘後再經過sigmoid函數,得到每一步邏輯回歸的輸出值。

霍夫曼樹的構造

Hierarchical Softmax採用的樹型結構實際上是一棵二叉霍夫曼樹。

 

霍夫曼樹是在解決通信編碼過程中引入的。在通信過程中,需要將字符信息編碼成為0/1二進位串。顯然,給出現頻繁的字符較短的編碼,出現較少的字符以較長的編碼,是最經濟的方案。通過一棵霍夫曼樹的構造,我們讓越頻繁的字符離根結點越近,使得最終的通信編碼最短。

 

霍夫曼樹的構造步驟如下:

 

 

在做Hierarchical Softmax之前,我們需要先利用所有詞彙(類別)及其頻次構建一棵霍夫曼樹。這樣,不同詞彙(類別)作為輸出時,所需要的判斷次數實際上是不同的。越頻繁出現的詞彙,離根結點越近,所需要的判斷次數也越少。從而使最終整體的判斷效率更高。

這裡假設你對word2vec的CBOW模型比較熟悉,我們來小結一下CBOW和fastText的訓練過程有什麼不同。下面兩張圖分別對應CBOW和fastText的網絡結構圖。

 

兩者的不同主要體現在如下幾個方面:

 

輸入層:CBOW的輸入是目標單詞的上下文並進行one-hot編碼,fastText的輸入是多個單詞embedding向量,並將單詞的字符級別的n-gram向量作為額外的特徵;

從輸入層到隱藏層,CBOW會將上下文單詞向量疊加起來並經過一次矩陣乘法(線性變化)並應用激活函數,而fastText省略了這一過程,直接將embedding過的向量特徵求和取平均;

輸出層,一般的CBOW模型會採用Softmax作為輸出,而fastText則採用了Hierarchical Softmax,大大降低了模型訓練時間;

CBOW的輸出是目標詞彙,fastText的輸出是文檔對應的類標。

fastText已經在雲腦科技內部多個項目中得到了實踐運用,包括短文本分類任務、實體識別消歧任務、同義近義簡稱別名挖掘任務、推薦系統中的文本向量化特徵提取等等。

 

實踐經驗表明,fastText更適用於樣本數量大、類別標籤多的任務,一般能夠得到很好的效果,大多數情況下強於傳統的BOW + LR/SVM分類器。更重要的是,訓練效率非常之高。

1. 1607.01759Bag of Tricks for Efficient Text Classification

2. 1607.04606Enriching Word Vectors with Subword Information

3. [1411.2738]word2vec Parameter Learning Explained

4. 技術乾貨丨fastText原理及實踐 - 雲+社區 - 騰訊雲

數據系統負責人 黃頌

北京大學計算機碩士,超過13年的數據及算法實踐經驗。

曾在微軟亞洲研究院(MSRA)從事搜尋引擎技術研發、軟體安全數據挖掘工作。

愛幫網初創成員,帶領團隊在LBS數據挖掘和推薦算法上做到行業頂尖水平。

美麗說初創成員,高級架構師,負責搭建公司數據團隊及商業智能平臺,提供市場營銷及用戶增長策略支持,抓住流量紅利實現了用戶量快速增長。

對算法和金融等行業的結合,有著濃厚興趣和實戰經驗。

雲腦科技網站:

http://cloudbrain.ai

雲腦科技招聘信息:

http://www.cloudbrain.ai/join.html

相關焦點

  • 【NLP實戰】手把手帶你fastText文本分類
    也就是我們常說的fastText。最讓人欣喜的這篇論文配套提供了fasttext工具包。這個工具包代碼質量非常高,論文結果一鍵還原,目前已經是包裝地非常專業了,這是fastText官網和其github代碼庫,以及提供了python接口,可以直接通過pip安裝。這樣準確率高又快的模型絕對是實戰利器。
  • 文本分類經典論文:fasttext,textcnn解讀
    文本分類是自然語言處理領域一個非常經典的任務,一般文本分類分為三種,基於規則的文本分類,基於機器學習的文本分類和基於深度學習的文本分類。本文我們重點關注基於深度學習的文本分類,並為大家介紹文本分類中非常經典的fasttext和textcnn。
  • FastText的內部機制
    fasttext是一個被用於對詞向量和句子分類進行高效學習訓練的工具庫,採用c++編寫,並支持訓練過程中的多進程處理。你可以使用這個工具在監督和非監督情況下訓練單詞和句子的向量表示。這些訓練出來的詞向量,可以應用於許多處理數據壓縮的應用程式,或者其他模型的特徵選擇,或者遷移學習的初始化。
  • Keras-TextClassification 文本分類工具包
    為例進行多標籤分類實例,轉化為multi-onehot標籤類別,分類則取一定閥值的類- sentence_similarity/目錄下以bert為例進行兩個句子文本相似度計算,數據格式如data/sim_webank/目錄下所示- predict_bert_text_cnn.py- tet_char_bert_embedding.py- tet_char_bert_embedding.py
  • 文本分類需要CNN? No!fastText完美解決你的需求(上篇)
    僅這一篇文章,讓你了解word2vec的原理, CBOW、Skip-gram模型,以及目前業界最流行的文本分類算法——fastText。 2013年,Google的大牛Tomas Mikolov開源了word2vec算法,轟動一時(託馬斯大牛現在就職於FaceBook,並在16年中下旬開源了fastText算法,沒辦法,速度太快了)。
  • fastText原理及實踐
    你可能要問,這篇文章不是介紹fastText的麼,怎麼開始介紹起了word2vec?最主要的原因是word2vec的CBOW模型架構和fastText模型非常相似。於是,你看到facebook開源的fastText工具不僅實現了fastText文本分類工具,還實現了快速詞向量訓練工具。
  • 專欄 | fastText原理及實踐
    你可能要問,這篇文章不是介紹fastText的麼,怎麼開始介紹起了word2vec?最主要的原因是word2vec的CBOW模型架構和fastText模型非常相似。於是,你看到facebook開源的fastText工具不僅實現了fastText文本分類工具,還實現了快速詞向量訓練工具。
  • Facebook 開源的快速文本分類器 FastTex
    FastText是Facebook開發的一款快速文本分類器,提供簡單而高效的文本分類和表徵學習的方法,性能比肩深度學習而且速度更快。
  • 一文讀懂深度學習文本分類方法
    最近有很多小夥伴想了解深度學習在文本分類的發展,因此,筆者整理最近幾年比較經典的深度文本分類方法,希望幫助小夥伴們了解深度學習在文本分類中的應用。筆者整理了近些年的相關深度文本分類論文,關注「AI算法之心」,後臺回復「文本分類論文」即可下載。
  • NLP中的詞向量對比:word2vec/glove/fastText/elmo/GPT/bert
    目錄一、文本表示和各詞向量間的對比 1、文本表示哪些方法?2、怎麼從語言模型理解詞向量?怎麼理解分布式假設?3、傳統的詞向量有什麼問題?怎麼解決?各種詞向量的特點是什麼?4、word2vec和NNLM對比有什麼區別?(word2vec vs NNLM)5、word2vec和fastText對比有什麼區別?
  • 文本分類綜述 | 邁向NLP大師的第一步(上)
    (文末 下期預告 別錯過)綜述內涉及的所有文本分類必讀論文清單,我們已經為大家整理打包好啦,訂閱號後臺回復『文本分類』即可獲取喔~文本分類綜述A Survey on Text Classification: From Shallow to Deep Learning,2020[1]文本分類是自然語言處理中最基本,也是最重要的任務
  • 乾貨| 深度學習在文本分類中的應用
    文本分類的應用非常廣泛。3.5 字符級別的CNN用於文本分類論文Character-level convolutional networks for text classification將文本看成字符級別的序列,使用字符級別(Character-level)的CNN進行文本分類。
  • fastText的源碼,看這一篇就夠了!
    1 fasteText能幹什麼1.1 fastText是什麼fastText是Facebook AI Reserch在16年開源的一個詞向量及文本分類工具,性能比肩深度學習而且速度更快,能夠訓練模型「在使用標準多核CPU的情況下10分鐘內處理超過10億個詞彙」,特別是與深度模型對比,fastText能將訓練時間由數天縮短到幾秒鐘。
  • 基於Text-CNN模型的中文文本分類實戰
    本文介紹NLP中文本分類任務中核心流程進行了系統的介紹,文末給出一個基於Text-CNN模型在搜狗新聞數據集上二分類的Demo。文本分類是自然語言處理領域最活躍的研究方向之一,從樣本數據的分類標籤是否互斥上來說,可以分為文本多分類與文本多標籤分類。
  • 以BBC新聞文章為例:應用XGBoost等算法進行文本分類
    圖片來源:unsplash.com/@knightwill本文將以BBC新聞文章分類為例,討論不同的文本分類技術。同時,本文將討論如何用不同向量空間模型代表文本數據。/data/bbc-text.csv')bbc_text_df.head()表中似乎含有許多長文本。後續章節將對其作詳細論述。現在的問題是:若給定一個「文本」,就需要預測其類別。這無疑是一個多累文本分類的問題。
  • 【DS】Doc2Vec和Logistic回歸的多類文本分類
    2 您如何做文本分類?Doc2vec是一個NLP工具,用於將文檔表示為向量,是word2vec方法的推廣。為了理解doc2vec,最好理解word2vec方法。如果您是word2vec和doc2vec的新手,以下資源可以幫助您入門:在使用Scikit-Learn進行多類文本分類時使用相同的數據集,在本文中,我們將使用Gensim中的doc2vec技術對產品的投訴進行分類。讓我們開始吧!數據目標是將消費者金融投訴分為預先定義好的12類。這些數據可以從data.gov下載。
  • 達觀數據:如何用深度學習做好長文本分類與法律文書智能化處理
    在NLP領域中,文本分類輿情分析等任務相較於文本抽取,和摘要等任務更容易獲得大量標註數據。因此在文本分類領域中深度學習相較於傳統方法更容易獲得比較好的效果。正是有了文本分類模型的快速演進,海量的法律文書可以通過智能化處理來極大地提高效率。我們今天就來分析一下當前state of art的文本分類模型以及他們在法律文書智能化中的應用。
  • 手把手教你用 TensorFlow 實現文本分類(上)
    利用空閒時間,想用神經網絡做一個文本分類的應用, 目的是從頭到尾完成一次機器學習的應用,學習模型的優化方法,同時學會使用主流的深度學習框架(這裡選擇tensorflow)。文章分為兩部分,本文僅實現流程,用簡單的softmax回歸對文本進行分類,後面一篇文章再從流程的各個方面對模型進行優化,達到比較好的效果。
  • R語言自然語言處理:文本向量化——詞嵌入(Word Embedding)
    詞嵌入(Word Embedding)是文本向量化的一種,概念上而言,它是指把一個維數為所有詞的數量的高維空間嵌入到一個維數低得多的連續向量空間中,每個單詞或詞組被映射為實數域上的向量。如果我們得到詞向量,我們就可以輕易地進行這種計算,然後進行文本的理解。本來希望從word2vec的方法開始講實現,但是發現R對word2vec的支持確實不完善,很多教程連數據都無法下載成功,但是有一個包卻非常優秀,叫做text2vec。它不能做word2vec,但是卻能夠很好地實現GloVe。
  • 文本分類又來了,用 Scikit-Learn 解決多類文本分類問題
    翻譯 | 朱茵      整理 | 餘杭  MY 在商業領域有很多文本分類的應用,比如新聞故事通常由主題來分類;內容或產品常常被打上標籤;基於如何在線談論產品或品牌,用戶被分成支持者等等。然而大部分的文本分類文章和網上教程是二進位的文本分類,像垃圾郵件過濾(spam vs. ham)、情感分析(積極的和消極的)。在大量實例中,我們現實世界的問題要比這些複雜的多。因此,這是我們今天要做的:將消費者的財務投訴分成12個預定義的類。這些數據可以從 data.gov 下載。