1. word2vec
原文鏈接:
Distributed Representations of Words and Phrases and their Compositionality
首先我們要知道Word2Vec包含了兩種詞訓練模型:CBOW模型和Skip-gram模型。
那麼word2vec到底是要做一件什麼事情呢?
下面以CBOW爲例進行講解:
其實word2vec可以分爲兩部分:
- 模型訓練
- 通過模型獲得word embedding
訓練過程如下:
- 輸入層:上下文單詞的onehot向量。 {假設單詞向量空間dim爲V,上下文單詞個數爲C}。
- 所有onehot分別乘以共享的輸入權重矩陣W.{V*N矩陣,N爲自己設定的數,初始化權重矩陣W}。
- 所得的向量 {因爲是onehot所以爲向量} 相加求平均作爲隱層向量,size爲1*N。
- 乘以輸出權重矩陣W’ {NV} 得到向量 {1V} 激活函數處理。
- 得到V-dim概率分佈 {PS:因爲是onehot嘛,其中的每一維斗代表着一個單詞},概率最大的index所指示的單詞爲預測出的中間詞(target word)。
- 與true label的onehot做比較,然後反向傳播調整參數。
- 上述過程迭代多次。
word2vec先基於訓練數據訓練一個神經網絡(如上圖所示,在訓練的過程中通過梯度下降算法不斷調整權重W和)。
當這個網絡訓練好以後,我們並不會利用這個訓練好的網絡處理新任務,我們真正需要的是這個模型通過訓練數據所學到的參數(權重W)。訓練完畢後,輸入層的每個單詞(one-hot向量)與矩陣W相乘得到的向量的就是我們想要的詞向量(word embedding)。
需要說明的一點:因爲單詞是one-hot編碼,所以,所有單詞的word embedding所組成的矩陣就是W本身,這個矩陣叫做look up table。具體原因自己好好想一下。
由於上面介紹的比較簡單,想了解具體細節的看一下下面的幾篇博客:
第一篇以Skip-Gram模型爲例詳細的講解了word2vec的整體流程。
一文詳解 Word2vec 之 Skip-Gram 模型(結構篇)
第二篇以CBOW爲例,講的比較通俗易懂,很透徹。
第三篇通過圖示的方式介紹了CBOW模型流程,更加便於理解。
原文中後面還有兩種加速方法:Negative Sample和Hierarchical Softmax,感興趣的可以看下面的博文:
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倍。粗粗看了一下模型實驗分析,大概能得出幾個比較重要的結論如下,
- 對於不同的語言,採用n-gram的字符級向量信息,帶來的收益並非都成正比。對於類似德文這樣多複合詞的,會取得更好的效果,但是對英文來說,則不一定適用。
- 對於語法學(syntactic)的問題,本文的模型表現的更優異,但是對於語意學(semantic)的問題,本文的模型則不會比基線模型表現的更好,有時候甚至表現的更糟糕。
- 對於訓練數據來說,作者實驗發現,本文提出的模型,對於小樣本的數據量,同樣有着優異的表現,並且對於生僻詞也有很好的表達。而且,隨着數據量樣本的增多,對於本文的模型的收益的增加,是不如傳統的word2vec模型的。