本講概要:

  1. Word meaning(單詞含義)
  2. word2vec 介紹
  3. skip-gram 演算法求解

一、單詞含義

含義(meaning)指的是由單詞表達的觀點。我們一般使用單詞含義的方法是,使用像WordNet那樣的分類詞典,給每個單詞對應的上下義關係以及同義詞集合

WordNet是普林斯頓大學認知科學實驗室與計算機系聯合開發的一個英語詞庫,收錄了超過十萬個實詞。

在WordNet中,意義相近的單片語成一個同義片語(Synset),而同義片語之間則以上-下義,同義-反義,整體-部分以及蘊含等語義關係連接在一起,構成一個由同義片語作為結點,語義關係作為邊的網狀結構。

eg:查看『good』的含義及其近義詞

但是這種方法存在一些問題:

  • 會忽略一些細微差別,比如同義詞之間的差別
  • 無法即時收錄一些新的單詞
  • 主觀性
  • 需要花費人工去修正和創造
  • 很難準確去計算單詞之間的相似程度

在傳統的NLP領域中,通常採用原子符號(atomic symbols)來表示單詞,即用one-hot向量(獨熱編碼)來表示。

同樣的,這種方法依然存在著問題:

  • 維度非常大,如果一篇文章有1萬個單詞,那麼每一個單詞的為1萬維度的向量
  • 沒有表示出辭彙間的內在聯繫,因為兩個向量的點乘為0,即兩個向量是垂直的,其角度為90度,完全沒有相似性

基於此問題提出了分佈相似性的概念:即用一個低維的向量來表示單詞的含義,並且向量之間的點乘就是兩個單詞之間的相似性。

分佈相似性(distributional similarity)的定義是關於語義的概念,是自然語言處理統計概率模型的核心思想。即可以通過單詞出現的上下文來描述辭彙的意思,e.g. 通過找到』banking』的例句,我們可以得到』banking』常出現的上下文,得到經常和它一起出現的』governments』, 『debt problems』, 『regulations』, 『Europe』,這樣我們就可以用這些詞來表示單詞』banking』的含義。

因此我們對每一個詞將構建一個低維密集向量,他可以很好的預測出上下文中的其他單詞。

基於以上思想我們建立一個數學概率模型:根據詞向量來預測中心詞Wt和上下文的概率

其損失函數為(W-t表示中心詞以外的詞):

二、word2vec的介紹

Word2vec是Google在2013年推出的NLP工具,主要用途是預測每一個單詞和它上下文的辭彙(predict between every word and its context words)。

Word2vec包括兩種基本演算法(skip-grams和continuous bag of words)和兩種訓練方法。

Skip-grams(SG)在位置獨立的假設下,根據中心詞預測上下文;Continuous Bag of Words (CBOW) 從詞包的上下文來預測目標單詞。本講主要介紹SG演算法的基本原理。

Skip-grams演算法的主要思想是利用每一個單詞來預測半徑為m的窗口內的每個單詞。目標函數是在給定中心詞的情況下,使得上下文單詞的概率最大。用公式表示的話如下,第一個是極大似然的公式,第二個公式是加入負號的極大似然對數(把求極大變成了求極小),也就是我們的目標函數,其中的θ表示的是我們需要求的參數,即θ指的是辭彙的向量表示,也是每個辭彙向量表示的唯一參數;這裡的1/T相當於對每一個辭彙進行歸一化處理。這裡的m是超參數,指滑動窗口的大小。

概率分佈一般採用交叉熵作為損失函數,同時與softmax相結合。因此,我們的條件概率P可以表示為:

其中c表示中心詞的索引,o表示的是外部(某一個上下文中)的單詞的索引,Uo表示單詞o的外部向量,Vc表示單詞c的中心詞向量,也就是說每個單詞都有兩個向量(外部和中心詞各一個)。

SG演算法的具體流程如下所示:

其中V表示所有單詞的總數,d表示稠密向量的維數

(1)輸入一個單詞對應的one-hot向量Wt,這個向量是V*1維的,我們假設第m列為1

(2)定義一個d*V維的矩陣Wd*V,這個矩陣的第j列就是第j個單詞的Vc,所以W(d*V維)乘Wt得到的就是輸入單詞作為中心詞的Vc(因為只有第m維是1,所以也只有那m列起作用)

(3)定義一個V*d維的矩陣W(V*d維),這個矩陣的第i行就是第i個單詞的Uo,所以W(V*d維)乘Vc得到一個V*1維向量,其中第k維的數值就是輸入的單詞作為中心詞時,第k個單詞作為上下文時二者向量的點積<Vm,Uk>

(4)對所有算得的<Vm,Uk>進行softmax操作,得到softmax<Vm,Uk>向量後,利用它與每一個上下文單詞對應的one-hot向量進行loss計算,然後反向傳播,先後修改矩陣W(d*V維)和W(V*d維),也就是更新了每個單詞對應的和Vc和Uo。

三、SG演算法求解

我們需要求解的參數為θ,根據SG的網路結構可知,在反向傳播中更新θ參數,採用梯度下降來推導反向傳播中的梯度值。

首先需要鋪墊的是,矩陣和向量的求導都遵循鏈式法則,即:

接下里對我們的損失函數求導:

這裡只給出了對中心詞向量Vc的求導,而對Uo的求導則留作作業。

根據梯度下降公式:

可知,如果想要求它,需要我們把語料庫中的V個詞全部遍歷一遍,當語料庫比較大的時候,求一次的時間開銷就十分巨大,因此我們一般不直接使用梯度下降,而是用隨機梯度下降的方法來代替。

隨機梯度法每次只選取一個樣本進行梯度的計算,這樣的話會引入大量的噪音(noisy),對於自然語言處理的研究而言,這樣的噪音是有益的。所以,在NLP會大量得應用隨機梯度下降。變成隨機梯度下降之後,我們不能每一輪都檢查是否接近0(接近0說明收斂),所以我們固定一個比較大的訓練輪數t,訓練完t輪之後自動結束。


推薦閱讀:
相關文章