1. 程式人生 > >word2vec 和 doc2vec 詞向量表示

word2vec 和 doc2vec 詞向量表示

ron 中心 con 線性 如果 存在 但是 標簽 word

Word2Vec 詞向量的稠密表達形式(無標簽語料庫訓練)

Word2vec中要到兩個重要的模型,CBOW連續詞袋模型和Skip-gram模型。兩個模型都包含三層:輸入層,投影層,輸出層。

1.Skip-Gram神經網絡模型(跳過一些詞)

skip-gram模型的輸入是一個單詞wI,它的輸出是wI的上下文wO,1,...,wO,C,上下文的窗口大小為C。舉個例子,這裏有個句子“I drive my car to the store”。我們如果把”car”作為訓練輸入數據,單詞組{“I”, “drive”, “my”, “to”, “the”, “store”}就是輸出。所有這些單詞,我們會進行one-hot編碼

2.連續詞袋模型(Continuos Bag-of-words model)

CBOW模型是在已知當前詞w(t)的上下文w(t-2),w(t-1),w(t+1),w(t+2)的前提下預測當前詞w(t)

Hierarchical Softmax 實現加速。

3.傳統的神經網絡詞向量語言模型DNN,裏面一般有三層,輸入層(詞向量),隱藏層和輸出層(softmax層:要計算詞匯表中所有詞softmax概率)。裏面最大的問題在於從隱藏層到輸出的softmax層的計算量很大,因為要計算所有詞的softmax概率,再去找概率最大的值。word2vec也使用了CBOW與Skip-Gram來訓練模型與得到詞向量,但是並沒有使用傳統的DNN模型。最先優化使用的數據結構是用霍夫曼樹來代替隱藏層和輸出層的神經元,霍夫曼樹的葉子節點起到輸出層神經元的作用,葉子節點的個數即為詞匯表的小大。 而內部節點則起到隱藏層神經元的作用

體如何用霍夫曼樹來進行CBOW和Skip-Gram的訓練我們在下一節講,這裏我們先復習下霍夫曼樹。

霍夫曼樹的建立其實並不難,過程如下:(節點權重可看作詞頻)

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

    輸出:對應的霍夫曼樹

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

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

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

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

4. word2vec對這個模型做了改進,首先,對於從輸入層到隱藏層的映射,沒有采取神經網絡的線性變換加激活函數的方法,而是采用簡單的對所有輸入詞向量求和並取平均的方法。比如輸入的是三個4維詞向量:(1,2,3,4),(9,6,11,8),(5,10,7,12),那麽我們word2vec映射後的詞向量就是(5,6,7,8)。由於這裏是從多個詞向量變成了一個詞向量。

第二個改進就是從隱藏層到輸出的softmax層這裏的計算量個改進。為了避免要計算所有詞的softmax概率,word2vec采用了霍夫曼樹來代替從隱藏層到輸出softmax層的映射。我們在上一節已經介紹了霍夫曼樹的原理。如何映射呢?這裏就是理解word2vec的關鍵所在了。

基霍夫曼樹實現了Hierarchical Softmax的模型計算。(霍夫曼樹采用詞匯表構建,最小節點開始生成根)

5. 基於Hierarchical Softmax的Skip-Gram模型

  現在我們先看看基於Skip-Gram模型時, Hierarchical Softmax如何使用。此時輸入的只有一個詞w,輸出的為2c個詞向量context(w)。

我們對於訓練樣本中的每一個詞,該詞本身作為樣本的輸入, 其前面的c個詞和後面的c個詞作為了Skip-Gram模型的輸出,,期望這些詞的softmax概率比其他的詞大。

Hierarchical Softmax的的缺點。的確,使用霍夫曼樹來代替傳統的神經網絡,可以提高模型訓練的效率。但是如果我們的訓練樣本裏的中心詞w是一個很生僻的詞,那麽就得在霍夫曼樹中辛苦的向下走很久了。能不能不用搞這麽復雜的一顆霍夫曼樹,將模型變的更加簡單呢?

Negative Sampling就是這麽一種求解word2vec模型的方法,它摒棄了霍夫曼樹,采用了Negative Sampling(負采樣)的方法來求解。

6. 基於Negative Sampling的模型概述

  比如我們有一個訓練樣本,中心詞是w,它周圍上下文共有2c個詞,記為context(w)。由於這個中心詞w,的確和context(w)相關存在,因此它是一個真實的正例。通過Negative Sampling采樣,我們得到neg個和w不同的中心詞wi,i=1,2,..neg,這樣context(w)和$$w_i$就組成了neg個並不真實存在的負例。利用這一個正例和neg個負例,我們進行二元邏輯回歸,得到負采樣對應每個詞$w_i$對應的模型參數$\theta_{i}$,和每個詞的詞向量。

7.SoftMax 激活函數 :用於多分Softmax將多個神經元的輸出,映射到(0,1)區間內,可以看成是當前輸出是屬於各個分類的概率,從而來進行多分類。

假設有一個數組V,Vi表示V中的第i個元素,那麽Vi元素的softmax值就是:

例如V = [9,6,3,1] , 經過Softmax函數輸出 V_Softmax = [0.950027342724 0.0472990762635 0.00235488234367 0.000318698668969]

輸出每類可能出現的概率大小,和為1。

word2vec 和 doc2vec 詞向量表示