word2vec總結(一)

之前彙報時看到過詞嵌入這部分,這裏把自己看到過的總結在這裏,儘可能寫的全一點。
word2vec( 把詞映射爲實數域向量的技術也叫做詞嵌入(word embedding))

  1. 由來
    爲什麼要引入word2vec:之前都是用one-hot編碼表示結點信息,當然也可以用one-hot來表示詞。雖然one-hot詞向量構造起來很容易,但通常並不是⼀個好選擇。⼀個主要的原因是,one-hot詞向量⽆法準確表達不同詞之間的相似度,如我們常常使⽤的餘弦相似度。對於向量x, y ∈ R d,它 們的餘弦相似度是它們之間夾⻆的餘弦值:xyxy[1,1]\frac{\boldsymbol{x}^{\top} \boldsymbol{y}}{\|\boldsymbol{x}\|\|\boldsymbol{y}\|} \in[-1,1]由於任何兩個不同詞的one-hot向量的餘弦相似度都爲0,多個不同詞之間的相似度難以通過onehot向量準確地體現出來。word2vec⼯具的提出正是爲了解決上⾯這個問題 它將每個詞表⽰成⼀個定⻓的向量,並使得這些向量能較好地表達不同詞之間的相似和類⽐關係。word2vec⼯具包含了兩個模型,即跳字模型(skip-gram)和連續詞袋模型(continuous bag of words,CBOW)以及兩種高效的訓練方法:負採樣層序softmax。word2vec詞向量可以較好地表達不同詞之間的相似和類比關係。
  2. 跳字模型
    跳字模型假設基於某個詞來⽣成它在⽂本序列周圍的詞。舉個例⼦,假設⽂本序列是 “the”“man”“loves”“his”“son”。以“loves”作爲中⼼詞,設背景窗口⼤小爲2。如圖所示,跳字模型所關⼼的是,給定中⼼詞“loves”,⽣成與它距離不超過2個詞的背景詞“the”“man”“his”“son”的條件概率,即: P(“the”, “man”, “his”, “son” | “loves”)
    在這裏插入圖片描述
    假設給定中⼼詞的情況下,背景詞的⽣成是相互獨⽴的,那麼上式可以改寫成: P(“the” | “loves”) · P(“man” | “loves”) · P(“his” | “loves”) · P(“son” | “loves”) 。假設給定⼀個⻓度爲T的⽂本序列,設時間步t的詞爲w (t)。 假設給定中⼼詞的情況下背景詞的⽣成相互獨⽴,當背景窗口⼤小爲m時,跳字模型的似然函數即給定任⼀中⼼詞⽣成所有背景詞的概率:t=1Tmjm,j0P(w(t+j)w(t))\prod_{t=1}^{T} \prod_{-m \leq j \leq m, j \neq 0} P\left(w^{(t+j)} | w^{(t)}\right)訓練跳字模型
    訓練中我們通過最⼤化似然函數來 學習模型參數,即最⼤似然估計。這等價於最小化以下損失函數:t=1Tmjm,j0logP(w(t+j)w(t))-\sum_{t=1}^{T} \sum_{-m \leq j \leq m, j \neq 0} \log P\left(w^{(t+j)} | w^{(t)}\right)在跳字模型中,每個詞被表⽰成兩個d維向量,⽤來計算條件概率。假設這個詞在詞典中索引爲i, 當它爲中⼼詞時向量表⽰爲viRdv_i ∈ R^d,而爲背景詞時向量表⽰爲uiRdu_i ∈ R^d。設中⼼詞wcw_c在詞典中索引爲c,背景詞wow_o在詞典中索引爲o,給定中⼼詞⽣成背景詞的條件概率可以通過對向量內積 做softmax運算而得到:P(wowc)=exp(uovc)iVexp(uivc)P\left(w_{o} | w_{c}\right)=\frac{\exp \left(\boldsymbol{u}_{o}^{\top} \boldsymbol{v}_{c}\right)}{\sum_{i \in \mathcal{V}} \exp \left(\boldsymbol{u}_{i}^{\top} \boldsymbol{v}_{c}\right)}其中詞典索引集V=0,1,...,V1V = {0, 1, . . . , |V|−1}
    按照以往經驗,我們可以用隨機梯度下降法來求解,以其中一個詞爲例子來看一下:每個詞的中心詞和背景詞的詞向量是模型參數,是我們要求的參數。
    Vc=VcLVclogP(wowc)vc=uojVexp(ujvc)ivexp(uivc)ujlogP(wowc)vc=uojVP(wjwc)ujV_{c}=V_{c}-\frac{\partial L}{\partial V_{c}}\\ \frac{\partial \log \mathbb{P}\left(w_{o} | w_{c}\right)}{\partial \mathbf{v}_{c}}=\mathbf{u}_{o}-\sum_{j \in V} \frac{\exp \left(\mathbf{u}_{j}^{\top} \mathbf{v}_{c}\right)}{\sum_{i \in v} \exp \left(\mathbf{u}_{i}^{\top} \mathbf{v}_{c}\right)} \mathbf{u}_{j}\\ \frac{\partial \log \mathbb{P}\left(w_{o} | w_{c}\right)}{\partial \mathbf{v}_{c}}=\mathbf{u}_{o}-\sum_{j \in \mathcal{V}} \mathbb{P}\left(w_{j} | w_{c}\right) \mathbf{u}_{j}不算前面的兩個加和,只針對後半部分求導,已經有很大的計算開銷了,即使用隨機梯度下降,每一步的迭代的開銷也非常大,時間複雜度至少 OVO| V |。 它的計算需要詞典中所有詞以wcw_c爲中⼼詞的條件概率。有關其他詞向量的梯度同理可得。 訓練結束後,對於詞典中的任⼀索引爲i的詞,我們均得到該詞作爲中⼼詞和背景詞的兩組詞向量viv_iuiu_i。在⾃然語⾔處理應⽤中,⼀般使⽤跳字模型的中心詞向量作爲詞的表徵向量。
  3. 連續詞袋模型
    連續詞袋模型與跳字模型類似。與跳字模型最⼤的不同在於,連續詞袋模型假設基於某中⼼詞在 ⽂本序列前後的背景詞來⽣成該中⼼詞。在同樣的⽂本序列“the”“man”“loves”“his”“son” ⾥,以“loves”作爲中⼼詞,且背景窗口⼤小爲2時,連續詞袋模型關⼼的是,給定背景詞 “the”“man”“his”“son”⽣成中⼼詞“loves”的條件概率(如圖所示),也就是:P(“loves” | “the”, “man”, “his”, “son”)。
    在這裏插入圖片描述
    因爲連續詞袋模型的背景詞有多個,我們將這些背景詞向量取平均,然後使⽤和跳字模型⼀樣的⽅法來計算條件概率。設viRduiRdv_i ∈ R^d和u_i ∈ R^d分別表⽰詞典中索引爲i的詞作爲背景詞和中⼼詞的向量(注意符號的含義與跳字模型中的相反)。設中⼼詞wcw_c在詞典中索引爲c,背景詞wo1,...,wo2mw_{o_1} , . . . , w_{o_{2m}}在 詞典中索引爲o1,...,o2mo_1, . . . , o_{2m},那麼給定背景詞⽣成中心詞的條件概率:
    P(wcwo1,,wo2m)=exp(12muc(vo1++vo2m))iVexp(12mui(vo1++vo2m))Wo=(wo1, ,wo2m}vo=(vo1++vo2m)/(2m)P(wcWo)=exp(ucvo)iVexp(uivo)P\left(w_{c} | w_{o_{1}}, \ldots, w_{o_{2 m}}\right)=\frac{\exp \left(\frac{1}{2 m} \boldsymbol{u}_{c}^{\top}\left(\boldsymbol{v}_{o_{1}}+\ldots+\boldsymbol{v}_{o_{2 m}}\right)\right)}{\sum_{i \in \mathcal{V}} \exp \left(\frac{1}{2 m} \boldsymbol{u}_{i}^{\top}\left(\boldsymbol{v}_{o_{1}}+\ldots+\boldsymbol{v}_{o_{2 m}}\right)\right)}\\ \mathcal{W}_{o}=\left(w_{o_{1}}, \cdots, w_{o_{2 m}}\right\}\\ \overline{v}_{o}=\left(v_{o_{1}}+\ldots+v_{o_{2 m}}\right) /(2 m)\\ P\left(w_{c} | \mathcal{W}_{o}\right)=\frac{\exp \left(\boldsymbol{u}_{c}^{\top} \overline{\boldsymbol{v}}_{o}\right)}{\sum_{i \in \mathcal{V}} \exp \left(\boldsymbol{u}_{i}^{\top} \overline{\boldsymbol{v}}_{o}\right)}給定⼀個⻓度爲TT的⽂本序列,設時間步t的詞爲w(t)w^{(t)},背景窗口⼤小爲mm。連續詞袋模型的似然 函數是由背景詞⽣成任⼀中⼼詞的概率:t=1TP(w(t)w(tm),,w(t1),w(t+1),,w(t+m))\prod_{t=1}^{T} P\left(w^{(t)} | w^{(t-m)}, \ldots, w^{(t-1)}, w^{(t+1)}, \ldots, w^{(t+m)}\right)
    訓練連續詞袋模型同訓練跳字模型基本⼀致。連續詞袋模型的最⼤似然估計等價於最小化損失函數:t=1TlogP(w(t)w(tm),,w(t1),w(t+1),,w(t+m))logP(wcWo)=ucvolog(iVexp(uivo))-\sum_{t=1}^{T} \log P\left(w^{(t)} | w^{(t-m)}, \ldots, w^{(t-1)}, w^{(t+1)}, \ldots, w^{(t+m)}\right)\\ \log P\left(w_{c} | \mathcal{W}_{o}\right)=\boldsymbol{u}_{c}^{\top} \overline{\boldsymbol{v}}_{o}-\log \left(\sum_{i \in \mathcal{V}} \exp \left(\boldsymbol{u}_{i}^{\top} \overline{\boldsymbol{v}}_{o}\right)\right)通過微分,我們可以計算出上式中條件概率的對數有關任⼀背景詞向量voi(i=1,...,2m)v_{o_i}(i = 1, . . . , 2m)的梯度:logP(wcWo)voi=12m(ucjVexp(ujvo)ujiVexp(uivo))=12m(ucjVP(wjWo)uj)\frac{\partial \log P\left(w_{c} | \mathcal{W}_{o}\right)}{\partial \boldsymbol{v}_{o_{i}}}=\frac{1}{2 m}\left(\boldsymbol{u}_{c}-\sum_{j \in \mathcal{V}} \frac{\exp \left(\boldsymbol{u}_{j}^{\top} \overline{\boldsymbol{v}}_{o}\right) \boldsymbol{u}_{j}}{\sum_{i \in \mathcal{V}} \exp \left(\boldsymbol{u}_{i}^{\top} \overline{\boldsymbol{v}}_{o}\right)}\right)=\frac{1}{2 m}\left(\boldsymbol{u}_{c}-\sum_{j \in \mathcal{V}} P\left(w_{j} | \mathcal{W}_{o}\right) \boldsymbol{u}_{j}\right)
    有關其他詞向量的梯度同理可得。同跳字模型不⼀樣的⼀點在於,我們⼀般使⽤連續詞袋模型的背景詞向量作爲詞的表徵向量。至於弊端嗎,和跳字模型的弊端一樣,有很大的計算開銷,從jV\sum_{j \in \mathcal{V}}就可以看出,針對這個弊端,引出兩種
    兩種近似訓練的方法:負採 樣(negative sampling)或層序softmax(hierarchical softmax),下篇文章再總結吧。
  4. ⼩結
    • 詞向量是⽤來表⽰詞的向量。把詞映射爲實數域向量的技術也叫詞嵌⼊。
    • word2vec包含跳字模型和連續詞袋模型。跳字模型假設基於中⼼詞來⽣成背景詞。連續詞袋模型假設基於背景詞來⽣成中⼼詞。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章