虽然是个NLP小白,但是感觉ELMo怎么这么眼熟,就在碰见的时候下载下来读一读了。

论文地址:https://arxiv.org/abs/1802.05365

以下是正文:

ELMo是一种计算词嵌入的方式,旨在表示出词的更丰富的信息以及引入上下文相关的性质,同一个词在不同上下文中的表示也不同。


引言

作者认为,一个好的词嵌入表示要满足两个特征:(1)能表达出词的复杂的特征(2)要能综合上下文的信息来对当前词进行表示。这也就是本文提出的ELMo所具有的特征。

针对第二个特征,ELMo通过使用LSTM使得整个模型是整个句子的函数来满足。而根据后面提到的实验,LSTM的不同层捕捉到的是不同层次的信息,较高的LSTM层捕捉到的是上下文内容依赖的词义的信息,较低的LSTM层捕捉到的是有关句法的信息。ELMo通过对LSTM的不同层的表示进行加权求和来综合这不同层次的信息,从而满足第一个特征。


相关工作

这一部分作者讲了其他的一些词嵌入的算法,不过因为这是我看的第一个词嵌入的论文,作者提到的这些都没看过,因此也就迷糊迷糊地读完了。不过就算不知道也不影响主要内容。


ELMo:Embeddings from Language Models

首先介绍双向语言模型(biLM)。

语言模型是指,给定一些历史词,预测当前词的概率,比如常见的n-gram模型等,整个句子出现的概率就是每个词的概率的连乘,公式表达就是:

p(t_{1},t_{2},t_{3}...t_{N})=\prod _{k=1}^{N}p(t_{k}|t_{1},t_{2}...t_{k-1})

作者这里用LSTM来实现语言模型。首先选用一种方法(作者提到有token embeddings或者CNN over characters,我也不太懂,之后有时间看完来这里贴个链接)来对句子中的每个词进行一个向量表示,用符号表示就是x_{k}^{LM},之后送进一个两层的单向LSTM中,每一个x_{k}^{LM}对应的当前时间步的输出,在送进softmax层计算之后,我们认为是下一个位置出现什么词的概率,即[p('a'|t_{1},t_{2}...t_{k}),p('abound'|t_{1},t_{2}...t_{k})....]

反向LSTM和正向LSTM类似,只是这里是给定后面的词,预测当前的词的概率,即

p(t_{1},t_{2},t_{3}...t_{N})=\prod _{k=1}^{N}p(t_{k}|t_{k+1},t_{k+2}...t_{N})

在构建好正向LSTM与反向LSTM之后,我们的联合优化目标是最大化两个方向上的对数概率,公式如下,也就是最大化我们根据模型认为这个句子出现的概率:

\sum_{k=1}^{N}(log p(t_{k}|t_{1},t_{2}...t_{k-1};\Theta_{x},\Theta^{\rightarrow }_{LSTM},\Theta_{s})+log p(t_{k}|t_{k+1},t_{k+2}...t_{N};\Theta_{x},\Theta^{\leftarrow }_{LSTM},\Theta_{s}))

式子中\Theta_{x}是指在进行LSTM计算前对词进行向量表示的算法的参数,\Theta_{s}是指softmax的计算。公式中可以看到,作者在正向与反向中均使用相同的\Theta_{x}\Theta_{s},只有LSTM的参数不同。

通过以语言模型为任务导向,这里的双向LSTM可以做到无监督训练,即训练数据不需要有标签。

在此基础上介绍ELMo。

通过上面的双向LSTM(假设有L层),每个单词我们可以得到2L+1个有关的表示,一个是输入向量,然后正向与反向LSTM的L个层一共产生2L个向量。

进一步将输入向量视为第0层隐藏层的输出,可以符号化为(不想打公式了,截图吧):

然后ELMo对这L+1个向量进行加权平均,公式为:

s^{task}就是进行加权平均的权值,\gamma _{task}是一个尺度因子,具体的作用是可以让模型自己选择合适的尺度,有助于优化过程。这两种参数都是和下流应用一起通过优化进行学习的。

怎么应用这个ELMo?

