Word2vec負採樣

下文中的模型都是以Skip-gram模型爲主。
 
一、論文發展
word2vec中的負採樣(NEG)最初由 Mikolov在論文《Distributed Representations of Words and Phrases and their Compositionality》中首次提出來,是Noise-Contrastive Estimation(簡寫NCE,噪聲對比估計)的簡化版本。在論文中針對Skip-gram模型直接提出負採樣的優化目標函數爲:
其中Pn(w)是目標詞不是w的上下文的機率分佈。
論文中沒有給出證實,到了2014年,Yoav Goldberg在論文《word2vec Explained: Deriving Mikolov et al.’s Negative-Sampling Word-Embedding Method》裏對上述目標函數給出了推導。
 
二、原始的skip-gram模型的目標函數
若是沒有采用負採樣的話,那麼skip-gram模型的目標函數爲:
其中p(c|w)表示的是當前詞預測到的目標上下文的機率最大,C(w)是目標詞w的全部上下文集合。
相應地能夠簡化爲
式中D是語料中全部單詞和上下文的集合。
若是咱們採用softmax函數的話,那麼咱們能夠獲得對應每一個上下文的機率大小爲:
其中Vc和Vw能夠當作是對應詞c和詞w的詞向量。關於如何獲得這個式子能夠參考後面,那麼將該式子代入上式並取log能夠獲得:
對上述目標函數求最大化,可讓類似的詞具備類似的向量值。
 
三、採用負採樣的目標函數
可是對上述目標函數進行優化,第二項須要對詞典裏的全部詞進行優化,因此計算量比較大。若是換個角度考慮,若是咱們將正常的上下問組合當作是1,不正常的上下文組合當作是0,那麼問題轉換爲二分類問題,那麼咱們目標就是最大化下面的目標函數。
將輸出層的softmax函數改成sigmoid函數,那麼
一樣代入上式能夠獲得
可是這個目標函數存在問題,若是Vc=Vw,而且VcxVw足夠大的話,就能取到最大值,這樣全部詞向量都是同樣的,獲得的詞向量沒有意義。因此考慮負採樣,即引入負樣本,那麼
那麼獲得
則與Mikolov提出的式子是一致的。
 
四、如何推導獲得目標函數

 

五、舉例
以「今天|天氣|很是|不錯|啊」舉例,假設上下文只有一個詞,選擇目標詞是「天氣」,那麼出現的狀況有:
今天|天氣,很是|天氣,不錯|天氣,啊|天氣
因爲咱們假設上下文只有一個詞,那麼在這些狀況中只有【今天|天氣,很是|天氣】是正確的樣本。
當咱們採用【今天|天氣】這個樣本時,咱們但願輸入【天氣】,會輸出標籤【今天】,其餘機率都是0。
 
對於原始的skip-gram模型來講,這對應是一個4分類問題,當輸入【今天|天氣】時,那麼咱們可能出現的機率是P(今天|天氣)、P(很是|天氣)、P(不錯|天氣)和P(啊|天氣),咱們的目標就是讓P(今天|天氣)這個機率最大,可是咱們得同時計算其餘三類的機率,並在利用反向傳播進行優化的時候須要對全部詞向量都進行更新。這樣計算量很大,好比咱們這裏就要更新5*100=500個參數(假設詞向量維度是100維的)。
 
可是若是採用負採樣,當輸入【今天|天氣】時,咱們從【很是|不錯|啊】中選出1個進行優化,好比【不錯|天氣】,即咱們只需計算P(D=1|天氣,今天)和P(D=0|天氣,不錯),而且在更新的時候只更新【不錯】、【天氣】和【今天】的詞向量,這樣只需更新300個參數,計算量大大減小了。
 
六、參考資料
[1]word2vec Parameter Learning Explained
[2]word2vec Explained: Deriving Mikolov et al.’s Negative-Sampling Word-Embedding Method
[3]Note on Word Representation
[4]Distributed Representations of Words and Phrases and their Compositionality