小白可以读懂的word2vec

Word2Vec

1,什么是word2vec

我对Word2Vec的理解:使意思相近的词有距离相近的向量。
为了得到这种词向量就提出了用这个词的上下文来解释它,举个例子:‘爱’和‘喜欢’有很大概率出现在相同句子的相同位置,比如说:‘我爱你’和‘他喜欢你’,‘小明爱学习’和‘小红喜欢学习’;那么这两个词通过前面的上下文训练出来的词向量距离就是相近的。

2,word2vec的两种训练方式

skip-gram:通过中心词来预测上下文
cbow:通过上下文来预测中心词
下面用skip-gram来举例

3,skip-gram公式

写一下公式:
likehood(θ)=c=1Tmjm,j0Pr(Wc+jWc;θ)likehood(θ) = \prod_{c=1}^{T}\prod_{-m≤j≤m,j≠0}Pr(W_{c+j}|W_c;θ)
c=1,2,…T c:表示文本中词每一个位置 Wc:该位置的词
第一个\prod指的是算完第一个中心词再算下一个中心词;第二个\prod指的是中心词周围的词的概率相乘
举个栗子:
文本:我 每天 吃饭 睡觉 打 豆豆
吃饭为例,c=3,设m=1(m看你心情) :mjm,j0Pr(Wc+jWc;θ)\prod_{-m≤j≤m,j≠0}Pr(W_{c+j}|W_c;θ) 就变为1j1,j0Pr(W3+jW3;θ)\prod_{-1≤j≤1,j≠0}Pr(W_{3+j}|W_3;θ)
这里希望likehood越大越好,loss则是越小越好,所以加了‘-’号,为了好计算又加上log,原式变为:
Loss(θ)=1Tloglikehood(θ)=1Tc=1Tmjm,j0logPr(Wc+jWc;θ)Loss(θ)=-\frac{1}{T}\log{likehood(θ)}=-\frac{1}{T}\sum_{c=1}^{T}\sum_{-m≤j≤m,j≠0}\log{Pr(W_{c+j}|W_c;θ)}
这里希望Loss越小越好,θ是要训练的参数。

4,skip-gram过程

文本:我 每天 吃饭 睡觉
1,将文本当中的词变为onehot输入I=[1,0,0,0]I_{我}=[1,0,0,0]I=[0,1,0,0]I_{每天}=[0,1,0,0],I_{吃饭}=[0,0,1,0]I_{睡觉}=[0,0,0,1]$

2,设m=1,四个词都要作为中心词,这里以吃饭作为中心词为例:
‘吃饭’作为输入,在m=1的情况下有‘每天’‘睡觉’作为输出,这里需要两个需要被训练的矩阵W4nW_{4*n},Wn4W'_{n*4}(4是因为文本只有4个词,n是你定义的词向量的维度,下面设n=3)
小白可以读懂的word2vec
这里需要训练W和W’,而W的一行就是一个词向量
预测’每天‘就使PP_{每天}最大;预测‘睡觉’就使PP_{睡觉}最大;这里一般使用交叉熵损失
这样我们就可以得到词向量模型→W

5,模型改进

减小模型训练量的方法:
1,Negative Sampling(负采样):改变n个观察值的权重,而不是所有
2,Hierarchical Softmax(霍夫曼树):高频词更容易得到训练