白話Word2Vec

只說人話,不砌公式,讓非數(shù)學(xué)專業(yè)讀者能看明白的Word2Vec废恋。

1. Word2Vec的作用

顧名思義,Word2Vec就是把單詞轉(zhuǎn)換成向量扒寄。它本質(zhì)上是一種單詞聚類的方法鱼鼓,是實(shí)現(xiàn)單詞語義推測(cè)、句子情感分析等目的一種手段该编。

選取訓(xùn)練后的單詞向量的其中任意3個(gè)維度迄本,放到坐標(biāo)系中展示,會(huì)發(fā)現(xiàn)語義相似的詞匯在空間坐標(biāo)中的位置會(huì)十分接近课竣,而語義無關(guān)的詞之間則相距較遠(yuǎn)嘉赎。這種性質(zhì)可以用來對(duì)單詞和句子進(jìn)行更加泛化的分析置媳。

詞向量在空間的表示

一些研究還發(fā)現(xiàn),計(jì)算有相似關(guān)系的單詞之間的位移向量也會(huì)十分相似公条,例如從“Man”到“Wonman”的向量拇囊,與從“King”到“Queen”之間的向量幾乎相同。這對(duì)語言和語義學(xué)的研究提供一種新的途徑靶橱。

詞向量與詞意的關(guān)聯(lián)

關(guān)于更多Word2Vec的應(yīng)用場(chǎng)景寥袭,請(qǐng)看:

知乎:word2vec有什么應(yīng)用?
CSDN:深度學(xué)習(xí)word2vec筆記之應(yīng)用篇

2. 傳統(tǒng)方法

單詞變向量其實(shí)可以不通過神經(jīng)網(wǎng)絡(luò)直接得到抓韩。假設(shè)我們有一個(gè)足夠大的語料庫(其中包含各種各樣的句子纠永,比如維基百科詞庫就是很好的語料來源),通常語義比較接近的詞周邊經(jīng)常出現(xiàn)的詞也應(yīng)該差不多谒拴,所以判斷一個(gè)詞和哪些詞比較像尝江,就是找到這個(gè)詞周圍的詞和哪些詞周圍的詞比較像。那么最笨(但很管用)的辦法莫過于將語料庫里的所有句子掃描一遍英上,挨個(gè)數(shù)出每個(gè)單詞周圍出現(xiàn)其它單詞的次數(shù)炭序,做成下面這樣的表格就可以了。

詞頻表

做這個(gè)表格時(shí)候苍日,語料庫里的單詞量可能多大幾十萬種惭聂,做這么大的表格實(shí)在太費(fèi)勁。實(shí)際的做法是只選出其中一部分詞匯(比如統(tǒng)計(jì)出在語料庫里詞頻最高的一部分詞匯)相恃,其余(出現(xiàn)頻率很低)的詞都用一個(gè)特殊符號(hào)代替掉辜纲。比如選5萬個(gè)詞,把這個(gè)表格保存成矩陣拦耐,就是5萬x5萬的矩陣耕腾,矩陣的每行就是相應(yīng)詞的一個(gè)5萬維向量表示。有了空間向量杀糯,兩個(gè)詞的關(guān)系就可以用數(shù)學(xué)關(guān)系表示了扫俺,比如向量的距離和相對(duì)空間關(guān)系。

但是這個(gè)向量實(shí)在太大固翰,并且過于稀疏狼纬,且不說矩陣中的絕大多數(shù)數(shù)據(jù)都是0,光是計(jì)算兩個(gè)詞的距離就需要5萬次減法骂际、5萬次乘法疗琉、49999次加法以及1次開方。所以在真正用的時(shí)候歉铝,還需要對(duì)向量進(jìn)行降維(主成分分析)處理没炒。方形矩陣的主成分分析可以使用特征值分解或者奇異值分解實(shí)現(xiàn),比如保留特征最大的50個(gè)分量,最終得到5萬x50的矩陣送火,每個(gè)詞的向量就只有50維,并且最大化的保留了各矩陣之間的位置關(guān)系先匪。這個(gè)矩陣被稱為“嵌入(Embedding)矩陣”种吸。

