我们已经学习了多种词向量的表示方法,嵌入词向量,基本上都是通过学习语言模型LM学习来的副产品。

但是都有一个很大的缺点就是,每一个单词都假设只有一个特定的嵌入向量表示,这显然还是不太符合我们的语言习惯,因为显然有时候同一个词语会有不同的意思,也就是一词多义,不论是中文英文都有这现象。例如单独看一个词语 Apple,我们不能确定说它的含义是“苹果”还是“苹果公司”,单词表示固然重要,但是必须得结合上下文才能具体表达含义。也就是该词向量一旦训练完成,词向量都是不会变化了的,不论将来使用的上下文如何变化,词向量依然保持数值不变。这个数值不变,带来的影响就是词向量没有很好携带上下文的信息,是独立于上下文的存在。

我们希望在谈论水果的时候,词向量“Apple”和“watermelon”更加接近,谈论科技公司的时候,词向量“Apple”和“HUAWEI”更加接近,而不是二者之间取了个均和值,用一个值来代表这个多义词。

ELMo模型就用于解决上述问题。So, Let’s start…

一:整体介绍

这个模型就定义好了,训练的话就是根据预料库输入每个句子,进行语言模型的训练。

它是一个多层双向的LSTM的RNN模型,用于训练LM,论文中给的是双层双向的。

当前有一个句子s={t1, t2, t3, t4,…,tN},有N个token
前向LSTM,根据前K-1个token预测第K个token的条件概率。

后向LSTM,根据后(N-k)个token预测第K个token的条件概率。

嗯,很符合基于双向LSTM的LM的概念定义哈,如果这里不熟悉可以参考之前学习的基于RNN的语言模型文章NLP《语言模型(三)-- 基于循环神经网络的RNNLM语言模型》。

最后我们希望用极大似然估计出目标token的最大概率值,目标函数如下,此处是求最大,加上负号就是转换成了求最小。

我们需要注意的几个向量,假设模型是L层的,对于每一个token,t_k来说,有2L+1层个向量。

这些向量很有用,每一层越往上越能学习一些高级的特性,从单词,到句法,再到语法语义,都是逐渐学习更深层的含义,包含了上下文的信息。

如上,我们LM训练好了,我们得到一堆的向量,正如上式所描述那样。至此,ELMo的第一阶段,训练LM全部结束了。

使用的话,到底怎么用呢?简单一点的话,直接使用最上层(最后一层)的向量作为词向量不就好了么,但是更加普遍的做法是“我全都要”,因为每层lstm输出,或者每层lstm学到的东西是不一样的,针对每个任务每层的向量重要性也不一样。

值得注意的是,每一层有一个前向lstm的输出,一个后向lstm的输出,两者就是简单的拼接起来的。也就是如果分别都是m1维的列向量,拼完之后就是2m1的列向量,就这么简单。这样的话,从数量上,也就是将2L+1个向量转换为了L+1个向量。

如果是双层双向的LSTM模型,那么就会产生3个向量,
每次输入一个新的句子,它的输出是多个Embedding向量,除了原生的和word2vec一样的E1向量(这个是固定的),还多了一些根据上下文语义形成的其他Embedding向量,E2,E3,等等,这些更高层的向量是根据上下文动态生成的带有语义信息的向量,因此能解决多义词的问题,越往上的向量,携带的信息量就越多。

因此,如下图所示,每一层的向量我都要,通过加权来决定向量的重要程度,加权的参数是通过下游任务训练共同训练出来的。

例如上图展示了下游任务的使用过程,比如我们的下游任务仍然是 QA 问题,此时对于问句 X,我们可以先将句子 X 作为预训练好的 ELMO 网络的输入,这样句子 X 中每个单词在 ELMO 网络中都能获得对应的三个 Embedding,之后给予这三个 Embedding 中的每一个 Embedding 一个权重a,这个权重可以学习得来,根据各自权重累加求和,将三个 Embedding 整合成一个。

总结一下,不像传统的词向量,每一个词只对应一个词向量,ELMo利用预训练好的双向语言模型,然后根据具体输入从该语言模型中可以得到上下文依赖的当前词表示(对于不同上下文的同一个词的表示是不一样的),再当成特征加入到具体的NLP有监督模型里。其词向量是动态生成的。

它的缺点是:
1:不能并行化,因为是RNN模型,只能递归预算,无法并行。

