背景区域为负样本什么意思_词向量-skipgram与负采样

大纲:

  • 1. onehot vs 分布式表示
  • 2. 分布式表示的全局泛化能力
  • 3. how to learn word2vec - intuition
  • 4. SkipGram
  • 5. SkipGram Negative Sampling
  • 6. 评估词向量
  • 7. CBOW与SkipGram对比

1. onehot vs 分布式表示

Onehot表示:

V = (apple, going, I, home, machine ,learing)

  • apple = (1,0,0,0,0,0)
  • machine = (0,0,0,0,1,0)
  • learning = (0,0,0,0,0,1)
  • I go home = (0,1,1,1,0,0)

onehot缺点:

  1. 高维稀疏
  2. 无法计算单词之间的相似度,因每一个词映射到高维空间中都是互相正交的,词与词之间没有任何关联关系,这显然与实际情况不符合,因为实际中词与词之间有近义、反义等多种关系

分布式表示

V = (apple, going, I, home, machine ,learing)

  • apple = (0.1, 0.3, 0.5, 0.1)
  • machine = (0.2, 0.3, 0.1, 0.6)
  • learning= (0.1, 0.2, 0.6, 0.1)
  • I going home = (0.5, 1.1, 0.5, 0.2)

分布式表示优点:

  1. 低维稠密
  2. 可以计算单词之间的相似度,Word2vec虽然学习不到反义这种高层次语义信息,但它巧妙的运用了一种思想:“具有相同上下文的词语包含相似的语义”,使得语义相近的词在映射到欧式空间后中具有较高的余弦相似度。怎么把“具有相同上下文的词语包含相似的语义”这种思想融入模型是很关键的一步,在模型中,两个词是否出现在一起是通过判断这两个词在上下文中是否出现在一个窗口。
陈运文:漫谈Word2vec之skip-gram模型​zhuanlan.zhihu.com
c0d192cfc74c594fb51222f8fc8ffde1.png

3. Capacity,分布式表示可以用100维的向量表示所有的单词, 而独热编码只能表示100个单词

2. 分布式表示的全局泛化能力

在机器学习中,我们要寻求的是在全局范围内泛化能力很强的模型。

Local generalization(局部泛化能力):

4f6785ed72054144d1b95b67b8196b63.png

举个例子,model1,2,3分别表示用原材料做了1,2,3三道菜,第一道菜做了比其它两道菜的次数多,可以说model1的能力由于其它两道菜,模型1的泛化能力比较强。

Global generalization(全局泛化能力):

2e04ae2d696edcbfaaea1f35a782d820.png

我们先做半成品出来,然后用这些半成品做成菜,我们在做每道菜的时候不断地在调整半成品的参数,这样就可以提高全局的泛化能力。这些半成品可以看作是parameter sharing。

3. how to learn word2vec - intuition

给定一个句子

bea3056de3660fcdf1d2699abd1fdf28.png

当数据量很大时,挨在一起的单词语义相似度比不挨在一起的单词的语义相似度要高,

词向量:

  • 上下文无关(静态词向量):SkipGram CBOW Glove
  • 上下文有关(动态词向量):Bert ELMO

df655d8d2de19fce09afa19623a8e5c2.png
  • CBOW:利用上下文词预测中心词
  • SkipGram:利用中心词预测上下文词
  • NNLM:利用前面的(n-1)个词预测第n个词
  • Bert:随机选择一些词MASK掉,再用上下文词预测被MASK的词是什么

4. SkipGram

Skip-Gram模型的核心是:在文本中,距离越近的单词相似度会越高。

根据中心词去预测上下文词

SkipGram 核心思路:

语料库为 We are working on NLP Project, it is interesting

ebff105490ad81d11175746ba4976360.png

当窗口大小k等于2时 working为中心词的时候

目标函数为:

因此skipgram的目标函数为:

是中心词,
是上下文词

举例:

语料库:

doc1: 今天 天气 很好

doc2: 今天 上 NLP 课程

k=1


接下来看

是什么。

embedding matrix

33c8d99c24014bec0c0fdf135a76c8de.png

,使用了一个
函数

是上下文,
是中心词,等号右边分子表示上下文和中心词的相似度, 我们希望它越大越好。

举例:

语料库 {今天, 天气, 好, NLP, 上课}


现在的skipgram的目标函数为:

现在出现了

,而且
线性于词库的大小,即需要遍历整个词汇表,复杂度很高,现在没有办法进行下去了。