關(guān)于主成分分析以后另起一篇文章介紹,先推薦兩篇網(wǎng)絡(luò)上寫得比較好的:

主成分分析降維(MNIST數(shù)據(jù)集)
強(qiáng)大的矩陣奇異值分解(SVD)及其應(yīng)用

看起來不錯(cuò)呀非,不過計(jì)算這樣的一個(gè)原始矩陣需要多少內(nèi)存呢坚俗?假設(shè)矩陣的每個(gè)數(shù)字都用標(biāo)準(zhǔn)32位Int表示,那么完整保存一個(gè)5萬x5萬維的矩陣岸裙,大約需要10,000,000,000個(gè)byte猖败,也就是10GB的內(nèi)存(且隨著詞匯量增加程平方倍增長,漢語常用詞匯大約有20萬個(gè))降允。雖然還有一些優(yōu)化的空間恩闻,比如說使用稀疏矩陣來保存這些數(shù)據(jù),即便如此剧董,在性能和內(nèi)存開銷上依然差強(qiáng)人意幢尚。從最終結(jié)果來看,我們其實(shí)想要的那個(gè)降維后的嵌入矩陣翅楼,有沒辦法不要生成這個(gè)原始矩陣尉剩,直接得到嵌入矩陣呢?使用傳統(tǒng)的方法是辦不到了毅臊。

3. 神經(jīng)網(wǎng)絡(luò)

既然傳統(tǒng)方法做不了理茎,只能另辟蹊徑。這個(gè)時(shí)候Google發(fā)表的一篇論文祭出了神經(jīng)網(wǎng)絡(luò)大法管嬉,論文原文見這個(gè)鏈接:

Exploiting Similarities among Languages for Machine Translation

這個(gè)論文里的模型后來被人們稱為“Word2Vec”皂林,其實(shí)是因?yàn)镚oogle論文開源的Git代碼倉庫名字就叫叫“Word2Vec”。在論文里的計(jì)算模型包括兩種:Continuous Bag of Words(CBOW)Skip-Gram宠蚂,別看這兩個(gè)模型名字相差這么大式撼,在論文的附圖里看起來也差別那么大,其實(shí)兩者在實(shí)現(xiàn)上的差別僅僅是調(diào)換一下訓(xùn)練詞和目標(biāo)詞的位置求厕。除去代碼和模型里面的一些算法優(yōu)化部分著隆,Word2Vec的最簡單版本,可以認(rèn)為是邏輯回歸網(wǎng)絡(luò)的一種變形呀癣。

兩種基于神經(jīng)網(wǎng)絡(luò)的詞向量生成模型

以CBOW為例美浦,還是每次挨個(gè)把語料庫的詞取出來,作為該次訓(xùn)練的目標(biāo)项栏,然后把這個(gè)詞所在位置的前后N個(gè)詞(N通常用1或者2浦辨,數(shù)字越大學(xué)習(xí)到的模型信息量越豐富,但需要的訓(xùn)練時(shí)間越長)依次作為訓(xùn)練的輸入沼沈。比如N值為2流酬,每取出一個(gè)詞(作為中心詞)币厕,就要使用該詞的前后各2個(gè)詞(作為環(huán)境詞),分別放到網(wǎng)絡(luò)訓(xùn)練一次芽腾,一共要取4個(gè)環(huán)境詞旦装。還是以識(shí)別5萬個(gè)詞的向量為例,具體訓(xùn)練過程如下:

  1. 首先預(yù)處理數(shù)據(jù)摊滔,把所有需要進(jìn)行訓(xùn)練的詞匯編上序號(hào)阴绢,比如1-50000
  2. 隨機(jī)初始化一個(gè)維度為50000x50的矩陣,作為待訓(xùn)練的嵌入矩陣
  3. 每次取出一個(gè)中心詞和它的其中一個(gè)環(huán)境詞
  4. 以環(huán)境詞編號(hào)作行數(shù)艰躺,從詞向量矩陣?yán)锶〕鲞@一行數(shù)據(jù)(50維向量)
  5. 將這個(gè)50維向量作為邏輯回歸網(wǎng)絡(luò)的輸入呻袭,訓(xùn)練目標(biāo)是中心詞編號(hào)相應(yīng)的One-Hot向量
  6. 在訓(xùn)練的反向傳播時(shí)計(jì)算,不但更新邏輯回歸網(wǎng)絡(luò)的權(quán)重矩陣腺兴,還要往前多傳遞一級(jí)左电,把取出的50維向量的值也根據(jù)目標(biāo)梯度進(jìn)行更新
  7. 將更新過的50維向量重新更新到嵌入矩陣相應(yīng)的行
  8. 重復(fù)以上過程,直到所有的中心詞都已經(jīng)被遍歷一遍含长,此時(shí)嵌入矩陣值的計(jì)算就完成了

