cs224n學習筆記L2:word vectors and word senses

cs224n學習筆記L1:自然語言處理簡介

一、課堂計劃

  1. 完成word vectors和word2vec工具預覽(即作業一)
  2. 優化理論基礎
  3. 能否通過計數使計算更高效
  4. glove模型計算詞向量的方案
  5. 驗證word vectors
  6. word senses(詞感知?)

目的:課堂結束後能夠讀懂詞嵌入的論文。

二、 詞向量計算方法

2.1 回顧word2vec計算

對一箇中心詞,與窗口內的context詞出現的概率:
P(oc)=exp(uoTvc)wVexp(uwvc)(2.1)P(o|c) = \frac{exp(u_o^T v_c)}{\sum_{w \in V}exp(u_wv_c)} \tag{2.1}
通過極大似然方法最大化整個文本出現的概率:
L(θ)=t=1Tmjmj0P(wt+jwt,θ)L(\theta) = \prod_{t=1}^T\prod_{-m \le j \le m, j\ne0}P(w_{t+j}|w_t,\theta)
損失函數:
J(θ)=1TlogL(θ)=1Tt=1Tmjmj0logP(wt+jwt,θ)(2.2)J(\theta)=-\frac1TlogL(\theta)=-\frac1T\sum_{t=1}^T\sum_{-m \le j \le m, j\ne0}logP(w_{t+j}|w_t,\theta) \tag{2.2}

2.2 word2vec中計算方法詳解

假設vocabulary包含m個詞,每個詞向量長度爲n, 對於每一個詞,作爲中心詞(center)和非中心詞(outside)時分別使用v和u兩個向量表示。在計算完成後將兩個向量平均作爲最終詞向量表示。
Um×n(outside)=[u1u2um]U_{m \times n}(outside) = \left[ \begin{matrix} u_1 \\ u_2 \\ \vdots \\ u_m \end{matrix} \right]
Vm×n(center)=[v1v2vm] V_{m \times n} (center)= \left[ \begin{matrix} v_1 \\ v_2 \\ \vdots \\ v_m \end{matrix} \right]
對每一個詞作爲中心詞時,計算概率分佈。這裏假定第4個詞作爲中心詞時,有
Dm×1=Um×nv4T=[d1d2dm]D_{m \times 1} = U_{m \times n} \cdot v_4^T = \left[ \begin{matrix} d_1 \\ d_2 \\ \vdots \\ d_m \end{matrix}\right]
其中,d爲與m個outside詞的點積,由於兩個向量的點乘可以表示其相似度,進一步可用於表示其出現的概率大小,從而得到概率表示:
Pm×1=softmax(Dm×1)=[p1p2pm]P_{m \times 1} = softmax(D_{m \times 1}) = \left[ \begin{matrix} p_1 \\ p_2 \\ \vdots \\ p_m \end{matrix}\right]
這裏原理就很明顯了,我們接下來需要做的,就是通過優化問題來更新矩陣U和V,從而使詞向量模型需對出現在同一個context中的詞賦予較大的概率。

2.3 高頻詞(the)引起的問題

通過以上計算過程可以知道,如果兩個詞出現在一個context的次數越頻繁,那麼他們的詞向量就會越接近,這樣一來像the這樣的高頻詞,就會使它前後的詞向量高度集中,從而導致一些問題。

三、優化基礎

3.1 梯度下降

  1. 梯度是指多元函數在某個點上升最快的方向,那麼梯度的反方向當然就是下降最快的方向。從而得到直觀的優化公式:
    θnew=θoldαθJ(θ)\theta_{new} = \theta_{old} - \alpha \nabla_{\theta}J(\theta)
    此處thetaJ(θ)\nabla_{theta}J(\theta)爲損失函數的梯度,α\alpha爲學習率或步長,是一個超參數。以上是對整個問題的矩陣表示,但在計算過程中,需要一個個的更新參數,所以有對單個參數θj\theta_j表示版本:
    θjnew=θjoldαθjoldJ(θ) \theta _ { j } ^ { n e w } = \theta _ { j } ^ { o l d } - \alpha \frac { \partial } { \partial \theta _ { j } ^ { o l d } } J ( \theta )
    在高等數學(同濟)中關於梯度的定義如下,及梯度是各個自變量的偏導組成的向量。
    在這裏插入圖片描述

3.2 隨機(stochastic)梯度下降(SGD)

3.1中提到的梯度下降,爲了計算出參數的梯度,需要代入整個數據集,這樣一次更新計算量非常大,因此提出隨機梯度下降方法,即每一個更新都是從數據及中隨機抽樣部分數據(batch), 在詞向量計算中對每一個window數據計算一次更新。

四、word vector優化過程

4.1 SGD引起的稀疏數據

由於使用一個窗口更新一次,由於θJt(θ)\nabla_{\theta}J_t(\theta)是各個詞向量的偏導組成的向量,如果這個詞沒有出現,其偏導也就爲0,因此梯度將非常稀疏。

對應方案:使用稀疏矩陣或者將詞hash映射到具體向量,如果是分佈式計算,必須避免大量的中間數據在節點之間的傳送

