1. 程式人生 > >word2vec:CBOW和skip-gram模型

word2vec:CBOW和skip-gram模型

預測 構造 結束 input 初始 cbo 進行 模型 重復

1.CBOW模型

之前已經解釋過,無論是CBOW模型還是skip-gram模型,都是以Huffman樹作為基礎的。值得註意的是,Huffman樹中非葉節點存儲的中間向量的初始化值是零向量,而葉節點對應的單詞的詞向量是隨機初始化的。

1.1 訓練的流程

那麽現在假設我們已經有了一個已經構造好的Huffman樹,以及初始化完畢的各個向量,可以開始輸入文本來進行訓練了。

訓練的過程如下圖所示,主要有輸入層(input),映射層(projection)和輸出層(output)三個階段。

輸入層即為某個單詞A周圍的n-1個單詞的詞向量。如果n取5,則詞A(可記為w(t))前兩個和後兩個的單詞為w(t-2),w(t-1),w(t+1),w(t+2)。相對應的,那4個單詞的詞向量記為v(w(t-2)),v(w(t-1)),v(w(t+1)),v(w(t+2))。從輸入層到映射層比較簡單,將那n-1個詞向量相加即可。

1.2 從映射層到輸出層

要完成這一步驟,需要借助之前構造的Huffman樹。從根節點開始,映射層的值需要沿著Huffman樹不斷的進行logistic分類,並且不斷的修正各中間向量和詞向量。

此時中間的單詞為w(t),而映射層輸入為
pro(t)=v(w(t-2))+v(w(t-1))+v(w(t+1))+v(w(t+2))

假設此時的單詞為“足球”,即w(t)=“足球”,則其Huffman碼可知為d(t)=”1001”(具體可見上一節),那麽根據Huffman碼可知,從根節點到葉節點的路徑為“左右右左”,即從根節點開始,先往左拐,再往右拐2次,最後再左拐。

既然知道了路徑,那麽就按照路徑從上往下依次修正路徑上各節點的中間向量。在第一個節點,根據節點的中間向量Θ(t,1)和pro(t)進行Logistic分類。如果分類結果顯示為0,則表示分類錯誤(應該向左拐,即分類到1),則要對Θ(t,1)進行修正,並記錄誤差量。

接下來,處理完第一個節點之後,開始處理第二個節點。方法類似,修正Θ(t,2),並累加誤差量。接下來的節點都以此類推。

在處理完所有節點,達到葉節點之後,根據之前累計的誤差來修正詞向量v(w(t))。

這樣,一個詞w(t)的處理流程就結束了。如果一個文本中有N個詞,則需要將上述過程在重復N遍,從w(0)~w(N-1)。

2. skip-gram模型

skip-gram與CBOW相比,只有細微的不同。skip-gram的輸入是當前詞的詞向量,而輸出是周圍詞的詞向量。也就是說,通過當前詞來預測周圍的詞。由於輸出有n-1個詞,所以要對於一個詞來講,上述沿著huffman樹從頂到底的過程要循環n-1遍。

word2vec:CBOW和skip-gram模型