【翻譯】【機器學習】Word2Vec 教程part 1俭尖,Skip-Gram Model

寫在之前的話

這是第一次翻譯英文博客文章氢惋,連文檔/論文都算不上,真的很困難=.=… 以及Google翻譯真的很厲害稽犁,整個文章丟進去焰望,對照原文還是能看懂的…

原文在這里,作者McCormick, C.已亥,所有圖片均來自于原博主熊赖。

Word2Vec Tutorial - The Skip-Gram Model

這篇教程是關于Word2Vec的skip gram神經(jīng)網(wǎng)絡結構的。我的寫這篇教程的初衷是想跳過關于Word2Vec常規(guī)的介紹和抽象的見解虑椎,并深入更多的細節(jié)震鹉。具體來說我正深入探索skip gram神經(jīng)網(wǎng)絡模型。

The Model

skip-gram神經(jīng)網(wǎng)絡模型最基本的形式實際上驚人的簡單捆姜。我們從微調(diào)和強化開始解釋這個模型传趾。

我們從高層次的見解(宏觀?)開始泥技。Word2Vec使用了一個你可能在其他機器學習見過的技巧浆兰。我們將訓練一個簡單的帶有一個隱藏層(hidden-layer)的神經(jīng)網(wǎng)絡來完成某個任務,但是我們實際上沒有將這個神經(jīng)網(wǎng)絡用于我們的任務零抬。我們的目標實際上只是為了學習隱藏層的權重(weights)镊讼,我們會看到這些權重實際上就是我們嘗試學習的“詞向量(word vector)”。

另外一個你可能見過這個技巧的地方是在非監(jiān)督特征學習——訓練一個自動編碼器(auto-encoder)在隱藏層壓縮輸入向量平夜,然后在輸出層(output layer)解壓縮回原來的樣子蝶棋。訓練完之后,我們會去掉輸出層(解壓縮的步驟)忽妒,只使用隱藏層玩裙。這是一個學習圖片特征而不標記訓練數(shù)據(jù)(圖片)的技巧。

The Fake Task

所以我們現(xiàn)在需要講一下這個要用來建立神經(jīng)網(wǎng)絡的“假”任務("fake" task)段直,然后我們再回來看看這是如何間接地給到我們以后要用到的詞向量的吃溅。

我們將要訓練神經(jīng)網(wǎng)絡來做以下的事情。給定一個在句子中間部分出現(xiàn)的特定單詞(就是神經(jīng)網(wǎng)絡的輸入鸯檬,the input word)决侈,在這個單詞臨近(nearby)的單詞中隨機選一個(a nearby word)。這個神經(jīng)網(wǎng)絡將要告訴我們每一個在詞匯表(vocabulary)中的單詞成為這個nearby word的概率喧务。

我們說的“臨近(nearby)”赖歌,實際上是這個算法的一個參數(shù)枉圃,叫窗口大小(window size)庐冯。一個常見的窗口大小可能是5孽亲,意思是特定單詞的前后各5各單詞(總共10個)。

神經(jīng)網(wǎng)絡輸出的概率將關聯(lián)每個詞匯表中的單詞臨近我們輸入的單詞的概率展父。比如說返劲,如果你給訓練完的網(wǎng)絡輸入單詞"Soviet",輸出的概率中栖茉,"Union"和"Russia"的值要比不相關的單詞如"watermelon"和"kangaroo"要高得多篮绿。

我們將通過提供訓練文本中找到的單詞對(word pairs)來訓練神經(jīng)網(wǎng)絡。下面的是一些我們從句子"The quick bron fox jumps over the lazy doe."中取出的訓練樣本(training samples)的例子(word pairs)衡载,在這個例子中搔耕,我使用了一個較小的窗口大小的值:2隙袁,藍色高亮的是我們輸入的單詞痰娱。

traning_data

這個網(wǎng)絡將要從每一個組合出現(xiàn)的次數(shù)來學習統(tǒng)計。因此菩收,比如梨睁,相比("Soviet", "Sasquatch"),網(wǎng)絡會得到更多的("Soviet", "Union")訓練樣本娜饵,如果你輸入單詞"Soviet"作為網(wǎng)絡的輸入坡贺,那么網(wǎng)絡輸出"Union"或者"Russia"的概率值會比
"Sasquatch"更高。

