【NLP模型筆記】GloVe模型簡介

GloVe模型

在這裏插入圖片描述

glove模型的參考資料鏈接如下:

https://nlp.stanford.edu/projects/glove/

論文鏈接(pdf)如下:

https://nlp.stanford.edu/pubs/glove.pdf

GloVe: Global Vectors for Word Representation [Jeffrey Pennington], [Richard Socher], [Christopher D. Manning]

GloVe的基本思路

和之前講過的word2vec(SG和CBOW)一樣,glove模型也是一種無監督的詞嵌入方法,即詞向量學習方法。

glove是一個全局對數雙線性迴歸模型(global log bilinear regression model)。顧名思義,該模型用到了語料庫的全局特徵,即單詞的共現頻次矩陣,並且,其優化目標函數是對數線性的,並用迴歸的形式進行求解。

glove的思想基於這樣一個經驗,如下圖所示:

在這裏插入圖片描述

在glove的論文中,作者舉了上表中的這樣一個栗子。現在我們已經知道ice和steam這兩個詞在語料中出現的頻率,這兩個詞被視爲目標詞(target words) ,也就是需要對它們的詞向量進行學習和表徵的詞語。此時,我們暫且不直接去求解這兩個詞之間的共現關係(就像word2vec那樣),而是基於這兩個詞的頻率,去探索一下given這兩個目標詞的情況下,其他詞的條件概率是一個什麼情況,這裏的k就是其他詞。

首先,我們計算given單詞ice的情況下,單詞k出現的頻率,也就是說,k出現在i的上下文中的概率是多少。這個條件概率記做P(k|ice),P(k|ice) = X k,ice / X ice,X k, ice是k和ice在同一個context中出現的次數,X ice爲ice出現的次數。同理,我們計算P(k|steam),計算方法一樣。這裏的k可以是字典中的任何一個單詞。

下面,我們觀察兩個條件概率的比值,也就是對於任一個k,k出現在ice的context中的條件概率,與k出現在steam的context中的條件概率,這兩者之間的比值。

上面表格中,作者展示了k取solid,gas,water,fashion這四個值的時候,比值的情況。爲啥要取這四個值呢?因爲solid和ice語義上是有關的,冰是固體嘛,而solid和steam沒有語義的關係;而gas則相反,與steam有語義關係,與ice則無;而water則與ice和steam兩者都有關係,一個是水汽,一個是水的固態,即冰;而fashion這個詞明顯與ice和steam都無關。作者計算了這四個k下的條件概率比值,我們發現,當k與分子上的這個詞(ice)接近,而與分母(steam)無關時,這個比值遠大於1,而k與分母更接近,則比值遠小於1。另外兩種情況,要麼k與分子分母都有關,要麼都無關,這時候,這個比值基本在1附近,表明這兩個條件概率其實差不太多。這樣一個結論也是符合我們的直覺的。畢竟語義相近,出現在上下文中的比例更高一些嘛,也是合理的。

而正是基於這個樸素的道理,glove的作者決定用一個函數去擬合這個條件概率的比值,即:

在這裏插入圖片描述

其中,i和j就是目標詞,k就是用於計算條件概率的上面講的那個k。擬合ratios of co-occurence probability這個思路是glove中最基本和最重要的。我們來稍微詳細討論一下這個問題。首先,對於詞嵌入這個任務來說,我們的目標是讓語義相同的詞語在向量空間中離得更近一些,因此,我們首先得需要找到在實際的語料中(而非向量空間中)如何數學化地表達兩個詞語的相似程度。word2vec對這個問題的答案是在context中出現的概率。這個思路自然是對的,但是這種embedding方法相當於絕對地去模擬兩個詞之間的條件概率。而我們知道,對於人類的自然語言來說,每個單詞的意義實際上是建構在詞語之間的結構當中的。換句話說,每個詞語只有當與其他詞語比較時才真正能有其意義。比如NLP中常舉例的一個栗子:king - man + woman = queen,這個analogy中,我們其實並不需要實際地知道king和man等詞語在實際的世界中所指稱的對象(很多抽象概念甚至沒有實際指稱的經驗對象),而是只需要知道這幾個詞之間的邏輯關係即可。因此,相比起絕對地描述一個詞語,通過與第三者的比較,得到第三者與兩個詞語中的哪個更接近這樣一個相對的關係,來表達詞語的含義,實際上更符合我們對於語言的認知。很容易聯想到的是,這樣一來,我們學習出的vector在analogy這個任務上可以被期待做的更好,因爲用詞向量擬合這個條件概率ratio,本身就是基於兩個詞向量相對於另外的其他詞向量之間關係來做的。所以,作者在abstract中說道:這樣學習出來的vector space具有一個meaningful substructure。這個比值關係是glove最基本的思路,理解了這一點,我們下面來看怎麼樣通過上面這個式子推導出glove的損失函數。

