Word2Vec知識總結

2021-09-05 12:15:52 字數 3481 閱讀 5580

word2vec是乙個產生詞向量的模型,是乙個雙層的神經網路 。非常善於找出詞彙的相似度,同時可用於處理之前的技術(像one-hot編碼和wordnet)處理不了的語義關係。它可以利用神經網路從大量的無標註的文字中提取有用資訊。我們也可以將它看成是乙個工具,它裡面包含了三種重要的模型:

(1)nnlm (神經網路語言模型)

(2)c&w

(3)cbow和skip-gram

其中cbow(跳妖式模型)和sikp-gram(連續式模型)尤為重要 它們用於神經網路語言模型

cbow模型的訓練輸入是某乙個特徵詞的上下文相關的詞對應的詞向量,而輸出就是這特定的乙個詞的詞向量。比如下面這段話,我們的上下文大小取值為4,特定的這個詞是"learning",也就是我們需要的輸出詞向量,上下文對應的詞有8個,前後各4個,這8個詞是我們模型的輸入。由於cbow使用的是詞袋模型,因此這8個詞都是平等的,也就是不考慮他們和我們關注的詞之間的距離大小,只要在我們上下文之內即可。

這樣我們這個cbow的例子裡,我們的輸入是8個詞向量,輸出是所有詞的softmax概率(訓練的目標是期望訓練樣本特定詞對應的softmax概率最大),對應的cbow神經網路模型輸入層有8個神經元,輸出層有詞彙表大小個神經元。隱藏層的神經元個數我們可以自己指定。通過dnn的反向傳播演算法,我們可以求出dnn模型的引數,同時得到所有的詞對應的詞向量。這樣當我們有新的需求,要求出某8個詞對應的最可能的輸出中心詞時,我們可以通過一次dnn前向傳播演算法並通過softmax啟用函式找到概率最大的詞對應的神經元即可。

skip-gram模型和cbow的思路是反著來的,即輸入是特定的乙個詞的詞向量,而輸出是特定詞對應的上下文詞向量。還是上面的例子,我們的上下文大小取值為4, 特定的這個詞"learning"是我們的輸入,而這8個上下文詞是我們的輸出。

cbow和sikp-gram都沒有隱藏層

兩種高效的訓練方法:(解決過擬合,優化訓練)

(1)負取樣

它是用來提高訓練速度並且改善所得到詞向量的質量的一種方法。不同於原本每個訓練樣本更新所有的權重,負取樣每次讓乙個訓練樣本僅僅更新一小部分的權重,這樣就會降低梯度下降過程中的計算量。

(2)層次softmax

word2vec的擴充套件:

word2vec中有三種向量

(1)glove                全域性向量

(2)para2vec           段向量

(3)doc2vec            文字向量

glove(全域性變數):

是乙個無監督學習的方法,用來生成每個詞的向量表示。訓練基於乙個聚合的詞詞共現矩陣和預料中的其它統計資料。

glove使用余弦相似度或是歐氏距離來衡量詞與詞之間的相似度,它的好處是對語料中低頻出現的詞也能很好的學習到

詞聚類的資訊。

para2vec(段向量):

段向量是乙個無監督學習演算法使用定長的向量來表示段落,也使用神經網路學習,很多地方和word2vec相似,通過三個

上下文詞,輸入到神經網路中去,然後**第四個詞,我們最大化對數概率,**任務是乙個多分類的分類,所以這裡

分類函式用的是softmax。

注意:

上下文環境是定長的,是通過在段落是取滑動視窗得到的。統一段落上的上下文環境的段落向量是共享的。但不能誇段落共享

優勢:

可以使用無標籤的資料**詞,所以適合在無足夠標籤的資料集上使用

doc2vec(文字向量):

為了充分利用文字語序資訊,有學者在word2vec的基礎上提出裡文字向量化(doc2vec),它能學習文字類別和字之間的關係,而不是詞與詞之間的關係,他能夠方便的解決文件分類的問題

存在兩個模型:

(1)dm

(2)dbow

他們分別對應著word2vec中的cbow和skip-gram模型

