機(jī)器學(xué)習(xí)必須熟悉的算法之word2vector(二)

在上一篇文章中,我們簡述了skip gram版word2vector的基本原理寇钉,留下一個問題待解決刀疙,那就是網(wǎng)絡(luò)非常大,這將導(dǎo)致如下幾個困難:1扫倡、在上面訓(xùn)練梯度下降會比較慢谦秧;2、需要數(shù)量巨大的數(shù)據(jù)來喂到網(wǎng)絡(luò)中撵溃;3疚鲤、非常容易過擬合。這一節(jié)就是專門介紹實際訓(xùn)練中的技巧的缘挑。原文在這里:http://mccormickml.com/2017/01/11/word2vec-tutorial-part-2-negative-sampling/
當(dāng)然集歇,我不會生硬地翻譯這篇文章,而是按照自己的理解语淘,盡可能用自己的邏輯將它寫出來诲宇,期望能夠比原文更加清晰一些际歼。

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

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

這個技巧的原理非常簡單纺荧。比如文本中有“中華人民共和國”旭愧,此時,按照機(jī)械的劃分虐秋,中華榕茧、人民、共和國應(yīng)該是三個詞客给,但是顯然用押,中華人民共和國作為一個單獨的詞會更加合理一些。
如何從文本中發(fā)現(xiàn)詞組和短語是一個專門的算法靶剑,這里略過了蜻拨,因為超出了我們今天的主題。

二桩引、對高頻詞進(jìn)行抽樣

讓我們回顧一下上一節(jié)構(gòu)造訓(xùn)練數(shù)據(jù)單詞對的方法缎讼。


construct data

在上面的構(gòu)建單詞對的過程中,對那些常見的詞坑匠,如“the”存在兩個問題:

  • 1血崭、類似(fox,the)這樣的單詞對并沒有什么用厘灼,因為此處的the并沒有對理解fox產(chǎn)生什么貢獻(xiàn)夹纫,它太普遍了,以至于在大多數(shù)單詞的周圍都可以發(fā)現(xiàn)它设凹。此時舰讹,我們只能說the在fox 的周圍,卻不構(gòu)成fox 的context闪朱。
  • 2月匣、上面的辦法會產(chǎn)生太多(the,...)樣式的單詞對奋姿,這對于學(xué)習(xí)單詞the的vector來說锄开,實在是太多了。
    解決這兩個問題的辦法就是subsampling胀蛮,具體意思是:
    當(dāng)我們掃描文本中的詞時院刁,會根據(jù)一定的概率刪除這個詞,也就是相當(dāng)于文本中此處沒有了這個詞粪狼。這個概率大小取決于該詞在整個語料庫中的出現(xiàn)頻率退腥。出現(xiàn)頻率越高任岸,那么我們刪除該詞的概率就越大。
    這個很容易理解狡刘,以上面的the為例享潜,由于它在整個語料庫中出現(xiàn)的頻率很高,我們就會刪除相當(dāng)一部分的the嗅蔬,以便減少訓(xùn)練量剑按。

再具體一點,假設(shè)我們刪除了jump over the
lazy dog 中的the澜术,我們的窗口大小是2艺蝴,那么,the與其前后各兩個詞組成的詞對就不會稱為訓(xùn)練數(shù)據(jù)鸟废,因為the已經(jīng)被刪除了猜敢,其次,以the前后各兩個詞作為輸入的詞對中盒延,都會減少一個(*缩擂,the)的詞對。

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


image.png

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


image.png

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

至于這個公式怎么來的票罐,說實話趋厉,我也不清楚,鑒于它不是本文的重點胶坠,我也沒有深究,如果有清楚的伙伴繁堡,歡迎留言補(bǔ)充沈善。

三、負(fù)抽樣

