1. 程式人生 > >詞嵌入 word embedding

詞嵌入 word embedding

原文連結:https://blog.csdn.net/ch1209498273/article/details/78323478 

詞嵌入(word embedding)是一種詞的型別表示,具有相似意義的詞具有相似的表示,是將詞彙對映到實數向量的方法總稱。詞嵌入是自然語言處理的重要突破之一。


什麼是詞嵌入?

詞嵌入實際上是一類技術,單個詞在預定義的向量空間中被表示為實數向量,每個單詞都對映到一個向量。舉個例子,比如在一個文字中包含“貓”“狗”“愛情”等若干單詞,而這若干單詞對映到向量空間中,“貓”對應的向量為(0.1 0.2 0.3),“狗”對應的向量為(0.2 0.2 0.4),“愛情”對應的對映為(-0.4 -0.5 -0.2)(本資料僅為示意)。像這種將文字X{x1,x2,x3,x4,x5……xn}對映到多維向量空間Y{y1,y2,y3,y4,y5……yn },這個對映的過程就叫做詞嵌入。

之所以希望把每個單詞都變成一個向量,目的還是為了方便計算,比如“貓”,“狗”,“愛情”三個詞。對於我們人而言,我們可以知道“貓”和“狗”表示的都是動物,而“愛情”是表示的一種情感,但是對於機器而言,這三個詞都是用0,1表示成二進位制的字串而已,無法對其進行計算。而通過詞嵌入這種方式將單詞轉變為詞向量,機器便可對單詞進行計算,通過計算不同詞向量之間夾角餘弦值cosine而得出單詞之間的相似性。

此外,詞嵌入還可以做類比,比如:v(“國王”)-v(“男人”)+v(“女人”)≈v(“女王”),v(“中國”)+v(“首都”)≈v(“北京”),當然還可以進行演算法推理。有了這些運算,機器也可以像人一樣“理解”詞彙的意思了。


詞嵌入主要演算法

那麼如何進行詞嵌入呢?目前主要有三種演算法:

Embedding Layer

由於缺乏更好的名稱,Embedding Layer是與特定自然語言處理上的神經網路模型聯合學習的單詞嵌入。該嵌入方法將清理好的文字中的單詞進行one hot編碼(熱編碼),向量空間的大小或維度被指定為模型的一部分,例如50、100或300維。向量以小的隨機數進行初始化。Embedding Layer用於神經網路的前端,並採用反向傳播演算法進行監督。

被編碼過的詞對映成詞向量,如果使用多層感知器模型MLP,則在將詞向量輸入到模型之前被級聯。如果使用迴圈神經網路RNN,則可以將每個單詞作為序列中的一個輸入。

這種學習嵌入層的方法需要大量的培訓資料,可能很慢,但是可以學習訓練出既針對特定文字資料又針對NLP的嵌入模型。

Word2Vec(Word to Vector)/ Doc2Vec(Document to Vector)

Word2Vec是由Tomas Mikolov 等人在《Efficient Estimation of Word Representation in Vector Space》一文中提出,是一種用於有效學習從文字語料庫嵌入的獨立詞語的統計方法。其核心思想就是基於上下文,先用向量代表各個詞,然後通過一個預測目標函式學習這些向量的引數。Word2Vec 的網路主體是一種單隱層前饋神經網路,網路的輸入和輸出均為詞向量,其主要訓練的是圖中的紅圈部分。

該演算法給出了兩種訓練模型,CBOW (Continuous Bag-of-Words Model) 和 Skip-gram (Continuous Skip-gram Model)。CBOW將一個詞所在的上下文中的詞作為輸入,而那個詞本身作為輸出,也就是說,看到一個上下文,希望大概能猜出這個詞和它的意思。通過在一個大的語料庫訓練,得到一個從輸入層到隱含層的權重模型;而Skip-gram它的做法是,將一個詞所在的上下文中的詞作為輸出,而那個詞本身作為輸入,也就是說,給出一個詞,希望預測可能出現的上下文的詞,2-gram比較常用。

通過在一個大的語料庫訓練,得到一個從輸入層到隱含層的權重模型。給定xx預測xxx的模型的輸入都是詞的向量,然後通過中間各種深度學習DL的CNN或RNN模型預測下一個詞的概率。通過優化目標函式,最後得到這些詞彙向量的值。Word2Vec雖然取得了很好的效果,但模型上仍然存在明顯的缺陷,比如沒有考慮詞序,再比如沒有考慮全域性的統計資訊。

Doc2Vec與Word2Vec的CBOW模型類似,也是基於上下文訓練詞向量,不同的是,Word2Vec只是簡單地將一個單詞轉換為一個向量,而Doc2Vec不僅可以做到這一點,還可以將一個句子或是一個段落中的所有單詞彙成一個向量,為了做到這一點,它只是將一個句子標籤視為一個特殊的詞,並且在這個特殊的詞上做了一些處理,因此,這個特殊的詞是一個句子的標籤。如圖所示,詞向量作為矩陣W中的列被捕獲,而段落向量作為矩陣D中的列被捕獲。

GloVe(Global Vectors for Word Representation)

GloVe是Pennington等人開發的用於有效學習詞向量的演算法,結合了LSA矩陣分解技術的全域性統計與word2vec中的基於區域性語境學習。

LSA全稱Latent semantic analysis,中文意思是隱含語義分析,LSA算是主體模型topic model的一種,對於LSA的直觀認識就是文章裡有詞語,而詞語是由不同的主題生成的,比如一篇文章包含詞語:計算機,另一篇文章包含詞語:電腦,在一般的向量空間來看,這兩篇文章不相關,但是在LSA看來,這兩個詞屬於同一個主題,所以兩篇文章也是相關的。該模型不依賴本地上下文,是對全域性字詞同現矩陣的非零項進行訓練,其中列出了給定語料庫中單詞在彼此間共同出現的頻率。

從本質上說,GloVe是具有加權最小二乘法目標的對數雙線性模型。字詞共現概率的比率又編碼成某種形式的潛在可能意義。例如,以下是基於60億詞彙語料庫的各種關於冰和蒸汽的詞的共現概率:

如上表所示,“ice(冰)”與“solid(固體)”共現的可能性比“gas(氣體)”大,“steam(蒸汽)”與“gas(氣體)”共現的可能性比“solid(固體)”大,從而很輕易地可以區別出二者區別。而“ice(冰)”和“steam(蒸汽)”都與“water(水)”的共現概率較大,都與“fashion(時尚)”共現概率很小,因此無法區別“ice”和“steam”。只有在可能性的比率中(圖表第三行),才會將像“water”和“fashion”這樣的非區別性詞彙(non-discriminative)的噪音相抵消,可能性比率越大(遠大於1)的詞與“ice”特性相關聯,可能性比率越小(遠小於1)則與“steam”的特性相關聯。以這種方式,可能性比率編碼了許多粗略形式的意義,這些意義與熱力學相位的抽象概念相關聯。

GloVe的訓練目標是學習詞向量,使得它們的點積等於“共現概率”的對數,由於比率的對數等於對數差,這個目標將共現概率的比率與詞向量空間中的向量相關聯,由於這些比率可以編碼某種形式的意義,所以該資訊也被編碼為向量差異。所以所得到的詞向量在單詞類比任務上執行的很好。