现在解决这种方法有两种办法:

  • hierarchical softmax(层次softmax)
  • Negative Sampling(负采样)

5. SkipGram Negative Sampling

c2d43c10b33039ab9a33804f3c719321.png

对于中心词

我们希望窗口内的
越大越好,窗口外的
越小越好。

表示
出现在同一窗口内的概率,即
的上下文词的概率,中心词和上下文词对
来自语料库。

表示
不出现在同一窗口内的概率,即
不是
的上下文词的概率,中心词和上下文词对
不是来自语料库。

如果

出现在同一窗口内,我们希望
越大越好

如果

不出现在同一窗口内,我们希望
越大越好

3e11b36701e2ca190dacd06da8d3242a.png

其中

其中

让人想起了逻辑回归


举例:

语料库:Today's weather is great

vocab=[Today's ,weather,is, great]

窗口k=1

正样本

={(Today's ,weather),(weather,Today's ),(weather,is),(is,weather),(is,great),(great,is)}

负样本

= {(Today's ,is),(Today's ,great)(weather,great),(is,Today's ),(great,weather),(great,Today's)}

对于正样本 我们想最大化P(D=1,正样本);对于负样本 我们想最大化P(D=0,负样本);


现在目标函数为:

在实际使用时,因为正样本的数量会远远少于负样本的数量(有很多负样本根本不会出现在文本中),所以我们引入Nagetive Sampling,从正样本对应的负样本中随机采样来减少负样本的数量(不考虑所有的负样本,而是对负样本进行采样)。

现在目标函数为:


举例:

s="I like NLP,it is interesting,but it is hard"

vocab=[I, like ,NLP, it,is,interesting,but ,hard] 词典长度=8

以NLP为中心词,K=1

  • 正样本:(NLP,like) 负样本:(NLP,I) (NLP,but)
  • 正样本:(NLP,it) 负样本:(NLP,hard) (NLP,I)

以it为中心词,k=1

  • 正样本:(it,is) 负样本:(it,interesting) (it,hard)
  • 正样本:(it,NLP) 负样本:(it,hard) (it,I

对参数进行求解

进行求导

进行求导

进行求导

伪代码如下:

Skip-Gram 的缺点

没有考虑到上下文;

窗口长度有限,无法考虑全局;

无法有效学习低频词和未登录词OOV(out of vocabulary)

多义词无法区别。

上下文的问题可以用Elmo和Bert解决;

低频次和OOV可以用subword embedding

6. 评估词向量:

  1. TSNE 可视化词向量,对训练得到的词向量降维到二维空间进行观察
  2. similarity:已有一个训练好的词向量和人工标记的单词相似度表(football和basketball相似度=0.91),基于训练好的词向量进行相似度计算,
    之间的相似度是不是接近于0.91。
  3. 类比(analogy):woman:man == boy:girl (如已知woman:man的相似性,给定boy来寻找girl)(woman-man =boy-?)

7. CBOW与SkipGram对比:

在cbow方法中,是用上下文词预测中心词,从而利用中心词的预测结果情况,使用梯度下降方法,不断的去调整上下文词的向量。当训练完成之后,每个词都会作为中心词,把上下文词的词向量进行了调整,这样也就获得了整个文本里面所有词的词向量。

可以看到,cbow预测行为的次数跟整个文本的词数几乎是相等的,复杂度大概是O(V);

而skip-gram是用中心词来预测上下文的词。在skip-gram中,会利用上下文词的预测结果情况,使用GradientDecent来不断的调整中心词的词向量,最终所有的文本遍历完毕之后,也就得到了文本所有词的词向量。

可以看出,skip-gram进行预测的次数是要多于cbow的:因为每个词在作为中心词时,都要使用上下文词进行预测一次。这样相当于比cbow的方法多进行了K次(假设K为窗口大小),因此时间的复杂度为O(KV),训练时间要比cbow要长。

但是在skip-gram当中,每个词都要收到周围的词的影响,每个词在作为中心词的时候,都要进行K次的预测、调整。因此, 当数据量较少,或者词为生僻词出现次数较少时, 这种多次的调整会使得词向量相对的更加准确。

在skip-gram里面,每个词在作为中心词的时候,实际上是 1个学生 VS K个老师,K个老师(上下文词)都会对学生(中心词)进行“专业”的训练,这样学生(中心词)的“能力”(向量结果)相对就会扎实(准确)一些,但是这样肯定会使用更长的时间;

cbow是 1个老师 VS K个学生,K个学生(上下文词)都会从老师(中心词)那里学习知识,但是老师(中心词)是一视同仁的,教给大家的一样的知识。至于你学到了多少,还要看下一轮(假如还在窗口内),或者以后的某一轮,你还有机会加入老师的课堂当中(再次出现作为上下文词),跟着大家一起学习,然后进步一点。因此相对skip-gram,你的业务能力肯定没有人家强,但是对于整个训练营(训练过程)来说,这样肯定效率高,速度更快。

卡门:cbow 与 skip-gram的比较​zhuanlan.zhihu.com

因此:

2c1c29d2681dd2894452dc1da8b2be9b.png

19be2e0eb8e6f2376aa2f5bf1da1a4fb.png

第一次编辑(2020)


参考:

Dong:词向量技术的学习​zhuanlan.zhihu.com
c40fa35ca8e65d92c84d4fee7f59a160.png
陈运文:漫谈Word2vec之skip-gram模型​zhuanlan.zhihu.com
c0d192cfc74c594fb51222f8fc8ffde1.png
深度学习之Skip-Gram和CBOW原理_hongwei的博客-CSDN博客_cbow 和 skip-gram,以及两种方式的损失函数构造​blog.csdn.net
6531b67d759afc196ee838f72ebe6002.png
深度学习之Skip-Gram和CBOW原理_hongwei的博客-CSDN博客_cbow 和 skip-gram,以及两种方式的损失函数构造​blog.csdn.net
6531b67d759afc196ee838f72ebe6002.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/335356.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式linux应用程序实例,嵌入式Linux应用程序访问物理地址的实例

前言  按照Linux分层驱动思想,外设驱动与主机控制器的驱动不相关,主机控制器的驱动不关心外设,而外设驱动也不关心主机,外设访问核心层的通用应用程序接口进行数据传输,主机和外设之间可以进行任意的组合。这样思想要…

线程同步 线程安全_同步装饰器来替换线程安全类

线程同步 线程安全您知道什么是线程安全吗? 如果没有,下面是一个简单的示例。 所有类都必须是线程安全的,对吗? 并不是的。 其中一些必须是线程安全的? 又错了。 我认为它们都不必是线程安全的,而它们都必须…

forge开发_使用Forge,WildFly Swarm和Arquillian开发微服务

forge开发在这篇文章中,我们将看到如何使用WildFly Swarm和Forge开发微服务,以及如何使用Arquillian和Rest Assured对其进行测试。 WildFly Swarm提供了一种创新的方法来打包和运行Java EE应用程序,方法是将它们与足够的服务器运行时一起打包…

zynq+linux固化程序,如何在 Zynq UltraScale+ MPSoC 上实现 Linux UIO 设计

原标题:如何在 Zynq UltraScale MPSoC 上实现 Linux UIO 设计简介作者: Alex He (何晔), 赛灵思高级嵌入式应用工程师这里的 UIO 即 Userspace I/O,本文中 UIO 泛指 UIO 设备和 UIO 驱动。它在 Linux kernel 的世界里比较小众&…

thinkpad笔记本散热风扇_极致的散热体验,ORICO 全铝DIY双风扇笔记本散热垫评测...

电脑的出现,极大的改变了人类的生活。娱乐、办公、游戏、电子竞技等等都需要用到电脑。而电脑也慢慢的在升级着。电脑的体积也由最开始的的占据几间屋子的庞大体积,到后来的台式机、台式一体机、电脑的体积慢慢的变的越来越小。而便携式笔记本电脑的出现…

Web产品的交互说明文档应该怎么写?

经常与开发同学聊天,他们说有一个详细的说明文档可以帮助他们更准确的进行工时评估,还可以帮助他们提高工作效率,减少多余的思考时间。因此在这里分享一些制作交互说明文档的经验。 我先说说说交互原型包含哪些部分? 版本说明及更…

linux类似360软件,linux下有什么类似鲁大师查看电脑配置的软

满意答案drqyna2017.05.26采纳率:40% 等级:11已帮助:5455人linux如何查看系统的硬件配置如何在linux系统下查看系统配置?在图形模式下我们可以很方便的利用Linux的图形工具,点击几下就可以查看到Linux系统的的硬件信…

thinkphp json_原创干货 | Thinkphp序列化合总

听说转发文章会给你带来好运最近Thinkphp几个版本都出了反序列化利用链,这里集结在一起,下面是复现文章,poc会放在最后01Thinkphp5.1.37环境搭建composercreate-project topthink/think5.1.37 v5.1.37poc演示截图调用链单步调试漏洞起点在\th…

笔记本能安装联想智能云教室吗_挑战Jupyter Notebook:云协作、云硬件,上云的Notebook编程环境...

对全世界的 Python 高手而言,Jupyter Notebook 是目前最流行的编程环境,但它也有一些令人难以忍受的缺点。为此,一个位于旧金山的小团队开发了一款名为 Deepnote 的笔记本工具,这是一种云协作、云硬件,上云的 Notebook…

在Linux中su和sudo区别,Linux中su和sudo的用法和区别

目录sudosudo:暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码,而不是超级账户的密码。缺点是每次执行超级用户权限都要在命令前加上 sudo ,优点是在当前终端再使用 sudo 不要再重复输入密码(只对…

python 提升效率_@Python 程序员,如何最大化提升编码效率?

作者 | Enoch CK 译者 | 刘畅 整理 | Jane 出品 | Python大本营 【导语】无论你是一位高级的AI工程师还是学生,你都会在工作或学习过程中需要用到 Python。自 1991 年首次发布后,Python 很快就成为了程序员和技术人员最喜欢的语言。作为一种拥有相对简单…

spring boot rabbitmq_Spring Boot+RabbitMQ 实现延迟消息实现完整版,实用!

本文同步Java知音社区,专注于Java作者:Sam哥哥http://blog.csdn.net/linsongbin1/article/details/80178122概述曾经去网易面试的时候,面试官问了我一个问题,说下完订单后,如果用户未支付,需要取消订单&…

jax-rs jax-ws_信守承诺:针对JAX-RS API的基于合同的测试

jax-rs jax-ws自从我们谈论测试和应用有效的TDD做法以来,已经有一段时间了,特别是与REST(ful) Web服务和API有关的做法。 但是,这个主题永远都不应忘记,特别是在每个人都在做微服务的世界中,无论…

怎么运行aws的示例程序_使Spring Boot应用程序在AWS上无服务器运行

怎么运行aws的示例程序在之前的 几篇 文章中,我描述了如何设置Spring Boot应用程序并在AWS Elastic Beanstalk上运行它。 尽管这是从物理服务器到云服务器的重要一步,但还有更好的可能! 走向无服务器 。 这意味着无需花费任何服务器费用&…

linux useradd 数字,详解linux useradd用户组合权限管理等

1,权限相关概念Rwx任何一个文件都应该由两部分组成,这两部分其实基于文件系统来组织,磁盘分区创建完成后,在高级格式化的时候,就把整个磁盘分区分成两部分,其中一部分是源数据,一部分是来放数据…

junit jndi_使用Spring创建用于JUnit测试的JNDI资源

junit jndi直到最近,我还使用静态方法来设置内存数据库(HSQLDB)。 我在JUnit测试的setUp / tearDown中调用了这些方法。 当我使用Spring时,这对我来说总是有点不自然,并且所有内容都应在其应用程序上下文中运行。 创建…

c语言程序经过编译以后生成的文件名的后缀为,c语言源文件经过编译后生成文件的后缀是什么...

c语言源文件经过编译后生成文件的后缀是什么c语言源文件经过编译后生成文件的后缀是“.obj”。C语言源程序经过编译程序编译之后,生成一个后缀为“.obj”的文件,最后由称为“连接程序”的软件,把此“.obj”文件与各种库函数连接在一起&#x…

通过PL/SQL developer工具访问远程的Oracle数据库_访问数据库_连接数据库_登录数据库

文章目录工具简介电脑没有安装 Oracle 数据库电脑安装了 Oracle 数据库工具简介 PL/SQL Developer 是 Oracle 数据库开发工具,PL/SQL Developer 功能很强大,可以做为集成调试器,有 SQL 窗口,命令窗口,对象浏览器和性能…

xgboost简单介绍_好文干货|全面理解项目中最主流的集成算法XGBoost 和 LightGBM

点击上方“智能与算法之路”,选择“星标”公众号第一时间获取价值内容本文主要介绍基于 Boosting 框架的主流集成算法,包括 XGBoost 和 LightGBM。送上完整的思维导图:XGBoostXGBoost 是大规模并行 boosting tree 的工具,它是目前…

本地 Windows 如何将 Web 工程部署到远程 Windows 主机上

文章目录第一步:先连接远程 Windows 主机:第二步:连接远程 Windows 主机后,把发布包复制到远程主机上并确定有关的目录第三步:删除远程主机的数据库中的旧数据第四步:创建新的用户和表空间第五步&#xff1…