对于下流应用或者模型,原本是有一个上下文无关的输入x_{k},我们将所有的这些x_{k}输入到前面建立的ELMo中得到ELMo_{k}^{task},我们将这两个向量进行连接得到[x_{k},ELMo_{k}^{task}],作为下流模型的新输入即可。

作者提到,这里的ELMo不是只能应用在输入上,而是还可以应用到其他与上下文有关的地方比如输出,有的应用对模型的输出h_{k}咋不同层次上进行ELMo也可以提升性能(此h_{k}非ELMo中的h_{k},而是指下流模型在k时间步的输出)。

此外,dropout和通过\lambda||\omega ||_{2}^{2}进行正则化都是有帮助的。这会使模型引入对每个层同等权重的偏好,即偏好取所有层的输出的算术平均(非加权)。

一些改变

作者提到,作者应用的LSTM是有残差连接的(残差连接在resnet里有介绍,我的曾经笔记链接【论文阅读】Deep Residual Learning for Image Recognition_野生的野蛮人的博客-CSDN博客)。

还有,刚才的介绍中,我们是先用无监督学习的方式训练biLM,之后再训练下流模型的时候这个biLM是要被冻结的,不再进行学习。不过当数据量多的时候,微调这个biLM也是能够提升性能的。


实验

这一部分是在说应用ELMo会使得很多NLP任务取得同时代的更好的性能,包括Question answering、Textual entailment、Semantic role labeling、Coreference resolution、Named entity extraction、Sentiment analysis这六个NLP任务。具体数据就不展示了。


分析

作者同时做了很多实验来分析ELMo的各个方面。

实验一:biLM的层的加权平均比单独用最上层更好

作者比较只用biLM的最上层的输出会怎样,结果表示,性能不如用所有层的加权平均。同时,作者也尝试改变了正则化参数\lambda\lambda ||\omega ||^{2}_{2}中的参数),\lambda =1代表我们希望直接取每个层的平均(不加权),\lambda =0.001则表示我们允许不同层的权值有很大差异。结果表示,允许模型更自由地决定各个层的权值会更好:

实验二:在不同位置引入ELMo

前面提到,不仅可以在模型的输入处引入ELMo,还可以在其他地方比如输出处引入。作者尝试在不同任务的模型的输出处引入ELMo,发现有的模型适合在输出处引入,而有些模型不适合,会降低性能。

实验三:biLM的不同层提取不同层级信息

这一部分,作者首先拿ELMo对词的表示与GloVe进行对比。在GloVe中,我们取一个词,并寻找与GloVe给出的表示很相近的其他词。ELMo也同样,不过ELMo要对不同上下文的同一个词进行区分。作者拿‘play’进行举例:

可以发现,GloVe给出的与‘play’相近的其他词中不同词性的都有,而biLM(也就是ELMo)则可以很好地区分同一个词在不同上下文中的词性,即ELMo能够提取到很好丰富的信息,进行更好的歧义消除。

在这之后,为了分析biLM的不同层都提取到了什么信息,作者拿biLM的不同层的表示进行两个任务上的比较,即歧义消除(Word sense disambiguation,WSD)和词性标注(POS tagging)。结果发现,在歧义消除任务上,最高层比最低层的效果好,在词性标注上则反之,最低层比最高层的效果好。这意味着不同层提取到了不同层次的信息,低层捕获词性等构词信息,而高层捕获词义等语义信息。

实验四:训练效率更高、数据集利用更好

意思是,如果以达到某一设定的准确率或者分数为目标,那么用ELMo所需要的的训练轮数更少,所需的数据集更小。

实验五:可视化权重

图示如下,没啥比较有启发性的信息:


总结

结束啦


记一些不会的地方:

1.上面提到ELMo可以应用到某些模型的输出的位置,有的效果更好,有的效果更差,作者给出的解释我看不太懂:

感谢作者!

