以解数学题的方式来理解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中我们的规则变为:

当给予中心单词,来预测附近单词?

对应这里就是给予 天气 来预测 附近词是 今天,不错 的概率。

猜你喜欢

转载自blog.csdn.net/qq_41664845/article/details/83108222
今日推荐