自然語(yǔ)言處理-word2vec

一.簡(jiǎn)介

Word2Vec是google在2013年推出的一個(gè)NLP工具翎朱,它的特點(diǎn)是能夠?qū)卧~轉(zhuǎn)化為向量來(lái)表示障涯,這樣詞與詞之間就可以定量的去度量他們之間的關(guān)系贸辈,挖掘詞之間的聯(lián)系。用詞向量來(lái)表示詞并不是Word2Vec的首創(chuàng)杂穷,在很久之前就出現(xiàn)了鸟废。最早的詞向量采用One-Hot編碼猜敢,又稱為一位有效編碼,每個(gè)詞向量維度大小為整個(gè)詞匯表的大小盒延,對(duì)于每個(gè)具體的詞匯表中的詞缩擂,將對(duì)應(yīng)的位置置為1。比如我們有下面的5個(gè)詞組成的詞匯表

采用One-Hot編碼方式來(lái)表示詞向量非常簡(jiǎn)單添寺,但缺點(diǎn)也是顯而易見的胯盯,一方面我們實(shí)際使用的詞匯表很大,經(jīng)常是百萬(wàn)級(jí)以上计露,這么高維的數(shù)據(jù)處理起來(lái)會(huì)消耗大量的計(jì)算資源與時(shí)間博脑。另一方面憎乙,One-Hot編碼中所有詞向量之間彼此正交,沒有體現(xiàn)詞與詞之間的相似關(guān)系叉趣。

Distributed representation可以解決One-Hot編碼存在的問題泞边,它的思路是通過訓(xùn)練,將原來(lái)One-Hot編碼的每個(gè)詞都映射到一個(gè)較短的詞向量上來(lái)疗杉,而這個(gè)較短的詞向量的維度可以由我們自己在訓(xùn)練時(shí)根據(jù)任務(wù)需要來(lái)自己指定阵谚。

下圖是采用Distributed representation的一個(gè)例子,我們將詞匯表里的詞用"Royalty","Masculinity", "Femininity"和"Age"4個(gè)維度來(lái)表示烟具,King這個(gè)詞對(duì)應(yīng)的詞向量可能是(0.99,0.99,0.05,0.7)梢什。當(dāng)然在實(shí)際情況中,我們并不能對(duì)詞向量的每個(gè)維度做一個(gè)很好的解釋朝聋。

有了用Distributed Representation表示的較短的詞向量嗡午,我們就可以較容易的分析詞之間的關(guān)系了,比如我們將詞的維度降維到2維玖翅,有一個(gè)有趣的研究表明翼馆,用下圖的詞向量表示我們的詞時(shí),我們可以發(fā)現(xiàn):

可見我們只要得到了詞匯表里所有詞對(duì)應(yīng)的詞向量金度,那么我們就可以做很多有趣的事情了。不過严沥,怎么訓(xùn)練才能得到合適的詞向量呢猜极?針對(duì)這個(gè)問題,Google的Tomas Mikolov在他的論文中提出了CBOW和Skip-gram兩種神經(jīng)網(wǎng)絡(luò)模型消玄。

二.原理

Word2Vec 的訓(xùn)練模型本質(zhì)上是只具有一個(gè)隱含層的神經(jīng)元網(wǎng)絡(luò)跟伏,詞向量表示即為W_{V*N}矩陣(如下圖)。

隱層的激活函數(shù)其實(shí)是線性的翩瓜,相當(dāng)于沒做任何處理(這也是 Word2vec 簡(jiǎn)化之前語(yǔ)言模型的獨(dú)到之處)受扳,我們要訓(xùn)練這個(gè)神經(jīng)網(wǎng)絡(luò),用反向傳播算法兔跌,本質(zhì)上是鏈?zhǔn)角髮?dǎo)勘高。


