自然語言煉丹之路(三之六)築基丹fasttext

2021-10-13 07:25:12 字數 1900 閱讀 4580

這是facebook的armand joulin 2017發表在eacl上的,四作是word2vec的作者。eacl和naacl是acl的兩個分別在歐洲和北美洲辦的子會議。已經開源在fasttext.cc上,更詳細的介紹和使用可以去這兒檢視。

模型歷史意義

之前的深度學習文字分類模型效果好,不需要特徵工程,但是速度太慢,無法在大規模分類任務上使用。基於機器學習的則多數是線性分類模型,速度快,效果還可以,但效果和特徵工程有很大關係。

fasttext模型效果與其他模型差不多,但是速度快了多個數量級,可以達到在多核cpu10分鐘內訓練10億詞,在1分鐘內訓練312k類別的50萬個句子。fasttext的分類任務基於cbow,詞訓練任務則基於skipgram。

技巧方面主要是提出了快速的線性分類器和基於softmax和n-gram的fasttext模型。

hashing trick

1-gram 詞表3萬

2-gram 詞表10萬

3-gram 詞表40萬

總詞表53萬,前3萬個乙個詞對映乙個向量,後40萬每6個詞對映為1個向量,共將近7萬個向量。

(一) 分類模型

這是基於cbow的,可以看到和cbow很像。一句話,詞表是v大小,每個詞onehot後輸入是1*v的,和v*d大小權重矩陣w相乘之後取平均得到1*d隱層向量,然後乘d*labels大小的權重矩陣w』得到1*labels大小的向量,做softmax得到**句子標籤的概率輸出(當然也可以接svm做分類)。

可以看到除了最後的w』維度和最前面的輸入是句子所有詞之外,其他的基本和cbow是相同的。

相同點:

1、都是log-linear模型(對數線性模型),模型非常簡單。當然softmax只是輸出概率,所以說都是線性模型也完全ok。

2、都是對輸入詞向量做平均,然後**輸出。

3、模型結構完全一樣。

不同點:

1、fasttext提取句子特徵,cbow提取上下文特徵。

2、fasttext需要標註語料,是監督模型;cbow是無監督模型。

fasttext的問題和解決方法:

1、類別過多時,softrmax依舊很慢, 使用層次softmax解決。

2、使用詞袋模型,沒有詞序資訊,使用n-gram模型解決。n-gram的n大的時候也會慢,可使用hash去解決,但hash會導致不太準確。

(二)子詞詞向量訓練模型

之前學習我們知道,用詞向量會產生oov詞(尤其網路語料因為簡寫和拼寫錯誤等),且可能考慮不到詞內部資訊。而用字元向量則會很慢。所以這裡採用子詞詞向量(subword embedding)的方式,即使用字元的n-gram代替詞,例如where的3-gram子詞表示是由的詞向量和where本身組合而來。《開頭是詞頭,>結尾是詞綴。

這時候的loss是對skip-gram的loss做了變形:

s (w

,c)=

∑g∈g

wzgt

vcs(w,c)=\sum_}z_g^tv_c

s(w,c)

=g∈g

w​∑​

zgt​

vc​v

cv_c

vc​是中心子詞向量,z是周圍子詞向量。

1、提出使用子詞訓練詞向量的方法,一定程度解決oov詞,且不需特徵工程。

2、提出新的文字分類方法,快速高效。

3、開源fasttext,工業界、學術界應用大大加速。

自然語言處理之 SentencePiece分詞

sentencepiece是乙個google開源的自然語言處理工具包。網上是這麼描述它的 資料驅動 跨語言 高效能 輕量級 面向神經網路文字生成系統的無監督文字詞條化工具。那麼它究竟是幹什麼的呢?先舉個例子 假設在資料探勘時,有一列特徵t是文字描述,我們需要將其轉成列舉型,或者多個布林型代入模型,即...

自然語言處理(六) 詞性消歧

詞性標註就是將每個單詞的詞性標註出來,標註的實現可以利用語料庫,但是同乙個單詞在不同的句子可能會有不同的詞性,這時就需要詞性消歧。下面舉乙個例子。以下三個句子,分別標註了詞性,np是名詞,vbn是過去分詞,vbd是過去式,by是介詞by 1 chapman np killed vbn john np...

自然語言處理(三) 主題模型

什麼是lda?latent dirichlet allocation 什麼是貝葉斯模型?事件 和y同時發生的概率 發生的概率 在 發生的情況下y發生的概率 y發生的概率 在y發生的情況下 發生的概率 要想理解lda,分為以下五個步驟 1 gamma函式 看完這三篇,基本上對gamma函式就有所了解了...