Word2vec负采样

Word2vec负采样下文中的模型都是以Skip-gram模型为主。1、论文发展word2vec中的负采样(NEG)最初由Mikolov在论文《DistributedRepresentationsofWordsandPhrasesandtheirCompositionality》中首次提出来,是Noise-ContrastiveEstimation(简写NCE,噪声对比估计)的简化版本…

大家好,又见面了,我是你们的朋友全栈君。

下文中的模型都是以Skip-gram模型为主。
 
1、论文发展
word2vec中的负采样(NEG)最初由 Mikolov在论文《Distributed Representations of Words and Phrases and their Compositionality》中首次提出来,是Noise-Contrastive Estimation(简写NCE,噪声对比估计)的简化版本。在论文中针对Skip-gram模型直接提出负采样的优化目标函数为:
Word2vec负采样
Word2vec负采样

Word2vec负采样

其中Pn(w)是目标词不是w的上下文的概率分布。
论文中没有给出证明,到了2014年,Yoav Goldberg在论文《word2vec Explained: Deriving Mikolov et al.’s Negative-Sampling Word-Embedding Method》里对上述目标函数给出了推导。
 
2、原始的skip-gram模型的目标函数
如果没有采用负采样的话,那么skip-gram模型的目标函数为:
Word2vec负采样
Word2vec负采样其中p(c|w)表示的是当前词预测到的目标上下文的概率最大,C(w)是目标词w的所有上下文集合。
相应地可以简化为
Word2vec负采样
Word2vec负采样
式中D是语料中所有单词和上下文的集合。
如果我们采用softmax函数的话,那么我们可以得到对应每个上下文的概率大小为:
Word2vec负采样
Word2vec负采样
其中Vc和Vw可以看成是对应词c和词w的词向量。关于如何得到这个式子可以参考后面,那么将该式子代入上式并取log可以得到:
Word2vec负采样
Word2vec负采样
对上述目标函数求最大化,可以让相似的词具有相似的向量值。
 
3、采用负采样的目标函数
但是对上述目标函数进行优化,第二项需要对词典里的所有词进行优化,所以计算量比较大。如果换个角度考虑,如果我们将正常的上下问组合看成是1,不正常的上下文组合看成是0,那么问题转换为二分类问题,那么我们目标就是最大化下面的目标函数。
Word2vec负采样
Word2vec负采样
将输出层的softmax函数改为sigmoid函数,那么
Word2vec负采样
Word2vec负采样
同样代入上式可以得到
Word2vec负采样
但是这个目标函数存在问题,如果Vc=Vw,并且VcxVw足够大的话,就能取到最大值,这样所有词向量都是一样的,得到的词向量没有意义。所以考虑负采样,即引入负样本,那么
Word2vec负采样
Word2vec负采样
Word2vec负采样
那么得到
Word2vec负采样
Word2vec负采样
则与Mikolov提出的式子是一致的。
 
4、如何推导得到目标函数
Word2vec负采样

 

Word2vec负采样
5、举例
以“今天|天气|非常|不错|啊”举例,假设上下文只有一个词,选择目标词是“天气”,那么出现的情况有:
今天|天气,非常|天气,不错|天气,啊|天气
由于我们假设上下文只有一个词,那么在这些情况中只有【今天|天气,非常|天气】是正确的样本。
当我们采用【今天|天气】这个样本时,我们希望输入【天气】,会输出标签【今天】,其他概率都是0。
 
对于原始的skip-gram模型来说,这对应是一个4分类问题,当输入【今天|天气】时,那么我们可能出现的概率是P(今天|天气)、P(非常|天气)、P(不错|天气)和P(啊|天气),我们的目标就是让P(今天|天气)这个概率最大,但是我们得同时计算其他三类的概率,并在利用反向传播进行优化的时候需要对所有词向量都进行更新。这样计算量很大,比如我们这里就要更新5*100=500个参数(假设词向量维度是100维的)。
 