它的輸入是采用One-Hot編碼的詞匯表向量,它的輸出也是One-Hot編碼的詞匯表向量坟桅。使用所有的樣本华望,訓(xùn)練這個(gè)神經(jīng)元網(wǎng)絡(luò),等到收斂之后仅乓,從輸入層到隱含層的那些權(quán)重赖舟,便是每一個(gè)詞的采用Distributed Representation的詞向量。這樣我們就把原本維數(shù)為V的詞向量變成了維數(shù)為N的詞向量(N遠(yuǎn)小于V)夸楣,并且詞向量間保留了一定的相關(guān)關(guān)系宾抓。

Google的Mikolov在關(guān)于Word2Vec的論文中提出了CBOW和Skip-gram兩種模型子漩,CBOW適合于數(shù)據(jù)集較小的情況,而Skip-Gram在大型語(yǔ)料中表現(xiàn)更好石洗。其中CBOW如下圖左部分所示幢泼,使用圍繞目標(biāo)單詞的其他單詞(語(yǔ)境)作為輸入,在映射層做加權(quán)處理后輸出目標(biāo)單詞劲腿。與CBOW根據(jù)語(yǔ)境預(yù)測(cè)目標(biāo)單詞不同旭绒,Skip-gram根據(jù)當(dāng)前單詞預(yù)測(cè)語(yǔ)境,如下圖右部分所示焦人。假如我們有一個(gè)句子“There is an apple on the table”作為訓(xùn)練數(shù)據(jù)挥吵,CBOW的輸入為(is,an,on,the),輸出為apple花椭。而Skip-gram的輸入為apple忽匈,輸出為(is,an,on,the)。

1.CBOW

1矿辽、輸入層:上下文單詞的One-Hot編碼詞向量丹允,V為詞匯表單詞個(gè)數(shù),C為上下文單詞個(gè)數(shù)袋倔。以上文那句話為例雕蔽,這里C=4,所以模型的輸入是(is,an,on,the)4個(gè)單詞的One-Hot編碼詞向量宾娜。

2批狐、初始化一個(gè)權(quán)重矩陣W_{V*N},然后用所有輸入的One-Hot編碼詞向量左乘該矩陣,得到維數(shù)為N的向量w_{1}前塔、w_{2}.....w_{c} 嚣艇,這里的N由自己根據(jù)任務(wù)需要設(shè)置。

3华弓、將所得的向量w_{1}食零、w_{2}.....w_{c}相加求平均作為隱藏層向量h

4寂屏、初始化另一個(gè)權(quán)重矩陣?W^{’}_{N*V},用隱藏層向量h左乘W^{’}_{N*V}贰谣,再經(jīng)激活函數(shù)處理得到V維的向量yy的每一個(gè)元素代表相對(duì)應(yīng)的每個(gè)單詞的概率分布凑保。

5冈爹、y中概率最大的元素所指示的單詞為預(yù)測(cè)出的中間詞(target word)與true label的One-Hot編碼詞向量做比較,誤差越小越好(根據(jù)誤差更新兩個(gè)權(quán)重矩陣)

在訓(xùn)練前需要定義好損失函數(shù)(一般為交叉熵代價(jià)函數(shù))欧引,采用梯度下降算法更新W和W'频伤。訓(xùn)練完畢后,輸入層的每個(gè)單詞與矩陣W相乘得到的向量的就是我們想要的Distributed Representation表示的詞向量芝此,也叫做word embedding憋肖。

2.Skip-gram

在前面的章節(jié)中因痛,我們已經(jīng)介紹過Skip-Gram是給定input word來(lái)預(yù)測(cè)上下文,其模型結(jié)構(gòu)如上圖所示岸更。它的做法是鸵膏,將一個(gè)詞所在的上下文中的詞作為輸出,而那個(gè)詞本身作為輸入怎炊,也就是說谭企,給出一個(gè)詞,希望預(yù)測(cè)可能出現(xiàn)的上下文的詞评肆。通過在一個(gè)大的語(yǔ)料庫(kù)訓(xùn)練债查,得到一個(gè)從輸入層到隱含層的權(quán)重模型」贤欤“apple”的上下文詞是(’there’盹廷,’is’,’an’久橙,’on’,’the’,’table’).那么以apple的One-Hot詞向量作為輸入俄占,輸出則是(’there’,’is’淆衷,’an’缸榄,’on’,’the’,’table’)的One-Hot詞向量。訓(xùn)練完成后祝拯,就得到了每個(gè)詞到隱含層的每個(gè)維度的權(quán)重碰凶,就是每個(gè)詞的向量(和CBOW中一樣)。接下來(lái)具體介紹如何訓(xùn)練我們的神經(jīng)網(wǎng)絡(luò)鹿驼。