4.2 兩種詞向量建模方案

  1. Skip-gram(SG):給定中心詞預測窗口context(outsides)
  2. Continous Bag of Words(CBOW):給定窗口context預測中心詞

4.3 訓練效率提升方案

  1. 負採樣。目前爲止仍然以更簡單但是計算量大的傳統softmax爲主要方案, 即公式2.1中的分母(正則項)。
  2. 由於經典方案正則化計算量太大,因此我們在作業二中使用負採樣方案。其主要思想爲:訓練一個logistics regression分類器, 判斷一個詞語對是否來自於同一個context。
  3. 損失函數:最大化如下函數:
    在這裏插入圖片描述
    在作業二中,使用的損失函數爲:
    Jnegsample(o,vc,U)=log(σ(uovc))k=1,kP(w)Klog(σ(ukvc)) J _ { n e g - s a m p l e } \left( \boldsymbol { o } , \boldsymbol { v } _ { c } , \boldsymbol { U } \right) = - \log \left( \sigma \left( \boldsymbol { u } _ { o } ^ { \top } \boldsymbol { v } _ { c } \right) \right) - \sum _ {k = 1 , k \sim P(w) } ^ { K } \log \left( \sigma \left( - \boldsymbol { u } _ { k } ^ { \top } \boldsymbol { v } _ { c } \right) \right)
    這裏的P(w)P(w)爲採樣的概率分佈,爲了平衡高頻詞和低頻次的影響,取P(w)=U(w)3/4ZP(w) = \frac{U(w)^{3/4}}{Z}, 這裏U(w)U(w)爲unigram分佈,及按詞頻比例作爲其概率分佈,指數部分取3/4可以平滑詞頻的影響,分母Z表示正則化,將指數操作後(和不爲1)的數值重新變爲概率(和爲1)。

4.4 統計共現(co-occurence)詞對

  1. 存在問題:存儲共現矩陣稀疏(O(n2)O(n^2)內存)
  2. 解決辦法:奇異值分解降維。可以使用numpy庫中的np.lilalg.svd()函數。

五、驗證及其他

5.1 兩種驗證方法

  • 類比
  • 訓練完整的下游任務

5.2 其他

課程還介紹了很多詞向量的其他細節、例如一詞多義、詞向量訓練參數介紹及各種模型性能對比等,課程後半截聽得有點迷糊,這裏就不給出完整筆記了,如果以後需要衝刷再來補上。

六、作業

6.1 手寫推導部分

在這裏插入圖片描述

