用word2vec和fastText來生成word embedding

1. word2vec

原文鏈接:

Distributed Representations of Words and Phrases and their Compositionality

首先我們要知道Word2Vec包含了兩種詞訓練模型:CBOW模型和Skip-gram模型。
在這裏插入圖片描述
那麼word2vec到底是要做一件什麼事情呢?

下面以CBOW爲例進行講解:
在這裏插入圖片描述
其實word2vec可以分爲兩部分:

  1. 模型訓練
  2. 通過模型獲得word embedding

訓練過程如下:

  1. 輸入層:上下文單詞的onehot向量。 {假設單詞向量空間dim爲V,上下文單詞個數爲C}。
  2. 所有onehot分別乘以共享的輸入權重矩陣W.{V*N矩陣,N爲自己設定的數,初始化權重矩陣W}。
  3. 所得的向量 {因爲是onehot所以爲向量} 相加求平均作爲隱層向量,size爲1*N。
  4. 乘以輸出權重矩陣W’ {NV} 得到向量 {1V} 激活函數處理。
  5. 得到V-dim概率分佈 {PS:因爲是onehot嘛,其中的每一維斗代表着一個單詞},概率最大的index所指示的單詞爲預測出的中間詞(target word)。
  6. 與true label的onehot做比較,然後反向傳播調整參數。
  7. 上述過程迭代多次。

word2vec先基於訓練數據訓練一個神經網絡(如上圖所示,在訓練的過程中通過梯度下降算法不斷調整權重W和WW{}')。

當這個網絡訓練好以後,我們並不會利用這個訓練好的網絡處理新任務,我們真正需要的是這個模型通過訓練數據所學到的參數(權重W)。訓練完畢後,輸入層的每個單詞(one-hot向量)與矩陣W相乘得到的向量的就是我們想要的詞向量(word embedding)

需要說明的一點:因爲單詞是one-hot編碼,所以,所有單詞的word embedding所組成的矩陣就是W本身,這個矩陣叫做look up table。具體原因自己好好想一下。

由於上面介紹的比較簡單,想了解具體細節的看一下下面的幾篇博客:

第一篇以Skip-Gram模型爲例詳細的講解了word2vec的整體流程。

一文詳解 Word2vec 之 Skip-Gram 模型(結構篇)

第二篇以CBOW爲例,講的比較通俗易懂,很透徹。

小白都能理解的通俗易懂word2vec詳解

第三篇通過圖示的方式介紹了CBOW模型流程,更加便於理解。

自然語言處理之word2vec原理詞向量生成

原文中後面還有兩種加速方法:Negative Sample和Hierarchical Softmax,感興趣的可以看下面的博文:

不懂word2vec,還敢說自己是做NLP?

2. fastText

文章鏈接:

Enriching Word Vectors with Subword Information

代碼鏈接:

https://github.com/facebookresearch/fastText

fastText是在word2vec基礎上做的改進。

fastText的作者也就是word2vec的作者,所以兩者是一脈相承的。

word2vec是把每一個單詞作爲單獨的向量,並沒有考慮詞語的內部結構,那麼FastText相比於word2vec的創新就是考慮了詞語的形態構成,也就是加上了sub-word的信息,這樣的好處在於對於詞彙量很大的語言,通常有很多OOV,也可以通過sub-word去構成word進行詞向量表示。

作者認爲每一個詞,都可以由n-gram的詞袋特徵來表示,具體的表示見下面這個例子,假設n取3,對於單詞where,其可以表示爲,

<wh, whe, her, ere, re> + < where >

因此,此時模型要去學的就是wh, whe…等的向量表徵,再通過求和得到where的詞向量表徵,如下,
在這裏插入圖片描述
其中z_g表示n-gram的向量。

至此,fastText的模型結構部分就介紹完了。簡單總結一下就是word2vec和字符級向量表達的結合版。

實驗結果

用人工標記的單詞相似度來衡量幾個模型的效果。作爲baseline的模型是skipgram和cbow,由於FastText相對於baseline的一大優勢在於可以輸出未登錄詞的詞向量,所以增加了一個比對的模型,sisg-,這個模型也是FastText,只不過將所有未登錄詞輸出變爲NULL,這樣可以比對在失去對未登錄詞的適應性這個優勢的時候,FastText效果如何,從下表可以看出,即使將未登錄詞輸出都變爲NULL,結果也依然不弱於兩個baseline,如果是正常的FastText,sisg優勢就更加明顯了。

在這裏插入圖片描述
論文模型分析

在模型的實施細節裏,我注意到,對於英文數據的訓練,本模型要比相對應的skipgram基線模型慢1.5倍。粗粗看了一下模型實驗分析,大概能得出幾個比較重要的結論如下,

  1. 對於不同的語言,採用n-gram的字符級向量信息,帶來的收益並非都成正比。對於類似德文這樣多複合詞的,會取得更好的效果,但是對英文來說,則不一定適用。
  2. 對於語法學(syntactic)的問題,本文的模型表現的更優異,但是對於語意學(semantic)的問題,本文的模型則不會比基線模型表現的更好,有時候甚至表現的更糟糕。
  3. 對於訓練數據來說,作者實驗發現,本文提出的模型,對於小樣本的數據量,同樣有着優異的表現,並且對於生僻詞也有很好的表達。而且,隨着數據量樣本的增多,對於本文的模型的收益的增加,是不如傳統的word2vec模型的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章