Skip-gram
給定句子中一個特定的詞(input word),隨機選它附近的一個詞。網絡的目標是預測 我們選到這個附近詞的概率。
輸入,輸出
取窗口大小爲2(前後兩個詞):得到一些詞對:
如之中的(quick, brown)
訓練神經網絡時:
輸入quick的one-hot編碼, 輸出層softmax分層的brown的概率應該是最大的
隱層:
我們訓練一個簡單的網絡來執行一個任務,但是我們實際上並沒有用這個網絡來預測test中的任務。而是,利用這個任務(目標)去學習網絡中的權重W。我們將看到這些學出來的權重W就是我們所要的詞向量(wordvectors)。
假設corpus裏有10000個詞語, 目標詞向量爲 300維:
簡單做一個圖來表示過程:
依然用(quick, brown)訓練神經網絡
如果兩個不同的詞有相同的上下文,那麼我們的模型會需要預測類似的輸出。那麼網絡爲了輸出類似的預測,他就會使這兩個不同詞的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