Model Details

那么這是如何表示的呢箱舞?

首先遍坟,我們知道不能直接把單詞用字符串的形式輸入到神經(jīng)網(wǎng)絡中,所以我們需要找到一個在給網(wǎng)絡“表達”單詞的方法晴股。為了實現(xiàn)這一點愿伴,我們首先從訓練文本中創(chuàng)建一個詞匯表(vocabulary),假設我們這個詞匯表中有10000個不同的單詞电湘。

我們要把單詞比如"ants"表達成一個獨熱向量(one-hot vector)隔节。這個向量有10000個元素,每個分別表示詞匯表中的一個單詞寂呛,我們把單詞"ants"在向量中對應的位置的值設為"1"怎诫,其余的設為"0"。

網(wǎng)絡的輸出是一個同樣有10000個元素的向量贷痪,每個都是對應一個概率值幻妓,指隨機選擇一個這個輸入單詞"ants"的臨近單詞(nearby word)就是這個元素對應的單詞的概率棉浸。

這是這個神經(jīng)網(wǎng)絡的結構煞赢。

skip_gram_net_arch

這里在隱藏層神經(jīng)元中使用沒有激活函數(shù),但是在輸出層中使用了softmax激活,我們后面再來說這個毅该。

使用單詞對訓練這個神經(jīng)網(wǎng)絡的時候,輸入和輸出都是one-hot vector反番,但是當拿一個單詞來驗證這個訓練完的網(wǎng)絡時灭红,輸出實際上是一個概率分布(即一堆浮點數(shù),而不是獨熱向量)

The Hidden Layer

對于這個例子初烘,我們可以說我們在學習有300個特征的詞向量涡真。所以隱藏層將由一個有10000行(每行指詞匯表中的一次單詞)和300列(300個隱藏層神經(jīng)元)的權重矩陣(weights matrix)來表示。

300個特征值這個“300”的數(shù)字肾筐,是Google曾經(jīng)用來在Google news數(shù)據(jù)集上訓練后發(fā)布的模型的特征值數(shù)量哆料。特征的數(shù)量是一個根據(jù)你的應用調(diào)整的超參數(shù)(hyper parameter)(就是說嘗試不同的值,看看哪個會得到最好的結果)

如果你看這個權重矩陣的行吗铐,實際上就是我們的詞向量东亦!

word2vec_weight_matrix_lookup_table

所以,所有這些的最終目標其實就是學習這個隱藏層中的權重矩陣——當我們完成后唬渗,我們會扔掉輸出層(output layer)典阵!

但是,讓我們回來看看我們要訓練的模型的定義镊逝。

現(xiàn)在壮啊,你可能會問你自己——“那個獨熱向量幾乎是全0的,有什么用呢撑蒜?”當你拿一個110000的獨熱向量乘以一個10000300的矩陣的時候歹啼,它會非常有效率地只選擇在矩陣中對應行是1的來計算。下面是一個小例子:

one-hot_matmul

這意味著這個模型中的隱藏層只是相當于查表操作座菠,隱藏層的輸出只是輸入單詞的詞向量狸眼。(This means that the hidden layer of this model is really just operating as a lookup table. The output of the hidden layer is just the “word vector” for the input word.)

The Output Layer

單詞"ants"的1*300的詞向量會被送到輸出層。輸出層是一個softmax回歸分類器(softmax regression classifier)浴滴。這里有一個關于softmax回歸的深入教程拓萌,但這里的要點是,每一個輸出神經(jīng)元(代表詞匯表中的每個單詞)會產(chǎn)生0和1之間的輸出巡莹,這些輸出的值加起來等于1司志。

每個輸出層的神經(jīng)元有一個權重向量,它與隱藏層中的詞向量相乘降宅,然后把得到的結果應用到函數(shù)exp(x)中骂远。最后,為了讓輸出值加起來等于1腰根,我們除以所有10000個輸出的值的和激才。

