背景区域为负样本什么意思_词向量-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分层驱动思想,外设驱动与主机控制器的驱动不相关,主机控制器的驱动不关心外设,而外设驱动也不关心主机,外设访问核心层的通用应用程序接口进行数据传输,主机和外设之间可以进行任意的组合。这样思想要…

生成验证码图片的Java代码

文章目录验证码演示代码请求资源路径为什么要添加一个随机数的参数验证码演示代码 package priv.lwx.javaex.servlet_demo.web.servlet.response;import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import …

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

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

python数学要求_python数学工具之积分(1)

加载库Polygon,绘制积分图形。 fig, ax plt.subplots(figsize(7, 5))表示绘图尺寸为7*5;plt.plot(x, y, b, linewidth2)表示绘制蓝色线宽为2的函数图形;plt.ylim(ymin0)表示y轴最小值为0;Ix np.linspace(a, b)表示lx取值范围为[…

linux swap分区与内存,虚拟内存和swap分区的关系

首先,这两个概念分别对应windows和linux,即:windows:虚拟内存linux:swap分区windows即使物理内存没有用完也会去用到虚拟内存,而Linux不一样 Linux只有当物理内存用完的时候才会去动用虚拟内存(即swap分区)…

.net2.0 orm_Java 8:深入研究速度3.0.1“森林”流ORM

.net2.0 orm沿着这条路 我一直在为开源项目Speedment (它是Stream ORM Java工具包和运行时)做出贡献,并且刚刚发布了一个新的主要版本3.0.1“ Forest”。 版本的发布是以加利福尼亚帕洛阿尔托的大街小巷命名,大多数贡献者都在此工…

JavaScript/JS如何给元素对象添加事件

使用普通的 js 代码给元素对象添加事件 绑定事件,添加事件处理程序: var obj document.getElementById("name"); obj.onclick f1; function f1(){ alert("hello!"); }说明:函数名 f1 就是一个引用数据类型的变量&…

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 的世界里比较小众&…

python初学者代码示例_Selenium 快速入门笔记和代码示例(Python版)

链接 文档链接: 安装 selenium 模块和 Chrome 浏览器驱动 步骤: 安装 Selenium 模块: pip install selenium 下载浏览器驱动(下载即可,无需安装,使用时要指定它的路径):请参考 https…

用例描述

用例名称:简要说明/描述, 优先级: 参与者: 事件流:就是用例执行时,由一序列活动组成的控制流。 基本事件流:对用例中常规、预期路径的描述。 扩展事件流:主要是对一些异常情况、选…

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

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

清除java_如何在Java地毯下有效地清除问题

清除java因为软件错误可能使我们在开发人员面前看起来很糟糕,并导致其他人对我们的想法减少,所以最好避免编写错误,快速识别和修复错误或掩盖我们的错误。 有许多博客文章和文章讨论如何避免错误以及如何识别和修复错误,因此&…

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

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

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

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

java 编写代码_如果您在2016年编写过Java代码-这是您不容错过的趋势

java 编写代码2016年最有趣的Java相关主题 关于代码,有很多热门话题,而要跟上所有事情,这是一项全职的工作。 如果您想知道如何从谷壳中分离出小麦,我们已经为您完成了工作。 在下面的文章中,我们将介绍2016年最热门…

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

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

linux安java,Linux安装Java

从人类社会的角度看OO(独家视角)引言 在OO的工作中,我们一定会涉及到类,抽象类和接口.那么类和抽象类以及接口到底扮演的什么角色? 本文主要是从人类社会的角度阐述类与抽象类以及接口的"社会"关系,从而让我们抛弃书 ...include与require的区别&a…

前端和后端的区别

后端工程师负责服务器端应用程序的编写开发(业务逻辑、方法、函数、数据库代码等) 前端工程师负责UI的html代码编写和设计,所以前端工程师一般指网页工程师 前端部分是和用户直接交互的,包括前台和后台部分 客户端其实就是属于前端…

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

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