首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Pytorch实现skip-gram模型训练word2vec

对于词语的表示,最开始采用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进行模型实现,具体如下:

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180323G1GN8C00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券