Word2vec

預(yù)備知識:
LR、貝葉斯公式、赫夫曼編碼、統(tǒng)計(jì)語言模型、n-gram模型、神經(jīng)概率語言模型、詞向量、詞袋模型、softmax、負(fù)采樣,可以參考word2vec中的原理

Word2vec將詞映射到K維向量空間,并且詞向量能和語義相對應(yīng)。

語言概率模型

計(jì)算一個句子的概率的概率模型,基于一個語料庫來構(gòu)建。生成一個句子可以利用貝葉斯公式進(jìn)行鏈?zhǔn)椒纸猓蟮蒙傻母怕?。通常是先?jì)算好詞串出現(xiàn)次數(shù),將概率值存起來,下次計(jì)算一個句子的概率時,找到概率值進(jìn)行連乘
image.png

n-gram模型
n-gram是語言概率模型中的一種

它作了一個n-1階馬爾科夫假設(shè),認(rèn)為一個詞出現(xiàn)的概率只和它前面的n-1個詞相關(guān),同時根據(jù)大數(shù)定律,將概率計(jì)算進(jìn)行了簡化
image.png

對于機(jī)器學(xué)習(xí)而言,通常是構(gòu)建一個目標(biāo)函數(shù),然后對這個函數(shù)進(jìn)行優(yōu)化,求得最優(yōu)參數(shù)解,得到模型,利用模型進(jìn)行預(yù)測
對于語言模型來說,目標(biāo)函數(shù)可以利用最大似然,設(shè)為:p(w|context(w))連乘(給定的語料庫樣本出現(xiàn)的可能性最大,此時參數(shù)最可信),這個時候里面的待定參數(shù)能夠通過不斷優(yōu)化求得。利用這種方法計(jì)算的參數(shù)比語言概率模型所需要計(jì)算的參數(shù)少得多

n-gram模型利用極大似然估計(jì)優(yōu)化模型:
image.png

n-gram的優(yōu)點(diǎn):

  1. 常見的Bigram,Trgram 實(shí)現(xiàn)簡單,能夠很好地應(yīng)用在一些經(jīng)典場景中,例如檢查拼寫錯誤(極大似然句子概率)。
  2. 常見搜索引擎的輸入下拉幫助,就是通過n-gram來實(shí)現(xiàn)的。
  3. 可解釋性強(qiáng),易于理解和調(diào)試。
  4. 易于增量實(shí)現(xiàn)和并行訓(xùn)練。

n-gram的缺點(diǎn):

  1. 需要解決數(shù)據(jù)稀疏性的問題(沒有出現(xiàn)過的詞語的概率會被置為0),一般有平滑算法,back-off算法,Interpolation算法。
  2. 由于是離散型變量,沒有辦法度量詞語之間相似度。
  3. 模型巨大,與|V| 詞庫大小呈指數(shù)增長。

神經(jīng)網(wǎng)絡(luò)也能夠用來構(gòu)造這樣的一個目標(biāo)函數(shù),并對參數(shù)進(jìn)行訓(xùn)練,同時能利用訓(xùn)練出的詞向量來度量詞語之間的相似度,并且自帶平滑功能,不需要想n-gram那樣使用平滑算法進(jìn)行平滑處理

真正測試/訓(xùn)練的時候,網(wǎng)絡(luò)的輸入和輸出都是向量。因此要將輸入的文本和單詞變成向量的形式。這個時候會涉及到詞向量

詞向量:將自然語言進(jìn)行數(shù)學(xué)化

  • one-hot representation:最簡單的詞向量構(gòu)造方法,詞典的長度為N的話,那么每一個詞的詞向量的維度都是N,向量的分量只有一個1,對應(yīng)著它在詞典中的位置,其它全為0。缺點(diǎn):維度過高、不能刻畫詞與詞之間的相似性
  • Distributed representation:通過訓(xùn)練,將每一個詞映射到一個固定長度的短向量中,把詞的信息分布到各個分量中,并且語義相近的詞向量見距離越近

神經(jīng)概率語言模型

四個層:輸入層、投影層、隱藏層、輸出層
image.png

對于給定的語料庫,每一個(context(w),w)為一個訓(xùn)練樣本
image.png

對于每一層的輸入輸出:
  • 輸入層:詞的上下文,輸入形式為向量形式,這里一個詞向量維度為m,n-1個詞輸入
  • 投影層:對輸入的n-1個詞進(jìn)行拼接,得到一個維度為(n-1)m的向量
  • 隱藏層:利用雙曲正切函數(shù)tanh作為激活函數(shù),隱藏層規(guī)模nh為可調(diào)參數(shù)
  • 輸出層:矩陣運(yùn)算得到y(tǒng)為一個長度為N的向量,但是分量不能代表每個詞出現(xiàn)的概率,必須要進(jìn)行一個softmax歸一化,歸一化后,p(w|context(w))就可以表示為:
    image.png

