一、引言

词向量是自然语言处理任务中非常重要的一个部分,词向量的表征能力很大程度上影响了自然语言处理模型的效果。如论文中所述,词向量需要解决两个问题:
(1)词使用的复杂特性,如句法和语法。
(2)如何在具体的语境下使用词,比如多义词的问题。
传统的词向量比如word2vec能够解决第一类问题,但是无法解决第二类问题。比如:“12号地铁线马上就要开通了,以后我们出行就更加方便了。”和“你什么时候方便,我们一起吃个饭。”这两个句子中的“方便”用word2vec学习到的词向量就无法区分,因为word2vec学习的是一个固定的词向量,它只能用同一个词向量来表示一个词不同的语义,而elmo就能处理这种多义词的问题。

作者认为好的词表征模型应该同时兼顾两个问题:一是词语用法在语义和语法上的复杂特点;二是随着语言环境的改变,这些用法也应该随之改变。作者提出了deep contextualized word representation 方法来解决以上两个问题。

这种算法的特点是:每一个词语的表征都是整个输入语句的函数。具体做法就是先在大语料上以language model为目标训练出bidirectional LSTM模型,然后利用LSTM产生词语的表征。ELMo故而得名(Embeddings from Language Models)。为了应用在下游的NLP任务中,一般先利用下游任务的语料库(注意这里忽略掉label)进行language model的微调,这种微调相当于一种 domain transfer; 然后才利用label的信息进行supervised learning。

ELMo表征是“深”的,就是说它们是biLM的所有层的内部表征的函数。这样做的好处是能够产生丰富的词语表征。高层的LSTM的状态可以捕捉词语意义中和语境相关的那方面的特征(比如可以用来做语义的消歧),而低层的LSTM可以找到语法方面的特征(比如可以做词性标注)。如果把它们结合在一起,在下游的NLP任务中会体现优势。

ELMo顾名思义是从Language Models得来的embeddings,确切的说是来自于Bidirectional language models。具体可以表示为:


这里的(t1,t2,…,tN)(t1,t2,…,tN)是一系列的tokens
作为语言模型可能有不同的表达方法,最经典的方法是利用多层的LSTM,ELMo的语言模型也采取了这种方式。所以这个Bidirectional LM由stacked bidirectional LSTM来表示。

二、elmo模型结构
2层biLSTM;
biLSTM层向量维度4096维;
投影层词向量维度:512维。
从最底层词嵌入层到第一层biLSTM输出层之间还有一个残差连接。
1、网络结构
一个输入层、一个卷积层、一个池化层。
2、原始输入
单个词的字符表示
(embedding_dimension, num——character)即(特征维度,字符数量)
图片所示为(4,9)。
elmo中使用的是(16,50),即一个词的最大长度为50,每一个字符用16维表示。
3、卷积
图中,卷积核大小为(4,3)的有4个(每一行代表一个卷积核卷积后得到的结果),大小为(4,2)的有3个,大小为(4,4)的有5个。
elmo中使用的卷积核的个数是2048个,分别是[1, 32], [2, 32], [3, 64], [4, 128], [5, 256], [6, 512], [7, 1024](第一维代表宽度,第二维代表个数)。
4、池化
对每一行进行最大池化,将池化结果拼接起来,形成维度为卷积核个数的词向量。
所以,elmo中的初始词向量是2048维,然后经过线性变化转化为512维。
————————————————
版权声明:本文为CSDN博主「三·川」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44081621/article/details/86649821
Elmo主要使用了一个两层双向的LSTM语言模型,常见的有两种表示方式,可结合起来理解,如下:

将前向和后向中用于词表示和用于Softmax的参数联系起来,也就是说,在两个方向共享了一些权重参数,而不是使用完全独立的参数
具体来讲如何使用ElMo产生的表征呢?对于一个supervised NLP任务,可以分以下三步:

