word2vec原理(三): 基于Negative Sampling的模型
目錄
1.?Hierarchical Softmax的缺點與改進
2. Negative Sampling(負采樣)?概述
?3.?基于Negative Sampling的模型梯度計算
4.?Negative Sampling負采樣方法? ?
5.??基于Negative Sampling的CBOW模型
6.??基于Negative Sampling的Skip-Gram模型
7. ?Negative Sampling的模型源碼和算法的對應
1.?Hierarchical Softmax的缺點與改進
在講基于Negative Sampling的word2vec模型前,我們先看看Hierarchical Softmax的的缺點。的確,使用霍夫曼樹來代替傳統的神經網絡,可以提高模型訓練的效率。但是如果我們的訓練樣本里的中心詞是一個很生僻的詞,那么就得在霍夫曼樹中辛苦的向下走很久了。能不能不用搞這么復雜的一棵霍夫曼樹,將模型變的更加簡單呢?
Negative Sampling就是這么一種求解word2vec模型的方法,它摒棄了霍夫曼樹,采用了Negative Sampling(負采樣)的方法來求解,下面我們就來看看Negative Sampling的求解思路。
2. Negative Sampling(負采樣)?概述
? ? ? ? 既然名字叫Negative Sampling(負采樣),那么肯定使用了采樣的方法。采樣的方法有很多種,比如之前講到的大名鼎鼎的MCMC。我們這里的Negative Sampling采樣方法并沒有MCMC那么復雜。
? ? ? ? 比如我們有一個訓練樣本,中心詞是,它周圍上下文共有個詞,記為。由于這個中心詞的確和相關存在,因此它是一個真實的正例。通過Negative Sampling采樣,我們得到neg個和不同的中心詞,i=1,2,..neg,這樣和就組成了neg個并不真實存在的負例。利用這一個正例和neg個負例,我們進行二元邏輯回歸,得到負采樣對應每個詞的模型參數,和每個詞的詞向量。(和都是中心詞)
? ? ? ?從上面的描述可以看出,Negative Sampling由于沒有采用霍夫曼樹,每次只是通過采樣neg個不同的中心詞做負例,就可以訓練模型,因此整個過程要比Hierarchical Softmax簡單。
? ? ? ? 不過有兩個問題還需要弄明白:1)如果通過一個正例和neg個負例進行二元邏輯回歸呢? 2) 如何進行負采樣呢?
我們在第三節討論問題1,在第四節討論問題2.
?3.?基于Negative Sampling的模型梯度計算
? ? ? ? ? Negative Sampling也是采用了二元邏輯回歸來求解模型參數,通過負采樣,我們得到了neg個負例)。為了統一描述,我們將正例定義為。?
4.?Negative Sampling負采樣方法? ?
? ? ? ? 現在我們來看看如何進行負采樣,得到neg個負例。word2vec采樣的方法并不復雜,如果詞匯表的大小為,那么我們就將一段長度為1的線段分成份,每份對應詞匯表中的一個詞。當然每個詞對應的線段長度是不一樣的,由詞的個數占比確定,高頻詞對應的線段長,低頻詞對應的線段短:
? ? ? ? 在采樣前,我們將這段長度為1的線段劃分成等份,這里,這樣可以保證每個詞對應的線段都會劃分成對應的小塊。而份中的每一份都會落在某一個詞對應的線段上。在采樣的時候,我們只需要從個位置中采樣出neg個位置就行,此時采樣到的每一個位置對應到的線段所屬的詞就是我們的負例詞。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ?在word2vec中,M取值默認為。
5.??基于Negative Sampling的CBOW模型
6.??基于Negative Sampling的Skip-Gram模型
7. ?Negative Sampling的模型源碼和算法的對應
這里給出上面算法和word2vec源碼中的變量對應關系。
在源代碼中,基于Negative Sampling的CBOW模型算法在464-494行,基于Hierarchical Softmax的Skip-Gram的模型算法在520-542行。大家可以對著源代碼再深入研究下算法。
在源代碼中,neule對應我們上面的e, syn0對應我們的, syn1對應我們的,?layer1_size對應詞向量的維度,window對應。negative對應我們的neg,?table_size對應我們負采樣中的劃分數。
另外,vocab[word].code[d]指的是,當前單詞word的,第d個編碼,編碼不含Root結點。vocab[word].point[d]指的是,當前單詞word,第d個編碼下,前置的結點。這些和基于Hierarchical Softmax的是一樣的。
以上就是基于Negative Sampling的word2vec模型。
例子:
? ? ? ? 詞典V大小之所以會在目標函數中出現,是因為中心詞w c生成背景詞w o的概率P ( w o ∣ w c )使用了softmax,而softmax正是考慮了背景詞可能是詞典中的任一詞,并體現在softmax的分母上。
? ? ? ? 我們不妨換個角度,假設中心詞wc生成背景詞w o由以下相互獨立事件聯合組成來近似中心詞 w c 和背景詞 w o 同時出現在該訓練數據窗口中心詞 w c 和第1個噪聲詞 w 1 不同時出現在該訓練數據窗口(噪聲詞 w 1 按噪聲詞分布 P ( w ) 隨機生成,假設一定和 w c 不同時出現在該訓練數據窗口)…中心詞 w c 和第k個噪聲詞 w K 不同時出現在該訓練數據窗口(噪聲詞 w K 按噪聲詞分布 P ( w ) 隨機生成,假設一定和 w c 不同時出現在該訓練數據窗口)
我們可以使用σ ( x ) = 1 / ( 1 + exp ( ? x ) )函數來表達中心詞w c和背景詞w o同時出現在該訓練數據窗口的概率:
? ? ? ? ? ? ? ? ? ? ??
當我們把K取較小值時,每次隨機梯度下降的梯度計算開銷將由O ( | V | )降為O ( K )。
? ? ? ? ? ? ? ??
同樣地,當我們把K取較小值時,每次隨機梯度下降的梯度計算開銷將由O ( | V | )降為O ( K )。
層序softmax補充
層序softmax利用了二叉樹。樹的每個葉子節點代表著詞典V中的每個詞。每個詞w i相應的詞向量為v i。我們以下圖為例,來描述層序softmax的工作機制。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
假設l( w )為從二叉樹的根到代表詞w的葉子節點的路徑上的節點數,并設n( w , i )為該路徑上第i個節點,該節點的向量為u n ( w , i )。以上圖為例,l( w 3 ) = 4。那么,跳字模型和連續詞袋模型所需要計算的任意詞w i生成詞w的概率為:
? ? ? ? ? ? ? ? ? ? ??
我們可以使用隨機梯度下降在跳字模型和連續詞袋模型中不斷迭代計算字典中所有詞向量v和非葉子節點的向量u。每次迭代的計算開銷由O ( | V | )降為二叉樹的高度O ( log | V | )。
總結
以上是生活随笔為你收集整理的word2vec原理(三): 基于Negative Sampling的模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Word2vec基础之霍夫曼树
- 下一篇: word2vec原理(二):基于Hier