機器學習必須熟悉的算法之word2vector(二)

在上一篇文章中,我們簡述了skip gram版word2vector的基本原理,留下一個問題待解決,那就是網絡非常大,這將導致如下幾個困難:1、在上面訓練梯度下降會比較慢;2、需要數量巨大的數據來喂到網絡中;3、非常容易過擬合。這一節就是專門介紹實際訓練中的技巧的。原文在這里:http://mccormickml.com/2017/01/11/word2vec-tutorial-part-2-negative-sampling/
當然,我不會生硬地翻譯這篇文章,而是按照自己的理解,盡可能用自己的邏輯將它寫出來,期望能夠比原文更加清晰一些。

總得來講,共有三個技巧,我們一個個看。

一、將詞組和短語看作獨立的單詞

這個技巧的原理非常簡單。比如文本中有“中華人民共和國”,此時,按照機械的劃分,中華、人民、共和國應該是三個詞,但是顯然,中華人民共和國作為一個單獨的詞會更加合理一些。
如何從文本中發現詞組和短語是一個專門的算法,這里略過了,因為超出了我們今天的主題。

二、對高頻詞進行抽樣

讓我們回顧一下上一節構造訓練數據單詞對的方法。


construct data

在上面的構建單詞對的過程中,對那些常見的詞,如“the”存在兩個問題:

  • 1、類似(fox,the)這樣的單詞對并沒有什么用,因為此處的the并沒有對理解fox產生什么貢獻,它太普遍了,以至于在大多數單詞的周圍都可以發現它。此時,我們只能說the在fox 的周圍,卻不構成fox 的context。
  • 2、上面的辦法會產生太多(the,...)樣式的單詞對,這對于學習單詞the的vector來說,實在是太多了。
    解決這兩個問題的辦法就是subsampling,具體意思是:
    當我們掃描文本中的詞時,會根據一定的概率刪除這個詞,也就是相當于文本中此處沒有了這個詞。這個概率大小取決于該詞在整個語料庫中的出現頻率。出現頻率越高,那么我們刪除該詞的概率就越大。
    這個很容易理解,以上面的the為例,由于它在整個語料庫中出現的頻率很高,我們就會刪除相當一部分的the,以便減少訓練量。

再具體一點,假設我們刪除了jump over the
lazy dog 中的the,我們的窗口大小是2,那么,the與其前后各兩個詞組成的詞對就不會稱為訓練數據,因為the已經被刪除了,其次,以the前后各兩個詞作為輸入的詞對中,都會減少一個(*,the)的詞對。

那么,接下來一個問題就是如何確定刪除一個詞的概率?直接上公式:


image.png

P(wi)是保留單詞wi的概率,z(wi)是該詞在整個語料庫出現的比例。
我們可以將上面的公式畫成圖來看看:


image.png

Note:要得到這個圖,只需在google中輸入
Graph for (sqrt(x/0.001)+1)*0.001/x即可。

至于這個公式怎么來的,說實話,我也不清楚,鑒于它不是本文的重點,我也沒有深究,如果有清楚的伙伴,歡迎留言補充。

三、負抽樣

這個辦法才是本文的重頭戲,其中的思想對人很有啟發性。剛剛聽完螞蟻金服張家興老師分享的螞蟻金服人工智能實踐,里面提到了問題匹配模型訓練中的一個技巧,其思想與負抽樣很相似??梢娂夹g是具體的,但技術背后反映出的解決問題的思想卻是共通的。

負抽樣技術主要解決的問題就是模型難以訓練。所以,我們先來看看模型為什么難以訓練。
使用SGD訓練神經網絡的過程就是取出一條樣本數據,然后據此去調整神經網絡的所有權重,以便網絡能夠對這條數據的預測更加準確一些。這里的重點是所有權重!

調整所有的權重是多大的工作量呢?在上篇文章中,我們已經有過解釋,請參考上篇文章??傊?,所有權重是一個巨大數量的系數。對每一條樣本,每訓練一次,這么多的系數都要進行輕微的調整。顯然,超多的訓練數據,巨多的權重系數,將使得神經網絡的訓練非常緩慢和困難。

負抽樣解決這一問題的辦法就是使得對每一條樣本的每一次訓練,只更新很小一部分的權重,而不是全都更新。下面我們深入細節來看一下。

假設我們的訓練數據是(fox,quick)單詞對,回憶一下,此條訓練數據的標簽就是quick,用one-hot編碼后,就是一個8維向量,quick所對應的維度為1,其他維度為0。

也就是說,我們希望神經網絡輸出的8維向量中,對應quick的維度是1,其他維度是0。在輸出層,每一個輸出維度實際上對應著一個神經元。

在我們的例子中,我們看到其他應當為0的維度有7個,在實際工作中,這個維度的數量是非常大的,因為我們的詞表一般會很大。

所謂負抽樣,即是從這些應當為0的維度中隨機抽取幾個,只更新這幾個維度對應的神經元的權重,這既是負抽樣的確切含義。當然,同時還要加上輸出應當為1的維度所對應的神經元。

具體負抽樣時抽幾個維度的神經元,取決于具體的問題,google的論文中建議是5到20個。
讓我們用一個例子來具體感受一下。假設我們負抽樣的維度數為5,我們的詞表中有10000個單詞,詞向量的維度為300,也即是隱藏層有300個神經元。
那么,在輸出層,權重矩陣的大小將是300*10000?,F在我們抽取了5個負的維度(輸出應當為0的維度),加上輸出為1的維度,只更新這6個維度所對應的神經元。那么需要更新的權重系數是300*6=1800個。這只占輸出層中所有權重系數的0.06%??!

另外,在隱藏層,我們還要更新輸入的單詞所對應的300個權重。這是無論用不用負抽樣,都要更新的權重。
如果不好理解,我們就具體一點,隱藏層可以看作一個10000*300的矩陣,其中每一行都代表一個單詞的300維詞向量,我們更新的就是輸入單詞所對應的那一行的300個權重系數。

四、負抽樣應當抽誰的樣?

上一節中,我們說了負抽樣,一般抽5到20 個維度。問題來了,假設是抽5個維度,那么,應當抽哪5個維度呢?負的維度實在太多,如果詞表為10000,那么負的維度就有9999個。從這里面抽5個,難道是隨機抽嗎?

答案是否定的。在抽取這5個維度時,是按照單詞在語料庫中出現的次數多少來的, 出現次數越多,那么越可能被抽中。具體是按照如下公式來決定的:


image.png

P(w_i)就是w_i這個單詞被負抽樣抽中的概率。
f(w_i)即是w_i在語料庫中出現的次數。

至于為什么要取一次3/4次方,據說是基于經驗,這樣效果會更好。

五、無總結,不進步

通過這兩篇文章,我簡要地敘述了skip-gram版的word2vector的原理和部分實現細節。
我覺得最重要的在于體會作者設計這樣的神經網絡,用n-gram來構造訓練數據背后所隱含的思想。這些思想才是我們在實際工作中最緊缺的。

這里留一個問題供大家思考,在負抽樣時,為什么要按照單詞出現的頻率來抽樣,這樣有什么好處?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,936評論 6 535
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,744評論 3 421
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,879評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,181評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,935評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,325評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,384評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,534評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,084評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,892評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,067評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,623評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,322評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,735評論 0 27
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,990評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,800評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,084評論 2 375