![726fe00eef3d0407f8176ab3f25b7db9.png](https://i-blog.csdnimg.cn/blog_migrate/69b379372ff591d2b03cece00db93e83.jpeg)
本文介绍Word2Vec是基于Skip-Gram架构,本文只介绍核心思想,具体权重更新参考论文。
本文与论文同时饮用较好!
理解Word2Vec核心思想的步骤是先理解one word -> one word如何获取词向量,而Skip-Gram架构和CBOW架构是再次基础之上进行了输入或者输出的改变。
One-Word Context
One-Word Context是只是用一个单词预测另一个单词。其架构图为:
![b26857580106516f7e89fea1be8819ec.png](https://i-blog.csdnimg.cn/blog_migrate/831663c1e1ccd611817404c34edf964a.png)
即只有两层全连接神经网络,并且隐藏层为先行层。输入层为每个单词的one-hot encoder,输出为下一个单词的预测。输出是Softmax处理后的概率值,那个维度的概率值大则为某个单词。
其中词向量为W的行向量或者W'的列向量,一般使用W的行向量作为输入词的词向量,也即是输入向量(One-hot encoder)与W的转置相乘之后隐藏层的结果。
CBOW架构
CBOW架构只是在one->one的基础之上输入层到隐藏层为:输入层的平均和。
![ffd8d6d2b45faadea57cbe1f35df661d.png](https://i-blog.csdnimg.cn/blog_migrate/1c0d913d5bd9d0a005b74f65be019985.png)
Skip-Gram架构
只是在输出时,偏差为所有panel的偏差之和。
![d8c4412ac59eea0b68958f1cc800c8bf.png](https://i-blog.csdnimg.cn/blog_migrate/936e31aa5c913862d8e23fa94cde4358.png)
![cd94390212e7a3ad53dac35eb5c92128.png](https://i-blog.csdnimg.cn/blog_migrate/36964ca91a858d51804eacdf22d08efb.png)
其中u为预测输出。
Hierarchical Softmax
Hierarchical Softmax是使用output-layer的每一个panel(即单词的输出评分),该输出评分的每一个维度为输出向量和输入向量的内积。根据每一维度的大小构建二叉树(常用哈夫曼树,建议看看哈夫曼树的构建)。
对于构建哈夫曼树的权重进行Sigmoid函数处理,把它压缩在[0,1]之间,形成往左子树走的概率,则往右子树走的概率为1-P(左)。
![2431255d0305074fd73085c1bbcf2560.png](https://i-blog.csdnimg.cn/blog_migrate/fde27d3af7fa9b6ad1171a2c8382853a.png)
如上图,从根节点往w2走,走的方向有向左->向左->向右走。(上图非哈夫曼树,但思想一致。)
把从根节点走到w2的路径的概率乘积即为预测概率,从而求出每个panel维度的概率。
loss函数:
![55f1dbc32bc4627b047c129fe53d331f.png](https://i-blog.csdnimg.cn/blog_migrate/b67e31843ad04b1602d4fb24aab2b237.png)
负采样
负采样是在Hierarchical Softmax的loss函数基础之上,添加了负采样。
因此,损失函数为:
![b1bd498901f8eb70c2a3f78518c137fd.png](https://i-blog.csdnimg.cn/blog_migrate/7b49b30d23fea359634fc25c7f91a08b.png)
负采样的核心思想是根据词频进行选择sqmple更新权重,而不是所有权重;并且进行预测的单词权重必须更新,在所有非预测单词的权重进行负采样更新。
代码实现
from gensim.models import Word2Vec
# 必须为字符串,才能进行训练
docs = [['30760','157507']
,['289197','63746']
,['36162','168401']
,['50644','361620']]
wv = Word2Vec(docs,size=12,sg=1,window=2,workers=10,min_count=1,iter=10)
wv['30760']
参考文献
[1]. word2vec Parameter Learning Explained(论文)
[2].https://zhuanlan.zhihu.com/p/26306795
[3].深度学习与推荐系统(王喆)