感悟:當遇到矩陣或向量求導的時候,要每個元素拆開單獨計算,第4小題比較典型。

  1. 一行文字說明下面兩個公式等價,即交叉熵損失與naive-softmax。
    Jcrossentropy=ywlog(y^w)=log(y^o)J_{cross-entropy}=- \sum y _ { w } \log \left( \hat { y } _ { w } \right) = - \log \left( \hat { y } _ { o } \right)
    Jnaivesoftmax(vc,o,U)=logP(O=oC=c)J_{naive-softmax}\left( \boldsymbol { v } _ { c } , o , \boldsymbol { U } \right) = - \log P ( O = o | C = c )
    答:由於ywy_w爲0-1概率分佈,因此Jcrossentropy=ywlog(y^w)=(0,1)log(y^w)=log(y^w1y^w2y^wT)=logP(O=oC=c)J_{cross-entropy} \\ =- \sum y _ { w } \log \left( \hat { y } _ { w } \right) \\ = - \sum (0,1) \cdot \log \left( \hat { y } _ { w } \right) \\ = - \log \left( \hat { y } _ { w1 } \hat { y } _ { w2 } \dots \hat { y } _ { wT } \right) \\ =- \log P( O = o | C = c )

  2. we know this deravatives:(這裏第一種解法利用了softmax+交叉熵求導的一般規律,可以推導證明)
    解法一:J=CE(y,y^)y^=softmax(θ) Jθ=(y^y)T \because J = CE(y, \hat{y}) \\ \hat{y} = softmax(\theta)\ \\ \therefore \frac{\partial J}{\partial \theta} = (\hat{y} - y)^T
    yy is a column vector in the above equation. So, we can use chain rules to solve the deravitive:
    Jvc=Jθθvc =(y^y)UTvcvc =UT(y^y)T\begin{aligned} \frac{\partial J}{\partial v_c} &= \frac{\partial J}{\partial \theta} \frac{\partial \theta}{\partial v_c} \ &= (\hat{y} - y) \frac{\partial U^Tv_c}{\partial v_c} \ &= U^T(\hat{y} - y)^T \end{aligned}
    解法二:
    J(vc,o,U)vc=(uoTvc)vc+(log(wexp(uwTvc)))vc=uo+1wexp(uwTvc)(wexp(uwTvc))vc=uo+wexp(uwTvc)uwwexp(uwTvc)=uo+wp(O=wC=c)uw=youo+wy^wuw(uo)=UTy+UTy^(uO=oU=UT(y^y)\begin{aligned} \frac{\partial J\left(v_{c}, o, U\right)}{\partial v_{c}} &=-\frac{\partial\left(u_{o}^{T} v_{c}\right)}{\partial v_{c}}+\frac{\partial\left(\log \left(\sum_{w} \exp \left(u_{w}^{T} v_{c}\right)\right)\right)}{\partial v_{c}} \\ &=-u_{o}+\frac{1}{\sum_{w} \exp \left(u_{w}^{T} v_{c}\right)} \frac{\partial\left(\sum_{w} \exp \left(u_{w}^{T} v_{c}\right)\right)}{\partial v_{c}} \\ &=-u_{o}+\sum_{w} \frac{\exp \left(u_{w}^{T} v_{c}\right) u_{w}}{\sum_{w} \exp \left(u_{w}^{T} v_{c}\right)} \\ &=-u_{o}+\sum_{w} p(O=w | C=c) u_{w} \\ &=-y_ou_o+\sum_w\hat y_wu_w (單個u_o)\\ &=-U^T\boldsymbol{y} + U^T\boldsymbol{\hat y}(全體u,這裏限定O=o所以U實際代表一行) \\ &=U^{T}(\hat{y}-y) \end{aligned}

  3. similar to the equation above. Jvc=JθθU =(y^y)UTvcU =vc(y^y)T\begin{aligned} \frac{\partial J}{\partial v_c} &= \frac{\partial J}{\partial \theta} \frac{\partial \theta}{\partial U} \ &= (\hat{y} - y) \frac{\partial U^Tv_c}{\partial U} \ &= v_c(\hat{y} - y)^T \end{aligned}

  4. xx爲一個向量,求sigmod函數對x的偏導,結果可以用σ(x)\sigma(x)表示
    σ(x)=11+ex=ex1+ex\sigma(x)= \frac{1}{1+e^{-x}}=\frac{e^x}{1+e^x}
    答:sigmod(x)=11+exsigmod(x) = \frac{1}{1+e^{-x}}, 由於x爲一個向量x=(x1,x2,,xn)x=(x_1, x_2, \dots, x_n),而求導實際上是針對單個變量, 由於σ(x)\sigma(x)是x的函數,所以求導結果應該是一個矩陣:
    σ(xi)xi=exi(1+exi)2=(1+exi)1(1+exi)2=σ(x)(1σ(x))σ(xi)xj=0σ(x)x=[σ(x1)000σ(x2)000σ(xn)]\begin{aligned} \frac{\partial \sigma(x_i)}{\partial x_i} & = \frac{e^{-x_i}}{(1+e^{-x_i})^2} =\frac{(1+e^{-x_i})-1}{(1+e^{-x_i})^2} = \sigma(x)(1-\sigma(x))\\ \frac{\partial \sigma(x_i)}{\partial x_j} & = 0 \\ \therefore \frac{\partial \sigma(x)}{\partial x} &= \left[\begin{matrix} \sigma'(x_1) & 0 & \ldots &0 \\ 0 & \sigma'(x_2) & \ldots &0 \\ \vdots & \vdots & \ddots& \vdots\\ 0 &0 & \ldots & \sigma'(x_n)\\ \end{matrix} \right] \end{aligned}

sigmod 函數有一些特性: (1) σ(x)=1σ(x)\sigma(-x) = 1-\sigma(x) (2) σ(x)=σ(x)(1σ(x))\sigma'(x) = \sigma(x)(1-\sigma(x))

  1. 題目描述如圖在這裏插入圖片描述
    答:根據第四題有(1)Jvc=σ(uoTvc)uoσ(uoTvv)+k=1Kσ(ukTvc)ukσ(ukTvc)=(σ(uoTvc)1)uo+k=1K(1σ(ukTvc))uk=(σ(uoTvc)1)uo+k=1Kσ(ukTvc)uk(2)Juo=(σ(uoTvc)1)vc(oK)(3)Juk=σ(ukTvc)vc\begin{aligned} (1) \frac{\partial J}{\partial v_c} & = -\frac{\sigma'(u_o^Tv_c)u_o}{\sigma(u_o^Tv_v)} + \sum_{k=1}^K \frac{\sigma'(-u_k^Tv_c)u_k}{\sigma(-u_k^Tv_c)} \\ &=(\sigma(u_o^Tv_c)-1)u_o+\sum_{k=1}^K(1-\sigma(-u_k^Tv_c))u_k \\ & =(\sigma(u_o^Tv_c)-1)u_o+\sum_{k=1}^K\sigma(u_k^Tv_c)u_k \\ (2)\frac{\partial J}{\partial u_o} &= (\sigma(u_o^Tv_c)-1)v_c (o \notin K)\\ (3)\frac{\partial J}{\partial u_k} &=\sigma(u_k^Tv_c)v_c \end{aligned}
    從偏導可以看出,梯度更新時,使用負採樣計算的參數量遠遠小於naive-softmax。

6.2 代碼

github鏈接
實現word2vec, 實際上是在課程代碼框架下填充部分代碼。

七、收貨與感想

這次課程完成時間比較長,當然收貨也比較大,複習了一遍高數,終於勉強搞懂了矩陣向量求導,算是推公式入門選手了吧。

發佈了20 篇原創文章 · 獲贊 7 · 訪問量 5614
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章