假如我們有一個(gè)句子“There is an apple on the table”。

1辕宏、首先我們選句子中間的一個(gè)詞作為我們的輸入詞畜晰,例如我們選取“apple”作為input word;

2瑞筐、有了input word以后凄鼻,我們?cè)俣x一個(gè)叫做skip_window的參數(shù),它代表著我們從當(dāng)前input word的一側(cè)(左邊或右邊)選取詞的數(shù)量聚假。如果我們?cè)O(shè)置skip_window=2块蚌,那么我們最終獲得窗口中的詞(包括input word在內(nèi))就是[‘is’,’an’,’apple’,’on’,’the’ ]。skip_window=2代表著選取左input word左側(cè)2個(gè)詞和右側(cè)2個(gè)詞進(jìn)入我們的窗口膘格,所以整個(gè)窗口大小span=2x2+1=5峭范。另一個(gè)參數(shù)叫num_skips,它代表著我們從整個(gè)窗口中選取多少個(gè)不同的詞作為我們的output word瘪贱,當(dāng)skip_window=2纱控,num_skips=2時(shí)辆毡,我們將會(huì)從窗口中隨機(jī)選擇兩個(gè)非中心單詞,得到兩組 (input word, output word) 形式的訓(xùn)練數(shù)據(jù)甜害,例如選擇an和on我們得到('apple', 'an')舶掖,('apple', 'on')。

3尔店、神經(jīng)網(wǎng)絡(luò)基于這些訓(xùn)練數(shù)據(jù)中每對(duì)單詞出現(xiàn)的次數(shù)習(xí)得統(tǒng)計(jì)結(jié)果眨攘,并輸出一個(gè)概率分布,這個(gè)概率分布代表著到我們?cè)~典中每個(gè)詞有多大可能性跟input word同時(shí)出現(xiàn)嚣州。舉個(gè)例子鲫售,如果我們向神經(jīng)網(wǎng)絡(luò)模型中輸入一個(gè)單詞“中國(guó)“,那么最終模型的輸出概率中避诽,像“英國(guó)”龟虎, ”俄羅斯“這種相關(guān)詞的概率將遠(yuǎn)高于像”蘋果“,”蟈蟈“非相關(guān)詞的概率沙庐。因?yàn)椤庇?guó)“鲤妥,”俄羅斯“在文本中更大可能在”中國(guó)“的窗口中出現(xiàn)。我們將通過給神經(jīng)網(wǎng)絡(luò)輸入文本中成對(duì)的單詞來(lái)訓(xùn)練它完成上面所說的概率計(jì)算拱雏。

4棉安、通過梯度下降和反向傳播更新矩陣W

5、W中的行向量即為每個(gè)單詞的Word embedding表示

三.改進(jìn)

我們介紹了CBOW和Skip-gram最理想情況下的實(shí)現(xiàn)铸抑,即訓(xùn)練迭代兩個(gè)矩陣W和W’贡耽,之后在輸出層采用softmax函數(shù)來(lái)計(jì)算輸出各個(gè)詞的概率。但在實(shí)際應(yīng)用中這種方法的訓(xùn)練開銷很大鹊汛,不具有很強(qiáng)的實(shí)用性蒲赂,因?yàn)?b>Word2vec 本質(zhì)上是一個(gè)語(yǔ)言模型,它的輸出節(jié)點(diǎn)數(shù)是 V 個(gè)刁憋,對(duì)應(yīng)了 V 個(gè)詞語(yǔ)滥嘴,本質(zhì)上是一個(gè)多分類問題,但實(shí)際當(dāng)中至耻,詞語(yǔ)的個(gè)數(shù)非常非常多若皱,會(huì)給計(jì)算造成很大困難,所以需要用技巧來(lái)加速訓(xùn)練尘颓。為了使得模型便于訓(xùn)練走触,有學(xué)者提出了Hierarchical Softmax和Negative Sampling兩種改進(jìn)方法。

