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