實現word2vec的skip-gram神經網絡訓練模型中,通過一個矩陣將輸入的n維向量轉化爲m維向量,考慮到模型輸入層和輸出層的權重,會產生m*n*2個權重,一般詞彙表長度n很大,name調整修正這麼多權重使訓練速度降低,同時需要大量的訓練數據來調整權重防止過擬合,這樣又增加了這個網絡訓練的複雜性。爲了解決這個問題,Word2vec的作者又提出了三種方法:
1. 把常用的詞組作爲一個單詞,例如new york經常只代表紐約,與new和york有完全不同的語義,所以把這兩個詞組合更加合理
2. subsampling:在採樣過程中以一定的概率丟棄一些常見的詞(猜測太常見可能只表示修飾,並沒有具體含義),採樣的具體做法這裏不做介紹
比如單詞the,一般對我們真正想表達的內容沒有影響反而出現次數很多,這時我們就可以在採樣中刪除它
關於降採樣的保留某個單詞的概率在論文中一般採用下列公式:
公式裏面主要有兩個參數:
z(wi):某個單詞在詞庫中出現的概率,wi表示某個具體的單詞
0.001:爲參數sample的值,控制了降採樣的程度,0.001爲一般設置的值,sample值越小表示扔掉詞的概率越大
當sample爲0.001時,這個公式的圖像如下:
從圖中我們可以總結出一些有趣的規律:
(1)當z(wi)<=0.0026時,P(wi)約等於1,我們不會扔掉這些詞
(2)當z(wi)<=0.00746時,P(wi)=0.5,表示我們對於這個詞公平對待
3. negative sampling:每次訓練樣本輸入後,在反向傳播時僅更新部分權重
比如原來的模型需要2*n*m個權重,現在只需要更新2*x*m個權重,一般x<<n,且x = 1+negative samples
如下圖所示,原來需要更新6個權重,確定負樣本之後,只需更新黑色加粗所對應的4個權重
那麼negative samples怎麼確定呢?
假設negative samples =k,則選取詞庫中k個出現概率最大的詞
論文中寫到這個概率採用下列公式計算,其中f(wi)表示這個單詞在詞庫中出現的頻次
0.75這個超參數是試出來的,性能比其他參數好