那么,目標(biāo)函數(shù)就能夠確定了(最大對數(shù)似然),目標(biāo)函數(shù)的待確定參數(shù)包括:詞向量+神經(jīng)網(wǎng)絡(luò)參數(shù),通過優(yōu)化可求解,最后能夠得到語言概率模型,順便訓(xùn)練出來了每個詞的詞向量

這里面涉及到的參數(shù):

  • n:詞的上下文的詞數(shù),通常不超過5
  • m:詞向量長度,通常為10-100量級
  • nh:用戶指定,通常不用取太大,一般100量級
  • N:語料庫詞典的大小,通常10000-100000量級

整個模型的計(jì)算集中在隱藏層和輸出層的矩陣運(yùn)算,以及輸出層上的softmax歸一化運(yùn)算。
Word2vec的工作就是針對這一部分進(jìn)行優(yōu)化

softmax需要對語料庫中每個詞語(類)都計(jì)算一遍輸出概率并進(jìn)行歸一化,當(dāng)語料庫的詞匯量很大時,運(yùn)算量會非常大。(上述過程其實(shí)可以看做一個多分類問題。給定特征,根據(jù)softmax歸一化結(jié)果中,從N個分類概率中挑一個詞)

不用softmax怎么樣?比如SVM中的多分類的問題中,其中有一種方法是由二分類組合而來的:
image.png

這是一種二叉樹結(jié)構(gòu),應(yīng)用到word2vec中被稱為Hierarchical Softmax(使用二分類近似多分類,使用Huffman編碼構(gòu)造一連串的二分類。比如給定一個詞,先判斷這個詞是名詞嗎,然后判斷是不是水果,再判斷是不是橘子。樹中每個葉子結(jié)點(diǎn)代表詞,非葉子結(jié)點(diǎn)的中間結(jié)點(diǎn)會被賦予一些合適的向量,葉子結(jié)點(diǎn)(真正的詞)會共用這些抽象結(jié)點(diǎn)的向量)

Word2vec兩種模型

  • CBOW:已知詞w上下文context(w)前提下,預(yù)測當(dāng)前詞w
  • Skip-gram :已知當(dāng)前詞w,預(yù)測其上下文context(w)
    image.png

關(guān)于這兩種模型,Word2vec給出了兩套框架,分別是:

  • 基于Hierarchical Softmax (使用Huffman樹)
  • 基于Negative Sampling(隨機(jī)負(fù)采樣)

1、基于Hierarchical Softmax的Word2vec的兩種模型

CBOW

CBOW (Continuous Bag-of-Words Model ),根據(jù)上下文的詞語預(yù)測當(dāng)前詞語的出現(xiàn)概率的模型,其學(xué)習(xí)目標(biāo)是最大化對數(shù)似然函數(shù):
image.png

網(wǎng)絡(luò)結(jié)構(gòu):輸入層、投影層、輸出層

image.png

  • 輸入層:包含context(w)中的2c個詞的詞向量(context(w)為詞w的前后各c個詞構(gòu)成)
  • 投影層:將輸入層的2c個向量進(jìn)行累加求和,得到一個m為的向量:
    image.png
  • 輸出層:輸出層對應(yīng)一顆二叉樹,葉子結(jié)點(diǎn)為預(yù)料庫中的詞,各詞在預(yù)料庫中出現(xiàn)的次數(shù)作為權(quán)值構(gòu)成這個Huffman樹。非葉子結(jié)點(diǎn)相當(dāng)于一個神經(jīng)元(感知機(jī),我認(rèn)為邏輯斯諦回歸就是感知機(jī)的輸出代入f(x)=1/(1+e^x)),二分類決策輸出1或0,分別代表分到左邊或者是右邊。于是每個詞語都可以被01唯一地編碼,并且其編碼序列對應(yīng)一個事件序列,于是我們可以計(jì)算條件概率

    在開始計(jì)算之前,還是得引入一些符號:
  1. p^w:從根結(jié)點(diǎn)出發(fā)到達(dá)w對應(yīng)葉子結(jié)點(diǎn)的路徑.
  2. l^w:路徑p^w中包含結(jié)點(diǎn)的個數(shù)
  3. {p_1}^w,{p_2}^w,{p_3}^w...{p_{l^w}}^w路徑p^w中的各個節(jié)點(diǎn)
  4. {d_2}^w{d_3}^w...{d_{l^w}}^w詞w的Huffman編碼({d_i}^w\in{0,1}),{d_j}^w表示路徑p^w第j個節(jié)點(diǎn)對應(yīng)的編碼(根節(jié)點(diǎn)不對應(yīng)編碼)
  5. {\theta_1}^w{\theta_2}^w...{\theta_{l^{w-1}}}^w路徑p^w中非葉節(jié)點(diǎn)對應(yīng)的向量,向量維度為m(與詞向量相同),{\theta_j}^w表示路徑p^w第j個非葉子結(jié)點(diǎn)對應(yīng)的向量

