word2vec原理_深入理解Word2Vec底层原理
本文主要三個部分:
(1)DNN如何計算字詞的語義特征表示
(2)word2vec如何計算字詞的語義特征表示
(3)霍夫曼對于word2vec的意義
詞嵌入,就是將文本的單詞嵌入數學空間中。
不同于one_hot這種暴力映射,無法衡量字詞的語義空間距離。Word2vec采用的是低緯稠密矩陣去表征字詞的語義關系。
但是如何才能得到每個字/詞的低維稠密矩陣呢?
在談Word2vec的做法之前,先談談用一般的DNN模型如何得到。
一、DNN如何計算字詞的語義特征表示
以上圖為例,要得到learning的詞向量,我們通過滑窗,得到learning前4個單詞和后4個單詞,并將其轉換為one_hot編碼作為輸入,通過隱藏層輸出層,最后softmax預測learning的詞向量,預測的值與實際的learning的one_hot編碼進行誤差計算,從而得到優化函數,通過梯度下降,從而得到隱藏層的權重系數矩陣。
而要求的正是隱藏層的權重系數矩陣,權重系數正是文本中各個詞的詞向量。
二、word2vec用于計算字詞的語義特征表示
相比于DNN的做法,word2vec有很大的不同,甚至可以說面目全非。以CBOW模型為例。
首先,DNN有輸入層(輸入為one_hot編碼)、隱藏層(參數正是要求得的詞向量)、輸出層(sotfmax)。
1) 輸入層,word2vec采用累加求和取平均的方式,而輸入也不再是one_hot,而是隨機初始化的。
2c代表當前詞的上下文個數2) 沒有了隱藏層,取而代之的是投影層,也就是輸入的累加求和的結果。這和DNN就已經有本質上的不同了,我們前面說了隱藏層的參數值正是最后要求得的詞向量,那word2vec如何得到每個字詞的詞向量(或者說語義特征表示)呢?后面在梯度上升的時候會提到,累加求和的Xw會作為變量進行梯度優化,最后去更新每個輸入的隨機初始化的向量(也就是上面公式的Xi),更新到最后的向量就是最終要求得語義特征表示。
3) word2vec為了解決輸出層高維的softmax概率分布(從隱藏層到輸出的softmax層的計算量很大,因為要計算所有詞的softmax概率,再去找概率最大的值),采用了最優二叉樹——霍夫曼樹。
下面詳細介紹霍夫曼樹是如何在word2vec中發揮作用的。
三、 霍夫曼對于word2vec的意義
本節參考:
深入學習二叉樹(三) 霍夫曼樹?www.jianshu.comword2vec原理(二) 基于Hierarchical Softmax的模型?www.cnblogs.comA,B,C,D為葉子節點,每個葉子節點均有權重,而霍夫曼樹則是每次合并兩個權重最小的節點,最終到達根節點。
而在word2vec中,為了避免要計算所有詞的softmax概率,word2vec采樣了霍夫曼樹來代替從隱藏層到輸出softmax層的映射。
正如上文所述,霍夫曼樹之于word2vec最大的意義是降低softmax計算量,如何實現這一目的的呢?
Word2vec中的霍夫曼樹葉子節點為詞匯表中的詞,權重為該詞的詞頻,這樣離根節點最近的就是詞頻最大的節點,而詞頻越大,softmax的概率最大的機率也就越大,也就是神經網絡輸出層softmax后概率最大的就越可能是詞頻最大的詞,這樣路徑也就越短,計算量就越小(因為詞頻越大,越靠近根節點,路徑自然就越短,連乘的次數就越少,計算量自然就越小),這是一種貪心策略。
簡單來說,我們希望找到輸入概率最大的輸出,而現在隱藏層到輸出層已經被構建成一棵霍夫曼二叉樹,那么詞頻越高的詞越有可能是這個輸入的輸出,計算量相比于詞頻低的詞更小。
通過標注數據相當于我們已經知道葉子節點是哪個,在輸入與輸出都已知的情況下,我們只需要讓這條路徑發生的可能性最大就行了。
那么應該如何去度量某條路徑發生的概率呢?
在word2vec中,要到達某個葉子節點到底是沿著左叉樹還是右叉樹是通過simoid函數來確定,并且約定左子樹編碼為1(負類-),右子樹編碼為0(正類+),同時約定左子樹的權重不小于右子樹的權重。
其中Xw是當前內部節點的詞向量,而θ則是我們需要從訓練樣本求出的邏輯回歸的模型參數。而負類的概率P(?)=1?P(+)。
那么上圖W2的輸出概率為:
到這里應該就很簡單了,概率最大下的參數估計,用最大似然估計計算就好了。
更為一般化的公式:
接下來,就可以通過梯度上升法來更新我們的θ和Xw,從而更新Xi,得到最終的每個字詞的詞向量表示。
總結
以上是生活随笔為你收集整理的word2vec原理_深入理解Word2Vec底层原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 13薪的工资是怎么发的 离职后还能领吗
- 下一篇: 信用卡网上支付不计入免年费消费次数 这个