自然語言處理-第五期-Word2Vec Skip Gram

背景

自然語言處理-第五期-Word2Vec Skip Gram

上期我們介紹了Bag of Word,它可以將word轉換為one-hot vector,即【0,0,0,1】只有一個緯度為1,其他為0 的vector。

也提到了其最大的一個缺點,即可能造成Sparsity(過度離散)的問題。對於該問題Word2Vec給出了一個有意思的解法。

相信大家肯定有類似的經驗,就是搜索的時候,會出現一些同義詞也被搜索出來,比如 movie和film。 這其實是一件很神奇的事情,因為人類語言是symbol,到底是如何做到的呢? 希望大家在讀完這篇文章之後,能夠得到一些答案。

除此之外,本篇還會涉及到神經網絡的運用,如果有不清楚的同學可以看第四期或者我的另一片文章“機器學習的hello world” ,如果還有問題,可以留言,我會盡量答覆。

Word2Vec

面對的問題及目標

我們的目標是將word向量化。bag of word也是向量化,只是之前的問題很明顯。

其實我們只要不轉化為one-hot vector。比如只要100個緯度的向量,每個緯度可以為小數自然數。自然其能承載的數量會大幅增加。

【0.1,0.9,8.9,11,7.5】最現實的問題是,我們如何決定每個向量的數值,我們處理的規則是什麼呢?

在講Skip Gram之前插個圖,下面這個圖是Google AI experiment 的高緯度可視化的網站,大家可以搜索AI experiment google tensorflow就能找到。在網站上做很多有趣的調整。

自然語言處理-第五期-Word2Vec Skip Gram

Word2Vec內在邏輯

Word2Vec有好幾種模型,我們今天關注其最普遍的Skip Gram模型。

我們再重複一遍問題,我們的目標是講word的Vector緯度降低,但是How?這個問題很重要也很難,大家如果憑空想下,實際上你並沒有什麼原則來處理這些word。

Skip Gram提供來一種思路,就是 取一箇中心詞,然後預測其前後幾個位子的詞。如下面這個圖,'the' 前後兩位的詞分別是 quick 和brown。

Skip Gram的思路就是訓練一個神經網絡來預測 中心詞的附近詞。

當然我們的訓練需要訓練樣本,Skip Gram的訓練樣本就是從普通文本上切下來的一段一段文本(中心詞不斷右移)

自然語言處理-第五期-Word2Vec Skip Gram

神經網絡結構

Skip Gram的神經網絡結構大概如下面所示,我們講分輸入層,隱藏層,輸出層解釋。

輸入層,首先Skip Gram還是在處理word vector,所以肯定繞不開 one-hot vector,第一步也是建立一個詞庫,比如有10000個不同的單詞,那麼就是一個10000緯度的向量;

隱藏層,隱藏層的神經元個數可以自己設置,該層的個數就是下降後的向量緯度;

輸出層,Skip Gram的輸出層結構和輸入層一樣,也是10000個神經元。不同的是激勵函數不同,其作用就是將每個神經元的輸出變成概率(出現該詞的概率)

自然語言處理-第五期-Word2Vec Skip Gram

以下面這個圖片為例子,假設只有句子中的9個單詞。 那麼Fox中心詞的向量是【0,0,0,1,0,0,0,0,0】

訓練樣本是(X=【0,0,0,1,0,0,0,0,0】,y=【0,1,1,0,1,1,0,0,0】)

自然語言處理-第五期-Word2Vec Skip Gram

經過神經網絡訓練,神經網絡輸出的結果,逐步與訓練樣本的實際值相近。

神奇的地方來了,假設我們隱藏層設置的是100個神經元。在訓練完成之後,當我們輸入一個10000緯度向量時,隱藏層會輸出一個100緯度的向量。。。 這就完成了緯度下降。。。。

總結下

有點繞,總結下。

首先,Skip Gram基於中心詞設計了一套訓練樣本(X,y),其邏輯就是給你中心詞,你要能預測出周圍的詞;

然後,通過神經網絡設計如:輸入層10000,隱藏層300,輸出層10000;

最後,在神經網絡訓練完成之後,我再將【1,0,0,0.....】輸入進去,隱藏層會輸出一個300緯度的向量。

鐺鐺,這就完成了word的將為,成功的將word轉化為300緯度的向量。

結果

實際上訓練的時候,樣本量會非常大。比如從維基百科取很多文本來訓練。我的電腦無法搞定這些操作,所以Skip Gram的結果我將引用Stanford公開課CS224 的結果。

首先降緯後,Skip Gram300緯度的向量可以用PAC 3D表現出來,得到一張前面類似的圖。

自然語言處理-第五期-Word2Vec Skip Gram

除此之外,更有意思的是,很多同義詞會聚合在一起,如下面的圖將one two three等數字都聚合在一起了。

自然語言處理-第五期-Word2Vec Skip Gram

另外很有意思的是,也能得到有意思的向量差,比如: Paris-France+Italy 最接近Rome

自然語言處理-第五期-Word2Vec Skip Gram

其實,這種近義詞在算法設計時並沒有考慮。也沒辦法用數學證明。 但是,也可以推斷某些詞 是很頻繁的出現在一起的。 比如Happy birthday 之類的,這些詞義上的趨勢實際在 維基百科的文本中就有隱藏。

下期預告

總之呢,這個算法還是蠻有意思的,也很直接。最終的結果也很有意思。 最終他也實現了Word的降緯。

這期已經是NLP的第五期了,一直在講的是單詞的處理。 最終我們實現了,可以使用的word vector。 那麼下一期,我們將介紹第一個真正處理這些單詞向量的算法。


分享到:


相關文章: