word2vec完整的解釋可以參考《word2vec Parameter Learning Explained》這篇文章。
cbow模型
cbow模型的全稱為Continuous Bag-of-Word Model。該模型的作用是根據給定的詞$w_{input}$,預測目標詞出現的概率$w_t$,對應的數學表示為 $p(w_t|w_{input})$。如下圖所示,Input layer表示給定的詞,${h_1,...,h_N}$是這個給定詞的詞向量(又稱輸入詞向量),Output layer是這個神經網絡的輸出層,為了得出在這個輸入詞下另一個詞出現的可能概率,需要對Output layer求softmax。
圖1 單個詞的CBOW模型(來源於word2vec Parameter Learning Explained)
在cbow模型中,所有的詞被編碼成ont-hot向量,$V$為總詞語數。input層的one-hot vector經過$W_{VXN}$矩陣后,被壓縮為只有N個元素的向量$h$,之后經過$W'$矩陣出來,得到$\boldsymbol{u}$。於是根據公式,有
$p(w_t|w_{input})=y_j=\frac{exp(u_j)}{\sum{exp(u_{j'})}}$
最大化該條件概率,得到
max$p(w_t|w_{input})$=max log$y_j$=$u_j$-log$\sum{exp(u_j)}$
於是得到詞袋模型的Loss function:
E=-log$p(w_t|w_{input})$=log$\sum{exp(u_j)}$-$u_j$
這里,$u_j$表示第j個詞向量。有了loss function,我們就可以很容易的利用各類框架進行詞向量的訓練了。
但是!在實際中,一個詞的上下文有許多的詞,往往我們需要的是,給定多個詞,預測缺失詞出現的概率。我們希望詞袋模型能夠處理這個問題。於是,為了利用之前的詞袋模型,人們提出了新的解決方案。它的思路是這樣的:它利用輸入上下文詞向量的平均與輸入層到隱藏層權重的積作為輸入,上下文詞向量的平均作為輸出。
$h=\frac{1}{C} W^T (x_1+x_2+...+x_C)$
利用之前得到的詞向量,上面的公式可以簡化為:
$h=\frac{1}{C} (v_1+v_2+...+v_C)$
這里每個$v$代表了之前單個詞的CBOW模型的輸入詞向量。
圖2 多個詞上下文的詞袋模型