【论文阅读】Deep contextualized word representations相关推荐

  1. 论文笔记--Deep contextualized word representations

    论文笔记--Deep contextualized word representations 1. 文章简介 2. 文章概括 3 文章重点技术 3.1 BiLM(Bidirectional Langu ...

  2. 文献阅读 - Deep Contextualized Word Representations

    Deep Contextualized Word Representations M. E. Peters, M. Neumann, M. Iyyer, M. Gardner, et al., Dee ...

  3. Deep contextualized word representations

    引言 这是2018年NAACL上的Best Paper,即是大名鼎鼎的ELMo,原文地址:https://arxiv.org/pdf/1802.05365.pdf 对比传统Word2Vec这种形式的词 ...

  4. Paper:《ELMO:Deep contextualized word representations》翻译与解读

    Paper:<ELMO:Deep contextualized word representations>翻译与解读 目录 <ELMO:Deep contextualized wor ...

  5. ELMo:最好用的词向量(Deep contextualized word representations)论文 pdf

    下载地址:https://u20150046.ctfile.com/fs/20150046-376633397 作者:Matthew E. Peters, Mark Neumann, Mohit Iy ...

  6. ELMo: Deep contextualized word representations

    Abstract 本文介绍一种新型的上下文词表示可以建模: 词的复杂用法特征(例如句法或者语义特征) 在不同的语言上下文中的用法变化(例如多义词) 我们的词向量是学到的深度双向语言模型(biLM)内部 ...

  7. 年龄论文阅读——Deep Label Distribution Learning With Label Ambiguity

    论文阅读--Deep Label Distribution Learning With Label Ambiguity 版权声明:本文为博主原创文章,未经博主允许不得转载.https://blog.c ...

  8. 论文阅读|struc2vec: Learning Node Representations from Structural Identity

    论文阅读|struc2vec: Learning Node Representations from Structural Identity 文章目录 论文阅读|struc2vec: Learning ...

  9. 论文阅读--Deep Stereo using Adaptive Thin Volume Representation with Uncertainty Awareness

    UCSNet(CVPR2020) 论文阅读 UCSNet(CVPR2020) 1. MVSNet 2. UCSNet细节 a. Cascade module b. Plane sweep volume ...

  10. [HSI论文阅读] | Deep Feature Extraction and Classification of Hyperspectral Images Based on CNNs

    写在前面 论文: Y. Chen, H. Jiang, C. Li, X. Jia and P. Ghamisi, "Deep Feature Extraction and Classifi ...

最新文章

  1. LBP特征学习(附python实现)
  2. URAL 1047 Simple Calculations
  3. c语言实现stack的算法(附完整源码)
  4. 深入学习c++--智能指针(三) unique_ptr
  5. SAP Spartacus UI ConfigurableRoutesService router.resetConfig 的调用逻辑
  6. CF1063C Dwarves, Hats and Extrasensory Abilities
  7. 使用Jquery插件bTabs实现多页签打开效果
  8. java.lang.NullPointerException: Project directory not specified
  9. 浅析如何让Spring 来管理Action的配置方法
  10. html5游戏技术指标,2019上半年手游指标报告:Day 1留存率低于30%不及格?
  11. java 反射调用方法_Java 反射详解,重要方法解析
  12. Chapter9:Simulink建模与仿真
  13. MySQL 安装 5.0
  14. 将视频截取成图片的C++代码
  15. 身为管理者必须会讲的68个小故事
  16. ffmpeg命令行将ts转码为mp4
  17. 计算机如何进入ping,电脑怎么ping网络,教你电脑怎么ping网络
  18. float型数据表示的最大数字到底是多少(答案:0x7f7f ffff)
  19. zc706开发板的linux开发,第一篇:zc706 开箱及开发环境搭建
  20. 闭关备战python面试50天,“啃完”这份python面试宝典,我终于四面拿下阿里offer

热门文章

  1. Qt5学习笔记之bin文件合成工具三:偏移量数据填充
  2. 19-matlab知识点复习二
  3. 【Python】闭包Closure
  4. 昨天一冲动,给头儿说留所了。。。
  5. aspnet ajax 1.0中的according控件
  6. Graduation Speech 毕业典礼致辞__转载
  7. 【vscode】vscode + vue项目实战记录
  8. Altium Designer(六):Make Library
  9. labview 快捷键
  10. Android中ListView动态加载数据