首先,上面的F這個函數是個三元函數,包括了wi,wj,tilde wk。這個F由於擬合的是條件概率的比值,也就是k與i和j的相似性,因此它應該是個相似性的度量。考慮到在vector space中,我們希望詞向量之間的關係是linear的(正如前面的king-man+woman=queen的例子),因此,我們將我們的目標詞i和j的向量相減,讓這個F只和wi-wj有關,即:

在這裏插入圖片描述

這樣,只需要計算wk和wi-wj之間的相似度,就可以擬合右邊的ratio了。到這裏,其實不難發現,由於k要與i和j比較,看看與i,j中哪一個更近,因此這個wi-wj 和wk的關係可以用向量點積(內積)來處理,因爲向量內積表示相似度,這樣一來,wiTwk表示i和k的相似度,wjTwk爲j和k的相似度,如果k和i更接近,則減號前的大,否則減號後的大。

在這裏插入圖片描述

這裏,我們發現,如果把i和j換換位置,得到F( (wj-wi)T wk) = Pjk / Pik,和上式相比,我們發現F函數有一個性質,那就是F(x) = 1/ F(-x) 。具備高中數學函數知識就可以猜到,這個F就是一個exp()指數函數。exp(-x) = 1/exp(x)。(這一段內容爲了容易理解,與論文中說明方法略有不同)

這樣,我們帶入指數函數,與Pik和Pjk對應後發現,exp(wiTwk) = Pik,因此,可以得到:

在這裏插入圖片描述

這裏我們把Pik = Xik / Xi這個除法通過log拆成了減法。

由於右邊有一個log(Xi),我們這個式子不對稱了。試想一下,如果把wiTwk換成wkTwi,那麼右邊需要 -log(Xi)呢還是 -log(Xk)呢?爲了維持這種對稱性,我們把-log(Xi)丟掉,但是由於這個term之和i有關,因此可以在左邊加一個bi作爲i的bias。爲了維護對稱性,我們只好也對k加一個同樣的bias,於是得到:

在這裏插入圖片描述

到這裏,我們就已經基本結束了 ,因爲我們知道了word vector要擬合的目標。下面就是一些技術性的trick了:

在這裏插入圖片描述

上面的 J 就是最終的loss function。裏面有一個f函數,作爲加權項。這個函數的設計很有意思,它的性質在上面的1 2 3中已經說明了。下面看一下它的圖像:

在這裏插入圖片描述

可以看到,這個函數以Xij爲自變量,在取值小的區間遞增,而大於某個thr後,即xmax,就開始不再增加。Xij過高的那些word的權重相對就被壓下來了。這就意味着,那些高頻詞組合對模型的影響相對小一些,從而使得那些出現不那麼多的詞語的co-occurence有機會更多地影響和改變模型。這個思路主要是由於自然語言中天然的長尾效應,爲了使得長尾部分不至於被頭部掩蓋掉,只好通過賦權的方式降低這兩個部分在loss中佔比的差異。這個想法和自然語言處理中先去停用詞(stop-words)的思路是類似的。

以上就是GloVe的基本原理和推導過程。

.

2020年4月28日01:55:58

北京

春將歸去,與汝同車,低聲細語。

—— 【日】 松尾芭蕉

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