Word2vec模型及负采样精讲
Word2vec模型本質:是一個用來生成詞向量的、簡單的神經網絡模型。
通過計算相似度來降低原來輸入詞的維度,舉個例子:
圖.甲
網絡結構如下:
圖.乙
如乙圖所示,我們一開始輸入的是one-hot編碼后的向量,1位于第7位,其對應的輸入層到隱藏層的權重矩陣w一定是第7行,如下圖示意
圖.丙
丙圖示意的是第三行,如果輸入one-hot編碼過了,那就將one-hot編碼后的輸入再tokenize轉化回去(如果沒有one-hot的話,直接tokenize獲取索引即可),查找w索引值為3的行,拿出來即可,拿出來的就是詞向量原來需要計算那么多次乘法,現在只需查表即可。
圖甲那張圖的全過程稱之為池化向量。
圖.丁
圖丁,全連接層是沒有激活函數的,output到預測值時的激活函數為softmax,也可以為sigmoid,沒有規定必須用哪個,此圖為原始的池化向量過程。下面的負采樣是解決反向傳播時復雜的乘法計算。
負采樣:
在訓練神經網絡時,每當接受一個訓練樣本,然后調整所有神經單元權重參數,來使神經網絡預測更加準確。換句話說,每個訓練樣本都將會調整所有神經網絡中的參數。
我們詞匯表的大小決定了我們skip-gram 神經網絡將會有一個非常大的權重參數,并且所有的權重參數會隨著數十億訓練樣本不斷調整。
negative sampling (負例樣本,即one-hot編碼后的為0的那些位置的樣本)每次讓一個訓練樣本僅僅更新一小部分的權重參數,從而降低梯度下降過程中的計算量。
如果 vocabulary 大小為1萬時, 當輸入樣本 ( "fox", "quick") 到神經網絡時, “ fox” 經過 one-hot 編碼,在輸出層我們期望對應 “quick” 單詞的那個神經元結點輸出 1,其余 9999 個都應該輸出 0。在這里,這9999個我們期望輸出為0的神經元結點所對應的單詞我們為 negative word. negative sampling 的想法也很直接 ,將隨機選擇一小部分的 negative words,比如選 10個 negative words 來更新對應的權重參數。
在論文中作者指出指出對于小規模數據集,建議選擇 5-20 個 negative words,對于大規模數據集選擇 2-5個 negative words.
如果使用了 negative sampling 僅僅去更新positive word- “quick” 和選擇的其他 10 個negative words 的結點對應的權重,共計 11 個輸出神經元,相當于每次只更新 300 x 11 = 3300 個權重參數。對于 3百萬 的權重來說,相當于只計算了千分之一的權重,這樣計算效率就大幅度提高。
選擇負例樣本的規則
使用 一元模型分布 (unigram distribution) 來選擇 negative words,一個單詞被選作 negative sample 的概率跟它出現的頻次有關,出現頻次越高的單詞越容易被選作negative words,經驗公式為:
f(w) 代表 每個單詞被賦予的一個權重,即 它單詞出現的詞頻,分母 代表所有單詞的權重和。公式中3/4完全是基于經驗的,論文中提到這個公式的效果要比其它公式更加出色。
總結
以上是生活随笔為你收集整理的Word2vec模型及负采样精讲的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 坦克世界闪击战252工程卖多少
- 下一篇: 天天睡!睡天天下联是什么?