1. 程式人生 > >以解數學題的方式來理解word2vec

以解數學題的方式來理解word2vec

1 one-word context

假設:

詞彙表裡面有3個單詞 ‘今天’,‘天氣’,‘不錯’;  即V=3

隱藏層具有2個節點;即N=2

目的是當輸入一個單詞,我們來預測其下一個單詞?

則在input layer由one-hot編碼:  

  1. 今天······[1,0,0]
  2. 天氣······[0,1,0]
  3. 不錯······[0,0,1]

接著我們需要初始化一下輸入矩陣W和輸出矩陣\large W^{'}

這裡的值你可以任意定義,反正最後都會由梯度下降到最低點的

\large W=\begin{pmatrix} w_{11} &w_{12} \\ w_{21}& w_{22}\\ w_{31}&w_{32} \end{pmatrix}=\begin{pmatrix} 1 &2 \\ 3& 4\\ 5&6 \end{pmatrix}     

 \large W^{'}=\begin{pmatrix} w_{11}^{'} &w_{12}^{'}&w_{13}^{'} \\ w_{21}^{'}& w_{22}^{'}& w_{23}^{'}\end{pmatrix}=\begin{pmatrix} 1 &2&3\\ 4& 5& 6\end{pmatrix}

首先以‘天氣‘為例:

1.由公式\large h=x^{T}W=W_{(k,\cdot )}x_{k}=V_{w_{I}}^{T}可以推出:

 

\large h=x^{T}W=\begin{pmatrix} 0\\ 1\\ 0 \end{pmatrix}^{T}\begin{pmatrix} 1 &2 \\ 3& 4\\ 5&6 \end{pmatrix}=\begin{pmatrix} 3 & 4 \end{pmatrix}

 

2.接著由公式\large u_{j}=V_{wj}^{'}^{T}\cdot h可以推出:(\large V_{wj}^{'}\large W^{'}矩陣中的第\large j列)

 

\large u_{1}=V_{w1}^{'}^{T}\cdot h=\begin{pmatrix} 1\\ 4 \end{pmatrix}^{T}\begin{pmatrix} 3 \\ 4 \end{pmatrix}=19

\large u_{2}=V_{w2}^{'}^{T}\cdot h=\begin{pmatrix} 2\\ 5 \end{pmatrix}^{T}\begin{pmatrix} 3 \\ 4 \end{pmatrix}=26

\large u_{3}=V_{w3}^{'}^{T}\cdot h=\begin{pmatrix} 3\\ 6\end{pmatrix}^{T}\begin{pmatrix} 3 \\ 4 \end{pmatrix}=33

 

3.再由公式\large p(w_{j} |w_{I} ) = y_{j}=\frac{e^{u_{j}}}{\sum_{j^{'}=1}^{V} e^{u_{j^{'}}}}

 

\large p(w_{1} |w_{2} ) = y_{1}=\frac{e^{19}}{e^{19}+e^{26}+e^{33}}=8.307704636907139e^{-7}

\large p(w_{2} |w_{2} ) = y_{2}=\frac{e^{26}}{e^{19}+e^{26}+e^{33}}=0.0009110504375262224

\large p(w_{3} |w_{2} ) = y_{3}=\frac{e^{33}}{e^{19}+e^{26}+e^{33}}=0.99908811879201

更新隱藏層→輸出層權重的等式

我們知道‘天氣’後面正確的輸出應該是‘不錯’,所以真實值為:

 則 \large \left\{\begin{matrix} t_{j}=1 &j=j* \\ t_{j}=0&j\neq j* \end{matrix}\right.可以理解為,當\large j等於不錯時\large t_{j}等於1,其餘等於0;

由公式\large \frac{\partial E}{\partial u_{j}}=y_{j}-t_{j}:=e_{j}得:

\large e_{1}=8.307704636907139e^{-7}-0=8.307704636907139e^{-7}

\large e_{2}=0.0009110504375262224-0=0.0009110504375262224

\large e_{3}=0.99908811879201-1=-0.0009118812079900174

再由:\large \frac{\partial E}{\partial w_{ij}^{'}}=\frac{\partial E}{\partial u_{j}}\cdot \frac{\partial u_{j}}{\partial w_{ij}^{'}}=e_{j}\cdot h_{i}\large \\V_{w_{j}}^{'}:= V_{w_{j}}^{'}-\eta \cdot e_{j}\cdot h可得:

這裡假設學習率\large \eta =0.01

\large \\V_{w_{1}}^{'}:= =\begin{pmatrix} 1\\ 4 \end{pmatrix}-0.01*8.307704636907139e^{-7}*\begin{pmatrix} 3\\ 4 \end{pmatrix}=\begin{pmatrix} 1-2.492e^{-8}\\ 4-3.323e^{-8} \end{pmatrix}

\large \\V_{w_{2}}^{'}:= =\begin{pmatrix} 2\\ 5 \end{pmatrix}-0.01*0.0009110504375262224*\begin{pmatrix} 3\\ 4 \end{pmatrix}=\begin{pmatrix} 2-2.733e^{-5}\\ 5-3.644e^{-5} \end{pmatrix}

\large \\V_{w_{3}}^{'}:= =\begin{pmatrix} 3\\ 6\end{pmatrix}+0.01*0.0009118812079900174*\begin{pmatrix} 3\\ 4 \end{pmatrix}=\begin{pmatrix} 3+2.735e^{-5}\\ 6+3.647e^{-5} \end{pmatrix}

更新隱藏層→輸出層權重的等式

由公式\large EH_{i}=\sum_{j=1}^{v}e_{j}\cdot w_{ij}^{'}和公式\large v_{w_{I}}:=v_{w_{I}}-\eta \cdot EH可得:

\large EH_{1}=\sum_{j=1}^{v}e_{j}\cdot w_{1j}^{'}=e_{1}\cdot w_{11}^{'}+e_{2}\cdot w_{12}^{'}+e_{3}\cdot w_{13}^{'}=-0.0009127618246817383

\large EH_{2}=\sum_{j=1}^{v}e_{j}\cdot w_{2j}^{'}=e_{1}\cdot w_{21}^{'}+e_{2}\cdot w_{22}^{'}+e_{3}\cdot w_{23}^{'}=-0.0009127784400913249

\large v_{w_{I}}:=v_{w_{I}}-\eta \cdot EH=\begin{pmatrix} 3\\ 4 \end{pmatrix}-0.01*\begin{pmatrix} -0.000912\\ -0.000912\end{pmatrix}=\begin{pmatrix} 3+9.1276e^{-6}\\ 4+ 9.1277e^{-6}\end{pmatrix}

對比一下更新前與更新後:

輸入單詞‘天氣’:

更新前:\large v_{w_{I}}=\begin{pmatrix} 3\\ 4 \end{pmatrix}

更新後\large v_{w_{I}}=\begin{pmatrix} 3+9.1276e^{-6}\\ 4+ 9.1277e^{-6}\end{pmatrix}

 

期望輸出單詞‘不錯’

更新前:\large v_{w_{j}}=\begin{pmatrix} 3\\ 6 \end{pmatrix}

更新後:\large v_{w_{I}}=\begin{pmatrix} 3+2.735e^{-5}\\ 6+3.647e^{-5} \end{pmatrix}

 

餘弦相似度距離:

更新前:

In [1]:cosine_similarity([3,4],[3,6])
Out[1]: 98.39

更新後:

In [1]:cosine_similarity([x1,y1],[x2,y2])
Out[1]: 98.39

已經很接近了所以幾乎沒變。

再看看 輸入

天氣 輸出 今天 的相似度變化:

更新前:

In [1]:cosine_similarity([3,4],[1,4])
Out[1]: 92.16

更新後:

In [1]:cosine_similarity([x1,y1],[x2,y2])
Out[1]: 92.12

從結果來看,因為不是期望的輸出,所以距離越來越遠了。

 

2.CBOW

還是以上面例子為例:

由3個單片語成的句子:

  1. 今天······[1,0,0]
  2. 天氣······[0,1,0]
  3. 不錯······[0,0,1]

不過我們的規則變為:

當給予附近單詞,來預測中心單詞?

對應這裡就是給予 今天/不錯 來預測 中心詞是 天氣 的概率。

接著依然初始化一下輸入矩陣W和輸出矩陣\large W^{'}

\large W=\begin{pmatrix} w_{11} &w_{12} \\ w_{21}& w_{22}\\ w_{31}&w_{32} \end{pmatrix}=\begin{pmatrix} 1 &2 \\ 3& 4\\ 5&6 \end{pmatrix}     

 \large W^{'}=\begin{pmatrix} w_{11}^{'} &w_{12}^{'}&w_{13}^{'} \\ w_{21}^{'}& w_{22}^{'}& w_{23}^{'}\end{pmatrix}=\begin{pmatrix} 1 &2&3\\ 4& 5& 6\end{pmatrix}

由公式\large h=\frac{1}{C}W\cdot (x_{1}+x_{2}....+x_{C})==\frac{1}{C}\cdot (V_{w_{1}}+V_{w_{2}}...+V_{w_{C}})可以得到:

 

\large h=\frac{1}{3}\cdot (\begin{pmatrix} 1\\ 2 \end{pmatrix}+\begin{pmatrix} 3\\ 4 \end{pmatrix}+\begin{pmatrix} 5\\ 6 \end{pmatrix})=\begin{pmatrix} 3\\ 4 \end{pmatrix}

(emmm,運氣這麼好,湊的結果與之前一模一樣....因為h的值與前面one-word-text的一樣,推到更新過程也是一模一樣的,使用就不寫了,其實就是複製上面的貼上下來)

---------------------------略---------------------------

3.skip-gram

 

在skip-gram中我們的規則變為:

當給予中心單詞,來預測附近單詞?

對應這裡就是給予 天氣 來預測 附近詞是 今天,不錯 的概率。