word2vec原理
首先聲明,本文源自于劉建平老師的博客,原文寫(xiě)的非常好,在此結(jié)合鄙人的項(xiàng)目經(jīng)驗(yàn)和大家分享。
word2vec原理(一) CBOW與Skip-Gram模型基礎(chǔ)
一:詞向量基礎(chǔ)
word2vec是谷歌于2013年提出的一個(gè)nlp工具,他的特點(diǎn)就是將詞向量化,這樣,詞與詞之間就可以定量的去度量他們之間的相互關(guān)系,發(fā)掘詞之間的聯(lián)系,用詞向量來(lái)表示詞并不是word2vec的首創(chuàng),很早之前就出現(xiàn)了,最早的詞向量是很冗長(zhǎng)的,它使用詞向量的維度來(lái)表示詞匯表的大小,對(duì)于詞匯表中的某個(gè)具體詞,他的對(duì)應(yīng)位置為1,比如我們有下面的5個(gè)詞組成的詞匯表,詞"Queen"的序號(hào)為2, 那么它的詞向量就是(0,1,0,0,0)。同樣的道理,詞"Woman"的詞向量就是(0,0,0,1,0)。這種方式我們一般叫做one-hot representation 。
但是這種編碼方式存在一個(gè)巨大的問(wèn)題,我們?cè)趯?shí)際的工業(yè)生產(chǎn)中,我們的詞匯表一般非常大,達(dá)到百萬(wàn)級(jí)別,這樣每個(gè)詞都用百萬(wàn)維的向量來(lái)表示簡(jiǎn)直就是內(nèi)存災(zāi)難,除了一個(gè)是1,其余全是0,這樣表達(dá)效率嚴(yán)重不足。我們可以用distributed representation 可以解決one-hot-representation 問(wèn)題,他的訓(xùn)練方式是將詞映射到較短的詞向量上從而用這些較短的詞向量組成詞向量空間,進(jìn)而用普通的統(tǒng)計(jì)學(xué)方法來(lái)研究詞與詞之間的關(guān)系。
比如下圖我們將詞匯表里的詞用"Royalty",“Masculinity”, “Femininity"和"Age"4個(gè)維度來(lái)表示,King這個(gè)詞對(duì)應(yīng)的詞向量可能是(0.99,0.99,0.05,0.7)。當(dāng)然在實(shí)際情況中,我們并不能對(duì)詞向量的每個(gè)維度做一個(gè)很好的解釋。
有了用Distributed Representation表示的較短的詞向量,我們就可以較容易的分析詞之間的關(guān)系了,比如我們將詞的維度降維到2維,有一個(gè)有趣的研究表明,用下圖的詞向量表示我們的詞時(shí),我們可以發(fā)現(xiàn):
可見(jiàn),只要得到了詞匯表里所有詞對(duì)應(yīng)的詞向量,我們就可以做很多事情了
二. CBOW與Skip-Gram用于神經(jīng)網(wǎng)絡(luò)語(yǔ)言模型
在word2vec之前,就已經(jīng)有用神經(jīng)網(wǎng)絡(luò)DNN來(lái)訓(xùn)練詞向量進(jìn)而處理詞與詞之間的關(guān)系了 ,一般都是采用三層神經(jīng)網(wǎng)絡(luò),即輸入層,隱藏層,輸出層(softmax層) 。一般我們用CBOW模型和skip-gram模型來(lái)定義模型的數(shù)據(jù)的輸入和輸出.
CBOW模型的輸入就是與一個(gè)特定詞上下文相關(guān)的詞所對(duì)應(yīng)的詞向量,而輸出就是這個(gè)特定詞的詞向量。比如下面這段話,我們的上下文大小取值為4,特定的這個(gè)詞是"Learning”,也就是我們需要的輸出詞向量,上下文對(duì)應(yīng)的詞有8個(gè),前后各4個(gè),這8個(gè)詞是我們模型的輸入。由于CBOW使用的是詞袋模型,因此這8個(gè)詞都是平等的,也就是不考慮他們和我們關(guān)注的詞之間的距離大小,只要在我們上下文之內(nèi)即可。
在上面的例子中,我們的輸入是八個(gè)詞向量,輸出是詞匯表中所有詞的softmax概率(訓(xùn)練的目標(biāo)是期望訓(xùn)練樣本也就是那八個(gè)詞對(duì)應(yīng)的softmax概率最大)。對(duì)應(yīng)到神經(jīng)網(wǎng)絡(luò)中,網(wǎng)絡(luò)輸入為八個(gè)神經(jīng)元,輸出為詞匯表大小個(gè)神經(jīng)元,隱層神經(jīng)元個(gè)數(shù)可以由我們自己指定。訓(xùn)練過(guò)程大致如下:通過(guò)DNN的反向傳播找到模型參數(shù)和每個(gè)詞的詞向量,當(dāng)有新的需求,例如求某幾個(gè)詞相關(guān)的特定詞時(shí)候,我們可以通過(guò)DNN前向傳播并通過(guò)softmax計(jì)算出詞匯表中概率最大的詞向量對(duì)應(yīng)的神經(jīng)元,也就是我們需要的特定詞。
skip-gram模型與CBOW模型完全相反,還是對(duì)應(yīng)上面的例子,輸入為一個(gè)特定詞的詞向量,輸出為與這個(gè)特定詞上下文相關(guān)的概率最大的八個(gè)字的詞向量。對(duì)應(yīng)到神經(jīng)網(wǎng)絡(luò)中,輸入為一個(gè)神經(jīng)元,輸出為八個(gè)神經(jīng)元,隱層個(gè)數(shù)可由我們自己指定,通過(guò)dnn反向傳播訓(xùn)練,求出詞匯表中每個(gè)次對(duì)應(yīng)的詞向量以及模型參數(shù)。面對(duì)新需求時(shí),通過(guò)前向傳播計(jì)算出詞匯表中與輸入相關(guān)的概率最大的詞向量,也就是我們需要的與特定次相關(guān)的詞向量。
以上就是神經(jīng)網(wǎng)絡(luò)語(yǔ)言模型如何用cbow和skip-gram來(lái)訓(xùn)練得到詞向量的大致過(guò)程,但是,我們的詞匯表一般是百萬(wàn)級(jí)別,輸出層在做softmax時(shí),需要計(jì)算百萬(wàn)個(gè)詞向量的概率,這個(gè)過(guò)程極為耗時(shí)。
三. word2vec基礎(chǔ)之霍夫曼樹(shù)
word2vec也使用了cbow和skip-gram模型來(lái)訓(xùn)練模型得到詞向量,但是沒(méi)有使用dnn模型,最早的優(yōu)化結(jié)構(gòu)是使用霍夫曼樹(shù)來(lái)替代隱藏層和輸出層的神經(jīng)元,霍夫曼書(shū)的葉子結(jié)點(diǎn)就是模型的神經(jīng)元輸出,葉子節(jié)點(diǎn)的個(gè)數(shù)就是詞匯表的大小,內(nèi)部節(jié)點(diǎn)的個(gè)數(shù)就是隱藏層神經(jīng)元的個(gè)數(shù)。
葉子節(jié)點(diǎn):樹(shù)的每一個(gè)葉子節(jié)點(diǎn)都代表一個(gè)單詞,所以通常詞頻越高離根節(jié)點(diǎn)越近;
內(nèi)部節(jié)點(diǎn):每一個(gè)內(nèi)部節(jié)點(diǎn)都代表一次邏輯回歸的過(guò)程,可以規(guī)定沿著左子樹(shù)走是負(fù)類(lèi)(霍夫曼編碼 1),沿著右子樹(shù)走是正類(lèi)(霍夫曼編碼 0)。假設(shè) xw 是當(dāng)前內(nèi)部節(jié)點(diǎn)的詞向量,而 θ 則是需要學(xué)習(xí)的模型參數(shù)。對(duì)于 CBOW 模型,xw 初始化(根節(jié)點(diǎn))為輸入的詞向量加和求平均后的向量,對(duì)于 Skip-gram 來(lái)說(shuō),就是 xw 的詞向量。判別正類(lèi)和負(fù)類(lèi)的方法是使用 Sigmoid 函數(shù):
最終輸出哪個(gè)單詞是由 logN 次邏輯回歸過(guò)程決定的,回到基于 Hierarchical Softmax 的 word2vec 本身,我們的目標(biāo)就是找到合適的所有節(jié)點(diǎn)的詞向量和所有內(nèi)部節(jié)點(diǎn) θ, 使訓(xùn)練樣本達(dá)到最大似然。如此經(jīng)過(guò)一系列推導(dǎo)便可得到目標(biāo)函數(shù):
霍夫曼樹(shù)的建立過(guò)程如下:
輸入:權(quán)值為(w1,w2,w3…wn)的n 個(gè)節(jié)點(diǎn)
輸出:對(duì)應(yīng)的霍夫曼樹(shù)。
1,將(w1,w2,w3…wn)看作是有n顆樹(shù)的森林,每個(gè)樹(shù)只有一個(gè)節(jié)點(diǎn)(也就是根節(jié)點(diǎn))。
2,在森林中選擇根節(jié)點(diǎn)權(quán)值最小的兩棵樹(shù)進(jìn)行權(quán)值相加形成一顆新樹(shù),這兩顆新樹(shù)分別作為新樹(shù)的左右子樹(shù)。
3,將新樹(shù)加入森林,并從森林中刪除掉兩顆子樹(shù)。
4,重復(fù)步奏2和步奏3,直到森林中只剩一棵樹(shù)為止
下面我們用一個(gè)具體的例子來(lái)說(shuō)明霍夫曼樹(shù)建立的過(guò)程,我們有(a,b,c,d,e,f)共6個(gè)節(jié)點(diǎn),節(jié)點(diǎn)的權(quán)值分布是(20,4,8,6,16,3)。
首先是最小的b和f合并,得到的新樹(shù)根節(jié)點(diǎn)權(quán)重是7.此時(shí)森林里5棵樹(shù),根節(jié)點(diǎn)權(quán)重分別是20,8,6,16,7。此時(shí)根節(jié)點(diǎn)權(quán)重最小的6,7合并,得到新子樹(shù),依次類(lèi)推,最終得到下面的霍夫曼樹(shù)。
那么霍夫曼樹(shù)有什么好處呢,一般在得到霍夫曼樹(shù)后我們會(huì)對(duì)葉子結(jié)點(diǎn)進(jìn)行霍夫曼編碼,由于權(quán)重越高的節(jié)點(diǎn)越靠近根節(jié)點(diǎn),而低權(quán)重的節(jié)點(diǎn)會(huì)相對(duì)遠(yuǎn)離根節(jié)點(diǎn),所以我們的高權(quán)重節(jié)點(diǎn)的霍夫曼編碼值會(huì)就較短,而低權(quán)重節(jié)點(diǎn)的霍夫曼編碼值較長(zhǎng),這樣就保證了樹(shù)的帶權(quán)路徑最短,也符合我們的信息論,即我們希望我們常用的詞擁有更短的編碼。霍夫曼樹(shù)約定一般左子樹(shù)的編碼為0,右子樹(shù)的編碼為1,所以我們看到c的編碼為00。而在word2vec中相反,左子樹(shù)為1,右子樹(shù)為0,同時(shí)約定左子樹(shù)的權(quán)重不得小于右子樹(shù)。
word2vec原理(二) 基于Hierarchical Softmax的模型
一:
由于神經(jīng)網(wǎng)絡(luò)訓(xùn)練語(yǔ)言模型的缺點(diǎn),word2vec并沒(méi)有采用傳統(tǒng)的DNN模型,而是進(jìn)行了改進(jìn),一種是分層softmax(Hierarchical Softmax),另一種就是負(fù)采樣(negative sampling).本章我們先講word2vec基于分層sorfmax對(duì)語(yǔ)言訓(xùn)練模型的改進(jìn)。
首先我們回顧傳統(tǒng)dnn詞向量語(yǔ)言模型,里面有三層,輸入層,輸出層(softmax),隱藏層。該模型最大的缺點(diǎn)就是隱層到輸出的softmax層之間的計(jì)算會(huì)計(jì)算詞匯表的維度,非常大,所以被摒棄。如下圖:
word2vec在傳統(tǒng)的dnn基礎(chǔ)之上做了兩點(diǎn)改進(jìn),
第一,在輸入層到隱層,word2vec并沒(méi)有像傳統(tǒng)的dnn那樣采用線性變換和激活函數(shù),而是直接對(duì)所有的輸入詞向量進(jìn)行了求和平均。比如輸入的是三個(gè)4維詞向量:(1,2,3,4),(9,6,11,8),(5,10,7,12),那么我們word2vec映射后的詞向量就是(5,6,7,8)。由于這里是從多個(gè)詞向量變成了一個(gè)詞向量。
第二,在隱藏層到輸出的softmax層,為了避免softmax計(jì)算詞匯表所有詞的詞向量,word2vec采用了霍夫曼樹(shù)來(lái)代替從隱藏層到輸出層的映射,如何映射呢?
由于把我們之前所有的輸出softmax概率計(jì)算替換成了一顆二叉霍夫曼樹(shù),那么我們的softmax概率計(jì)算只需要沿著樹(shù)形結(jié)構(gòu)進(jìn)行就可以了,也就是從霍夫曼書(shū)的根節(jié)點(diǎn)走到葉子結(jié)點(diǎn)。和之前的神經(jīng)網(wǎng)絡(luò)語(yǔ)言模型相比,我們的霍夫曼樹(shù)的所有內(nèi)部節(jié)點(diǎn)就類(lèi)似之前神經(jīng)網(wǎng)絡(luò)隱藏層的神經(jīng)元,其中,根節(jié)點(diǎn)的詞向量對(duì)應(yīng)我們的投影后的詞向量,而所有葉子節(jié)點(diǎn)就類(lèi)似于之前神經(jīng)網(wǎng)絡(luò)softmax輸出層的神經(jīng)元,葉子節(jié)點(diǎn)的個(gè)數(shù)就是詞匯表的大小。在霍夫曼樹(shù)中,隱藏層到輸出層的softmax映射不是一下子完成的,而是沿著霍夫曼樹(shù)一步步完成的,因此這種softmax取名為"Hierarchical Softmax"。例如下圖的W2:
在word2vec中我們采用二元邏輯回歸(區(qū)別于二分類(lèi))的方法,即規(guī)定沿著左子樹(shù)走就是負(fù)類(lèi)(霍夫曼樹(shù)編碼為1),沿著右子樹(shù)走即為正類(lèi)(霍夫曼書(shū)編碼為0)。同時(shí)規(guī)定左子樹(shù)的權(quán)重不得低于右子樹(shù)。判別正類(lèi)和負(fù)類(lèi)的方法是使用sigmoid函數(shù),即:
其中xw是當(dāng)前內(nèi)部節(jié)點(diǎn)的詞向量,而θ則是我們需要從訓(xùn)練樣本求出的邏輯回歸的模型參數(shù)。
使用霍夫曼樹(shù)的優(yōu)點(diǎn)有兩個(gè):
1,由于是二叉樹(shù),之前的計(jì)算量為v,現(xiàn)在變成了log2v,
2,由于使用霍夫曼樹(shù)使得高頻詞更靠近根節(jié)點(diǎn),這樣高頻詞就可以更快的找到,符合我們的貪心優(yōu)化算法。
容易理解,被劃分為左子樹(shù)而成為負(fù)類(lèi)的概率為P(?)=1?P(+)。在某一個(gè)內(nèi)部節(jié)點(diǎn),要判斷是沿左子樹(shù)還是右子樹(shù)走的標(biāo)準(zhǔn)就是看P(?),P(+)誰(shuí)的概率值大。而控制P(?),P(+)誰(shuí)的概率值大的因素一個(gè)是當(dāng)前節(jié)點(diǎn)的詞向量,另一個(gè)是當(dāng)前節(jié)點(diǎn)的模型參數(shù)θ。
對(duì)于上圖中的w2,如果它是一個(gè)訓(xùn)練樣本的輸出,那么我們期望對(duì)于里面的隱藏節(jié)點(diǎn)n(w2,1)的P(?)概率大,n(w2,2)的P(?)概率大,n(w2,3)的P(+)概率大。
回到基于分層softmax本身,我們的目標(biāo)是找到適合的,所有節(jié)點(diǎn)的詞向量和內(nèi)部節(jié)點(diǎn)參數(shù)θ,使得訓(xùn)練樣本達(dá)到最大似然。
二: 基于Hierarchical Softmax的模型梯度計(jì)算
我們使用最大似然法來(lái)尋找所有節(jié)點(diǎn)的詞向量和所有內(nèi)部節(jié)點(diǎn)的 θ ,我們的期望是最大化所有訓(xùn)練樣本的似然函數(shù)乘積。
為了方便計(jì)算,我們定義輸入詞為w,定義經(jīng)過(guò)輸入層到隱層求和平均后的霍夫曼樹(shù)根節(jié)點(diǎn)為Xw,定義從根節(jié)點(diǎn)到葉子結(jié)點(diǎn)的節(jié)點(diǎn)總數(shù)為L(zhǎng)w,w從根節(jié)點(diǎn)開(kāi)始經(jīng)過(guò)第i個(gè)節(jié)點(diǎn)表示piw,對(duì)應(yīng)的霍夫曼編碼為diw,而該節(jié)點(diǎn)對(duì)應(yīng)的模型參數(shù)為 θ iw,其中i最大為L(zhǎng)w-1,因?yàn)橛?xùn)練只針對(duì)內(nèi)部節(jié)點(diǎn),不包括根節(jié)點(diǎn)。
定義w經(jīng)過(guò)霍夫曼樹(shù)第i個(gè)節(jié)點(diǎn)的邏輯回歸概率為如下:
對(duì)一個(gè)樣本去最大似然:
在word2vec中我們使用的是隨機(jī)梯度上升法,并沒(méi)有將所有樣本的似然函數(shù)乘起來(lái)得到真正的訓(xùn)練集最大似然。每次僅僅用一個(gè)樣本來(lái)更新梯度,從而降低梯度計(jì)算,這樣我們可以得到對(duì)數(shù)似然函數(shù)L如下
要得到模型中w詞向量和內(nèi)部節(jié)點(diǎn)的模型參數(shù)θ, 我們使用梯度上升法即可。首先我們求模型參數(shù)θ的梯度
同樣的方法,可以求出xw的梯度表達(dá)式如下:
三:基于Hierarchical Softmax的CBOW模型
首先我們要定義詞向量的維度大小M,以及CBOW的上下文大小2c,這樣我們對(duì)于訓(xùn)練樣本中的每一個(gè)詞,其前面的c個(gè)詞和后面的c個(gè)詞作為了CBOW模型的輸入,該詞本身作為樣本的輸出,期望softmax概率最大。
在做CBOW模型前,我們需要先將詞匯表建立成一顆霍夫曼樹(shù)。
對(duì)于從輸入層到隱藏層(投影層),這一步比較簡(jiǎn)單,就是對(duì)w周?chē)?c個(gè)詞向量求和取平均即可,即:
第二步,通過(guò)梯度上升法來(lái)更新我們的θwj?1和xw,注意這里的xw是由2c個(gè)詞向量相加而成,我們做梯度更新完畢后會(huì)用梯度項(xiàng)直接更新原始的各個(gè)xi(i=1,2,2c),即:
其中η為梯度上升法的步長(zhǎng)。
這里總結(jié)下基于Hierarchical Softmax的CBOW模型算法流程,梯度迭代使用了隨機(jī)梯度上升法:
輸入:基于cbow的預(yù)料訓(xùn)練樣本,詞向量的維度M,cbow的上下文2c,步長(zhǎng)為η
輸出:霍夫曼樹(shù)的內(nèi)部節(jié)點(diǎn)參數(shù)θ ,所有的詞向量w
1,基于語(yǔ)料庫(kù)建立霍夫曼樹(shù)
2,隨機(jī)初始化所有的模型參數(shù)θ ,所有的詞向量w
3,機(jī)型梯度上升迭代,對(duì)于訓(xùn)練集中的每個(gè)樣本做如下處理
四:基于Hierarchical Softmax的Skip-Gram模型
我們對(duì)于訓(xùn)練樣本中的每一個(gè)詞,該詞本身作為樣本的輸入, 其前面的c個(gè)詞和后面的c個(gè)詞作為了Skip-Gram模型的輸出,,期望這些詞的softmax概率比其他的詞大。
Skip-Gram模型和CBOW模型其實(shí)是反過(guò)來(lái)的,在上一篇已經(jīng)講過(guò)。
在做CBOW模型前,我們需要先將詞匯表建立成一顆霍夫曼樹(shù)。
對(duì)于從輸入層到隱藏層(投影層),這一步比CBOW簡(jiǎn)單,由于只有一個(gè)詞,所以,即xw就是詞w對(duì)應(yīng)的詞向量。
第二步,通過(guò)梯度上升法來(lái)更新我們的θwj?1和xw,注意這里的xw周?chē)?c個(gè)詞向量,此時(shí)如果我們期望P(xi|xw),i=1,2…2c最大。此時(shí)我們注意到由于上下文是相互的,在期望P(xi|xw),i=1,2…2c最大化的同時(shí),反過(guò)來(lái)我們也期望P(xw|xi),i=1,2…2c最大。那么是使用P(xi|xw)好還是P(xw|xi)好呢,word2vec使用了后者,這樣做的好處就是在一個(gè)迭代窗口內(nèi),我們不是只更新xw一個(gè)詞,而是xi,i=1,2…2c共2c個(gè)詞。這樣整體的迭代會(huì)更加的均衡。因?yàn)檫@個(gè)原因,Skip-Gram模型并沒(méi)有和CBOW模型一樣對(duì)輸入進(jìn)行迭代更新,而是對(duì)2c個(gè)輸出進(jìn)行迭代更新。
輸入:基于Skip-Gram的語(yǔ)料訓(xùn)練樣本,詞向量的維度大小M,Skip-Gram的上下文大小2c,步長(zhǎng)η
輸出:霍夫曼樹(shù)的內(nèi)部節(jié)點(diǎn)模型參數(shù)θ,所有的詞向量w
2. 隨機(jī)初始化所有的模型參數(shù)θ,所有的詞向量w,
3. 進(jìn)行梯度上升迭代過(guò)程,對(duì)于訓(xùn)練集中的每一個(gè)樣本(w,context(w))做如下處理:
word2vec原理(三) 基于Negative Sampling的模型
1. Hierarchical Softmax的缺點(diǎn)與改進(jìn)
雖然分層softmax采用霍夫曼書(shū)代替了神經(jīng)網(wǎng)絡(luò)隱藏層到softmax層的映射從而提高了模型的訓(xùn)練效率,但存在一個(gè)問(wèn)題,就是當(dāng)我們的訓(xùn)練樣本中目標(biāo)詞是一個(gè)生僻詞的時(shí)候,霍夫曼書(shū)就會(huì)往下走很久,整個(gè)樹(shù)就會(huì)變得非常復(fù)雜。 Negative Sampling就是這么一種求解word2vec模型的方法,它摒棄了霍夫曼樹(shù),采用了Negative Sampling(負(fù)采樣)的方法來(lái)求解,下面我們就來(lái)看看Negative Sampling的求解思路。
2基于Negative Sampling的模型概述
比如我們有一個(gè)訓(xùn)練樣本,中心詞為w,上下詞共有2c個(gè)詞,記為context(w),由于這個(gè)中心詞w,的確和context(w)相關(guān)存在,因此它是一個(gè)真實(shí)的正例。通過(guò)Negative Sampling采樣,我們得到neg個(gè)和w不同的中心詞wi,i=1,2,…neg,這樣context(w)和wi就組成了neg個(gè)并不真實(shí)存在的負(fù)例。利用這一個(gè)正例和neg個(gè)負(fù)例,我們進(jìn)行二元邏輯回歸,得到負(fù)采樣對(duì)應(yīng)每個(gè)詞wi對(duì)應(yīng)的模型參數(shù)θi,和每個(gè)詞的詞向量。 從上面的描述可以看出,Negative Sampling由于沒(méi)有采用霍夫曼樹(shù),每次只是通過(guò)采樣neg個(gè)不同的中心詞做負(fù)例,就可以訓(xùn)練模型,因此整個(gè)過(guò)程要比Hierarchical Softmax簡(jiǎn)單。
3:Negative Sampling負(fù)采樣方法
負(fù)例采樣不再使用復(fù)雜的霍夫曼樹(shù),而是利用相對(duì)簡(jiǎn)單的隨機(jī)負(fù)采樣來(lái)大幅提高性能,并且在經(jīng)過(guò)論證后發(fā)現(xiàn),負(fù)例采樣不但可以提高訓(xùn)練速度,還可以改善所得詞向量的質(zhì)量,因此,負(fù)例采樣比層次 Softmax 使用率更高。
負(fù)例采樣的思想其實(shí)和層次 Softmax 很類(lèi)似,也是將 Softmax 多分類(lèi)問(wèn)題轉(zhuǎn)化成多次二分類(lèi)問(wèn)題,使用二元邏輯回歸可以讓一個(gè)訓(xùn)練樣本每次僅僅更新一小部分的權(quán)重,不同于原本每個(gè)訓(xùn)練樣本更新所有的權(quán)重,這樣大大減少了梯度下降過(guò)程中的計(jì)算量。
當(dāng)然,負(fù)例采樣的具體過(guò)程和層次 Softmax 有很大區(qū)別。 它的技術(shù)點(diǎn)會(huì)涉及兩個(gè)關(guān)鍵的地方,一個(gè)是如何進(jìn)行負(fù)例采樣,另外一個(gè)是如何進(jìn)行二元邏輯回歸。
Word2Vec 論文中給出的采樣方式其實(shí)并不復(fù)雜,首先采樣的數(shù)量根據(jù)數(shù)據(jù)集的大小而定,一個(gè)經(jīng)驗(yàn)是對(duì)于小數(shù)據(jù)集,選擇 5~20 個(gè)負(fù)例,而對(duì)于較大的數(shù)據(jù)集,則只需要 2~5 個(gè)負(fù)例就可以。另外,采樣會(huì)遵循一定的分布,這里用的是一元模型分布 (unigram distribution),它的特點(diǎn)是詞頻更高的詞更有可能被選為負(fù)例,是一個(gè)加權(quán)采樣。假設(shè)我們要將整個(gè)語(yǔ)料庫(kù)的單詞作為單詞表,并且從單詞表中進(jìn)行隨機(jī)負(fù)例采樣,則選取某個(gè)詞的概率等于該詞出現(xiàn)在語(yǔ)料庫(kù)次數(shù)(詞頻)除以語(yǔ)料庫(kù)出現(xiàn)的單詞總數(shù),用公式表示為:
其中,f(?) 可以理解為計(jì)數(shù),即得到詞頻。
論文中指出,作者在這個(gè)公式上嘗試了很多變化,最后表現(xiàn)比較好的是將單詞詞頻提高到 3/4 次冪。如下:
這個(gè)改變后的公式會(huì)產(chǎn)生一個(gè)效果,就是稍微增加低頻詞的采樣概率,降低高頻詞的采樣概率。
在采樣前,我們將這段長(zhǎng)度為1的線段劃分成M等份,這里M>>V,這樣可以保證每個(gè)詞對(duì)應(yīng)的線段都會(huì)劃分成對(duì)應(yīng)的小塊。而M份中的每一份都會(huì)落在某一個(gè)詞對(duì)應(yīng)的線段上。在采樣的時(shí)候,我們只需要從M個(gè)位置中采樣出neg個(gè)位置就行,此時(shí)采樣到的每一個(gè)位置對(duì)應(yīng)到的線段所屬的詞就是我們的負(fù)例詞。
然后再來(lái)看二元邏輯回歸的目標(biāo)函數(shù),論文中給出了 Skip-gram 模型負(fù)采樣的優(yōu)化目標(biāo)函數(shù)為:
其中 Pn(w) 就是采樣用的概率分布。
原論文中并沒(méi)有給出負(fù)例采樣的推導(dǎo)過(guò)程,2014 年,Yoav Goldberg 在論文《word2vec Explained: Deriving Mikolov et al.’s Negative-Sampling Word-Embedding Method》里對(duì)上述目標(biāo)函數(shù)給出了推導(dǎo)。
從本文前面的內(nèi)容我們已知 Skip-gram 的最初的目標(biāo)函數(shù):
如果對(duì)上述目標(biāo)函數(shù)進(jìn)行優(yōu)化,第二項(xiàng)需要對(duì)詞典里的所有詞進(jìn)行優(yōu)化,所以計(jì)算量比較大。如果換個(gè)角度考慮,如果我們將合理的上下文樣本對(duì)看成是 1,不合理的上下文樣本對(duì)看成是 0,那么問(wèn)題轉(zhuǎn)換為二分類(lèi)問(wèn)題,那么我們目標(biāo)就是最大化下面的目標(biāo)函數(shù):
總結(jié)
以上是生活随笔為你收集整理的word2vec原理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 校园网连不上的问题
- 下一篇: 2020软件设计师考试大纲