但是如果采用负采样,当输入【今天|天气】时,我们从【非常|不错|啊】中选出1个进行优化,比如【不错|天气】,即我们只需计算P(D=1|天气,今天)和P(D=0|天气,不错),并且在更新的时候只更新【不错】、【天气】和【今天】的词向量,这样只需更新300个参数,计算量大大减少了。
 
6、参考资料
[1]word2vec Parameter Learning Explained
[2]word2vec Explained: Deriving Mikolov et al.’s Negative-Sampling Word-Embedding Method
[3]Note on Word Representation
[4]Distributed Representations of Words and Phrases and their Compositionality
 

 

转载于:https://www.cnblogs.com/linhao-0204/p/9126037.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/151251.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • eclipsesvn使用教程_eclipse导入svn项目

    eclipsesvn使用教程_eclipse导入svn项目做好以上的准备后打开Eclipse编译器,点击编译器右上角的OpenPerspective打开SVN资源库界面,新建一个资源库选择资源库的位置,这里我们就用刚才搭好的svn://localhost/ts作为工程目录,点击Finish后如果成功则会看到版本服务器中工程的树形结构了(可能需要用户密码验证)。在svn://localhost/ts根目录上点右键,选择“验出”(英

    2022年9月26日
    0
  • Postman工具_postman安装使用教程

    Postman工具_postman安装使用教程postman是一款支持http协议的接口调试与测试工具,其主要特点就是功能强大,使用简单且易用性好。无论是开发人员进行接口调试,还是测试人员做接口测试,postman都是我们的首选工具之一。那么接下来就介绍下postman到底有哪些功能,它们分别都能干些什么。下面先通过一张图来直观的来看下postman中所包含的功能。图片当然,以上功能也只是展示了postman的一部分功能,为了能更加全面的体现这款工具的特点,我将从以下三个维度来加以说明。它们分别是: 基础功能

    2022年9月2日
    2
  • MQTT 服务器介绍

    MQTT 服务器介绍MQTT发布订阅模式简述MQTT是基于发布(Publish)/订阅(Subscribe)模式来进行通信及数据交换的,与HTTP的请求(Request)/应答(Response)的模式有本质的不同。订阅者(Subscriber)会向消息服务器(Broker)订阅一个主题(Topic)。成功订阅后,消息服务器会将该主题下的消息转发给所有的订阅者。主题(Topic)以‘…

    2022年5月9日
    61
  • python常见的数据类型有哪些?

    python常见的数据类型有哪些?变量用来存储数据,那么大家有没有想过,我们应该让变量占用多大空间,保存什么样的数据呢?在讲解变量的类型之前,我们先来看一个生活中的例子,例如,我们要运送一台电脑,大卡车和小轿车都可以完成,但是,如果使用大卡车运送一台电脑,显然有点小题大做,浪费了大卡车的空间,如图1所示。图一:卡车和轿车运输一台电脑同理,如果使用变量存储数据时,为了更充分利用内存空间,我们可以为变量指定不同的数据类型。Python中常见的数据类型如图2所示图二:Python变量数据类型图二中罗列了Python中常见的数据类型,下

    2022年6月4日
    26
  • 应用架构,业务架构,技术架构和业务流程图详解怎么写_业务架构和应用架构

    应用架构,业务架构,技术架构和业务流程图详解怎么写_业务架构和应用架构应用架构应用架构(ApplicationArchitecture)是描述了IT系统功能和技术实现的内容。应用架构分为以下两个不同的层次:企业级的应用架构:企业层面的应用架构起到了统一规划、承上启下的作用,向上承接了企业战略发展方向和业务模式,向下规划和指导企业各个IT系统的定位和功能。在企业架构中,应用架构是最重要和工作量最大的部分,他包括了企业的应用架构蓝图、架构标准/原则、系统的边界…

    2022年10月12日
    0
  • cms开源网站管理系统_javaweb开源商城

    cms开源网站管理系统_javaweb开源商城笔者整理了八款.Net优秀的开源CMS内容管理系统,推荐给广大的.net开发者。

    2022年8月6日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号