Word2Vec的CBOW與Skip-Gram模型

word2vec是google在2013年推出的一個NLP工具余佃,它是將所有的詞向量化暮刃,這樣詞與詞之間就可以定量的去度量他們之間的關(guān)系,挖掘詞之間的聯(lián)系爆土。

1 詞向量基礎(chǔ)

用詞向量來表示詞并不是word2vec的首創(chuàng)椭懊,在很久之前就出現(xiàn)了。最早的詞向量是很冗長的步势,它使用是詞向量維度大小為整個詞匯表的大小氧猬,對于每個具體的詞匯表中的詞,將對應(yīng)的位置置為1坏瘩。比如我們有下面的5個詞組成的詞匯表盅抚,詞"Queen"的序號為2, 那么它的詞向量就是(0,1,0,0,0)倔矾。同樣的道理妄均,詞"Woman"的詞向量就是(0,0,0,1,0)。這種詞向量的編碼方式我們一般叫做1-of-N representation或者one hot representation.

One hot 表達

One hot?representation用來表示詞向量非常簡單哪自,但是卻有很多問題丰包。最大的問題是詞匯表一般都非常大,比如達到百萬級別壤巷,這樣每個詞都用百萬維的向量來表示簡直是內(nèi)存的災(zāi)難邑彪。這樣的向量其實除了一個位置是1,其余的位置全部都是0隙笆,表達的效率不高锌蓄。

能不能把詞向量的維度變小呢升筏?

Dristributed?representation可以解決One hot?representation的問題撑柔,它的思路是通過訓練,將每個詞都映射到一個較短的詞向量上來您访。所有的這些詞向量就構(gòu)成了向量空間铅忿,進而可以用普通的統(tǒng)計學的方法來研究詞與詞之間的關(guān)系。

這個較短的詞向量維度是多大呢灵汪?這個一般需要我們在訓練時自己來指定(比如200-300dim)檀训。

比如下圖我們將詞匯表里的詞用"Royalty","Masculinity", "Femininity"和"Age"4個維度來表示柑潦,King這個詞對應(yīng)的詞向量可能是(0.99,0.99,0.05,0.7)。當然在實際情況中峻凫,我們并不能對詞向量的每個維度做一個很好的解釋渗鬼。

Dristributed?表達

有了用Dristributed?representation表示的較短的詞向量,我們就可以較容易的分析詞之間的關(guān)系了荧琼,比如我們將詞的維度降維到2維譬胎,有一個有趣的研究表明,用下圖的詞向量表示我們的詞時命锄,我們可以發(fā)現(xiàn)向量化的King?Man+Woman=Queen?

Word Vectors

可見我們只要得到了詞匯表里所有詞對應(yīng)的詞向量堰乔,那么我們就可以做很多有趣的事情了。

不過脐恩,怎么訓練得到合適的詞向量呢镐侯?

一個很常見的方法是使用神經(jīng)網(wǎng)絡(luò)語言模型

2 CBOW與Skip-Gram 用于神經(jīng)網(wǎng)絡(luò)語言模型

在word2vec出現(xiàn)之前驶冒,已經(jīng)有用深度神經(jīng)網(wǎng)絡(luò)(DNN)來用訓練詞向量進而處理詞與詞之間的關(guān)系了苟翻。采用的方法一般是一個三層的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)(當然也可以多層),分為輸入層骗污,隱藏層和輸出層(softmax層)袜瞬。

這個模型是如何定義數(shù)據(jù)的輸入和輸出呢?

一般分為CBOW(Continuous Bag-of-Words?與 Skip-Gram 兩種模型身堡。從直觀上理解邓尤,Skip-Gram是給定input word來預(yù)測上下文。而CBOW是給定上下文贴谎,來預(yù)測input word汞扎。

CBOW(Continuous Bag-of-Words?與 Skip-Gram 兩種模型

CBOW模型的訓練輸入是某一個特征詞的上下文相關(guān)的詞對應(yīng)的詞向量,而輸出就是這特定的一個詞的詞向量擅这。

我們的上下文大小取值為4澈魄,特定的這個詞是"Learning",也就是我們需要的輸出詞向量,上下文對應(yīng)的詞有8個仲翎,前后各4個痹扇,這8個詞是我們模型的輸入。由于CBOW使用的是詞袋模型溯香,因此這8個詞都是平等的鲫构,也就是不考慮他們和我們關(guān)注的詞之間的距離大小,只要在我們上下文之內(nèi)即可玫坛。

這樣我們這個CBOW的例子里结笨,我們的輸入是8個詞向量,輸出是所有詞的softmax概率(訓練的目標是期望訓練樣本特定詞對應(yīng)的softmax概率最大),對應(yīng)的CBOW神經(jīng)網(wǎng)絡(luò)模型輸入層有8個神經(jīng)元炕吸,輸出層有詞匯表大小個神經(jīng)元伐憾。隱藏層的神經(jīng)元個數(shù)我們可以自己指定。通過深度神經(jīng)網(wǎng)絡(luò)(DNN)的反向傳播算法赫模,我們可以求出DNN模型的參數(shù)树肃,同時得到所有的詞對應(yīng)的詞向量。這樣當我們有新的需求瀑罗,要求出某8個詞對應(yīng)的最可能的輸出中心詞時扫外,我們可以通過一次DNN前向傳播算法并通過softmax激活函數(shù)找到概率最大的詞對應(yīng)的神經(jīng)元即可。

Skip-Gram模型和CBOW的思路是反著來的廓脆,即輸入是特定的一個詞的詞向量筛谚,而輸出是特定詞對應(yīng)的上下文詞向量。還是上面的例子停忿,我們的上下文大小取值為4驾讲,?特定的這個詞"Learning"是我們的輸入,而這8個上下文詞是我們的輸出席赂。

Skip Gram?

這樣我們這個Skip-Gram的例子里吮铭,我們的輸入是特定詞, 輸出是softmax概率排前8的8個詞颅停,對應(yīng)的Skip-Gram神經(jīng)網(wǎng)絡(luò)模型輸入層有1個神經(jīng)元谓晌,輸出層有詞匯表大小個神經(jīng)元。隱藏層的神經(jīng)元個數(shù)我們可以自己指定癞揉。通過DNN的反向傳播算法纸肉,我們可以求出DNN模型的參數(shù),同時得到所有的詞對應(yīng)的詞向量喊熟。這樣當我們有新的需求柏肪,要求出某1個詞對應(yīng)的最可能的8個上下文詞時,我們可以通過一次DNN前向傳播算法得到概率大小排前8的softmax概率對應(yīng)的神經(jīng)元所對應(yīng)的詞即可芥牌。

以上就是神經(jīng)網(wǎng)絡(luò)語言模型中如何用CBOW與Skip-Gram來訓練模型與得到詞向量的大概過程烦味。但是這和word2vec中用CBOW與Skip-Gram來訓練模型與得到詞向量的過程有很多的不同。

word2vec為什么不用現(xiàn)成的DNN模型壁拉,要繼續(xù)優(yōu)化出新方法呢谬俄?

最主要的問題是DNN模型的這個處理過程非常耗時。我們的詞匯表一般在百萬級別以上弃理,這意味著我們DNN的輸出層需要進行softmax計算各個詞的輸出概率的的計算量很大溃论。

有沒有簡化一點點的方法呢?

3 Word2vec優(yōu)化之霍夫曼樹

word2vec使用了CBOW與Skip-Gram來訓練模型與得到詞向量案铺,但是并沒有使用傳統(tǒng)的深度神經(jīng)網(wǎng)絡(luò)(DNN)模型蔬芥。最先優(yōu)化使用的數(shù)據(jù)結(jié)構(gòu)是用霍夫曼樹來代替隱藏層和輸出層的神經(jīng)元梆靖。霍夫曼樹的葉子節(jié)點起到輸出層神經(jīng)元的作用控汉,葉子節(jié)點的個數(shù)即為詞匯表的大小笔诵。 而內(nèi)部節(jié)點則起到隱藏層神經(jīng)元的作用

霍夫曼樹的建立其實并不難姑子,過程如下:

輸入:權(quán)值為(w1,w2,...wn)的n個節(jié)點

輸出:對應(yīng)的霍夫曼樹

? ? ? ? ? ? ? 1)將(w1,w2,...wn)看做是有n棵樹的森林乎婿,每個樹僅有一個節(jié)點。

    2)在森林中選擇根節(jié)點權(quán)值最小的兩棵樹進行合并街佑,得到一個新的樹谢翎,這兩顆樹分布作為新樹的左右子樹。新樹的根節(jié)點權(quán)重為左右子樹的根節(jié)點權(quán)重之和沐旨。

    3) 將之前的根節(jié)點權(quán)值最小的兩棵樹從森林刪除森逮,并把新樹加入森林

    4)重復步驟2)和3)直到森林里只有一棵樹為止磁携。

    下面我們用一個具體的例子來說明霍夫曼樹建立的過程褒侧,我們有(a,b,c,d,e,f)共6個節(jié)點,節(jié)點的權(quán)值分布是(16,4,8,6,20,3)谊迄。

    首先是最小的b和f合并闷供,得到的新樹根節(jié)點權(quán)重是7.此時森林里5棵樹,根節(jié)點權(quán)重分別是16,8,6,20,7统诺。此時根節(jié)點權(quán)重最小的6,7合并歪脏,得到新子樹,依次類推粮呢,最終得到下面的霍夫曼樹婿失。

那么霍夫曼樹有什么好處呢?

一般得到霍夫曼樹后我們會對葉子節(jié)點進行霍夫曼編碼啄寡,由于權(quán)重高的葉子節(jié)點越靠近根節(jié)點移怯,而權(quán)重低的葉子節(jié)點會遠離根節(jié)點,這樣我們的高權(quán)重節(jié)點編碼值較短这难,而低權(quán)重值編碼值較長舟误。這保證的樹的帶權(quán)路徑最短,也符合我們的信息論姻乓,即我們希望越常用的詞擁有更短的編碼嵌溢。如何編碼呢?一般對于一個霍夫曼樹的節(jié)點(根節(jié)點除外)蹋岩,可以約定左子樹編碼為0赖草,右子樹編碼為1.如上圖,則可以得到c的編碼是00剪个。

在word2vec中秧骑,約定編碼方式和上面的例子相反,即約定左子樹編碼為1,右子樹編碼為0乎折,同時約定左子樹的權(quán)重不小于右子樹的權(quán)重绒疗。?

4 Word2vec優(yōu)化之Hierarchical Softmax

使用神經(jīng)網(wǎng)絡(luò)的方法來得到詞向量語言模型的原理和一些問題,現(xiàn)在我們開始關(guān)注word2vec的語言模型如何改進傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)的方法骂澄。由于word2vec有兩種改進方法吓蘑,一種是基于Hierarchical Softmax的,另一種是基于Negative Sampling的坟冲。


5 Word2vec優(yōu)化之Negative Sampling

5.1 Hierarchical Softmax的缺點與改進

在講基于Negative Sampling的word2vec模型前磨镶,我們先看看Hierarchical Softmax的的缺點。的確健提,使用霍夫曼樹來代替?zhèn)鹘y(tǒng)的神經(jīng)網(wǎng)絡(luò)琳猫,可以提高模型訓練的效率。但是如果我們的訓練樣本里的中心詞w是一個很生僻的詞私痹,那么就得在霍夫曼樹中辛苦的向下走很久脐嫂。

能不能不用搞這么復雜的一顆霍夫曼樹,將模型變的更加簡單呢侄榴?

Negative Sampling就是這么一種求解word2vec模型的方法雹锣,它摒棄了霍夫曼樹,采用了Negative Sampling(負采樣)的方法來求解癞蚕,下面我們就來看看Negative Sampling的求解思路蕊爵。




5.2 基于Negative Sampling的模型概述

既然名字叫Negative Sampling(負采樣),那么肯定使用了采樣的方法桦山。采樣的方法有很多種攒射,比如大名鼎鼎的MCMC。我們這里的Negative Sampling采樣方法并沒有MCMC那么復雜恒水。

