1. 程式人生 > >word2vec的負取樣演算法

word2vec的負取樣演算法

請檢視如上連線,有相關圖片

負取樣演算法

任何取樣演算法都應該保證頻次越高的樣本越容易被取樣出來。基本的思路是對於長度為1的線段,根據詞語的詞頻將其公平地分配給每個詞語:

counter就是w的詞頻。

於是我們將該線段公平地分配了:

接下來我們只要生成一個0-1之間的隨機數,看看落到哪個區間,就能取樣到該區間對應的單詞了,很公平。

但怎麼根據小數找區間呢?速度慢可不行。

word2vec用的是一種查表的方式,將上述線段標上M個“刻度”,刻度之間的間隔是相等的,即1/M:

接著我們就不生成0-1之間的隨機數了,我們生成0-M之間的整數,去這個刻度尺上一查就能抽中一個單詞了。

在word2vec中,該“刻度尺”對應著table陣列。具體實現時,對詞頻取了0.75次冪:

這個冪實際上是一種“平滑”策略,能夠讓低頻詞多一些出場機會,高頻詞貢獻一些出場機會,劫富濟貧。