达观杯-文本智能处理挑战赛-03

word2vec原理及实践

一、概述

word2vec其实就是训练词向量的一种方法。因为从语言学的角度,一句话中两个词越近,其联系就会越强。而之前常见的one-hot训练词向量的方法,则割裂了语言之间的相关性。one-hot是映射到一维空间的一个点,word2vec是把词映射到高维空间,相近的词出现的位置相近。接下来,词都表示成向量,再根据余弦距离、曼哈顿距离等计算向量之间的相似性。再考虑怎么把词映射到句子?一是将向量加权平均,丢失了句子之间词的顺序。二是一开始就把句子分成词,训练词向量的时候以这些词为蓝本,考虑到了词在句子之间的顺序。
word2vec实际上就是一种浅层的神经网络模型,有两种网络结构,分别是CBOW和Skip-gram。

二、CBOW

CBOW的目标就是根据上下文出现的词语来预测当前词的生成概率。输入是某个特征词的上下文相关的词对应的词向量,输出就是这特定的一个词对应的词向量。如下图所示:

三、skip-gram

思路与CBOW相反,即输入是特定的一个词的词向量,输出是特定词对应的上下文词向量。是根据当前词来预测上下文中各词的生成概率。如下图所示:
在这里插入图片描述
CBOW和Skip-gram都可以表示成由输入层、映射层和输出层组成的神经网络。输入层中每个词由one-hot编码方式表示,即所有词均表示成一个N维向量,其中N为词汇表中单词的总数。在向量中,每个词都将与之对应的维度置为1,其余维度的值设为0.
在映射层中,K个隐含单元的取值可以由N位输入向量以及连接输入和隐含单元之间的NK维权重矩阵计算得到。在CSOW中,还需要将各个输入词所计算出的隐含单元求和。
同理,输出层向量的值可以通过隐含层向量(K维),以及连接隐含层和输出层之间的K
N维权重矩阵计算得到。输出层也是一个N维向量,每维与词汇表中的一个单词相对应。最后,对输出层向量应用sigmoid激活函数,可以计算出每个单词的生成概率。

四、gensim实现word2vec

from gensim.models import word2vec
train_sentence = list(X_train.ix[:, 'word_seg'].apply(lambda x: x.strip().split()))
test_sentence = list(X_test.ix[:, 'word_seg'].apply(lambda x: x.strip().split()))
sentences = train_sentence + test_sentence
model = word2vec.Word2Vec(sentences, hs=1, min_count=1, window=3, size=100)

参考:
https://www.cnblogs.com/pinard/p/7278324.html
https://juejin.im/post/598c1941f265da3e190da56b

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值