word2vec原理_word2vec论文阅读笔记
word2vec算是NLP中的經(jīng)典算法,之前在課程中簡單的學(xué)過,但面試時經(jīng)不起深問。痛定思痛,參考Jack(@沒搜出來)的總結(jié),筆者重點閱讀了Mikolov的原始論文[1]和Xin Rong的詳細(xì)推導(dǎo)[2]。
Jack:word2vec 相關(guān)論文?zhuanlan.zhihu.comMikolov的原始論文主要從時間復(fù)雜度論證了word2vec的效率,但對于其中原理和具體訓(xùn)練方法描述卻相對較少,本文將以Xin Rong的推導(dǎo)為主(最后行文可能像是這篇論文的中文縮略版)。
一、bigram情形
筆者認(rèn)為這是word2vec模型的核心,即用一個詞預(yù)測另一個詞共現(xiàn)概率(顯然這兩個詞的次序、相隔距離都是可以疊加設(shè)置的,從而轉(zhuǎn)換成word2vec的兩種方法——CBOW和skip-gram)。其框架圖如下所示:
圖中V是詞的數(shù)量,即詞獨熱編碼的長度,N為隱藏層變量的維度,在這里等于所要訓(xùn)練詞向量的維度,該模型相當(dāng)于用詞向量為隱含層,從而從輸入層(上下文詞)的獨熱編碼預(yù)測輸出層(目標(biāo)詞)的獨熱編碼。計算隱含層的權(quán)重矩陣記為W,從隱含層計算輸出層的權(quán)重矩陣記為W'。接下來我們需一步步推導(dǎo)其更新方程。
首先從輸入層到隱藏層的公式為:
這里可以看到,由于x是獨熱編碼(即對應(yīng)該向量只有詞id位置的值為1,其余值均為0),隱含層相當(dāng)于取出W(維度為V×N)中詞id對應(yīng)的行向量,這里定義為輸入詞的向量
。對于隱含層到輸出層,定義了另一個權(quán)重矩陣W'(ps:在源碼實際訓(xùn)練中,W'是W轉(zhuǎn)置,共享詞的信息),維度為N×V,可理解為詞id位置對應(yīng)的列向量為輸出詞的詞向量。通過隱藏層與輸出詞詞向量作內(nèi)積,可以認(rèn)為是隱藏層(此處不使用輸入詞向量是因為在后續(xù)CBOW時,h不等于輸入詞向量,而是上下文多個詞向量平均值)與實際輸出的余弦相似度。從而得到每個詞與當(dāng)前位置的匹配度為:
其中,下標(biāo)j即為輸出詞的id,
即第j個輸出詞對應(yīng)的詞向量,是W'的第j列。為了將匹配度轉(zhuǎn)化為對應(yīng)詞出現(xiàn)的概率分布,記作y,使用了經(jīng)典的softmax函數(shù),從而將其映射到0-1之間,這里不列出公式了。模型的目標(biāo)是使對應(yīng)真實輸出詞的匹配度最高(即出現(xiàn)概率最大),從而可以得出目標(biāo)函數(shù),同時其相反數(shù)為損失函數(shù):
其中上標(biāo)*表示實際對應(yīng)的情況,即
表示實際輸出詞對應(yīng)到模型中的匹配度。之后就是對損失函數(shù)進行求偏導(dǎo),從而得出訓(xùn)練時更新方程,分為兩部分:
對于第一部分,依靠鏈?zhǔn)椒▌t進行計算,首先計算損失函數(shù)對于匹配度的偏導(dǎo)(預(yù)測誤差):
其中,
對應(yīng) 部分,求導(dǎo)后為預(yù)測的概率分布;而 對應(yīng) 的定義為當(dāng)且僅當(dāng)下標(biāo)為 時為1,其余時候都為0。(ps:我認(rèn)為將記為 可能更直觀明了一些。)之后通過鏈?zhǔn)椒▌t,即可計算出代價函數(shù)關(guān)于W'的偏導(dǎo):
從而得出:
接著計算代價函數(shù)對于W的偏導(dǎo),首先計算代價函數(shù)關(guān)于隱含層的偏導(dǎo):
這里定義EH(維度為N的向量)為W'所有詞向量關(guān)于預(yù)測誤差
為權(quán)重的和,即:從而,同樣通過鏈?zhǔn)椒▌t計算代價函數(shù)關(guān)于W的偏導(dǎo):
從而得到更新函數(shù)為:
由于x是獨熱編碼的緣故,事實上只需更新輸入函數(shù)的那一行,至此word2vec最核心的部分bigram用單個詞上下文信息預(yù)測某個詞的證明完成,加下來分別增加輸入詞數(shù)量(CBOW)和輸出詞數(shù)量(skip-gram)。
二、CBOW方法
CBOW方法是用詞上下文k個詞來預(yù)測該位置詞的信息(通常是該詞前k/2個詞,該詞后k/2個詞,但從推導(dǎo)來看由于權(quán)重不同,對于窗口和詞位置的關(guān)系并沒有太大關(guān)系,前后詞數(shù)不一定要對稱),預(yù)測模型的框架圖如下所示:
與bigram情況的主要不同在于輸入詞由一個變?yōu)镃個,隱含層計算公式為這些詞的等權(quán)平均數(shù):
由于隱含層到輸出層過程相較于bigram情形沒有任何變化,對于W'的更新函數(shù)也完全相同:
而對于輸入層到隱含層過程,可以對于C個輸入詞分別按照bigram過程進行計算后取平均值,因而可以得出輸入層到隱含層權(quán)重的更新函數(shù)為:
筆者認(rèn)為可以修改bigram情形中輸入詞的定義,將其改為輸入上下文詞獨熱編碼的等權(quán)平均值,從而完全套用bigram情形中的公式:
三、Skip-Gram方法
Skip-Gram方法是用中心詞預(yù)測輸出上下文的概率,預(yù)測模型框架圖如下所示:
與bigram情形的最大區(qū)別在于輸出詞由1個變?yōu)镃個,從而從損失函數(shù)函數(shù)開始就要發(fā)生變化:
從而可看出等于C次bigram損失函數(shù)加和,由此,根據(jù)bigram情形損失函數(shù)對于單一匹配度的偏導(dǎo),定義對于上下文輸出匹配度的偏導(dǎo)(預(yù)測誤差):
根據(jù)鏈?zhǔn)椒▌t,損失函數(shù)關(guān)于隱含層到輸出層權(quán)重的偏導(dǎo)為:
從而得出隱含層到輸出層權(quán)重的更新函數(shù)為:
同時更新定義EH(維度為N的向量)為W'所有詞向量關(guān)于預(yù)測誤差
為權(quán)重的和,即:從而輸入層到隱含層的更新函數(shù)仍然適用:
筆者認(rèn)為由推導(dǎo)過程中也可以看出,skip-gram算法雖然輸出層的權(quán)重是相同的,也可重新定義y為C個上下文詞的獨熱編碼等權(quán)平均數(shù),從而完全套用bigram情形中的公式(和原公式相比只是更新項相差C倍):
ps: 對于word2vec原理推導(dǎo)應(yīng)該算完成了,但對于具體計算過程的細(xì)節(jié)仍存在一些疑問,比如層次softmax和負(fù)采樣兩種計算技巧,留個坑,如果有機會寫源碼閱讀筆記再寫。
參考
總結(jié)
以上是生活随笔為你收集整理的word2vec原理_word2vec论文阅读笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 消息称尼康将发布超变焦镜头 Z 28-4
- 下一篇: 东南大学计算机网络_东南大学,2020年