與cmow模型相似dm模型試圖**給定上下文某個單詞的出現的概率,不同的是dm的上下文不僅包含上下文的單詞,還包含相應的段落。db

dbow則僅在給定段落向量的情況下**段落中一組隨機單詞的概率與skip-gram中給定的乙個詞語來**目標詞概率分布相似

霍夫曼樹:

word2vec也使用了cbow與skip-gram來訓練模型與得到詞向量,但是並沒有使用傳統的dnn模型。最先優化使用的資料結構是用霍夫曼樹來代替隱藏層和輸出層的神經元,霍夫曼樹的葉子節點起到輸出層神經元的作用,葉子節點的個數即為詞彙表的小大。 而內部節點則起到隱藏層神經元的作用。

具體如何用霍夫曼樹來進行cbow和skip-gram的訓練我們在下一節講,這裡我們先複習下霍夫曼樹。

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

輸入:權值為(w1,w2,...wn)

的n個節點

輸出:對應的霍夫曼樹

1)將(w1,w2,...wn)

看做是有n

棵樹的森林,每個樹僅有乙個節點。

2)在森林中選擇根節點權值最小的兩棵樹進行合併,得到乙個新的樹,這兩顆樹分布作為新樹的左右子樹。新樹的根節點權重為左右子樹的根節點權重之和。

3) 將之前的根節點權值最小的兩棵樹從森林刪除,並把新樹加入森林。

4)重複步驟2)和3)直到森林裡只有一棵樹為止。

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

首先是最小的b和f合併,得到的新樹根節點權重是7.此時森林裡5棵樹,根節點權重分別是16,8,6,20,7。此時根節點權重最小的6,7合併,得到新子樹,依次類推,最終得到下面的霍夫曼樹。

那麼霍夫曼樹有什麼好處呢?一般得到霍夫曼樹後我們會對葉子節點進行霍夫曼編碼,由於權重高的葉子節點越靠近根節點,而權重低的葉子節點會遠離根節點,這樣我們的高權重節點編碼值較短,而低權重值編碼值較長。這保證的樹的帶權路徑最短,也符合我們的資訊理論,即我們希望越常用的詞擁有更短的編碼。如何編碼呢?一般對於乙個霍夫曼樹的節點(根節點除外),可以約定左子樹編碼為0,右子樹編碼為1.如上圖,則可以得到c的編碼是00。

在word2vec中,約定編碼方式和上面的例子相反,即約定左子樹編碼為1,右子樹編碼為0,同時約定左子樹的權重不小於右子樹的權重。

word2vec的應用:

像文字分類、情感分析等nlp應用,都可以使用word2vec技術,尤其是文字分類任務中,由於word2vec能夠保留語義資訊,會很好的提高分類效果。

如果你用k-means來做文字分類任務,希望捕獲文件中的語義資訊來幫助分類,我們就可以使用word2vec

如果你想搭建乙個問答系統希望在語義層面對資訊進行區分,我們就可以用word2vec

與word2vec 原來word2vec那麼簡單

說到word2vec,它可謂非結構化資料裡面的佼佼者,尤其是在推薦和nlp當中,足以體現它的優勢所在,並且多年一直備受工業界喜愛.那麼word2vec到底是怎麼個原理的,發現身邊總是有很多人問,確不能準確的說出為什麼是兩個矩陣,到底是怎麼自動反向傳播的,以及對於softmax之後那麼大的維度資料,是...

word2vec實驗經驗總結

最近進行的專案,前期要求利用word2vec做相關的向量化處理,於是作為小白從頭開始學習word2vec的基本原理,然後開始實驗練手。在這裡po一些學習和實驗過程中的資料 注意點和經驗點。基本原理篇 原理上讀了mikolov 2013年的 efficient estimation of word r...

word2vec學習參考

最近看nlp的東西比較多。就拿現在google 基於神經網路做的 word2vec 作為部落格的開始吧,今後會陸陸續續補充內容。基本是分4塊內容 1.神經網路語言模型 2.語言模型分層優化 3.word2vec 原理 4.google word2vec 看一點寫一點,先扔些參考資料鏈接上去。附上在研...