word2vec原理(二):基于Hierarchical Softmax的模型
? ? ? ? ?在word2vec原理(一) CBOW與Skip-Gram模型基礎中,說到了使用神經網絡的方法來得到詞向量語言模型的原理和一些問題,現在開始關注word2vec的語言模型如何改進傳統的神經網絡的方法。由于word2vec有兩種改進方法,一種是基于Hierarchical Softmax的,另一種是基于Negative Sampling的。本文關注于基于Hierarchical Softmax的改進方法,在下一篇討論基于Negative Sampling的改進方法。
1.?基于Hierarchical Softmax的模型概述
? ? ? ? 先回顧下傳統的神經網絡詞向量語言模型,里面一般有三層,輸入層(詞向量),隱藏層和輸出層(softmax層)。其最大的問題在于從隱藏層到輸出的softmax層的計算量很大,因為要計算所有詞的softmax概率,再去找概率最大的值。這個模型如下圖所示。其中V是詞匯表的大小。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? word2vec對這個模型做了改進:
? ? ? (1)首先,對于從輸入層到隱藏層的映射,沒有采取神經網絡的線性變換加激活函數的方法,而是采用簡單的對所有輸入詞向量求和并取平均的方法。比如輸入的是三個4維詞向量:(1,2,3,4),(9,6,11,8),(5,10,7,12),那么我們word2vec映射后的詞向量就是(5,6,7,8)。這里是從多個詞向量變成了一個詞向量。
? ? ?(2)第二個改進,是從隱藏層到輸出的softmax層的計算量。為了避免要計算所有詞的softmax概率,word2vec采用了霍夫曼樹來代替從隱藏層到輸出softmax層的映射。如何映射呢?
? ? ? ?由于輸出softmax層的概率計算變成了一棵二叉霍夫曼樹,那么我們的softmax概率計算只需要沿著樹形結構進行就可以了。如下圖所示,我們可以沿著霍夫曼樹從根節點一直走到我們的葉子節點的詞w。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ?和之前的神經網絡語言模型相比,霍夫曼樹的所有內部節點就類似之前神經網絡隱藏層的神經元,其中,根節點的詞向量對應我們映射后的詞向量,而所有葉子節點就類似于之前神經網絡softmax輸出層的神經元,葉子節點的個數就是詞匯表的大小。在霍夫曼樹中,隱藏層到輸出層的softmax映射不是一下子完成的,而是沿著霍夫曼樹一步步完成的,因此這種softmax取名為"Hierarchical Softmax"。
? ? ? ? 如何“沿著霍夫曼樹一步步完成”呢?在word2vec中,我們采用了二元邏輯回歸的方法,即:(1)規定沿著左子樹走,那么就是負類(霍夫曼樹編碼1);(2)沿著右子樹走,那么就是正類(霍夫曼樹編碼0)。判別正類和負類的方法是使用sigmoid函數,即:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ?其中是當前內部節點的詞向量,而θ則是我們需要從訓練樣本求出的邏輯回歸的模型參數。
? ? ? ? 使用霍夫曼樹有什么好處呢?(1)首先,由于是二叉樹,之前計算量為V,現在變成了log2V;(2)第二,由于使用霍夫曼樹,高頻的詞靠近樹根,這樣高頻詞需要更少的時間會被找到,這符合我們的貪心優化思想。
? ? ? ? 如何分配左右子樹呢?依據內部節點的邏輯回歸值(即概率)來分配為左右子樹。容易理解,被劃分為左子樹而成為負類的概率為 P(?)=1?P(+)。在某一個內部節點,要判斷是沿左子樹還是右子樹走的標準就是看P(?)、P(+)誰的概率值大。而控制誰的概率值大的因素一個是當前節點的詞向量,另一個是當前節點的模型參數θ。
對于上圖中的,如果它是一個訓練樣本的輸出,那么我們期望對于里面的隱藏節點的P(?)概率大,的P(?)P(?)概率大,的P(+)P概率大。
? ? ? ? 回到基于Hierarchical Softmax的word2vec本身,我們的目標就是找到合適的所有節點的詞向量和所有內部節點θ, 使訓練樣本達到最大似然。那么如何達到最大似然呢?
2. 基于Hierarchical Softmax的模型梯度計算
? ? ? ? 我們使用最大似然法來尋找所有節點的詞向量和所有內部節點θ。先拿上面的例子來看,我們期望最大化下面的似然函數:
? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ?對于所有的訓練樣本,我們期望最大化所有樣本的似然函數乘積。(公式有個錯誤處:應該是)
? ? ? ?為了便于我們后面一般化的描述,我們定義輸入的詞為w:
? ? ? ? ? ? ?:輸入詞從輸入層詞向量求和平均后的霍夫曼樹根節點詞向量
? ? ? ? ? ??:從根節點到w所在的葉子節點,包含的節點總數
?:w在霍夫曼樹中從根節點開始,經過的第i個節點表示為,
:對應的霍夫曼編碼為∈{0,1},其中i=2,3,...。
:該節點對應的模型參數表示為, 其中i=1,2,...?1,沒有i=是因為模型參數僅僅針對于霍夫曼樹的內部節點。
? ? ? ?定義經過的霍夫曼樹某一個節點j的邏輯回歸概率為P(dwj|xw,θwj?1),其表達式為:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ?那么對于某一個目標輸出詞,其最大似然為:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ??在word2vec中,由于使用的是隨機梯度上升法(因為結果輸出為最大概率的詞),所以并沒有把所有樣本的似然乘起來得到真正的訓練集最大似然,僅僅每次只用一個樣本更新梯度,這樣做的目的是減少梯度計算量。這樣我們可以得到的對數似然函數L如下:?
? ? ? ? ? ? ? ? ? ? ? ?
? ? ? 要得到模型中詞向量和內部節點的模型參數θ, 我們使用梯度上升法即可。首先我們求模型參數的梯度:?
? ? ? ? ? ? ? ??
? ? ? ? 同樣的方法,可以求出的梯度表達式如下:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? 有了梯度表達式,我們就可以用梯度上升法進行迭代一步步的求解我們需要的所有的和。?
? ? ? ? 所以,word2vec 使用Hierarchical Softmax對CBOW和Skip-Gram損失結構進行了改進,同時,又利用負采樣方式,改進了模型訓練。
3. 基于Hierarchical Softmax的CBOW模型
4. 基于Hierarchical Softmax的Skip-Gram模型
5. Hierarchical Softmax的模型源碼和算法的對應
? ?這里給出上面算法和word2vec源碼中的變量對應關系。
在源代碼中,基于Hierarchical Softmax的CBOW模型算法在435-463行,基于Hierarchical Softmax的Skip-Gram的模型算法在495-519行。大家可以對著源代碼再深入研究下算法。
在源代碼中,neule對應我們上面的e, syn0對應我們的, syn1對應我們的,?layer1_size對應詞向量的維度,window對應。
另外,vocab[word].code[d]指的是,當前單詞word的第d個編碼,編碼不含Root結點。vocab[word].point[d]指的是,當前單詞word,第d個編碼下,前置的結點。
總結
以上是生活随笔為你收集整理的word2vec原理(二):基于Hierarchical Softmax的模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: word2vec原理(三): 基于Neg
- 下一篇: 文本挖掘预处理流程总结(1)— 中文