FastText 介紹
在面試百度的NLP工程師時,被問及常用的詞向量表示學習方法有哪些,我說知道word2vec,然后大佬又問我知道FastText么... 這就很尷尬了,不會!
不同於word2vec, fasttext利用的是詞的形態學信息,也就是詞的內部構造信息,也就是子詞信息。話說,利用fasttext是不是可以拿漢語的偏旁部首來訓練字向量?不過n-gram是需要字符序列信息的,漢字的筆畫順序?emmmmmm.........不過利用字向量得到詞向量確實很方便。
那什么是子詞信息?fasttext采用的character n-gram來做的,比如where這個詞,那么它的character 3-gram 子詞包含如下
<wh, whe, her, ere, re>以及本身<where>
這對尖括號的妙處在於,可以方便的講her這個單詞與where的子詞her進行區分,her的character 3-gram子詞包含的是
那么為什么要利用子詞信息呢?臉書的研究者們認為,像word2vec這類詞分布表示模型,詞與詞之間的信息沒有更好的共享,也就是參數沒有得到有效的共享,分解為粒度更小的子詞后,通過共享子詞表示,來達到信息共享的目的。
具體的做法做法
給定一個character n-gram 字典,假設大小為G,並且每個子詞都有自己的詞向量表示,那么詞w的詞向量,可以由構成它的所有子詞對應的向量求和來表示。另一點,與word2vec不一樣的是,fasttext使用的分類的方法,也就是根據與它計算score的另一個詞是否是上下文來進行二分類,具體用到的是logistics 回歸方法。
根據上面這些描述,大概可以發現一些端倪
- fasttext對罕見詞非常有利,因為罕見詞罕見是本身出現的次數足夠少,但是構成其的character n-gram肯定比詞本身出現的次數多,由於這些子詞是共享的,因此可以從高頻詞中受益。
- 其次,對於OOV問題, 由於一個詞可以被拆分成多個子詞,當前詞OOV,其大部分子詞講道理不會OOV,因此利用這些沒有OOV的子詞,可以在一定程度上緩解OOV問題。說到這里,想起了面螞蟻金服時候,一個p8的面試官問了我一些處理OOV問題的方法。