下面是計算單詞"car"的輸出神經(jīng)元的輸出的圖:

output_weights_function

要注意,神經(jīng)網(wǎng)絡不知道任何輸出單詞對于輸入單詞的offset。在輸入單詞之前和之后的單詞之前它沒有學到一組不同的概率(It does not learn a different set of probabilities for the word before the input versus the word after)瘸恼。為了理解這個含義劣挫,假設在我們的訓練語料庫中,每一個"York"都出現(xiàn)在"New"之前东帅。這意味著压固,至少在訓練數(shù)據(jù)中,"New"有100%的可能出現(xiàn)在"York"附近靠闭。然而帐我,如果我們在"York"附近的10個單詞中隨機取一個,是"New"的可能性不是100%愧膀;你可能選擇了附近的其它的一個詞拦键。

Intuition

ok,下面要深入了解這個網(wǎng)絡一個令人興奮的點檩淋。

如果兩個不同的單詞有相似的“上下文(contexts)”(也就是說芬为,他們附近可能出現(xiàn)的單詞相似),那么我們的模型需要為這兩個單詞提供輸出相似的結果蟀悦。讓網(wǎng)絡輸出相似的上下文預測的一種情況是媚朦,詞向量是相似的(原文直譯會很奇怪…)。所以熬芜,如果兩個單詞有相似的上下文莲镣,那么我們的網(wǎng)絡就有動機去學習這兩個單詞的詞向量!嘿嘿涎拉!

兩個單詞有相似的上下文是什么意思呢?你可以認為像"intelligent"和"smart"這樣的同義詞會有非常相似的上下文的圆」呐。或者有關聯(lián)的單詞,比如"engine"和"transmission"也很有可能有相似的上下文越妈。

這網(wǎng)絡也能幫你處理詞干提燃玖(stemming)的任務——網(wǎng)絡可能會從單詞"ant"和"ants"學習到相似的詞向量,因為他們有相似的上下文(語境)梅掠。

Next Up

你可能留意到skip-gram神經(jīng)網(wǎng)絡包含大量的weights…就我剛剛的例子而言酌住,有300個特征和10000個單詞的詞匯表,那么在隱藏層和輸出層中分別有3,000,000個weights阎抒!在一個大數(shù)據(jù)集上訓練這個網(wǎng)絡會非常困難酪我,所以word2vec的作者介紹了一些微調(diào)的方法來讓訓練變得可行。這些在part 2 of this tutorial里面會有介紹且叁。

Other Resources

I've also created a post with links to and descriptions of other word2vec tutorials, papers, and implementations.

Cite

McCormick, C.(2016, April 19). Word2Vec Tutorial - The Skip-Gram Model. Retrieved from http://www.mccormickml.com

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末都哭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌欺矫,老刑警劉巖纱新,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異穆趴,居然都是意外死亡脸爱,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門未妹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阅羹,“玉大人,你說我怎么就攤上這事教寂∧笥悖” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵酪耕,是天一觀的道長导梆。 經(jīng)常有香客問我,道長迂烁,這世上最難降的妖魔是什么看尼? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮盟步,結果婚禮上藏斩,老公的妹妹穿的比我還像新娘。我一直安慰自己却盘,他們只是感情好狰域,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著黄橘,像睡著了一般兆览。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上塞关,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天抬探,我揣著相機與錄音,去河邊找鬼帆赢。 笑死小压,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的椰于。 我是一名探鬼主播怠益,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼廉羔!你這毒婦竟也來了溉痢?” 一聲冷哼從身側響起僻造,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎孩饼,沒想到半個月后髓削,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡镀娶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年立膛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梯码。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡宝泵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出轩娶,到底是詐尸還是另有隱情儿奶,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布鳄抒,位于F島的核電站闯捎,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏许溅。R本人自食惡果不足惜瓤鼻,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望贤重。 院中可真熱鬧茬祷,春花似錦、人聲如沸并蝗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽借卧。三九已至盹憎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間铐刘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工影晓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留镰吵,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓挂签,卻偏偏與公主長得像疤祭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子饵婆,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容