吳恩達深度學習筆記(126)

GloVe 詞向量(GloVe Word Vectors)

你已經瞭解了幾個計算詞嵌入的算法,另一個在NLP社區有著一定勢頭的算法是

GloVe算法,這個算法並不如Word2Vec或是Skip-Gram模型用的多,但是也有人熱衷於它,我認為可能是因為它簡便吧,我們來看看這個算法。

吳恩達深度學習筆記(126) | NLP | GloVe 詞向量

Glove算法是由Jeffrey Pennington,Richard Socher和Chris Manning發明的。

(Pennington J, Socher R, Manning C. Glove: Global Vectors for Word Representation[C]// Conference on Empirical Methods in Natural Language Processing. 2014:1532-1543.)

GloVe代表用詞表示的全局變量(global vectors for word representation)

在此之前,我們曾通過挑選語料庫中位置相近的兩個詞,列舉出詞對,即上下文和目標詞,GloVe算法做的就是使其關係開始明確化。

假定X_ij是單詞i在單詞j上下文中出現的次數,那麼這裡i和j就和t和c的功能一樣,所以你可以認為X_ij等同於X_tc。你也可以遍歷你的訓練集,然後數出單詞i在不同單詞j上下文中出現的個數,單詞t在不同單詞c的上下文中共出現多少次。

根據上下文和目標詞的定義,你大概會得出X_ij等於X_ji這個結論。事實上,如果你將上下文和目標詞的範圍定義為出現於左右各10詞以內的話,那麼就會有一種對稱關係。

如果你對上下文的選擇是,上下文總是目標詞前一個單詞的話,那麼X_ij和X_ji就不會像這樣對稱了。不過對於GloVe算法,我們可以定義上下文和目標詞為任意兩個位置相近的單詞,假設是左右各10詞的距離,那麼X_ij就是一個

能夠獲取單詞i和單詞j出現位置相近時或是彼此接近的頻率的計數器

GloVe模型做的就是進行優化,我們將他們之間的差距進行最小化處理:

吳恩達深度學習筆記(126) | NLP | GloVe 詞向量

其中θ_i^T e_j,想一下i和j與t和c的功能一樣,因此這就和你之前看的有些類似了,即θ_t^T e_c。同時對於這個(θ_t^T e_c,下圖編號1所示)來說,你想要知道的是告訴你這兩個單詞之間有多少聯繫,t和c之間有多緊密,i和j之間聯繫程度如何,換句話說就是他們同時出現的頻率是多少,這是由這個X_ij影響的。然後,我們要做的是解決參數θ和e的問題,然後準備用梯度下降來最小化上面的公式,你只想要學習一些向量,這樣他們的輸出能夠對這兩個單詞同時出現的頻率進行良好的預測。

吳恩達深度學習筆記(126) | NLP | GloVe 詞向量

現在一些附加的細節是如果X_ij是等於0的話,那麼log0就是未定義的,是負無窮大的,所以我們想要對X_ij為0時進行求和,因此要做的就是添加一個額外的加權項f(X_ij )(上圖編號2所示)。如果X_ij等於0的話,同時我們會用一個約定,即0log0=0,這個的意思是如果X_ij=0,先不要進行求和,所以這個log0項就是不相關項。

上面的求和公式表明,這個和僅是一個上下文和目標詞關係裡連續出現至少一次的詞對的和。f(X_ij )的另一個作用是,有些詞在英語裡出現十分頻繁,比如說this,is,of,a等等,有些情況,這叫做停止詞,但是在頻繁詞和不常用詞之間也會有一個連續統(continuum)。不過也有一些不常用的詞,比如durion,你還是想將其考慮在內,但又不像那些常用詞這樣頻繁。因此,這個加權因子f(X_ij )就可以是一個函數,即使是像durion這樣不常用的詞,它也能給予大量有意義的運算,同時也能夠給像this,is,of,a這樣在英語裡出現更頻繁的詞更大但不至於過分的權重。

因此有一些對加權函數f的選擇有著啟發性的原則,就是既不給這些詞(this,is,of,a)過分的權重,也不給這些不常用詞(durion)太小的權值。如果你想要知道f是怎麼能夠啟發性地完成這個功能的話,你可以看一下我之前的幻燈片裡引用的GloVe算法論文。

最後,一件有關這個算法有趣的事是θ和e現在是完全對稱的,所以那裡的θ_i和e_j就是對稱的。如果你只看數學式的話,他們(θ_i和e_j)的功能其實很相近,你可以將它們顛倒或者將它們進行排序,實際上他們都輸出了最佳結果。

因此一種訓練算法的方法是一致地初始化θ和e,然後使用梯度下降來最小化輸出,當每個詞都處理完之後取平均值,所以,給定一個詞w,你就會有e_w^(final)=(e_w+θ_w)/2。因為θ和e在這個特定的公式裡是對稱的,而不像之前筆記裡我們瞭解的模型,θ和e功能不一樣,因此也不能像那樣取平均。

這就是GloVe算法的內容,我認為這個算法的一個疑惑之處是如果你看著這個等式,它實在是太簡單了,對吧?僅僅是最小化,像這樣的一個二次代價函數(上圖編號3所示)是怎麼能夠讓你學習有意義的詞嵌入的呢?但是結果證明它確實有效,發明者們發明這個算法的過程是他們以歷史上更為複雜的算法,像是newer language模型,以及之後的Word2Vec、Skip-Gram模型等等為基礎,同時希望能夠簡化所有之前的算法才發明的。

在我們總結詞嵌入學習算法之前,有一件更優先的事,我們會簡單討論一下。

就是說,我們以這個特製的表格作為例子來開始學習詞向量,我們說,第一行的嵌入向量是來表示Gender的,第二行是來表示Royal的,然後是是Age,在之後是Food等等。但是當你在使用我們瞭解過的算法的一種來學習一個詞嵌入時,例如我們之前的幻燈片裡提到的GloVe算法,會發生一件事就是你不能保證嵌入向量的獨立組成部分是能夠理解的,為什麼呢?

吳恩達深度學習筆記(126) | NLP | GloVe 詞向量

假設說有個空間,裡面的

第一個軸(上圖編號1所示)是Gender,

第二個軸(上圖編號2所示)是Royal,你能夠保證的是第一個嵌入向量對應的軸(上圖編號3所示)是和這個軸(上面提到的第一和第二基軸,編號1,2所示)有聯繫的,它的意思可能是Gender、Royal、Age和Food。

具體而言,這個學習算法會選擇這個(上圖編號3所示)作為第一維的軸,所以給定一些上下文詞,第一維可能是這個軸(上圖編號3所示),第二維也許是這個(上圖編號4所示),或者它可能不是正交的,它也可能是第二個非正交軸(上圖編號5所示),它可以是你學習到的詞嵌入中的第二部分。當我們看到這個(上圖編號6所示)的時候,如果有某個可逆矩陣A,那麼這項(上圖編號6所示)就可以簡單地替換成(Aθ_i )^T (A^(-T) e_j),因為我們將其展開:

吳恩達深度學習筆記(126) | NLP | GloVe 詞向量

不必擔心,如果你沒有學過線性代數的話會,和這個算法一樣有一個簡單證明過程。你不能保證這些用來表示特徵的軸能夠等同於人類可能簡單理解的軸,具體而言,第一個特徵可能是個Gender、Roya、Age、Food Cost和Size的組合,它也許是名詞或是一個行為動詞和其他所有特徵的組合,所以很難看出獨立組成部分,即這個嵌入矩陣的單行部分,然後解釋出它的意思。儘管有這種類型的線性變換,這個平行四邊形映射也說明了我們解決了這個問題,當你在類比其他問題時,這個方法也是行得通的。因此儘管存在特徵量潛在的任意線性變換,你最終還是能學習出解決類似問題的平行四邊形映射。

這就是詞嵌入學習的內容,你現在已經瞭解了一些學習詞嵌入的算法了。

下節課講解怎樣使用這些算法來解決情感分類問題。


分享到:


相關文章: