Word Embedding總結(jié)
1. 前言
word representation有兩種方式
傳統(tǒng)方法Knowledge-based representation
詞的離散表示corpus-based representation
詞的分布式表達(dá)word embedding
1.1 Knowledge-based representation
- 簡(jiǎn)介
Knowledge-based representation根據(jù)語(yǔ)言學(xué)家們制定的 WordNet 累颂,其中包含了字與字之間的關(guān)聯(lián)髓抑。來(lái)對(duì)文字進(jìn)行表示霞溪。
- 調(diào)用方法
from nltk.corpus import wordnet
-
局限性
文字會(huì)不斷地發(fā)展
主觀(guān)性較強(qiáng),不同的人之間有不同的理解
工作量比較大
字與字之間的相似性很難定義
1.2 Corpus-based representation
1.2.1 Atomic symbols: one-hot representation
-
定義
One-Hot編碼浩习,又稱(chēng)為一位有效編碼,獨(dú)熱編碼,將所有需計(jì)算的文字組成一個(gè)向量默赂,給出一個(gè)文字,它在向量中的位置標(biāo)為1蛾娶,其余都為0灯谣。
-
限制
無(wú)法捕捉兩個(gè)word之間的關(guān)系,也就是沒(méi)有辦法捕捉語(yǔ)義信息
例如:car和motorcycle蛔琅,無(wú)論怎樣計(jì)算相似度都為0胎许。
期望:用另一種方式捕捉真正有關(guān)字義的部分。
-
方法:當(dāng)car與motorcycle以及它們相鄰的單詞(neighbor)存在某些關(guān)系時(shí)罗售,可以認(rèn)為這兩個(gè)單詞之間具有相關(guān)性辜窑。即Neighbors,如何確定neighbor的范圍呢寨躁?
方式1穆碎,full document 。full document可以認(rèn)為在同一篇文章中出現(xiàn)過(guò)职恳,文章中的文字之間可以根據(jù)文章確定一個(gè)相關(guān)的主題所禀。
方式2,windows 放钦。windows限定在某個(gè)窗口內(nèi)色徘,可以是幾句話(huà)或者幾個(gè)單詞之內(nèi)范圍,這種方式可以獲得詞性等信息操禀。
1.2.2 High-dimensional sparse word vector
-
思想
基于neighbour褂策,設(shè)置Co-occurrence Matrix共現(xiàn)矩陣
-
限制
隨著文章字?jǐn)?shù)增加矩陣的大小也會(huì)迅速增加;
計(jì)算量會(huì)迅速增加床蜘。之前one-hot形式辙培,由于只有一列存在非0數(shù)字,所以維度即使再大邢锯,計(jì)算量也不會(huì)增加太多扬蕊。而現(xiàn)在則不同,每列都有可能有數(shù)個(gè)非0數(shù)字丹擎;
大部分的有效信息尾抑,集中在少數(shù)區(qū)域。沒(méi)有有效地“散開(kāi)”蒂培,所以robustness會(huì)比較差
當(dāng)增加一個(gè)word的時(shí)候整個(gè)矩陣都要更新
-
期望
找到一個(gè)低維向量
1.2.3 Low-dimensional sparse word vector
-
思想
降維dimension reduction再愈,例如通過(guò)SVD等,從k維降為r維
-
限制
計(jì)算量比較大
新增文字后护戳,需要重建矩陣并重新計(jì)算矩陣和降維
-
期望
- 直接學(xué)習(xí)出低維向量翎冲,而不是從資料中學(xué)習(xí)到高維矩陣再進(jìn)行降維
1.2.4 Word Embedding
- 思想
directly learn low-dimensional word vectors
-
兩種方法
-
word2vec (Mikolov et al. 2013)
skip-gram
CBOW
Glove (Pennington et al., 2014)
-
-
優(yōu)點(diǎn)
任意兩個(gè)詞語(yǔ)之間的相似性很容易計(jì)算
可以使用在任何NLP監(jiān)督任務(wù)上作為input,vector包含了語(yǔ)義信息
可以利用NN通過(guò)訓(xùn)練更新word representation(word embedding不是固定的媳荒,可以根據(jù)task微調(diào))
2. Word2Vec
CBOW和Skip-Gram是著名的詞嵌入工具word2vec中包含的兩種模型抗悍,與標(biāo)準(zhǔn)語(yǔ)言模型不同驹饺,在上下文?可以同時(shí)取左右兩邊的?n個(gè)字,而標(biāo)準(zhǔn)語(yǔ)言模型中認(rèn)為缴渊,當(dāng)前詞語(yǔ)?僅僅依賴(lài)于前文?
2.1 Skip-Gram Model
-
目標(biāo)
給定一個(gè)單詞
?赏壹,預(yù)測(cè)出詞匯表中每個(gè)詞在其上下文中的概率。也就是給定一個(gè)word衔沼,推算出其周?chē)膚ord的能力蝌借。
?是target word,
?是指定窗口大小C ?范圍內(nèi)的其他 word指蚁。 例如上圖中菩佑,?
其實(shí)就代表
? ,窗口大小 C? 為m ? 凝化。?
?擎鸠,共?2m個(gè)。
在指定的 word 條件下缘圈,指定窗口內(nèi)其他 word 發(fā)生的概率計(jì)算公式如下:
根據(jù)最大似然估計(jì)劣光,應(yīng)該使得上面的概率結(jié)果最大。對(duì)上面公式進(jìn)行取 ? 后添加負(fù)號(hào)糟把,得到損失函數(shù)的表示公式绢涡,目標(biāo)使損失函數(shù)最小。
其中遣疯,
?數(shù)值越大雄可,越相關(guān),對(duì)于同一個(gè)word當(dāng)他是target word的時(shí)候和他是context word時(shí)表示不一樣缠犀。模型圖如下:
-
模型結(jié)構(gòu)
模型的結(jié)構(gòu)很簡(jiǎn)單数苫,如上圖,是一個(gè)只有一個(gè)隱藏層的神經(jīng)網(wǎng)絡(luò)辨液。由于要得到輸入的每個(gè)word 出現(xiàn)的概率虐急,所以輸入層與輸出層神經(jīng)元數(shù)需一致。下圖中滔迈,輸入 ? x和輸出層s?數(shù)量為10000止吁,隱藏層 h 神經(jīng)元數(shù)為300。
如果對(duì)隱藏層權(quán)重? W轉(zhuǎn)換思想燎悍,(注意轉(zhuǎn)換的僅僅是我們的思想敬惦,實(shí)際上沒(méi)有對(duì)隱藏層做任何改變)。 上面的例子中谈山,輸入的 ?x 是10000行俄删,后面的隱藏層共300個(gè)神經(jīng)元,所以W ? 是 10000×300 的矩陣。 實(shí)際?
計(jì)算的過(guò)程畴椰,思想其實(shí)是像下圖左中的樣子举哟,W? 每一列與
? 對(duì)應(yīng)相乘后再相加。如何將想法轉(zhuǎn)換成下圖右中的模式呢迅矛?請(qǐng)看接下來(lái)的例子。
由于?x是one-hot轉(zhuǎn)換后的潜叛,所以在指定的word上是1秽褒,其余都是0。這樣的話(huà)威兜,經(jīng)過(guò)計(jì)算后销斟,實(shí)際的結(jié)果中是把 ?W 相應(yīng)的一行數(shù)據(jù)給完整保留下來(lái)了,其余的都乘以0后都沒(méi)了椒舵,具體見(jiàn)下圖蚂踊。所以,也可以從行的角度看 W?笔宿。
綜上所述犁钟,?h 的計(jì)算結(jié)果,其實(shí)也就是從 ?W中抽取出來(lái)相乘不為0的一行當(dāng)成結(jié)果泼橘,可以用向量?表示涝动。
上面說(shuō)了隱藏層 ?h,接下來(lái)分析輸出層s? 炬灭。從 h? 到? s之間的系數(shù)為W' ? 醋粟。 上面說(shuō)道? s輸出層共10000個(gè)神經(jīng)元,每個(gè)神經(jīng)元的計(jì)算方法如下:
得到 ? s_j后重归,還需要做最后的轉(zhuǎn)換才是最終輸出的結(jié)果米愿。轉(zhuǎn)換公式如下,這也是一般多分類(lèi) softmax 的計(jì)算方法鼻吮。
下圖就上對(duì)上面所講的育苟,從隱藏層到最后輸出概率的一個(gè)總結(jié)。? h與W' ?的計(jì)算結(jié)果椎木,經(jīng)過(guò)公式轉(zhuǎn)換得到最后每個(gè) word 的概率宙搬。
如果把計(jì)算過(guò)程放在整體上看,如下圖拓哺。
-
損失函數(shù)和梯度下降前文有講到勇垛,給定一個(gè)target word,Loss Function是:
使用梯度下降的方法對(duì)損失函數(shù)進(jìn)行優(yōu)化士鸥。從右向左闲孤,首先看W'? 這邊。
整理后得到如下公式。
然后是? W這邊讼积,
整理后得到肥照。把公式進(jìn)行簡(jiǎn)化,簡(jiǎn)化之后得到下圖中紅色部分的公式勤众。
其中? j是 輸入X ? 中 words總數(shù)量舆绎。從上面的公式中可以看出來(lái),計(jì)算量和j ?相關(guān)们颜。當(dāng) ?j 比較大的時(shí)候吕朵,計(jì)算量會(huì)非常大。
為了解決計(jì)算的問(wèn)題窥突,有兩種常用的方法:層次化softmax(hierarchical softmax )和 負(fù)采樣(negative sampling) 努溃。常用的是后者。
-
層次化softmax
?
-
負(fù)采樣
抽樣是更為常用的減少計(jì)算量的方法阻问∥嗨埃可以有效的減少計(jì)算量拂蝎,而且表現(xiàn)效果并不會(huì)下降太多萨赁。因?yàn)槭请S機(jī)選取观腊,每個(gè)被選取到的概率相同终佛。不停的迭代后隘世,可以有效地得到結(jié)果显熏。
一些不常出現(xiàn)的word有時(shí)有著一定作用餐蔬,但在隨機(jī)抽樣中急但,卻很難被抽到坛善。所以有時(shí)就需要增加低頻詞匯出現(xiàn)的概率晾蜘。
下面這個(gè)方法是一個(gè)比較好的經(jīng)驗(yàn)。將每個(gè)word出現(xiàn)概率加上3/4 ?的指數(shù)眠屎。比如“is”出現(xiàn)的概率為0.9剔交,那么進(jìn)行?次方處理后變成了0.92 ,漲了一點(diǎn)改衩。但是看下面的“bombastic”出現(xiàn)概率原來(lái)是0.01岖常,處理后變成了0.032,概率漲了3倍多葫督〗甙埃可以看出,小概率經(jīng)過(guò)處理后增加的比大概率的要高得多橄镜。通過(guò)這種方法偎快,可以有效地處理小概率時(shí)間很難被抽到的問(wèn)題。
2.2 Word2Vec Variants
Word2Vec 還有一些其他的方式洽胶,比如CBOW晒夹、LM 。具體方法請(qǐng)看下圖,其實(shí)LM是最早被提出來(lái)的丐怯,而Skip-gram是不斷完善后的樣子喷好,所以現(xiàn)在Skip-gram應(yīng)用是最廣泛的。CBOW和Skip-gram正好相反读跷,Skip-gram是給定一個(gè)word梗搅,預(yù)測(cè)窗口內(nèi)其他words,而CBOW是給定窗口內(nèi)其他words的概率效览,預(yù)測(cè)指定word无切。
2.3 方法比較
這里主要是count-based和Direct-prediction之間的比較,之前并沒(méi)有把所有的方法都講到钦铺。 首先說(shuō)一下,count-based肢预,顧名思義矛洞,這個(gè)主要是通過(guò)統(tǒng)計(jì)學(xué)的方法進(jìn)行計(jì)算,這種計(jì)算是比較快的烫映。但是得到的結(jié)果也只是 “words之間是否同時(shí)出現(xiàn)”沼本、“word出現(xiàn)頻率” 等信息,無(wú)法得到word之間更復(fù)雜的關(guān)系锭沟。 Direct-prediction是通過(guò)神經(jīng)網(wǎng)絡(luò)方法去自動(dòng)的估計(jì)結(jié)果抽兆。可以考慮到word之間語(yǔ)義相關(guān)的更復(fù)雜的關(guān)系族淮。但是辫红,并沒(méi)有應(yīng)用上統(tǒng)計(jì)學(xué)的信息,在統(tǒng)計(jì)信息上面有所欠缺祝辣。
- Glove方法既利用了統(tǒng)計(jì)的資訊贴妻,還利用了神經(jīng)網(wǎng)絡(luò),在一些數(shù)據(jù)量比較小的任務(wù)上表現(xiàn)很好蝙斜。
3.Glove
co-occurrence probability名惩,意思是一個(gè)word ?
也出現(xiàn)的概率孕荠。公式如下娩鹉,其中 ?X表示出現(xiàn)的次數(shù)。
? 與
? 弯予,將這兩個(gè)結(jié)果相除
? ,就得到了ratio个曙。通過(guò)下面的例子可以看出熙涤,這個(gè)公式結(jié)果具有一些明顯的規(guī)律。當(dāng)
含義比較接近時(shí),他們的ratio就接近1祠挫。當(dāng)含義不接近時(shí)那槽,ratio就會(huì)較大或較小。
與
? 之間的關(guān)系等舔,可以通過(guò)它們共有的另一個(gè)word
?骚灸,經(jīng)過(guò)計(jì)算得到ratio值,從而判斷 ? w_i與w_j ? 之間的關(guān)聯(lián)慌植。
? 。 將它們轉(zhuǎn)化成向量表示
?蝶柿。
如果 w_i? 與 w_j ? 比較接近丈钙,則結(jié)果趨向于1,否則會(huì)偏大或者偏小交汤,正好可以通過(guò)exp ?的公式可以進(jìn)行轉(zhuǎn)換雏赦。
當(dāng)成一個(gè)常數(shù)項(xiàng)星岗,整理進(jìn)公式。同樣也給 w_j ?添加一個(gè)常數(shù)項(xiàng)戒洼。
整理后的損失函數(shù)中還添加了? 俏橘,就相當(dāng)與把統(tǒng)計(jì)相關(guān)的數(shù)據(jù)也添加進(jìn)來(lái)進(jìn)行優(yōu)化。在比較小的數(shù)據(jù)集中圈浇,也有較好的表現(xiàn)效果寥掐。
Word Vector Evaluation
上面講了word vector構(gòu)建的方法,接下來(lái)說(shuō)一下word vector的評(píng)估方法磷蜀。
Intrinsic Evaluation 內(nèi)在
Word Analogies 類(lèi)比
首先是單詞類(lèi)比曹仗,給定兩個(gè)相關(guān)的words “A”和“B”,例如“man”“woman”蠕搜。是否能推測(cè)出“king”對(duì)應(yīng)的是“queen”怎茫? 或者給出“king”與其復(fù)數(shù)“kings”,是否能推測(cè)出“queen”對(duì)應(yīng)的“queens”妓灌。類(lèi)比可以分成語(yǔ)義上的和語(yǔ)法上的祥山。
首先語(yǔ)義上的, 這種方法存在一些問(wèn)題: \1. 同一個(gè)word在不同句子中可能有不同的意思掉伏; \2. 隨著時(shí)間的改變缝呕,word含義有可能會(huì)改變澳窑。
在語(yǔ)法上,主要是同一個(gè)單詞的不同形式轉(zhuǎn)換供常。
Word Correlation 關(guān)聯(lián)
主要是由人標(biāo)記出來(lái)的關(guān)系得分摊聋,這種方法其實(shí)也存在一些模糊不清的可能。Extrinsic Evaluation 外在
Subsequent Task
之前的評(píng)估是直接對(duì)word進(jìn)行的栈暇,Extrinsic 是指不直接進(jìn)行評(píng)估麻裁,而是通過(guò)后面的task看看結(jié)果,從而對(duì)其進(jìn)行判斷源祈。 這樣做有一些優(yōu)點(diǎn)煎源,首先,可以將兩個(gè)看似不相干但實(shí)際有關(guān)聯(lián)的word聯(lián)系起來(lái)香缺,比如地區(qū)名稱(chēng)手销。還有可以得到words合并后的信息,比如在情感分析方面的應(yīng)用图张。Softmax & Cross-Entropy
Softmax
之前有簡(jiǎn)單講過(guò)使用softmax進(jìn)行轉(zhuǎn)換锋拖,這里又詳細(xì)講解了softmax的定義。 權(quán)重? ?W_y與 x 相乘后得到 f_y? 埂淮,經(jīng)過(guò)exp ? 轉(zhuǎn)換成 exp(f_y)?姑隅。所有的 ?y 都經(jīng)過(guò)這種轉(zhuǎn)換后求和写隶,最后將每個(gè)exp(f_y) ? 除以總和得到最終的結(jié)果倔撞。?痪蝇。 真實(shí)結(jié)果是f_i? ,當(dāng)預(yù)測(cè)結(jié)果f_j ? 不正確時(shí)冕房,f_i? 此時(shí)會(huì)小于 第二項(xiàng)躏啰。我們的目的是使得
最小,所以會(huì)不斷地優(yōu)化耙册,直到找出結(jié)果正確時(shí)的參數(shù)给僵。
Cross-Entropy 交叉熵
交叉熵用來(lái)定義目標(biāo)與預(yù)測(cè)結(jié)果的概率分布的差異。其中?p 就是one-hot-encode表示的target word详拙,而 ? q 是預(yù)測(cè)的概率分布帝际。如果 H(p,q)? 結(jié)果越大,說(shuō)明兩者差異越大饶辙;反之蹲诀,結(jié)果越小,說(shuō)明差異越小弃揽。總結(jié)
代碼參考:
https://github.com/tensorflow/tensorflow/tree/r0.11/tensorflow/models/embedding