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进行模型实现,具体如下:

优质内容筛选与推荐>>
1、logstash收集tomcat日志
2、Spark的基本概念及工作原理
3、x
4、(Redundancy)关于服务器冗余的几个疑问,请知道的帮忙解答.
5、asp.net .ashx文件使用Server.MapPath解决方法


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号