你沒看錯(cuò)券腔,那個(gè)50000x50維的向量就是嵌入矩陣,整個(gè)訓(xùn)練過程就是直接對(duì)這個(gè)矩陣進(jìn)行更新拘泞。Skip-Gram的算法就是把第3步的輸入詞和第4步的目標(biāo)詞對(duì)調(diào)一下纷纫。雖然對(duì)于生成嵌入矩陣而言,兩種方法效果基本相同(統(tǒng)計(jì)數(shù)據(jù)表明陪腌,Skip-gram在訓(xùn)練數(shù)據(jù)量較大時(shí)得到的詞向量效果比CBOW略佳)辱魁,需要指出的是兩種模型本身所蘊(yùn)含的意義是不太一樣的。CBOW用環(huán)境詞預(yù)測(cè)中心詞诗鸭,得到邏輯回歸網(wǎng)絡(luò)可以用來預(yù)測(cè)類似“一句話中缺少了一個(gè)單詞染簇,這個(gè)單詞最可能是什么”這樣的問題。而Skip-Gram使用中心詞來預(yù)測(cè)環(huán)境詞强岸,因此它可以用來預(yù)測(cè)類似“給定一個(gè)單詞锻弓,它周邊最可能出現(xiàn)哪些單詞”的問題。

由于神經(jīng)網(wǎng)絡(luò)計(jì)算過程的模糊性蝌箍,對(duì)Work2Vec和其他同類實(shí)現(xiàn)的效果曾經(jīng)有過一些爭(zhēng)議青灼,但隨后就有些第三方機(jī)構(gòu)提供了測(cè)試數(shù)據(jù)來支撐Word2Vec理論的可靠性。其中比較有意思的是2014在美國計(jì)算機(jī)語言學(xué)協(xié)會(huì)年度會(huì)議上提出的論文《Don’t count, predict!

4. 真實(shí)的Word2Vec

前面部分介紹的簡化版Word2Vec過程實(shí)際上是為了便于大家理解而概括出來的妓盲。這個(gè)理想的模型當(dāng)中存在一些無法回避的問題杂拨,比如輸出的部分是一個(gè)50000維的One-Hot向量,因此數(shù)據(jù)經(jīng)過網(wǎng)絡(luò)后應(yīng)該得到的也是一個(gè)50000維的向量悯衬,對(duì)這個(gè)輸出向量進(jìn)行Softmax計(jì)算所需的工作量將是一個(gè)天文數(shù)字弹沽。

Google論文里真實(shí)實(shí)現(xiàn)的Word2Vec對(duì)模型提出了兩種改進(jìn)思路,即Hierarchical Softmax模型和Negative Sampling模型。

Hierarchical Softmax是用輸出值的霍夫曼編碼代替原本的One-Hot向量策橘,用霍夫曼樹替代Softmax的計(jì)算過程炸渡。

Negative Sampling(簡稱NEG)使用隨機(jī)采用替代Softmax計(jì)算概率,它是另一種更嚴(yán)謹(jǐn)?shù)某闃幽P蚇CE的簡化版本役纹。

關(guān)于Hierarchical Softmax和Negative Sampling的原理細(xì)節(jié)(包含太多數(shù)學(xué)公式偶摔,白話不出來了,誰要能幫我把這部分講清楚促脉,我請(qǐng)吃飯_)可參看以下文章:

