word2vec是如何得到词向量的?
最近在做文本的聚类,有老师傅推荐了word2vec,说是可以得到类似[0.792, −0.177, −0.107, 0.109, −0.542, ..…显示全部
关注者
844
被浏览
125,647
关注问题写回答
邀请回答
好问题 11
1 条评论
分享
登录一下,更多精彩内容等你发现
贡献精彩回答,参与评论互动
登录
微软程序员,算法专家。公众号:Hello阿北
12 人赞同了该回答
word2vec有两种训练模型:CBOW模型和Skip-gram模型。CBOW模型根据上下文的词来预测中心词,而Skip-gram模型正好相反,根据中心词来预测上下文的词。
这里以CBOW模型来说明如何得到词向量。(Skip-gram训练过程原理类似)
假设我们现在的词典D={我,喜欢,到处,旅游}。在一次模型训练中,中心词为"喜欢",窗口大小为2,则上下文为"我"、"到处"、"旅游"。
CBOW模型训练过程
结合视频演示,CBOW的训练过程如下:
Step 1. 得到上下文词的onehot向量作为输入,同时得到预期的输出onehot向量(这个用来最后计算损失函数)。
Step 2. 输入层每个词的onehot与权重矩阵W相乘,得到对应的向量。(其实这就是对应词的词向量,矩阵的参数是网络通过训练得到的)。
Step 3. 将得到的三个向量相加求平均,作为输出层的输入。
Step 4. 将向量与输出层的权重矩阵U相乘,得到输出向量。
Step 5. 将softmax作用于输出向量,得到每个词的概率分布。
Step 6. 通过损失度量函数(如交叉熵),计算网络的输出概率分布与预期输出onehot向量的之间损失值。通过这个损失值进行反向传播,更新网络参数。
经过上述步骤的多次迭代后,矩阵W就是词向量矩阵,每个词通过onehot查询词向量矩阵就能得到其对应的词向量。
在实际应用中,word2vec会采用层次softmax和负采样方法优化训练过程,具体可参考:word2vec 中的数学原理详解