Glove原理解析

 

在2013年Tomas Mikolov等人提出word2vec之後,2014年,Jeffrey Pennington, Richard Socher, Christopher D. Manning三人提出了GloVe算法[1][2][3]。其中,GloVe是Global Vector的縮寫。在傳統上,實現word embedding(詞嵌入)主要有兩種方法,Matrix Factorization Methods(矩陣分解方法)和Shallow Window-Based Methods(基於淺窗口的方法),二者分別有優缺點,而GloVe結合了兩者之間的優點。從論文中的實驗,可以看到GloVe方法好於word2vec等方法。

1 背景

做word embedding的方法,在2014年的時候主要有兩種。一種是Matrix Factorization Methods(矩陣分解方法),一種是Shallow Window-Based Methods(基於淺窗口的方法)。關於Shallow Window-Based Methods,一個典型代表就是word2vec的方法,我在博客[5]已經解析過了。Matrix Factorization Methods這種方法,大致可以理解爲是一種基於統計的方法,下面以簡單例子說明。

一個簡單的例子:Window based co-occurrence matrix(基於窗口的共現矩陣)。 窗口長度這裏選擇爲1(通常使用5-10),矩陣具有對稱性(與在左側或右側無關)。樣本數據集:1. I like deep learning. 2. I like NLP. 3. I enjoy flying.

這樣就可以得到如下的基於窗口的共現矩陣,如下圖圖1。

有了這個矩陣,每個詞的向量就可以表示出來了。比如上圖圖1中,I就是對應第一行的向量,所以在這個模型中,I的向量表示就是 (0,2,1,0,0,0,0,0)(0,2,1,0,0,0,0,0),其他的類推。但是使用此矩陣去表示詞向量有以下問題:

  1. 隨着詞彙增多,向量的大小會變得很大。
  2. 非常高維,需要大量存儲空間。
  3. 隨後的分類模型具有稀疏性的問題。(注:因爲維數高,又稀疏,模型分類不易)
  4. 模型不夠健壯(robust)

對於上述問題的解決方案:Low dimensional vectors(低維向量)。該方案的想法是:將“大多數”的重要信息保存在一個固定的、數量較小的維度的向量。通常這個維度是25-1000維,類似於word2vec。那麼,如何減少這個維度呢?

方法一:在共現矩陣X上面進行降維。 降維的方法之一就是Singular Value DecomposiRon(奇異值分解,簡稱SVD),如下圖圖2。其中,X~X~表示在最小二乘法的約束下,秩爲k最接近X的矩陣。SVD的原理,筆者不太熟悉,這裏知道有SVD的方法可以降維就可以了。

但是SVD(奇異值分解)依然有以下幾個問題:

  1. 計算代價太大。對於一個n*m的矩陣,計算複雜度是O(mn2)O(mn2)。這就導致會與數百萬的文檔或詞彙不易計算。
  2. 難以將新的詞彙或文檔合併進去。

下圖圖8是將基於計數的和基於直接預測的兩種word embedding方法對比:

基於計數的方法的優點是: 1. 訓練非常迅速。 2. 能夠有效的利用統計信息。 缺點是:1. 主要用於獲取詞彙之間的相似性(其他任務表現差) 2. 給定大量數據集,重要性與權重不成比例。

基於預測的方法的優點是: 1. 能夠對其他任務有普遍的提高。 2. 能夠捕捉到含詞彙相似性外的複雜模式。 缺點是:1. 需要大量的數據集。 2. 不能夠充分利用統計信息。

這二者都有優缺點,GloVe的邏輯是,兩種方法的優點結合起來。怎麼結合的呢?這正是第二節的內容。

 

2 Glove原理

要了解GloVe之前,建議學習下word2vec的原理。看懂了word2vec,再看此論文會非常容易,因爲裏面有很多相通的地方。GloVe原理,裏面也不像其他的那麼推導公式,一步一步來。這裏的原理,很多還是靠自己慢慢理解那種。下面是正文。

首先定義詞與詞之間的共現次數矩陣爲XX,其中XijXij表示單詞j是單詞i的上下文的次數。 定義Xi=∑kXikXi=∑kXik,表示單詞i的上下文的所有單詞的總個數。最終Pij=P(j|i)=Xij/XiPij=P(j|i)=Xij/Xi表示單詞j出現在單詞i的上下文的概率。

可以從一個簡單例子看到共現概率的重要性。假定我們關心兩個中心詞,i和j。其中,我們假定i=ice,j=steam。那麼我們可以通過給定不同的單詞k,研究他們共現的概率來判定兩個單詞的關係。比如k = solid(固體),我們會期待比率 Pik/PjkPik/Pjk非常大。同樣的,單詞k與steam有關,與ice無關,比如k=gas,那麼比率就非常小。如果k=water或fashion(時尚),那麼或者與二者都有關,或都無關。那麼比率就會接近1。下圖圖9就是他們的概率及比率。通過對比原始的概率,這個比率可以很好的從不相關詞彙(water和fashion)中區分相關的詞彙(solid和gas)。也很好的區分兩個相關詞彙。

上面的討論告訴我們,單詞的詞向量(word vector)學習應該跟詞共現概率的比率有關,而不是他們的概率本身。注意到比率Pik/PjkPik/Pjk依賴於i,j,ki,j,k,最一般的形式如下圖圖10

 

References

GloVe算法原理及簡單使用

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章