Word2vec 入門(skip-gram部分)

Skip-gram

給定句子中一個特定的詞(input word),隨機選它附近的一個詞。網絡的目標是預測 我們選到這個附近詞的概率。

輸入,輸出

取窗口大小爲2(前後兩個詞):得到一些詞對:
image_1bnistvll1f771ivtjos1nh6d459.png-71.8kB

如之中的(quick, brown)
訓練神經網絡時:
image_1bnit17pvb711tn81mjlpl1mq7m.png-90.7kB
輸入quick的one-hot編碼, 輸出層softmax分層的brown的概率應該是最大的


隱層:

我們訓練一個簡單的網絡來執行一個任務,但是我們實際上並沒有用這個網絡來預測test中的任務。而是,利用這個任務(目標)去學習網絡中的權重W。我們將看到這些學出來的權重W就是我們所要的詞向量(wordvectors)。

假設corpus裏有10000個詞語, 目標詞向量爲 300維:
簡單做一個圖來表示過程:
依然用(quick, brown)訓練神經網絡
image_1bnivd1134qnd0a7cu1v1k1p7a1g.png-63kB


如果兩個不同的詞有相同的上下文,那麼我們的模型會需要預測類似的輸出。那麼網絡爲了輸出類似的預測,他就會使這兩個不同詞的word vector儘可能相似。所以,如果兩個詞有相同的上下文,我們就可以得到比較接近的word vector。

那麼什麼詞有相同的上下文? 比如一些近義詞 smart 和intelligent 再比如 一些相關的詞 engine 和 transmission。


訓練過程:

所以word2vec採用了降採樣(subsampling)的策略。對於每個我們在訓練樣本中遇到的詞,我們有一個概率去刪除它。這個概率與單詞出現的頻率相關。

(這裏word2vec)就直接做了一個類似 去掉一些大衆詞彙,類似tf_idf的工作


訓練神經網絡 意味着輸入一個訓練樣本調整weight,讓它預測這個訓練樣本更準。換句話說,每個訓練樣本將會影響網絡中所有的weight。像我們之前討論的一樣,我們詞典的大小意味着我們有好多weight,所有都要輕微的調整。

Negative sampling 解決了這個問題,每次我們就修改了其中一小部分weight,而不是全部。
(這裏其實我還有一點疑問,因爲沒有細讀paper, 既然輸入的是one-hot向量,相當於look-up的話,和別的權重(隱層神經元)有什麼關係呢?有必要Negative sampling嗎?)

Ref:
http://mccormickml.com/2016/04/19/word2vec-tutorial-the-skip-gram-model/
http://mccormickml.com/2017/01/11/word2vec-tutorial-part-2-negative-sampling/
http://blog.csdn.net/Layumi1993/article/details/72866235
http://blog.csdn.net/Layumi1993/article/details/72868399

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