比如我們有一個訓練樣本会放,中心詞是w,它周圍上下文共有2c個詞,記為context(w)钉凌。由于這個中心詞w咧最,的確和context(w)相關(guān)存在,因此它是一個真實的正例御雕。通過Negative Sampling采樣矢沿,我們得到neg個和w不同的中心詞wi,i=1,2,..neg,這樣context(w)和$$w_i$就組成了neg個并不真實存在的負例酸纲。利用這一個正例和neg個負例捣鲸,我們進行二元邏輯回歸,得到負采樣對應(yīng)每個詞$w_i$對應(yīng)的模型參數(shù)$\theta_{i}$闽坡,和每個詞的詞向量栽惶。

    從上面的描述可以看出愁溜,Negative Sampling由于沒有采用霍夫曼樹,每次只是通過采樣neg個不同的中心詞做負例外厂,就可以訓練模型冕象,因此整個過程要比Hierarchical Softmax簡單。

    不過有兩個問題還需要弄明白:1)如果通過一個正例和neg個負例進行二元邏輯回歸呢酣衷? 2) 如何進行負采樣呢交惯?


參考

CS224n筆記2 詞的向量表示:word2vec: http://www.hankcs.com/nlp/word-vector-representations-word2vec.html

word2vec原理(一) CBOW與Skip-Gram模型基礎(chǔ): https://www.cnblogs.com/pinard/p/7160330.html?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末次泽,一起剝皮案震驚了整個濱河市穿仪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌意荤,老刑警劉巖啊片,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異玖像,居然都是意外死亡紫谷,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門捐寥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來笤昨,“玉大人,你說我怎么就攤上這事握恳÷髦希” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵乡洼,是天一觀的道長崇裁。 經(jīng)常有香客問我,道長束昵,這世上最難降的妖魔是什么拔稳? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮锹雏,結(jié)果婚禮上巴比,老公的妹妹穿的比我還像新娘。我一直安慰自己礁遵,他們只是感情好轻绞,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著榛丢,像睡著了一般铲球。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上晰赞,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天稼病,我揣著相機與錄音选侨,去河邊找鬼。 笑死然走,一個胖子當著我的面吹牛援制,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播芍瑞,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼晨仑,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拆檬?” 一聲冷哼從身側(cè)響起洪己,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎竟贯,沒想到半個月后答捕,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡屑那,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年拱镐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片持际。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡沃琅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蜘欲,到底是詐尸還是另有隱情益眉,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布芒填,位于F島的核電站呜叫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏殿衰。R本人自食惡果不足惜朱庆,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望闷祥。 院中可真熱鬧娱颊,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至剧罩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間座泳,已是汗流浹背惠昔。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工幕与, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人镇防。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓啦鸣,卻偏偏與公主長得像,于是被迫代替她去往敵國和親来氧。 傳聞我的和親對象是個殘疾皇子诫给,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

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

  • NLP(Natural Language Processing),也就是人們常說的「自然語言處理」啦扬,就是研究如何讓...
    知識學者閱讀 1,300評論 0 1
  • 我們都知道中狂,牛頓說過一句名言 If I have seen further, it is by standing ...
    weizier閱讀 8,386評論 5 25
  • 前面的文章主要從理論的角度介紹了自然語言人機對話系統(tǒng)所可能涉及到的多個領(lǐng)域的經(jīng)典模型和基礎(chǔ)知識。這篇文章考传,甚至之后...
    我偏笑_NSNirvana閱讀 13,928評論 2 64
  • 稍微有過一點兒組織經(jīng)驗的人都知道僚楞,遇見事兒,最怕想法和要求是“隨便”兩個字枉层。條條框框的把她或者他所有的要求泉褐、命...
    墨涵Cynthia閱讀 664評論 0 3
  • 人脈不是說你認識就可以用,人脈的真正價值在于鸟蜡,有人想干什么的時候膜赃,能迅速找到專業(yè)的人幫他去干,而且還便宜靠譜揉忘。(P...
    嗨丨小丑閱讀 254評論 0 4