大纲:

  • 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

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

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

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

Local generalization(局部泛化能力):

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

Global generalization(全局泛化能力):

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

3. how to learn word2vec - intuition

给定一个句子

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

词向量:

  • 上下文无关(静态词向量):SkipGram CBOW Glove
  • 上下文有关(动态词向量):Bert ELMO
  • CBOW:利用上下文词预测中心词
  • SkipGram:利用中心词预测上下文词
  • NNLM:利用前面的(n-1)个词预测第n个词
  • Bert:随机选择一些词MASK掉,再用上下文词预测被MASK的词是什么

4. SkipGram

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

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

SkipGram 核心思路:

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

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

目标函数为:

因此skipgram的目标函数为:

是中心词,
是上下文词

举例:

语料库:

doc1: 今天 天气 很好

doc2: 今天 上 NLP 课程

k=1


接下来看

是什么。

embedding matrix

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

举例:

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


现在的skipgram的目标函数为:

现在出现了

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

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

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

5. SkipGram Negative Sampling

对于中心词

我们希望窗口内的
越大越好,窗口外的
越小越好。
表示
出现在同一窗口内的概率,即
的上下文词的概率,中心词和上下文词对
来自语料库。
表示
不出现在同一窗口内的概率,即
不是
的上下文词的概率,中心词和上下文词对
不是来自语料库。

如果

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

如果

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

其中

其中

让人想起了逻辑回归


举例:

语料库: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

因此:


第一次编辑(2020)


参考:

Dong:词向量技术的学习​zhuanlan.zhihu.com

陈运文:漫谈Word2vec之skip-gram模型​zhuanlan.zhihu.com

深度学习之Skip-Gram和CBOW原理_hongwei的博客-CSDN博客_cbow 和 skip-gram,以及两种方式的损失函数构造​blog.csdn.net

深度学习之Skip-Gram和CBOW原理_hongwei的博客-CSDN博客_cbow 和 skip-gram,以及两种方式的损失函数构造​blog.csdn.net

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

  1. 负样本为王,百篇论文概览负采样方法的前世今生

    文|徐澜玲 源|RUC AI Box 目录 1. 研究背景 1.1 什么是负采样? 1.2 为什么需要负采样? 1.3 为什么需要高质量的负采样? 2. 负采样方法分类梳理 2.1 静态负采样 2.2 ...

  2. NLP系列(10)_词向量之图解Word2vec

    审校:龙心尘 作者:Jay Alammar 编译:张秋玥.毅航.高延 https://blog.csdn.net/longxinchen_ml/article/details/89077048 原文链 ...

  3. cbow word2vec 损失_词向量word2vec之CBOW算法

    词向量模型之CBOW模型的原理与实现 关于词向量模型word2rec,平台里只有skip-gram一个模型的代码实现,本项目将对word2rec算法的第二个模型--CBOW模型进行补充 此项目用于交流 ...

  4. bert获得词向量_词向量详解:从word2vec、glove、ELMo到BERT

    目前,词向量(又叫词嵌入)已经成为NLP领域各种任务的必备一步,而且随着bert elmo,gpt等预训练模型的发展,词向量演变为知识表示方法,但其本质思想不变.学习各种词向量训练原理可以很好地掌握N ...

  5. python生成词向量_词向量是如何生成的

    终于开了NLP的坑了(`・д・´),这次聊聊词向量是怎样生成的.现在有很多现成的模型,cbow,skip-gram,glove等,在python不同的库里面就可以调用(比如fasttext,genis ...

  6. 目标检测误检与负样本问题

    在做目标检测算法模型的时候,有时候会遇到模型预测,效果不好,或者误识别的情况(明明人眼都能识别出来的东西, 模型却识别错误,像狗识别成猫都好理解,但会遇到一个衣服会识别成猫的),出现这些误检问题分几种 ...

  7. KDD 2021 | 一种使用真负样本的在线延迟反馈建模

    ▐  摘要 电商场景的多目标模型预估,包括加购率,转化率,进店,时长等等.在展示广告领域,多目标体现了广告主对自己真实诉求的表达,因此,多目标模型既是技术项目,也有强烈的业务属性.广告排序系统,从上到 ...

  8. MoCo 动量对比学习——一种维护超大负样本训练的框架

    MoCo 动量对比学习--一种维护超大负样本训练的框架 FesianXu 20210803 at Baidu Search Team 前言 在拥有着海量数据的大型互联网公司中,对比学习变得逐渐流行起来 ...

  9. SVM+HOG:从完全不包含人体的图片中随机剪裁出64*128大小的用于人体检测的负样本

    进行行人检测的分类器训练时,负样本是从完全不包含人体的图片中随机剪裁出来的,下面程序的目的就是这个:1张负样本图片生成10张 准备工作:创建负样本描述文件(全路径)ifstream fin(" ...

最新文章

  1. Kotlin 中 switch 写法
  2. LiveQing视频流媒体开放平台利用 webpack 打包压缩后端代码
  3. JSTL笔记—c标签
  4. 百度搜索与推荐引擎的云原生改造
  5. antd的 input有下拉_antd select下拉添加全选的按钮
  6. mybatis 取list第一个_Mybatis(五)- 多对一
  7. oracle 删除表中重复记录,并保留一条
  8. Java中接口、抽象类与内部类学习
  9. 干货集锦:200+生信范文、30+款软件、12类图片素材PPT,今年的SCI稳了!(附下载)...
  10. 使用OVF部署虚拟机
  11. [转]Python3之max key参数学习记录
  12. 如何避免开源安全噩梦?
  13. JavaScript 开发者经常忽略或误用的七个基础知识点
  14. java编辑遗忘曲线代码_用jsp写出记忆曲线的表格(用学习新概念英语做例子)
  15. vue实现大转盘抽奖
  16. 我把视频变成链接_H5中加视频?这才是正确姿势
  17. 助力网络安全发展,安全态势攻防赛事可视化
  18. 俞敏洪老师谈英语单词记忆方法——转
  19. 今日网易邮箱126无法访问
  20. 什么是空热量的食物?“空热量”的谬论

热门文章

  1. Java / Spring:如何快速生成整个Swagger记录的CRUD REST API
  2. Mockito“ thenReturn” vs Mockito“ thenAnswer”
  3. ejb生命周期_无状态EJB:池化和生命周期
  4. ClassNotFoundException:是否会减慢您的JVM?
  5. 如何为您的AWS账户设置多因素身份验证(MFA)
  6. eclipselink_EclipseLink MOXy和用于JSON处理的Java API –对象模型API
  7. jpa加密_使用JPA侦听器的数据库加密
  8. Java Syncrhonisers
  9. MQTT和Java入门
  10. spring 开发环境_设置Spring 3开发环境