【word2vec】篇三:基于Negative Sampling 的 CBOW 模型和 Skip-gram 模型
系列文章:
Negative Sampling是這么一種求解word2vec模型的方法,它摒棄了霍夫曼樹,采用了Negative Sampling(負(fù)采樣)的方法來求解。
負(fù)采樣算法
在CBOW模型中,已知詞www的上下文context(w)context(w)context(w)需要預(yù)測www。因此,對于給定的context(w)context(w)context(w),詞www就是一個正樣本,其它詞就是負(fù)樣本了。在Skip-gram中同樣也存在正負(fù)樣本問題。負(fù)樣本那么多,該如何選取呢?這就是Negative Sampling(負(fù)采樣)問題。也就是對于給定的詞,如何生成其負(fù)樣本子集NEG(w)NEG(w)NEG(w)?
采用的基本要求是:詞典DDD中的詞在語料CCC中出現(xiàn)的次數(shù)有高有低,對于那些高頻詞,被選為負(fù)樣本的概率就應(yīng)該比較大,反之,對于那些低頻詞,其被選中的概率就應(yīng)該比較小。本質(zhì)上就是一個帶權(quán)采樣問題。
word2vec采用的負(fù)采樣方法如下:
(2)首先將一段長度為1的線段分成長度不相等的VVV份(VVV是詞匯表的大小),每份對應(yīng)詞匯表的一個詞。高頻詞對應(yīng)長線段,低頻詞對應(yīng)短線段。每個詞的線段長度由下式?jīng)Q定:
len(w)=count(w)∑u∈Dcount(u)len(w) = \frac{count(w)}{\sum\limits_{u \in D} count(u)} len(w)=u∈D∑?count(u)count(w)?
在word2vec中,分子和分母都取了3/4次冪如下:
len(w)=count(w)3/4∑u∈Dcount(u)3/4len(w) = \frac{count(w)^{3/4}}{\sum\limits_{u \in D} count(u)^{3/4}} len(w)=u∈D∑?count(u)3/4count(w)3/4?
(2)在引入一個長度為1的線段進(jìn)行等距劃分成MMM份,其中M>>NM>>NM>>N,如下圖所示:
如圖所示,M份中的每一份都會落在某一個詞對應(yīng)的線段上。
(3)采樣時,先從M個位置中采出neg個位置,再匹配到這neg個位置對應(yīng)的詞就是負(fù)詞。如假設(shè)我們先采出m3m_3m3?,對應(yīng)I2I_2I2?,I2I_2I2?對應(yīng)的詞就是負(fù)詞。
注:在word2vec中,M取值默認(rèn)為10810^8108。
CBOW模型
假設(shè)已經(jīng)采樣一個關(guān)于www的非空負(fù)樣本子集NEG(w)NEG(w)NEG(w) ,且對于 w~∈D\tilde w \in Dw~∈D,定義:
Lw(w~)={1,w~=w0,w~≠wL^w(\tilde w ) = \begin{cases} 1, \quad \tilde w = w \\ 0, \quad \tilde w \ne w \end{cases} Lw(w~)={1,w~=w0,w~?=w?
表示詞w~\tilde ww~的標(biāo)簽。即正樣本的標(biāo)簽為1,負(fù)樣本的標(biāo)簽為0。
對于一個給定的正樣本(context(w),w)(context(w),w)(context(w),w),希望最大化:
g(w)=∏u∈w∪NEG(w)P(u∣context(w))g(w) = \prod_{u \in {w} \cup NEG(w) }P(u|context(w)) g(w)=u∈w∪NEG(w)∏?P(u∣context(w))
其中:
P(u∣context(w))={σ(xwTθu)Lw(u)=11?σ(xwTθu)Lw(u)=0P(u|context(w)) = \begin{cases} \sigma(\mathbf x_w^T\theta^u) \qquad L^w( u )=1 \\ 1-\sigma(\mathbf x_w^T\theta^u) \quad L^w( u )=0 \end{cases} P(u∣context(w))={σ(xwT?θu)Lw(u)=11?σ(xwT?θu)Lw(u)=0?
寫成整體表達(dá)式:
P(u∣context(w))=[σ(xwTθu)]Lw(u)?[1?σ(xwTθu)]1?Lw(u)P(u|context(w)) = [\sigma(\mathbf x_w^T\theta^u)]^{L^w( u )} \cdot [1-\sigma(\mathbf x_w^T\theta^u)]^{1- L^w( u )} P(u∣context(w))=[σ(xwT?θu)]Lw(u)?[1?σ(xwT?θu)]1?Lw(u)
這里的xw\mathbf x_wxw?是各詞向量之和。θu\theta^uθu表示詞對應(yīng)的一個向量,是個待訓(xùn)練參數(shù)。
所以,最終g(w)g(w)g(w)的表達(dá)式如下:
g(w)=σ(xwTθw)∏u∈NEG(w)[1?σ(xwTθu)]g(w) = \sigma(\mathbf x_w^T\theta^w) \prod_{u \in NEG(w) } [1-\sigma(\mathbf x_w^T\theta^u) ] g(w)=σ(xwT?θw)u∈NEG(w)∏?[1?σ(xwT?θu)]
其中σ(xwTθw)\sigma(\mathbf x_w^T\theta^w)σ(xwT?θw) 表示當(dāng)上下文為contecxt(w)contecxt(w)contecxt(w) 時,預(yù)測中心詞為w的概率;而σ(xwTθu)u∈NEG(w)\sigma(\mathbf x_w^T\theta^u) u∈NEG(w)σ(xwT?θu)u∈NEG(w),預(yù)測中心詞為u的概率。從形式上看,最大化g(w)g(w)g(w), 相當(dāng)于:增大正樣本的概率同時降低負(fù)樣本的概率。所以,給定預(yù)料庫CCC,函數(shù):
G=∏w∈Cg(w)G= \prod_{w \in C} g(w) G=w∈C∏?g(w)
可以作為整體的優(yōu)化目標(biāo)。為了計算方便可以對G 取對數(shù)。所以:
L=log?G=log?∏w∈Cg(w)=∑w∈Clog?g(w)=∑w∈Clog?∏u∈w∪NEG(w){[σ(xwTθu)]Lw(u)?[1?σ(xwTθu)]1?Lw(u)}=∑w∈C∑u∈w∪NEG(w){Lw(u)log?[σ(xwTθu)]+(1?Lw(u))log?[1?σ(xwTθu)]}=∑w∈C∑u∈w∪NEG(w)L(w,u)\begin{aligned} \mathcal L &= \log G = \log \prod_{w \in C} g(w) = \sum_{w \in C} \log g(w) \\ &=\sum_{w \in C} \log \prod_{u \in {w} \cup NEG(w) } \left\{ [\sigma(\mathbf x_w^T\theta^u)]^{L^w( u )} \cdot [1-\sigma(\mathbf x_w^T\theta^u)]^{1- L^w( u )} \right\} \\ & = \sum_{w \in C} \sum_{u \in {w} \cup NEG(w) } \left\{ {L^w( u )} \log [\sigma(\mathbf x_w^T\theta^u)]+ (1- L^w( u ))\log [1-\sigma(\mathbf x_w^T\theta^u)] \right\} \\ &= \sum_{w \in C} \sum_{u \in {w} \cup NEG(w) } \mathcal L(w,u) \end{aligned} L?=logG=logw∈C∏?g(w)=w∈C∑?logg(w)=w∈C∑?logu∈w∪NEG(w)∏?{[σ(xwT?θu)]Lw(u)?[1?σ(xwT?θu)]1?Lw(u)}=w∈C∑?u∈w∪NEG(w)∑?{Lw(u)log[σ(xwT?θu)]+(1?Lw(u))log[1?σ(xwT?θu)]}=w∈C∑?u∈w∪NEG(w)∑?L(w,u)?
接下來利用隨機(jī)梯度上升對參數(shù)進(jìn)行優(yōu)化。
(1)更新θu\theta^uθu:
因?yàn)?#xff1a;
?L(w,u)?θu=?{Lw(u)log?[σ(xwTθu)]+[1?Lw(u)]log?[1?σ(xwTθu)]}?θu=Lw(u)[1?σ(xwTθu)]xw?[1?Lw(u)]σ(xwTθu)xw=[Lw(u)?σ(xwTθu)]xw\begin{aligned}\frac{\partial \mathcal L(w,u)}{\partial \theta^u} &= \frac{\partial \{ L^w( u ) \log [\sigma(\mathbf x_w^T\theta^u)]+ [1- L^w( u )]\log [1-\sigma(\mathbf x_w^T\theta^u)]\} }{\partial \theta^u} \\&= L^w( u ) [1-\sigma(\mathbf x_w^T\theta^u)]\mathbf x_w - [1- L^w( u )] \sigma(\mathbf x_w^T\theta^u) \mathbf x_w \\ &=[L^w( u )-\sigma(\mathbf x_w^T\theta^u)] \mathbf x_w \end{aligned} ?θu?L(w,u)??=?θu?{Lw(u)log[σ(xwT?θu)]+[1?Lw(u)]log[1?σ(xwT?θu)]}?=Lw(u)[1?σ(xwT?θu)]xw??[1?Lw(u)]σ(xwT?θu)xw?=[Lw(u)?σ(xwT?θu)]xw??
所以 θu\theta^uθu 更新公式為:
θu:=θu+η[Lw(u)?σ(xwTθu)]xw\theta^u:=\theta^u + \eta [L^w( u )-\sigma(\mathbf x_w^T\theta^u)] \mathbf x_w θu:=θu+η[Lw(u)?σ(xwT?θu)]xw?
其中η\etaη為學(xué)習(xí)率。
(2)更新xw\mathbf x_wxw?
因?yàn)?span id="ze8trgl8bvbq" class="katex--inline">L(w,u)\mathcal L(w,u)L(w,u) 關(guān)于變量xw\mathbf x_wxw?和θw\theta^wθw 是對稱的。所以:
?L(w,u)?xw=[Lw(u)?σ(xwTθu)]θu\begin{aligned} \frac{\partial \mathcal L(w,u)}{\partial \mathbf x_w} = [L^w( u )-\sigma(\mathbf x_w^T\theta^u)] \theta^u \end{aligned} ?xw??L(w,u)?=[Lw(u)?σ(xwT?θu)]θu?
所以:
v(w~):=v(w~)+η∑u∈w∪NEG(w)?L(w,u)?x(w),w~∈context(w)\mathbf v( \tilde w) := \mathbf v( \tilde w) + \eta \sum_{u \in {w} \cup NEG(w) } \frac{\partial \mathcal L(w,u)}{\partial \mathbf x(w)},\quad \tilde w \in context(w) v(w~):=v(w~)+ηu∈w∪NEG(w)∑??x(w)?L(w,u)?,w~∈context(w)
以下是偽代碼:
Skip-gram模型
Skip-gram模型與CBOW模型的負(fù)采樣模型推到過程相似。
對Skip-gram模型而言,正常來說,應(yīng)該是要使用詞 w 來預(yù)測上下文中的詞匯context(w)context(w)context(w),但是在 word2vec 的源碼中,本質(zhì)上還是用了CBOW的思想,將上下文context(w)context(w)context(w)拆成一個個詞來考慮,也就是說期望最大化的式子為:
g(w)=∏w~∈Contex(w)∏u∈{w}∪NEGw~(w)P(u∣w~)g(w) = \prod_{\tilde w \in Contex(w)}\;\prod_{u \in \{w\} \cup NEG^{\;\tilde w}(w) }P(u| \tilde w) g(w)=w~∈Contex(w)∏?u∈{w}∪NEGw~(w)∏?P(u∣w~)
其中,NEGw~(w)NEG^{\;\tilde w}(w)NEGw~(w)表示對上下文中詞w~\tilde ww~的采樣。基于上面的目標(biāo),用上文類似的推導(dǎo)過程,可以得到下面的算法。
下面簡單的給出隨機(jī)梯度上升更新參數(shù)的偽代碼:
參考文章:
word2vec 中的數(shù)學(xué)原理詳解
基于Negative Sampling的word2vec模型
總結(jié)
以上是生活随笔為你收集整理的【word2vec】篇三:基于Negative Sampling 的 CBOW 模型和 Skip-gram 模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 项目中常用的MySQL 优化
- 下一篇: 迪卡侬双 11 电商促销高于日常价被罚