日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

通过实例理解word2vec之Skip-gram

發布時間:2025/3/20 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通过实例理解word2vec之Skip-gram 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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’就是要更新目標函數的ucu_cuc?vwv_wvw?,這兩個參數也正是上面提到的模型參數θ。將目標函數用L(θ)表示,用梯度下降法分別計算這兩個參數的梯度:

然后更新ucu_cuc?vwv_wvw?

接著更新兩個向量矩陣即可。每一次迭代都把詞典庫中的所有詞學習完,并更新兩個矩陣,當達到最大迭代次數時,也就完成了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自然語言處理實戰》涂銘、劉詳、劉樹春 著

總結

以上是生活随笔為你收集整理的通过实例理解word2vec之Skip-gram的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。