【圖文並茂】通過實例理解word2vec之Skip-gram

作者: 貓貓     

CSDN: 貓貓玩機器學習

導讀

word2vec主要實現方法是Skip-gram和CBOW,CBOW的目標是根據上下文來預測當前詞的概率,且上下文所有的詞對當前詞出現概率的影響的權重是一樣的,因此叫做continuous bag-of-words模型。如在袋子中取詞,去取出數量足夠的詞就可以了,與取出詞的先後順序無關。Skip-gram剛好相反,其是根據當前詞來預測上下文概率的。在實際應用中算法並無高下之分,主要根據呈現的效果來進行算法選擇。這裏介紹Skip-gram,並通過例子來理解Skip-gram是如何實現預測上下文,並如何訓練得到詞向量。

Skip-gram 模型

skip-gram模型是根據中心詞預測上下文m個詞的算法,m是用戶自己定義的預測窗口大小,比如一句話“I love natural language processing”,假設詞典庫就是{“I”,“ love”,“ natural”,“ language”,“ processing”},這些詞事先都用one-hot編碼。中心詞爲“natural”作爲輸入,給定窗口2,那麼就要通過Skip-gram 模型預測出上下文爲“I”,“love”,“language”,“processing”。

skip-gram需要做的就是使得概率P({“I”,“ love”,“ language”,“ processing”|“ natural”)最大。由於詞語詞之間相互獨立,所以可以將概率公式轉化爲:P(“I"∣“natural")⋅P(“love"∣“natural")⋅P(“language"∣“natural")⋅P(“processing"∣“natural")

用下面兩個圖表示表示如下:

下圖是skip-gram的神經網絡結構,隱含層沒有使用任何激活函數,隱藏層到輸出層進行全連接,然後是一個softmax,輸出概率。

過程比較簡單,一個Forward Propagation,一個Backward Propagation。完成參數的更新。

看到這裏可能會覺得雲裏霧裏的,舉個例子來看看skip-gram是如何預測上下文和實現word2vec的。

skip-gram預測上下文


skip-gram預測主要圍繞下面這個圖進行:

1.one-hot編碼:one-hot編碼是一個(V * V)的矩陣,其中V代表字典庫的大小。假設字典庫就是{“I”,“ love”,“ natural”,“ language”,“ processing”},對應的one-hot編碼如下:

2.中心詞向量矩陣W

中心詞向量矩陣也叫輸入層到隱含層的權重矩陣W(d*V)。

由於one-hot編碼的稀疏性以及無法計算詞與詞之間的相似性等缺點,所以我們希望通過一個稠密的向量來表示詞語,即將詞語映射到低維的向量表示,我們把這種映射叫做詞嵌入(word embedding)。那麼如何做到embedding呢?

如果我們現在把一個詞典庫的10000個單詞(V=10000)分別用300個特徵(d=300)來表示的話,那麼隱含層就有300個神經元,看下面的圖片,左右兩張圖分別從不同角度代表了輸入層-隱層的權重矩陣。左圖中每一列代表一個10000維的詞向量和隱層單個神經元連接的權重向量。從右邊的圖來看,每一行實際上代表了每個單詞的詞向量。

用剛剛的例子解釋一下,將每個詞的one-hot編碼向量乘以一個學習好的低維的共享矩陣W(V *d)。比如要把例子5維向量(這裏V=5)表示的詞語映射到3維向量(d=3),假設學習好的W爲:

中心詞“nature”one-hot編碼的向量和共享矩陣相乘就得到它的詞向量,用Vc表示,對向量進行歸一化得到Vc=(0.46 0.15 0.39):

3.上下文向量矩陣

類似詞典中心詞向量矩陣,但這裏的詞向量中d個維度儲存的抽象信息,是作爲上下文的詞而言,它與中心詞之間的對應關係信息,對於詞典中的每一個詞都對應一個上下文向量矩陣。比如nature的上下文你向量矩陣是W’,(3 12 8),(13 11 26),(20 32 23),(8 22 12)分別是“I”,“ love”,“ language”,“ processing”相對“ natural”的上下文向量。

將中心詞(nature)的詞向量和學習好的權重矩陣的其他詞做內積,此時會得到每個詞的計算結果:

爲了方便計算,再將結果進行歸一化得到


4.softmax
輸出層是一個softmax迴歸分類器,它的每個結點將會輸出一個0-1之間的值(概率),是詞典中每個詞成爲當前指定中心詞的上下文的概率,這些所有輸出層神經元結點的概率之和爲1。計算方法爲:

這個例子的softmax計算結果如下,有些地方分母會是包括中心詞的五個數相加,但這樣並不會影響結果:

“I”是“nature”的上下文的概率爲0.226,以此類推,選擇4個(2*2)softmax最大的詞作爲當前中心詞的上下文,因爲這個例子詞典庫就5個詞語,所以剩下4個都作爲natural的上下文。

BP算法

上面的例子是在已經學習好了中心詞向量矩陣和上下文向量矩陣完成的,那麼在這之前就要訓練模型學習這兩個矩陣,訓練的過程就是一個BP算法。在學習的過程是一個監督學習,對於一箇中心詞我們是有明確的上下文的,我們期望窗口內的詞的輸出概率最大。在此之前我們學習另一種目標函數的表示方法。

對於一個句子:S=(w1 w2 w3 w4 w5 w6).有六個單詞分別問w1~w6,我們用P(D=1|wi,wj;θ)表示wi,wj作爲上下文的概率,其中θ爲模型參數,後文會接着解釋模型參數。如果wi,wj作爲上下文,我們就希望下面這個概率公式越大越好,其中概率公式表示是條件概率的邏輯迴歸表示,其中u和v分別代表中心詞向量和上下文向量:

那麼目標函數就是要最大化下面這個函數,其中w是文章T中的詞,c是中心詞w對應的所有上下文單詞:

對於剛剛說的要學習中心詞向量矩陣W和上下文向量矩陣W’就是要更新目標函數的 ,這兩個參數也正是上面提到的模型參數θ。將目標函數用L(θ)表示,用梯度下降法分別計算這兩個參數的梯度:

然後更新

接着更新兩個向量矩陣即可。每一次迭代都把詞典庫中的所有詞學習完,並更新兩個矩陣,當達到最大迭代次數時,也就完成了word2vec的工作了。

中心詞向量矩陣跟one-hot編碼是有關係的,只要將one-hot編碼和W相乘就是我們要查的那個單詞的word embedding了,這個也叫查表(Lookup table)。

通常語義比較相近的詞出現在上下文的概率是比較大的,word2vec模型會把兩個語義相近的詞的word embedding訓練的比較接近。

參考和引用

[1] Mikolov T, Chen K, Corrado G, et al. Efficient Estimation of Word Representations in Vector Space[J]. Computer Science, 2013.

[2]《Python自然語言處理實戰》塗銘、劉詳、劉樹春 著

歷史推薦

“高頻面經”之數據分析篇

“高頻面經”之數據結構與算法篇

“高頻面經”之大數據研發篇

“高頻面經”之機器學習篇

“高頻面經”之深度學習篇

爬蟲實戰:Selenium爬取京東商品

爬蟲實戰:豆瓣電影top250爬取

爬蟲實戰:Scrapy框架爬取QQ音樂

數據分析與挖掘

數據結構與算法

機器學習與大數據組件

歡迎關注,感謝“在看”,隨緣稀罕~

 

一個贊,晚餐加雞腿

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