這個辦法才是本文的重頭戲椭蹄,其中的思想對人很有啟發(fā)性闻牡。剛剛聽完螞蟻金服張家興老師分享的螞蟻金服人工智能實踐铛嘱,里面提到了問題匹配模型訓(xùn)練中的一個技巧啄育,其思想與負(fù)抽樣很相似〗旁可見技術(shù)是具體的翼馆,但技術(shù)背后反映出的解決問題的思想?yún)s是共通的割以。

負(fù)抽樣技術(shù)主要解決的問題就是模型難以訓(xùn)練金度。所以,我們先來看看模型為什么難以訓(xùn)練严沥。
使用SGD訓(xùn)練神經(jīng)網(wǎng)絡(luò)的過程就是取出一條樣本數(shù)據(jù)猜极,然后據(jù)此去調(diào)整神經(jīng)網(wǎng)絡(luò)的所有權(quán)重,以便網(wǎng)絡(luò)能夠?qū)@條數(shù)據(jù)的預(yù)測更加準(zhǔn)確一些消玄。這里的重點是所有權(quán)重跟伏!

調(diào)整所有的權(quán)重是多大的工作量呢?在上篇文章中翩瓜,我們已經(jīng)有過解釋受扳,請參考上篇文章⊥玫總之勘高,所有權(quán)重是一個巨大數(shù)量的系數(shù)。對每一條樣本浮定,每訓(xùn)練一次相满,這么多的系數(shù)都要進(jìn)行輕微的調(diào)整。顯然桦卒,超多的訓(xùn)練數(shù)據(jù)立美,巨多的權(quán)重系數(shù),將使得神經(jīng)網(wǎng)絡(luò)的訓(xùn)練非常緩慢和困難方灾。

負(fù)抽樣解決這一問題的辦法就是使得對每一條樣本的每一次訓(xùn)練建蹄,只更新很小一部分的權(quán)重,而不是全都更新裕偿。下面我們深入細(xì)節(jié)來看一下洞慎。

假設(shè)我們的訓(xùn)練數(shù)據(jù)是(fox,quick)單詞對嘿棘,回憶一下劲腿,此條訓(xùn)練數(shù)據(jù)的標(biāo)簽就是quick,用one-hot編碼后鸟妙,就是一個8維向量焦人,quick所對應(yīng)的維度為1,其他維度為0重父。

也就是說花椭,我們希望神經(jīng)網(wǎng)絡(luò)輸出的8維向量中,對應(yīng)quick的維度是1房午,其他維度是0矿辽。在輸出層,每一個輸出維度實際上對應(yīng)著一個神經(jīng)元。

在我們的例子中袋倔,我們看到其他應(yīng)當(dāng)為0的維度有7個雕蔽,在實際工作中,這個維度的數(shù)量是非常大的奕污,因為我們的詞表一般會很大萎羔。

所謂負(fù)抽樣,即是從這些應(yīng)當(dāng)為0的維度中隨機(jī)抽取幾個碳默,只更新這幾個維度對應(yīng)的神經(jīng)元的權(quán)重贾陷,這既是負(fù)抽樣的確切含義。當(dāng)然嘱根,同時還要加上輸出應(yīng)當(dāng)為1的維度所對應(yīng)的神經(jīng)元髓废。

具體負(fù)抽樣時抽幾個維度的神經(jīng)元,取決于具體的問題该抒,google的論文中建議是5到20個慌洪。
讓我們用一個例子來具體感受一下。假設(shè)我們負(fù)抽樣的維度數(shù)為5凑保,我們的詞表中有10000個單詞冈爹,詞向量的維度為300,也即是隱藏層有300個神經(jīng)元欧引。
那么频伤,在輸出層,權(quán)重矩陣的大小將是300*10000≈ゴ耍現(xiàn)在我們抽取了5個負(fù)的維度(輸出應(yīng)當(dāng)為0的維度)憋肖,加上輸出為1的維度,只更新這6個維度所對應(yīng)的神經(jīng)元婚苹。那么需要更新的權(quán)重系數(shù)是300*6=1800個岸更。這只占輸出層中所有權(quán)重系數(shù)的0.06%!膊升!

