Word Embedding Papers | 经典再读之fastText
關于作者:張正,坐標巴黎,上班NLP,下班詞嵌入。
從詞嵌入到句嵌入
到底什么是 fastText ?
先說結論,fastText 在不同語境中至少有兩個含義:
1. 在文章 Bag of Tricks for Efficient Text Classification [1] 中,fastText 是作者提出的文本分類器的名字。與 sub-word 無關!也不是新的詞嵌入訓練模型!是 word2vec 中 CBOW 模型的簡單變種。
2. 作為 Facebook 開源包,fastText [6] 是用來訓練詞嵌入或句嵌入的,其不僅包括 1 中論文的代碼實現,還包括 Enriching Word Vectors with Subword Information [2]?及 FastText.zip: Compressing text classification models [3] 兩文的代碼實現。
本來覺得這些含義區別不重要,直到連我自己都被弄迷糊了。在寫這篇解讀前,我心中的 fastText 一直是第三種含義:用 sub-word 信息加強詞嵌入訓練,解決 OOV(Out-Of-Vocabulary)表征的方法。結果帶著這個預先的理解讀 Bag of Tricks for Efficient Text Classification,越讀越迷惑。
為理清思路,第一小節我們就先講講 Bag of Tricks for Efficient Text Classification 中的 fastText,第二小節則圍繞 Enriching Word Vectors with Subword Information。
1.1 Abstract
“本文探索了一種簡單有效的文本分類基準(方法)。我們的實驗表明,我們的快速文本分類器 fastText 在準確性方面與深度學習分類器平分秋色,其訓練和評估速度(相比深度學習模型更是)要快許多個數量級。
我們可以使用標準的多核 CPU 在不到 10 分鐘的時間內用 fastText 訓練超過 10 億個單詞,并在一分鐘之內將 50 萬個句子在 31 萬 2 千個類中做分類。”
作者中又出現了托老師,不知道是不是受他影響,這篇文章在表述上也很有 word2vec 的味道,更不用說模型本身。fastText 和 word2vec 的賣點都是簡單高效(快)。
1.2 一句話介紹fastText
word2vec 的 CBOW 模型中將中心詞替換為類別標簽就得到了 fastText。
具體到一些小區別:
CBOW 中詞袋的大小由 window_size 決定,而 fastText 中就是整個要分類的文本。
CBOW 實際運行中用 Hierarchical softmax,fastText 用 softmax 或 Hierarchical softmax,具體試類的數量決定。
這就是一個標配版且可以實際應用的 fastText 了,我要再強調三點它和 CBOW 無區別的地方,因為在別的講該論文的文章中看到了一些錯誤的理解:
CBOW 和 fastText 都是用平均值來預測的。(CBOW 不是求和,是求平均)
N-gram 對于 CBOW 和 fastText 都是錦上添花的元素,不是標配。
詞向量初始化都是隨機的,fastText 并沒有在 word2vec 預訓練詞嵌入的基礎上再訓練。
1.3 對N-gram的理解
如果沒有重新讀這篇文章,我也會下意識地往 character 級別想,但是必須要在此強調:這篇文章和 character 沒有任何關系!文章中的 n-gram 出自 Character-level Convolutional Networks for Text Classification [4],是 word 級別的。與我在 word2vec 中提到的 phrases 類似。
在此梳理幾個概念:
BOW (Bag-Of-Words):給你一個句子,統計每個詞在其中出現的次數,這種表征方法就是 BOW。
CBOW?(Continuous BOW):托老師在 BOW 前加了個 C,就是因為word2vec 并沒有基于詞頻,而是連續的分布式的表征(continuous distributed representation)。
n-gram (or word n-gram):“我寫知乎”,bi-gram 就是“我寫”,“寫知”和“知乎”。
character-level n-gram:中文不太好講 word 和 character 的區別,深入到字母級別,把一個詞拆成字母串。Enriching Word Vectors with Subword Information 中是 character-level n-gram,這里不是。
作者的實驗證明,引入 word n-gram 可以提升一些任務的表現,原因是標配版中只用 word 級別求平均值完全忽略了詞序,而 n-gram 保留了小范圍的部分詞序,對于文本表征是有意義的,從這個角度也可以判斷此處的 n-gram 應當是詞級別而不是 character 級別的。
這篇文章可以看作是 word2vec 的一個延伸,并不是 fastText 出名的原因。
1.4 “假裝看過代碼”
我要坦白:我確實沒仔細看過 fastText 的源碼。因此從代碼角度來解釋 n-gram 在不同 fastText 版本中的區別我直接引用評論 keep fighting 同學的內容,非常感謝!不同于 word2vec,fastText 源碼和論文是相互匹配的,可以交叉驗證我們對 n-gram 的理解。
1.5 創新性有限的fastText.zip
同 word2vec 一樣,softmax 給模型的計算量、內存占用都帶來了很大的負擔。對 fastText 而言,隨著文本數量和詞典規模增大,內存占用會極大地攀升。針對該問題,FastText.zip: Compressing text classification models [5] 研究了如何在對模型效果影響不大的情況下節省內存。
按照慣例,我們還是簡單翻一下 abstract:
“我們考慮生成用于文本分類的緊湊架構的問題,從而使整個模型適配有限的內存。在考慮了受 hashing 相關文獻啟發的不同解決方案后,我們提出了一種基于 PQ 算法(Product Quantization)來存儲詞嵌入的方法。雖然原始技術會導致準確性下降,但我們將此方法改編為規避量化偽像。
雖然原版方法會導致準確性下降,但我們將此方法改進為可以規避 quantization artefacts 的(我盡力了,但我真的不知道這里怎么翻譯,求大神指導)。在幾個基準測試上的實驗結果表明,我們的方法通常僅需要比 fastText 少兩個數量級的內存,而在準確性方面僅稍差一些。就內存使用率和準確性之間的平衡而言,它比現有技術高出許多。”
如 OpenReview 所說,這篇文章是用已經存在的模型壓縮方法(如 PQ 算法、用 hashing 來縮小詞典內存占用等),創新性有限。何況 ICLR 更關注 DL 模型而不是 NLP 文本分類部分,因此被拒也可以理解。
從詞嵌入到子詞嵌入
接著再聊聊文章 Enriching Word Vectors with Subword Information [7],真 fastText。
2.1 Abstract
“在大型未標注語料庫上訓練的連續詞表征對于許多自然語言處理任務有用。通過為每個單詞分配不同的向量,學習此類表征的流行模型會忽略單詞的詞法(形態學)信息。這是一個限制,尤其是對于具有大量詞匯和許多罕見詞的語言。
在本文中,我們提出了一種基于 skipgram 模型的新方法,其中每個單詞都被表示為一個 n- 字袋(我實在找不到特別貼切的中文翻譯,此處“ n- 字袋”對應 cbow 里的“詞袋”)。一個向量表征與每個 n- 字(符)有關;單詞被表示為它們(n- 字表征)的總和。
我們的方法很快速,(它)允許在大型語料庫上快速訓練模型,并允許我們為未出現在訓練數據中的單詞計算其表征。我們在詞的相似性和類比任務上用九種不同的語言評估我們的詞表征。通過與最近提出的(基于)形態學的詞表征法進行比較,我們證明了我們的向量在這些任務上實現了最先進的性能。”
原版 abstract 只有一段,為了結構清晰,被我拆成了以上三部分。
fastText 依舊是 skip-gram 模型基礎上的延展(畢竟通訊作者是托老師)。但不同于 word2vec 最小單位是詞(word),它引入了詞中 n 個字(character)的信息。這樣做的目的,是為了解決 word2vec 沒能解決的 OOV(Out-Of-Vocabulary)問題,即如何表示不在詞典中,從未見過的詞。當然,按照 fastText 的光榮傳統,它不僅局限于英語,而是關注多語詞嵌入。
2.2 拆!詞到子詞(subword,n-grams)
這篇文章的精華當然是如何把一個詞拆成子詞(subword),子詞就是詞中 n 個字母的集合。
照搬文中給的例子:
你看這個“where”,
它又長又寬,
就像這個貓它又大又圓,
你們來這里閱讀,
覺得,圖很,好看,
就像我給你們扯淡,
一樣很開心。
吸完我家的貓后,來繼續說 “where”,假設我們要把它拆成 3 個字母的集合,我們很容易就得到:“whe”,“her”,“ere”。是不是覺得哪里不對,如果這樣做的話,如何區分單詞 “her” 和 3-grams 中的 “her”。
因此,重點來了,作者提出了給單詞頭尾加上“<>”符號,“where” 就成了“<where>”,這樣其 3-grams 的完全體就是:
“<wh”,“whe”,“her”,“ ere”,“ re>”
而單詞“her”就成了“<her>”,就可以與“her”區分開了。
2.3 塞!把子詞塞進skip-gram
說完了如何把詞拆成子詞,那么下面唯一的問題就是怎么把拆出來的塞進 skip-gram 模型了。我們先想下總共有多少種選擇?三種。
只有子詞
只有詞
子詞加詞
有幾個位置可以塞?兩個。
回想下 skip-gram 模型,用中心詞來預測上下文中的一個詞。因此兩個位置是:
1. 中心詞
2. 上下文詞
綜上,一共有 6 種選擇,當然更準確點說是 5 種,畢竟 a2+b2 是 skip-gram 本尊。
fastText 的選擇是:a3+b2!
這是一個非常容易被忽視的點,fastText 中是把詞本身加入到 n-grams 袋中的。如下原文為證:
We also include the word w itself in the set of its n-grams, to learn a representation for each word (in addition to character n-grams).?
中心詞的詞向量是 n-grams 袋(n-grams 袋中也包含詞本身)中所有向量的和。而要去預測的上下文詞,就是正常詞向量,沒有用到子詞信息。
2017 ACL 的 fastText 展示提問環節,有人問過為什么不是 a1,作者的回答是他們試過 a1,發現效果不好。
2.3 當你遇到OOV
word2vec 時期,遇到訓練時沒遇到的詞,它的詞向量無法得到。有了 fastText,對于 OOV 詞,直接對其 n-gram 向量求和就 ok。
當然,這樣做的前提是基于詞的拼寫、子詞在形態學上是有意義的。因此,不同語言,不同效果,作者發現這種方法對阿拉伯語、德語和俄語就比對英語、法語和西班牙語效果好。
中國字的偏旁就像 subword 一樣,看一個字的組成也能大概猜想其含義,不知道有沒有中國字版的 fastText?希望有知乎大神作答。
2.4 長文如何寫?
把一篇文章寫長實在太難了:要么你提出的算法非常完整,4 頁完全不夠寫;要么你的實驗分析做得非常完善,讓人可以通過它對你提出的方法獲得全面的理解。這篇文章是 ACL 的一篇長文,是后者的典范。實驗和結果分析部分也非常值得學習。
結尾彩蛋,fastText 作者 Armand Joulin 是我非常喜歡的研究者之一,我也很榮幸能邀請到他作我博士答辯委員會的評審之一。
按照慣例,答辯時會給每位評審準備一份演講 PPT 的縮印版。答辯結束回收這些材料時,看到 Armand 在縮印版上寫下了很多有意義的筆記和問題,還順手留下了兩幅大作。(可見我講的是多么無聊。。。)
希望大家能在其中看出什么驚人的 NLP idea。
Stay Hungry. Stay Foolish.
參考文獻
[1] Bag of Tricks for Efficient Text Classification https://arxiv.org/pdf/1607.01759.pdf?
[2] Enriching Word Vectors with Subword Information https://arxiv.org/pdf/1607.04606.pdf?
[3] FastText.zip: Compressing text classification models https://arxiv.org/pdf/1612.03651.pdf?
[4] Character-level Convolutional Networks for Text Classification https://papers.nips.cc/paper/5782-character-level-convolutional-networks-for-text-classification.pdf?
[5] FastText.zip: Compressing text classification models https://arxiv.org/abs/1612.03651?
[6] https://fasttext.cc?
[7] Enriching Word Vectors with Subword Information https://www.aclweb.org/anthology/Q17-1010.pdf
更多閱讀
#投 稿?通 道#
?讓你的論文被更多人看到?
如何才能讓更多的優質內容以更短路徑到達讀者群體,縮短讀者尋找優質內容的成本呢?答案就是:你不認識的人。
總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學者和學術靈感相互碰撞,迸發出更多的可能性。?
PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優質內容,可以是最新論文解讀,也可以是學習心得或技術干貨。我們的目的只有一個,讓知識真正流動起來。
?????來稿標準:
? 稿件確系個人原創作品,來稿需注明作者個人信息(姓名+學校/工作單位+學歷/職位+研究方向)?
? 如果文章并非首發,請在投稿時提醒并附上所有已發布鏈接?
? PaperWeekly 默認每篇文章都是首發,均會添加“原創”標志
?????投稿郵箱:
? 投稿郵箱:hr@paperweekly.site?
? 所有文章配圖,請單獨在附件中發送?
? 請留下即時聯系方式(微信或手機),以便我們在編輯發布時和作者溝通
????
現在,在「知乎」也能找到我們了
進入知乎首頁搜索「PaperWeekly」
點擊「關注」訂閱我們的專欄吧
關于PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
總結
以上是生活随笔為你收集整理的Word Embedding Papers | 经典再读之fastText的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CVPR 2020雾天条件下物体检测挑
- 下一篇: 余额宝有什么用