产生pre-trained biLM模型。模型由两层bi-LSTM组成,之间用residual connection连接起来。
在任务语料上(注意是语料,忽略label)fine tuning上一步得到的biLM模型。可以把这一步看为biLM的domain transfer。
利用ELMo的word embedding来对任务进行训练。通常的做法是把它们作为输入加到已有的模型中,一般能够明显的提高原模型的表现。
印象中太深的NLP方面的模型基本没有,这和Computer Vision领域非常不一样。 当然这也是所解决问题的本质决定: Image的特征提取在人脑里就是从低阶到高阶的过程,深层网络有助于高级特征的实现。对于语言来讲很难定义这样的一个过程,这篇文章的两层biLM加residual connection的架构比较少见(Google的transformor是多层网络+residual connection一个例子)。文章认为低层和高层的LSTM功能有差异:低层能够提取语法方面的信息;高层擅于捕捉语义特征。

其实ELMo不仅可以作为下游模型的输入,也可以直接提供给下游模型的输出层。

ELMo提高了模型的效果,这说明它产生的word vectors捕捉到其他的word vectors没有的信息。直觉上来讲,biLM一定能够根据context区别词语的用法。下表比较了Glove和biLM在play这个多义词上的解释。

对于Glove来说,play的近义词同时涵盖了不同的语法上的用法:动词(playing, played), 名词(players,game)。
但是biLM能够同时区分语法和语义:第一个例子里的play名词,表示击球,第二个例子中play也是名词,表示表演。显然biLM能够在表示词语嵌入时考虑到context的信息。

ELMo向量与具体NLP任务的结合

ELMo模型的优缺点

优点:

效果好,在大部分任务上都较传统模型有提升。实验证实ELMo相比于词向量,可以更好地捕捉到语法和语义层面的信息。
传统的预训练词向量只能提供一层表征,而且词汇量受到限制。ELMo所提供的是character-level的表征,对词汇量没有限制。

缺点:速度较慢,对每个token编码都要通过language model计算得出。

适用任务

Question Answering问题回答
Textual entailment文本蕴涵
Semantic role labeling语义角色标注
Coreference resolution指代消解
Named entity extraction命名实体提取
Sentiment analysis情感分析

总结

ELMo在处理很多NLP下游任务中表现非常优异。但是我想这跟它集中在产生更好的词语级别的embedding是有关系的。过去介绍到的一些其他的算法,比如Quick thoughts也是利用了语言模型作为句子的encoder;还有InferSent使用biLSTM作为encoder。和ELMo相比,它们都显得“野心”太大:它们为下游的NLP任务提供了句子embedding的解决方案:即直接利用它们的pretrained encoder,最终的预测无非是加上softmax的classifier。
对比而言ELMo要单纯很多,它只提供了word级别的解决方案:利用它的pretrained biLM来产生word embedding,然后提供给下游的模型。这里的模型往往是sequence model,其效果已经在相应的NLP任务上得到验证。这时有了新的兼具语法语义及环境特征的word embedding的加持,难怪效果会更好。更不要说,ELMo还在任务语料库上小心翼翼的再进行过一轮微调,更是保证了对新domain的adaptation。

ELMo使得词汇的向量表示可以同时考虑语境和语法,解决了一词多义的情况。
不过ELMo本质是一个模型,在不同的任务、不同的上下文中,同一个词得到的词向量都是不一样的,因此,计算词汇的相似度时就会变得比较麻烦。