1.hierarchical softmax

改進(jìn)點(diǎn)1

改進(jìn)輸入向量求和方式

第一點(diǎn)是從輸入層到隱藏層的映射疤苹,沒有采用原先的與矩陣W相乘然后相加求平均的方法互广,而是直接對(duì)所有輸入的詞向量求和。假設(shè)輸入的詞向量為(0痰催,1兜辞,0迎瞧,0)和(0,0,0,1),那么隱藏層的向量為(0,1,0,1)逸吵。

改進(jìn)點(diǎn)2

通過采用Huffman tree把N分類問題變成 log(N)次二分類

還記得最原始的網(wǎng)絡(luò)模型是長(zhǎng)這樣的:

而在Hierarchical softmax中凶硅,我們不再需要W^{’}_{N*V}的部分了,變成了下面的樣子:

我們把傳統(tǒng)的Softmax換成Hierarchical softmax扫皱,而Hierarchical softmax由一個(gè)Huffman樹構(gòu)成足绅。這個(gè)Huffman樹的葉節(jié)點(diǎn)是所有的單詞,構(gòu)造規(guī)則按照詞頻排序韩脑。

也就是說氢妈,現(xiàn)在輸入的單詞經(jīng)過W_{V*N}這個(gè)矩陣,轉(zhuǎn)化成了隱層的一堆參數(shù)段多。

這些參數(shù)輸入到一個(gè)Huffman樹中首量,最終期望它選到對(duì)應(yīng)的單詞

這是不是很像決策樹进苍?

當(dāng)然這個(gè)Huffman樹的結(jié)構(gòu)是已經(jīng)實(shí)現(xiàn)決定好的(按照詞頻)加缘。

那么如何決定每個(gè)節(jié)點(diǎn)的選擇的呢?如何判斷在某個(gè)節(jié)點(diǎn)上是往左走還是往右走觉啊?

實(shí)際上拣宏,在每個(gè)節(jié)點(diǎn)上,都有一組不同的參數(shù)\theta _{i}杠人,我們?cè)O(shè)隱層的參數(shù)是x_{w} 勋乾,那么到第i個(gè)節(jié)點(diǎn)上,由sigmoid函數(shù)決定往左走還是往右走:


而Hierarchical softmax的好處是加快了選擇的速度嗡善,同時(shí)它不會(huì)更改所有的節(jié)點(diǎn)的參數(shù)辑莫。

例如下面的例子:

如果groun truth(也就是正例)是would,那么Huffman編碼是11100罩引,梯度下降會(huì)改變經(jīng)過的節(jié)點(diǎn)上的參數(shù)?θ?摆昧,而不會(huì)改變其他參數(shù)。

而傳統(tǒng)的Softmax則是調(diào)整了所有的參數(shù)的蜒程。

我們?cè)僬f回來(lái),Hierarchical softmax為什么更快伺帘?

傳統(tǒng)的Softmax要計(jì)算下面的式子:

而當(dāng)V很大的時(shí)候昭躺, 其計(jì)算量是非常大的。

但是在Hierarchical softmax中伪嫁,我們只需要計(jì)算有限個(gè)e^{W^{T}_{x}}\theta _{i}领炫,這樣就減少了計(jì)算量,同時(shí)因?yàn)椴粫?huì)更改其他的θ张咳,因此更有優(yōu)勢(shì)帝洪。

2.Negative Sampling

Negative Sampling和Hierarchical softmax的想法類似似舵,也是想只更新一部分參數(shù)

