首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pytorch实现skip-gram模型训练word2vec

Pytorch实现skip-gram模型训练word2vec

作者头像
CodeInHand
发布2018-04-08 17:19:00
1.4K0
发布2018-04-08 17:19:00
举报
文章被收录于专栏:Pytorch实践Pytorch实践

对于词语的表示,最开始采用one-hot编码,用于判断文本中是否具有该词语;后来发展使用Bag-of-Words,使用词频信息对词语进行表示;再后来使用TF-IDF根据词语在文本中分布情况进行表示。而近年来,随着神经网络的发展,分布式的词语表达得到大量使用,word2vec就是对词语进行连续的多维向量表示。

区别于其它神经网络对词语embedding表示,Mikolov的word2vec非常漂亮,直接采用单层神经网络(或理解为sigmoid函数)对词语进行表示。具体的方法有两种CBOW和Skip-gram,具体模型结构如下:

CBOW是使用周边词语来预测当前词语出现的概率,而skip-gram是采用中心词语预测周边词语的概率。需要说明的是,当语料较少时使用CBOW方法比较好,当语料较多时采用skip-gram表示比较好。

本文具体描述skip-gram模型的原理与实现。假设给定一句话“中国 经济 近年来 发展 飞快”,skip-gram模型就是通过“近年来”预测其它周边词语的概率。模型的预测目标函数,就是使得中心词预测周边词的概率最大,具体数学表示为:

对于概率p的计算公式可以表示为:

当语料比较大时,词典规模会比较大,求softmax速度会变得很慢,严重影响了训练速度。此时有两种方法进行改进:(1)分层softmax; (2)负采样。分层softmax的原理很简单,就是构建Huffman树(使得计算概率的次数最小),正例词都在叶子结点,其他词为中间节点,分层进行softmax。负采样的思想也很简单,就是不计算所有词的概率算softmax,而是采样一些负样本,算对数sigmoid函数,近似softmax。具体原理就是最大化正例概率,最小化负例出现的概率。

根据上述公式,使用Pytorch进行模型实现,具体如下:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CodeInHand 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档