word2vec 代碼實(shí)現(xiàn)(1) – Skip gram
word2vec 代碼實(shí)現(xiàn)(2) – CBOW
word2vec原理篇
深度學(xué)習(xí)word2vec筆記之算法篇

將這兩種算法與前面的兩個(gè)模型組合,在Google的論文里一共包含了4種Word2Vec的實(shí)現(xiàn)策州。

  • Hierarchical Softmax CBOW 模型
  • Hierarchical Softmax Skip-Gram 模型
  • Negative Sampling CBOW 模型
  • Negative Sampling Skip-Gram 模型

在Tensorflow里最常見的實(shí)現(xiàn)例子是Negative Sampling Skip-Gram瘸味,比如:

cs20si中的例子
tensorflow官方的例子

其中的抽樣算法封裝在了tf.nn.nce_loss方法里面。

最后附上網(wǎng)絡(luò)上一個(gè)對(duì)Word2Vec講解比較具有系統(tǒng)性的系列博客“word2vec中的數(shù)學(xué)原理詳解”:

前言
預(yù)備知識(shí)
背景知識(shí)
基于 Hierarchical Softmax 的模型
基于 Negative Sampling 的模型
若干源碼細(xì)節(jié)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末够挂,一起剝皮案震驚了整個(gè)濱河市旁仿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌孽糖,老刑警劉巖枯冈,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異办悟,居然都是意外死亡尘奏,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門病蛉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來炫加,“玉大人,你說我怎么就攤上這事铺然∷仔ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵魄健,是天一觀的道長赋铝。 經(jīng)常有香客問我,道長沽瘦,這世上最難降的妖魔是什么革骨? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮其垄,結(jié)果婚禮上苛蒲,老公的妹妹穿的比我還像新娘。我一直安慰自己绿满,他們只是感情好臂外,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般漏健。 火紅的嫁衣襯著肌膚如雪嚎货。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天蔫浆,我揣著相機(jī)與錄音殖属,去河邊找鬼。 笑死瓦盛,一個(gè)胖子當(dāng)著我的面吹牛洗显,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播原环,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼挠唆,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了嘱吗?” 一聲冷哼從身側(cè)響起玄组,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谒麦,沒想到半個(gè)月后俄讹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡绕德,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年患膛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片迁匠。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡剩瓶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出城丧,到底是詐尸還是另有隱情延曙,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布亡哄,位于F島的核電站枝缔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蚊惯。R本人自食惡果不足惜愿卸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望截型。 院中可真熱鬧趴荸,春花似錦、人聲如沸宦焦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至酝豪,卻和暖如春涛碑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背孵淘。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工蒲障, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瘫证。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓揉阎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親背捌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子余黎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

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

  • 前面的文章主要從理論的角度介紹了自然語言人機(jī)對(duì)話系統(tǒng)所可能涉及到的多個(gè)領(lǐng)域的經(jīng)典模型和基礎(chǔ)知識(shí)。這篇文章载萌,甚至之后...
    我偏笑_NSNirvana閱讀 13,867評(píng)論 2 64
  • 關(guān)鍵詞:自然語言處理(NLP),詞向量(Word Vectors)巡扇,奇異值分解(Singular Value De...
    xiiao蝸牛閱讀 2,851評(píng)論 0 13
  • 1.NLP當(dāng)前熱點(diǎn)方向 詞法/句法分析 詞嵌入(word embedding) 命名實(shí)體識(shí)別(Name Entit...
    __Aragorn閱讀 5,991評(píng)論 1 9
  • 疊石 大拙 你說把石頭 疊起來 就代表著站得遠(yuǎn)遠(yuǎn)的 祈求 那么扭仁,就讓我 把風(fēng)疊起來 在日光下 漸漸的發(fā)酵 ...
    豬大拙閱讀 364評(píng)論 2 1
  • “秧”在字典里的釋義為:植物的幼苗。令秧剛嫁到唐府的時(shí)候厅翔,年僅十六歲乖坠,正是初出茅廬、嬌艷欲滴卻懵懂稚嫩的年紀(jì)刀闷。她嫁...
    夏已晚閱讀 421評(píng)論 0 1