負(fù)采樣這個(gè)詞在神經(jīng)網(wǎng)絡(luò)中并不經(jīng)常出現(xiàn)葱峡。因?yàn)橥ǔ5姆诸惾蝿?wù)中并沒有負(fù)采樣的概念砚哗。

在分類任務(wù)中,我們用one-hot表示類別砰奕,我們通過極大似然優(yōu)化網(wǎng)絡(luò)參數(shù)蛛芥,自然希望y_{k}的值盡可能大,而其他的y_{i}的值都變小军援。

這意味這仅淑,在傳統(tǒng)的Softmax中,如果我們的vocabulary大小為10000時(shí)胸哥,在輸出層涯竟,我們期望某一個(gè)神經(jīng)元結(jié)點(diǎn)輸出1,其余9999個(gè)都應(yīng)該輸出0空厌。在這里庐船,這9999個(gè)我們期望輸出為0的神經(jīng)元結(jié)點(diǎn)所對(duì)應(yīng)的單詞我們稱為negative word

而Negative Sampling的想法是不全部計(jì)算所有的negative word蝇庭,只從中采樣一部分進(jìn)行計(jì)算醉鳖。我們?cè)谡麄€(gè)字典中采樣?K個(gè)詞作為負(fù)樣本,用原來(lái)的target word作為正樣本哮内,就得到了K+1個(gè)樣本盗棵。接下來(lái),我們依舊需要N×V個(gè)參數(shù)北发,但是它們不再整體作為Softmax的一部分了纹因,而是分別形成V個(gè)Sigmoid

接下來(lái)就很簡(jiǎn)單了琳拨,我們只要對(duì)K+1個(gè)Sigmoid更新參數(shù)就可以了瞭恰。

隨著對(duì)Sigmoid參數(shù)的更新,經(jīng)過反向傳播過程狱庇,前面的W_{V*N}矩陣也會(huì)被更新惊畏,這就起到了訓(xùn)練的作用。

而K個(gè)負(fù)樣本的選擇也是有說道的密任,往往按照詞頻選擇颜启。(這體現(xiàn)了Negative Sampling和Hierarchical softmax的相似之處)

設(shè) f(w_{i}) 是第i個(gè)詞的頻率,這個(gè)詞被選擇到的概率為:

當(dāng)然這個(gè)3/4完全是經(jīng)驗(yàn)上的數(shù)值浪讳。

Negative Sampling之所以有效缰盏,還是因?yàn)槲覀冏钋懊嬲f到的,這個(gè)模型根本用不著真的去分類,而它的副產(chǎn)品——詞向量矩陣 W_{V*N}才是我們需要的口猜。


參考:

https://zhuanlan.zhihu.com/p/61635013

https://zhuanlan.zhihu.com/p/95204186

https://zhuanlan.zhihu.com/p/26306795

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末负溪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子济炎,更是在濱河造成了極大的恐慌川抡,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冻辩,死亡現(xiàn)場(chǎng)離奇詭異猖腕,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)恨闪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門倘感,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人咙咽,你說我怎么就攤上這事老玛。” “怎么了钧敞?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵蜡豹,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我溉苛,道長(zhǎng)镜廉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任愚战,我火速辦了婚禮娇唯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘寂玲。我一直安慰自己塔插,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布拓哟。 她就那樣靜靜地躺著想许,像睡著了一般。 火紅的嫁衣襯著肌膚如雪断序。 梳的紋絲不亂的頭發(fā)上流纹,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音违诗,去河邊找鬼捧颅。 笑死,一個(gè)胖子當(dāng)著我的面吹牛较雕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼亮蒋,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼扣典!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起慎玖,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤贮尖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后趁怔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體湿硝,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年润努,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了关斜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡铺浇,死狀恐怖痢畜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鳍侣,我是刑警寧澤丁稀,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站倚聚,受9級(jí)特大地震影響线衫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜惑折,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一授账、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧唬复,春花似錦矗积、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至休建,卻和暖如春乍恐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背测砂。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工茵烈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人砌些。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓呜投,卻偏偏與公主長(zhǎng)得像加匈,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子仑荐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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