NLP《词汇表示方法(六)ELMO》相关推荐

  1. 机器学习笔记之马尔可夫链蒙特卡洛方法(四)吉布斯采样

    机器学习笔记之马尔可夫链蒙特卡洛方法--吉布斯采样 引言 回顾:MH采样算法 基于马尔可夫链的采样方式 细致平衡原则与接收率 MH采样算法的弊端 吉布斯采样方法 吉布斯采样的采样过程 吉布斯采样的推导 ...

  2. NLP《词汇表示方法(三)word2vec》

    Word2Vec是2013年Google发布的工具,也可以说是一个产生词向量的一群模型组合,关于词向量,也就是嵌入词向量的解释之前也解释了,这里不赘述.该工具主要包含两个词向量的生成模型,跳字模型(s ...

  3. 深入理解深度学习——Word Embedding(六):负采样(Negative Sampling)优化

    分类目录:<深入理解深度学习>总目录 相关文章: · Word Embedding(一):word2vec · Word Embedding(二):连续词袋模型(CBOW, The Con ...

  4. 负采样Negative Sampling

    1.噪声对比估计(Noise contrastive estimation) 语言模型中,根据上下文c,在整个语料库V中预测某个单词w的概率,一般采用softmax形式,公式为: NCE:将softm ...

  5. 自然语言处理中的负采样

    目录 word2vec出现的背景 跳字模型(skip-gram) 连续词袋模型(CBOW) 小结 负采样 具体训练过程 word2vec出现的背景 我们都知道,自然语言处理需要对文本进行编码,将语言中 ...

  6. NLP《词汇表示方法(四)负采样》

    一:负采样 在CBOW和Skip-Gram模型中,最后输出的都是词汇的one-hot向量,假如我们的词汇表的数量是10000,嵌入空间的维度是300,再假设此时是以Skip-Gram模型只预测cont ...

  7. 花书+吴恩达深度学习(二四)蒙特卡罗方法(重要采样,MCMC)

    文章目录 0. 前言 1. 重要采样 2. 马尔可夫链蒙特卡罗 MCMC 3. 不同峰值之间的混合挑战 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~ 花书+吴恩达深度学习( ...

  8. 【NLP】word2vec负采样

    一.理解负采样之前,需要先回顾一下word2vec的训练流程: 1.初始化一个embedding权重矩阵W1(N*D)→2.根据输入单词直接挑出W1矩阵中对应的行向量→3.相加并求平均得一个向量(1* ...

  9. [nlp] 负采样 nce_loss

    论文:http://demo.clab.cs.cmu.edu/cdyer/nce_notes.pdf 参考:求通俗易懂解释下nce loss? - 知乎 参考:(三)通俗易懂理解--Skip-gram ...

  10. NLP-词向量(Word Embedding)-2013:Word2vec模型(CBOW、Skip-Gram)【对NNLM的简化】【层次Softmax、负采样、重采样】【静态表示;无法解决一词多义】

    一.文本的表示方法 (Representation) 文本是一种非结构化的数据信息,是不可以直接被计算的.因为文本不能够直接被模型计算,所以需要将其转化为向量. 文本表示的作用就是将这些非结构化的信息 ...

最新文章

  1. Java项目:小蜜蜂扩音器网上商城系统(java+JSP+Servlet+JDBC+Ajax+mysql)
  2. python发送文件给微信好友_Python定时自动给微信好友发送天气预报
  3. VTK:vtkBoxWidget用法实战
  4. 入坑-DM导论-第一章绪论笔记
  5. Python 代码混淆和加密技术
  6. 忘记redhat linux root密码怎么办
  7. 我见过的一个让我瞠目结舌的电脑高手!
  8. 0-1语言建模当中会遇到的问题
  9. TypeScript 里 never 类型的用法举例
  10. Typescript前端接口联调自动化的探究与实践
  11. java wrapper linux_Java Service Wrapper linux 服务 java 自启动
  12. JSP的7个动作指令-forward指令
  13. 2021计算机职业适应性测试考什么,单招考试面试内容(职业适应性测试)大纲详解(信息技术类)...
  14. 都爱云支付首页模板(上传即可使用)
  15. 旅游后台管理系列——SSM框架Service层整合
  16. 苹果系统备份文件服务器地址,iphone备份文件在哪 iphone备份文件位置介绍
  17. 炼石白小勇:合规与实战推动密码产业发展
  18. 未来十年的暴富机会--屌丝离财务自由到底有多远?(三)
  19. Android MediaPlayer中的RTSP(一):RTSP简介
  20. java基础之super关键字_繁星漫天_新浪博客

热门文章

  1. connect.js源码解析
  2. UITableViewCell自适应高度
  3. bzoj 1061 志愿者招募 费用流
  4. 卸载Oracle数据库(有图有真相)
  5. ORACLE中date类型字段的处理
  6. Nginx的Gzip介绍之压缩和解压缩
  7. IntelliJ IDEA Community社区版集成Tomcat or Jetty教程
  8. ERROR: Unrecognized command line argument: #39;use#39;
  9. python configparser模块来 读取 、 创建 和 修改 配置文件
  10. 【C语言】写一个函数,并调用该函数求两个整数的最大公约数和最小公倍数