另外怎炊,在隱藏層,我們還要更新輸入的單詞所對應(yīng)的300個權(quán)重廓译。這是無論用不用負(fù)抽樣结胀,都要更新的權(quán)重。
如果不好理解责循,我們就具體一點,隱藏層可以看作一個10000*300的矩陣攀操,其中每一行都代表一個單詞的300維詞向量院仿,我們更新的就是輸入單詞所對應(yīng)的那一行的300個權(quán)重系數(shù)。

四、負(fù)抽樣應(yīng)當(dāng)抽誰的樣歹垫?

上一節(jié)中剥汤,我們說了負(fù)抽樣,一般抽5到20 個維度排惨。問題來了吭敢,假設(shè)是抽5個維度,那么暮芭,應(yīng)當(dāng)抽哪5個維度呢鹿驼?負(fù)的維度實在太多,如果詞表為10000辕宏,那么負(fù)的維度就有9999個畜晰。從這里面抽5個,難道是隨機(jī)抽嗎瑞筐?

答案是否定的凄鼻。在抽取這5個維度時,是按照單詞在語料庫中出現(xiàn)的次數(shù)多少來的聚假, 出現(xiàn)次數(shù)越多块蚌,那么越可能被抽中。具體是按照如下公式來決定的:


image.png

P(w_i)就是w_i這個單詞被負(fù)抽樣抽中的概率膘格。
f(w_i)即是w_i在語料庫中出現(xiàn)的次數(shù)峭范。

至于為什么要取一次3/4次方,據(jù)說是基于經(jīng)驗闯袒,這樣效果會更好虎敦。

五、無總結(jié)政敢,不進(jìn)步

通過這兩篇文章其徙,我簡要地敘述了skip-gram版的word2vector的原理和部分實現(xiàn)細(xì)節(jié)。
我覺得最重要的在于體會作者設(shè)計這樣的神經(jīng)網(wǎng)絡(luò)喷户,用n-gram來構(gòu)造訓(xùn)練數(shù)據(jù)背后所隱含的思想唾那。這些思想才是我們在實際工作中最緊缺的。

這里留一個問題供大家思考褪尝,在負(fù)抽樣時闹获,為什么要按照單詞出現(xiàn)的頻率來抽樣,這樣有什么好處河哑?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末避诽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子璃谨,更是在濱河造成了極大的恐慌沙庐,老刑警劉巖鲤妥,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拱雏,居然都是意外死亡棉安,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門铸抑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贡耽,“玉大人,你說我怎么就攤上這事鹊汛∑崖福” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵柒昏,是天一觀的道長凳宙。 經(jīng)常有香客問我,道長职祷,這世上最難降的妖魔是什么氏涩? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮有梆,結(jié)果婚禮上是尖,老公的妹妹穿的比我還像新娘。我一直安慰自己泥耀,他們只是感情好饺汹,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著痰催,像睡著了一般兜辞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上夸溶,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天逸吵,我揣著相機(jī)與錄音,去河邊找鬼缝裁。 笑死扫皱,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的捷绑。 我是一名探鬼主播韩脑,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼粹污!你這毒婦竟也來了段多?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤壮吩,失蹤者是張志新(化名)和其女友劉穎衩匣,沒想到半個月后蕾总,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡琅捏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了递雀。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柄延。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖缀程,靈堂內(nèi)的尸體忽然破棺而出搜吧,到底是詐尸還是另有隱情,我是刑警寧澤杨凑,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布滤奈,位于F島的核電站,受9級特大地震影響撩满,放射性物質(zhì)發(fā)生泄漏蜒程。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一伺帘、第九天 我趴在偏房一處隱蔽的房頂上張望昭躺。 院中可真熱鬧,春花似錦伪嫁、人聲如沸领炫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽帝洪。三九已至,卻和暖如春脚猾,著一層夾襖步出監(jiān)牢的瞬間葱峡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工婚陪, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留族沃,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓泌参,卻偏偏與公主長得像脆淹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子沽一,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354