[NLP]高级词向量表达之ELMo详解相关推荐

  1. [NLP]高级词向量表达之Word2vec详解(知识点全覆盖)

    1.词表征(Word Representation) 首先明确句子是 序列化 ,里面携带了大量大信息.在NLP发展的进程里面, 采用了one-hot vector的形式来表示一个句子里面的词是一种方式 ...

  2. [NLP]高级词向量之谷歌BERT详解

    1. 前言 如何让搜索引擎呈现用户想要的结果是困扰谷歌工程师的一大难题.谷歌搜索英文版于2019年10月25日上线BERT算法,他们的搜索引擎用上了强大的 BERT 预训练模型,可以让搜索引擎结合语境 ...

  3. NLP︱高级词向量表达(二)——FastText(简述、学习笔记)

    FastText是Facebook开发的一款快速文本分类器,提供简单而高效的文本分类和表征学习的方法,不过这个项目其实是有两部分组成的,一部分是这篇文章介绍的 fastText 文本分类(paper: ...

  4. NLP︱高级词向量表达(三)——WordRank(简述)

    如果说FastText的词向量在表达句子时候很在行的话,GloVe在多义词方面表现出色,那么wordRank在相似词寻找方面表现地不错. 其是通过Robust Ranking来进行词向量定义. 相关p ...

  5. NLP︱高级词向量表达(一)——GloVe(理论、相关测评结果、Rpython实现、相关应用)

    有很多改进版的word2vec,但是目前还是word2vec最流行,但是Glove也有很多在提及,笔者在自己实验的时候,发现Glove也还是有很多优点以及可以深入研究对比的地方的,所以对其进行了一定的 ...

  6. NLP【05】pytorch实现glove词向量(附代码详解)

    上一篇:NLP[04]tensorflow 实现Wordvec(附代码详解) 下一篇:NLP[06]RCNN原理及文本分类实战(附代码详解) 完整代码下载:https://github.com/ttj ...

  7. 词向量之TF-IDF模型详解

    目录 0 前言 1 TF-IDF模型 1.1 TF-IDF数学形式 1.2 举例 2 TF-IDF的实现 2.1 TF-IDF简单python实现 2.2 TF-IDF的gesim实现: 2.3 TF ...

  8. FastText 总结:文本分类、词向量训练、参数详解

    FastText:文本分类.词向量训练.参数详解 前言 - FastText 简介 一.FastText - 安装 1.1 - Github下载安装 1.2 - 编译器安装 二.FastText - ...

  9. 词向量:GloVe 模型详解

      本内容主要介绍构建词向量的 GloVe 模型. 1 前言   在 GloVe 模型被提出之前,学习词向量的模型主要有两大类: 全局矩阵分解方法,例如潜在语义分析(Latent semantic a ...

最新文章

  1. tomcat 部署:直接访问域名访问项目
  2. 北京低利用率数据中心将有序关闭腾退
  3. 五一好礼70份免费送:示波器、开发板、焊台等!
  4. ajax 赋值return
  5. python将字典作为参数传入函数
  6. 吊打面试官 | Java到底是值传递还是引用传递
  7. python读取两行字符串_python - 如何为两行之间的行分配值,并在数据帧的列中使用特定字符串? - SO中文参考 - www.soinside.com...
  8. windows下安装linux环境
  9. 手机输入法带拼音声调_最好用的输入法,百度输入法带你体验更智能的拼音输入法...
  10. UWP 应用通知Notifications
  11. 我的孤独自学之路----kali 安装及更新源
  12. 文本数据挖掘实验:文本分类
  13. 2022-07-12 读书笔记:《写给所有人的极简统计学》
  14. 解题报告 之 UVA11134 Fabled Rooks
  15. 中文/英文]VC6 sp6补丁下载|VS6 sp6补丁下载
  16. MTK5G平台 MT6885/MT6853/MT6873如何配置长按关机
  17. 美林数据“智能反窃电分析应用”荣获大数据星河奖
  18. AMM和ASMM理解
  19. ​企业商城APP开发制作的3种方式各需要多少钱
  20. Huffman和Priority_queue 解决POJ 1521

热门文章

  1. 如何刷新本机DNS缓存(Win+Linux+OSX)
  2. proteus练习(1) 流水灯的实现
  3. 特斯拉数字车钥匙卡评价
  4. Failed to push the item
  5. 《数据结构与算法》——Java版
  6. 分享一个MAC下避开百度网盘限速下载的方法,三步操作永久生效
  7. 交换机原理与配置(理论详解)
  8. openlayers结合谷歌api进行地图定位
  9. word中目录右边页码对不齐解决方法
  10. CET-4 week7 融会贯通