Word2vec負采樣
阿新 • • 發佈:2018-06-02
比較 最大值 概率 repr 詞向量 [1] 直接 wid 證明 下文中的模型都是以Skip-gram模型為主。
1、論文發展
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》裏對上述目標函數給出了推導。
2、原始的skip-gram模型的目標函數
如果沒有采用負采樣的話,那麽skip-gram模型的目標函數為:
其中p(c|w)表示的是當前詞預測到的目標上下文的概率最大,C(w)是目標詞w的所有上下文集合。
相應地可以簡化為
式中D是語料中所有單詞和上下文的集合。
如果我們采用softmax函數的話,那麽我們可以得到對應每個上下文的概率大小為:
其中Vc和Vw可以看成是對應詞c和詞w的詞向量。關於如何得到這個式子可以參考後面,那麽將該式子代入上式並取log可以得到:
對上述目標函數求最大化,可以讓相似的詞具有相似的向量值。
3、采用負采樣的目標函數
但是對上述目標函數進行優化,第二項需要對詞典裏的所有詞進行優化,所以計算量比較大。如果換個角度考慮,如果我們將正常的上下問組合看成是1,不正常的上下文組合看成是0,那麽問題轉換為二分類問題,那麽我們目標就是最大化下面的目標函數。
將輸出層的softmax函數改為sigmoid函數,那麽
同樣代入上式可以得到
但是這個目標函數存在問題,如果Vc=Vw,並且VcxVw足夠大的話,就能取到最大值,這樣所有詞向量都是一樣的,得到的詞向量沒有意義。所以考慮負采樣,即引入負樣本,那麽
令
那麽得到
則與Mikolov提出的式子是一致的。
4、如何推導得到目標函數
[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
5、舉例 以“今天|天氣|非常|不錯|啊”舉例,假設上下文只有一個詞,選擇目標詞是“天氣”,那麽出現的情況有: 今天|天氣,非常|天氣,不錯|天氣,啊|天氣 由於我們假設上下文只有一個詞,那麽在這些情況中只有【今天|天氣,非常|天氣】是正確的樣本。 當我們采用【今天|天氣】這個樣本時,我們希望輸入【天氣】,會輸出標簽【今天】,其他概率都是0。 對於原始的skip-gram模型來說,這對應是一個4分類問題,當輸入【今天|天氣】時,那麽我們可能出現的概率是P(今天|天氣)、P(非常|天氣)、P(不錯|天氣)和P(啊|天氣),我們的目標就是讓P(今天|天氣)這個概率最大,但是我們得同時計算其他三類的概率,並在利用反向傳播進行優化的時候需要對所有詞向量都進行更新。這樣計算量很大,比如我們這裏就要更新5*100=500個參數(假設詞向量維度是100維的)。 但是如果采用負采樣,當輸入【今天|天氣】時,我們從【非常|不錯|啊】中選出1個進行優化,比如【不錯|天氣】,即我們只需計算P(D=1|天氣,今天)和P(D=0|天氣,不錯),並且在更新的時候只更新【不錯】、【天氣】和【今天】的詞向量,這樣只需更新300個參數,計算量大大減少了。 6、參考資料
Word2vec負采樣