從根結(jié)點(diǎn)出發(fā),到達(dá)代表w詞的葉子節(jié)點(diǎn)的路徑,可以看作是經(jīng)過了多次二分類,每次分類的將其視作是一次邏輯回歸:
image.png

寫成整體的形式為:
image.png

那么得到詞w的條件概率p(w|context(w))就可以求解為:
image.png

我們的目標(biāo)函數(shù)取對數(shù)似然:
image.png

目標(biāo)就是最大化這個函數(shù),用到隨機(jī)梯度上升法:先求函數(shù)對每個變量的偏導(dǎo)數(shù),每取一個樣本,就代入偏導(dǎo)數(shù)表達(dá)式得到函數(shù)在該維度的增長梯度,然后讓對應(yīng)參數(shù)加上這個梯度,對目標(biāo)函數(shù)的所有參數(shù)做一次刷新,函數(shù)在這個維度上就增長了。觀察目標(biāo)函數(shù)\zeta,函數(shù)中的參數(shù)包括向量x^w, {\theta_{j-1}}^w, w \in C, j=2,3...l^w.計(jì)算函數(shù)\zeta關(guān)于這些向量的梯度:

關(guān)于{\theta_{j-1}}^w的梯度計(jì)算:

image.png

那么{\theta_{j-1}}^w的更新公式為:

image.png

其中\eta為學(xué)習(xí)率

關(guān)于x^w的梯度計(jì)算:

image.png

但是x^w在模型中,并不是代表每個詞的向量,而是上下文詞向量的和。Word2vec利用這個梯度,對詞向量v(\hat{w}),\hat{w} \in context(w)進(jìn)行更新:

image.png

這里沒有將其平均后更新到每個詞向量上,而是直接貢獻(xiàn)到每個詞的詞向量上。

Skip-gram

Skip-gram和CBOW模型的網(wǎng)絡(luò)結(jié)構(gòu)一樣,也包括了三層:輸入層,投影層,輸出層。只是逆轉(zhuǎn)了CBOW的因果關(guān)系而已,即已知當(dāng)前詞語,預(yù)測上下文。
image.png
  • 輸入層:當(dāng)前詞w的詞向量
  • 投影層:恒等投影,其實(shí)是多余的,將輸入層的詞向量傳遞給輸出層
  • 輸出層:輸出層也是對應(yīng)一顆Huffman樹(與CBOW模型一樣)
    那么概率函數(shù)被定義為:
    image.png

    (詞袋模型,認(rèn)為每個u之間無序)
    其中:
    image.png

    與CBOW一樣:
    image.png

    對數(shù)似然函數(shù)為:
    image.png

關(guān)于{\theta_{j-1}}^w的梯度計(jì)算:

image.png

那么{\theta_{j-1}}^w的更新公式為:

image.png

關(guān)于x^w的梯度計(jì)算:

image.png

那么x^w的更新公式為:

image.png

2、基于Negative Sampling的兩種模型

從機(jī)器學(xué)習(xí)的角度來理解,在分類任務(wù)的訓(xùn)練中,不但要給正例,還要給負(fù)例。對于Hierarchical Softmax,負(fù)例是二叉樹的其他路徑。對于Negative Sampling,負(fù)例是隨機(jī)挑選出來的,不再使用Huffman樹,能大幅度提高性能。

CBOW

在給定的一個context(w)中,正樣本是w,其它詞就是負(fù)樣本。假設(shè)我們通過某種采樣方法獲得了負(fù)例子集NEG(w)。對于正負(fù)樣本,分別定義一個標(biāo)簽:
image.png

表示詞\hat{w}的標(biāo)簽,正樣本標(biāo)簽為1,負(fù)樣本為0

對一個給定的正樣本(context(w),w),我們希望能夠最大化:
image.png

其中:
image.png

寫成整體表達(dá)式為:
image.png

這時,g(w)可表示為:
image.png

那么我們希望,當(dāng)u是正樣本時,\sigma({x_w}^T\theta^u)越大越好,當(dāng)u是負(fù)樣本時,\sigma({x_w}^T\theta^u)越小越好。類似于邏輯回歸,\sigma({x_w}^T\theta^u)等于模型預(yù)測樣本為正例的概率,當(dāng)答案就是正的時候,我們希望這個概率越大越好,當(dāng)答案是負(fù)的時候,我們希望它越小越好,這樣模型的分類效果才好。增大正樣本的概率同時降低夫樣本的概率

那么對于一個給定的語料庫C,函數(shù)
image.png

是我們整體的優(yōu)化目標(biāo),取對數(shù),方便計(jì)算
image.png

梯度計(jì)算:
image.png

image.png

image.png

更新公式:
image.png

image.png
Skip-gram

一樣的類似Hierarchical Softmax從CBOW過渡到Skip-gram模型,顛倒樣本的x和y部分,也即對(w,context(w)),我們希望最大化:


image.png

其中:


image.png

image.png

image.png

image.png

梯度計(jì)算:


image.png

image.png

更新公式:
image.png

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容