elmo论文阅读:Deep contextualized word representations

0. 摘要

我们介绍了一种新的基于上下文的深度单词表示,这种表示既建模了复杂的单词使用特征,也建模了这些表示在不同的语境下的区别。我们的词向量是双向语言模型下内部状态的函数,这个双向语言模型是通过大量的语料预训练的。研究表明,这些表示可以比较容易的加入到先有的模型中,并且显著提升了6个NLP问题的SOA,包括问答、文本蕴含关系、情感分析。我们还给出了一个分析,该分析表明,暴露预训练网络深度内容是非常重要的,它允许下游模型将它混合半监督信号。

1. 引言

预训练在很多神经语言模型中是非常关键的组成部分,然而,学习高质量的表示是比较有挑战性的。这需要较好的建模两个方面:1. 单词表示的复杂特征(语义和语法)。2.根据上下文变化。本文中,介绍了一种新的“上下文相关的深度”表示,可以直接应对这两项挑战,还可以轻易的整合到其他的先有模型中。还能显著的提高一系列自然语言理解任务的SOA。

我们和传统的表示不同的地方在于:我们的表示中,每一个token对应的表示都是整个句子的函数。我们的向量表示,是从大量语料中,用双向LSTM训练得出的一对语言模型。所以,我们称之为Elmo(embedding from language model)表示。不像之前学习向量的方法,elmo表示是很深度的,因为它是双向LSTM所有中间层的线性组合。更特殊的是,对每一个特殊任务,都学一个特殊的线性组合,相比于仅适用最上层的表示,这样可以显著的提升表现。

把内部的状态用这种方式组合起来,可以组合出非常丰富的单词表示。进一步分析表明,较高层的LSTM状态捕捉了上下文相关的单词含义(可以用于监督训练的词义消歧任务),而较低层次的LSTM状态捕捉了语法相关的含义(可以用于词性标注)。同时暴露这些信号是很有好处的,这有助于学好的模型针对不同的下游任务选择不同的半监督类型。

进一步的试验表明,elmo向量在实践中非常有效。我们先是表明了它可以很容易的整合到6个不同的挑战性的自然语言理解任务的现有模型中。比如:上下文承接任务、问答任务、情感分析。仅仅是加入elmo向量,就可以显著的提升每一个任务的SOA,包括一项20%的提升。cove也是一项上下文相关的表示,它是用感知机translation编码器。但elmo比voce的表现更好。最后cove和elmo都表明深度表示都比仅用LSTM最高层的表示效果要好。我们训练好的模型和代码都是公开的,我们希望elmo可以为其他NLP任务取得类似的进展。

2. 相关工作

单词向量可以捕捉到句法和语义信息,并且可以通过无监督的文本来训练得到,使用预训练的单词向量是很多NLP问题的SOA解决方案架构的组成元素。比如问答、上下文承接判断和词性标注。然而,这些方法来学习词向量,每个单词只能得到一个上下文相关的向量表示。

之前尝试克服传统词向量表示缺点的方法,要么是利用词根来丰富词向量,要么是为单词的每一个含义单独学一个向量。我们的方法也借鉴了这两种策略,利用字符级别的卷积可以获得跟词根单元类似的收益。然后我们无缝融合了多含义的信息到下游任务,不需要显式训练,就可以预测预定义好的含义类别。

其他相关工作也关注于学习上下文相关的向量表示。context2vec使用一个双向的lstm来对一个锚点单词的上下文进行编码。其他使用编码器来学习上下文的编码方式(包括锚点词在内)要么使用监督学习的神经感知机翻译系统,要么是无监督的语言模型。这些方法都依赖于大规模的训练语料,尽管神经感知机的方法受限于语料的并行化规模。这篇论文中,我们利用大量单语言数据,训练数据包含了3000万个句子。我们还把这种方法推广到深度上下文表示上,而且我们证明了这可以在多项NLP任务中表现良好。

之前的工作还表明:深度双向RNN的不同层可以编码不同类型的信息。比如:在LSTM的低层表示中引入多任务句法分析监督训练任务,有助于提升高层表示任务的总体表现,比如依赖分析、CCG super 标注。在一个基于RNN的编码解码机器翻译系统中,一个双层LSTM编码器,使用第一层的表示来完成POS(词性标注)任务的效果比使用第二层要好。最终本文证明,LSTM的最高层用于编码上下文可以学到单词的含义表示。我们发现,我们修改过的elmo语言模型也可以捕捉到类似的信号,这对混合了这些不同类型的下游半监督任务学习模型很有帮助。

还有一些使用语言模型来预训练一个编码器解码器对,和一个序列自动编码器,然后对特定的任务进行精调(fine tune)。相比之下,使用双向lstm和无标注的数据来进行预训练,我们修改了权重,然后增加了针对任务的模型部分,这就使得我们可以利用大量丰富而通用的双向lstm表示来完成下游任务,这样下游任务就仅仅需要很少量的标注数据了。

3. Elmo:语言模型的嵌入表示

不像目前的大多数词向量,elmo词向量是整个输入语句的函数。他们是通过一个双向lstm +字符cnn模型计算得来的,是内部网络状态的线性组合。这一步骤,使得我们可以做大量语料的半监督学习来完成预训练,并且可以很容易的把它融合到其他现存的神经网络NLP架构中。

3.1 双向语言模型

给定N个token,(t1,t2,….tn),前向的语言模型计算了系列中给定t1~tk-1的情况下tk出现的概率:

image.png

在最近的SOA神经网络语言模型中,通过字符级的CNN计算了上下文无关的token表示:

image.png

然后把它传给前向LSTM的L层,在每一个位置k上,LSTM的每一层都输出一个上下文相关的表示:

image.png

其中:j= 1~L

最高层的LSTM输出:

image.png

,经过一个softmax之后被用于预测下一个token:tk+1出现的概率。

反向的LSTM跟正向的类似,仅仅是输入序列经过了一个反转,给定后面的token来预测上一个token出现的概率。

image.png

双向LSTM就是把前向和后向LSTM结合起来。我们的目标函数是让前向和后向的联合log似然概率最大:

image.png

我们把两个LSTM的参数:字符级CNN之后得到的token
image.png

和softmax层的参数
image.png

进行绑定(即两个LSTM共用一套参数),而LSTM的其他参数则各自独立。总的来说,这个方法跟另一篇文献的方法很像。区别仅在于我们把两个方向的LSTM的部分参数进行了绑定。在下一部分,我们介绍了有别于其他论文的创新点:我们的单词表示是双向LSTM各层的线性组合。

3.2 ELMO

elmo是一个根据任务而定的biLM的内部向量的线性组合。每一个token tk,一个L层的biLM会计算2L+1个表示(就是最初的1个x和2个L层每层一个的向量,总计2L+1):

image.png

为了融合到下游模型中,elmo吧R中所有的层打碎成一个向量

image.png

最简单的情况下,elmo只用最顶层:

image.png

这就是某些论文中的情况,可以看做是本文的一个特例。而更普遍的做法,我们可以把所有的biLM层做一个线性组合:

image.png

其中:stask是softmax正则化权重,rtask是缩放系数,允许根据任务来缩放所有的elmo向量。r在优化实践过程中有比较重要的作用。biLM的每一层都有不同的激活分布,某些情况下还可以在调整权重之前用于层的正则化。

3.3 在NLP任务中使用biLM模型

给定一个预训练的biLM和一个监督训练的NLP任务模型。使用biLM来提升模型效果是非常容易的。我们运行一下biLM,然后记录下每个单词每一层的表示。然后,我们让最后一层的任务来学习这些表示的线性组合。

首先,考虑一下,不使用biLM时模型的最底层。大部分的NLP架构在最底层都使用同样的结构(这里指词向量),这就让我们可以用一个统一的方式来整合elmo。给定一个序列:(t1,t2,….tn),标准情况就是做一个跟上下文无关的token表示tk,这个表示是来自于预训练好的词嵌入向量。然后模型做一个跟上下文有关的token hk, 典型的就是用双向RNN,CNN,或者普通的前向反馈神经网络

为了添加elmo,我们先是冻结biLM的权重,然后把elmo向量

image.png

和原始token向量xk concatenate起来,得到一个elmo加强版的输入向量:

image.png

把这个向量作为原任务RNN的输入即可。对于某些任务,我们观察到把elmo向量作为任务RNN的输出可以进一步提高表现:引入一组跟任务相关的线性组合的权重,并且把原来的hk替换为

image.png

监督训练模型的其他部分不变的情况下,这种整合的方式可以适用于更复杂的模型。比如第4章中SNLI试验的双向attention层后面接一个biLM。还有共指消解试验中,聚类模型可以基于biLM来做。

最后,我们发现给elmo加入适当的dropout,某些情况下加入L2正则可以提高表现。这可以让elmo的权重倾向于elmo的所有层级的平均值。

3.4 预训练双向语言模型架构

本文的架构跟另一篇论文相似,区别仅在于两个方向的LSTM共享了一部分参数。本文还借鉴了另一篇关注大数据量单向LSTM模型的论文思路。

为了在语言模型的perplexity、模型大小还有下游任务的算力需要之间保持平衡,并且保持纯字符级输入表示,我们使用了单模型表现最好的一个研究CNN-BIG-LSTM的所有向量和中间隐状态。最终模型使用L=2的biLM,有4096个单元,512维度和剩余的两层之间的连接。上下文无关的表示使用2048个字符的ngram卷积核,后面接2个“高速公路”层,还有一个512个表示的线性投影。结果就是biLM为每一个输入的token提供了3层表示。由于有一个字符级别的卷积,它还能为词库之外的词提供一个表示。相比之下,传统的词向量只能为词库中的词提供一层表示。

在10亿word benchmark上经过10个epoch训练,前向和后向的perplexity是39.7。而前向的CNN-BIG-LSTM的perplexity是30.0。我们发现前向和后向的perplexity差不多,后向的稍低。

一旦训练完成,biLM的表示就可以用于非常多的任务。在某些特定领域的数据集上进行精调,可以显著降低perplexity,并且提高下游任务的表现。这可以看做biLM的迁徙学习。所以大多数情况下,我们都对下游任务进行精调。

4. 评估

表1表明了6个不同的NLP任务中ELMO的表现。在每个任务中,仅仅是加入elmo就可以达到新的SOA,并且得到6~20%的错误率的降低。


image.png

问答:SQuAD(斯坦福问答数据集)包含了10万多个问答对,其中答案是维基百科中的一段话。我们的baseline是一个改进了的双向attention流模型。它在双向attention组件后面加入了一个self-attention层。简化了一些池化操作,把GRU替换成了LSTM。在baseline模型的基础上加入elmo之后,测试集的F1从81.1%提升到了85.8%,获得了4.7%的提升,也就是24.9%的相对错误率降低。并且把单模型的SOA提升了1.4%。11个模型的ensemble把F1提升至87.4,这是截至2017年11月17日的最新SOA了。给baseline模型加入ELMO带来的4.7%的提升也要高于Cove的1.7%的提升。

上下文承接:上下文承接是给出一个前提的情况下,判断另一个假设是否为真,SNLI(斯坦福自然语言推断)语料提供了大概55万的上下文对。我们的baseline,ESIM序列模型来编码前后文,后面接一个矩阵attention层,一个本地推断层,最后在输出层之前加一个池化层。总体来说,5个不同的随机种子,加入elmo可以平均提升0.7%的准确率。做一个ensemble模型的话,可以把准确率从88.9提升至89.3%。

语义标注:语义标注任务是“谁对谁做了什么”,有一篇论文把这个问题定义为BIO标注问题,用一个8层的深度biLM。前向和后向之间交叉(取值?共享参数?)。在此模型中加入elmo来重新实现该模型之后,单模型在测试集上的F1,从81.4% 上升至 84.6%,提高了3.2%。这是OntoNotes上的新纪录,比之前的ensemble模型top1还要高1.2%。

共指消解:共指消解是把一段文字中指代同一个实体的片段聚成簇。我们的baseline模型是一个端到端的神经网络模型,是标记span的那种。它使用一个biLM和attention机制先是计算span的表示,然后把向量放入softmax的片段排序模型来发现共指链。在我们的实验中,CONLL 2012分享的OntoNotes数据集上,加入elmo把模型效果从67.2%提至 70.4%,获得了新的SOA,把之前的集合模型的SOA的F1提升了1.6%。

实体抽取:CoNLL 2003实体识别任务包含路透社RCV1的标注文本,有四种标注(PER, LOC, ORG,MISC:人物、地点、组织、其他)。和最新的SOA一样,我们用字符级别的CNN预训练生成的词向量+双层的biLM+CRF的损失来做模型。elmo加强版的模型达到了92.22%的F1。跟原模型相比,最主要区别在于我们使用了biLM的每一层进行加权,而原文仅使用了最高一层。5.1节表明,这种做法在很多任务里面都可以提高模型效果。

情感分析:SST(斯坦福情感树)是一个包含5选1标记(从非常负面到非常正面)的数据集,数据内容是影评。这些影评包含多样的语言现象,比如成语之类非常难以学习到的否定描述。我们的baseline模型是一个双向attention分类网络(BCN),这是用Cove加强过的最新SOA,而把Cove换成elmo之后,可以获得1%的绝对准确率的提升。

5. 分析

本章的5.1主要探讨Elmo这种深度表示比仅使用最高层表示更有助于提升下游任务的表现。5.3主要表明了biLM的低层向量捕捉了句法信息,而高层向量捕捉了语义信息。MT编码器也是一样的,这也表明elmo比cove提供了更丰富的表示。5.2探讨了如何在模型中加入elmo更有效果。5.4探讨了数据集大小的影响。5.5对不同层级在不同任务上的权重进行了可视化。

5.1 层权重公式的其他可能

层权重的计算公式有很多可能,之前的工作大部分都仅仅使用了最高层(不管是biLM还是MT编码器)。正则化参数λ的选择也非常重要λ=1的话就是对所有层取平均,而λ=0.001的话就可以让每层的权重相差较大。

表2对不同的λ进行了对比(数据集为Squad,SNLI和SRL)

image.png

结果表明,用多层总比用顶层要好,而多层取不同权重的话效果更佳。

5.2 在哪里加入Elmo

本文中所有的模型都是把elmo向量作为底层输入,然而我们发现有些情况下把elmo作为输出会更好。具体情况如表3所示:

image.png

5.3 elmo捕捉了哪些信息?

因为elmo比词向量更有效,这说明elmo捕捉了更多的信息,具体是什么呢?直觉来说,使用了上下文的elmo应该可以去除一词多义。比如play这个词,含义非常丰富,表4列出了play这个词的最近邻。

image.png

可以看到,相比于glove,elmo可以给出更加准确的释义。它可以同时考虑到词性和词意。用另一篇论文中提到的分析方法可以证明这一点。使用elmo向量来做词意消歧和词性判断标注问题,这样就可以分离出biLM编码的具体信息。同时还能跟cove进行比较。

词义消歧:词义消歧就是给出目标词的最近邻词。首先把所有单词的向量表示用biLM计算出来(数据集为SemCor3.0)。然后对每一个含义进行平均。测试的时候,对测试集的单词进行计算,然后得到的目标词取训练集中最接近的单词。再从wordnet中取一个训练时没出现过的含义。(然后呢?怎么对比?这里没看懂)

这种方法跟其他模型相比,结果如下:

image.png

跟仅使用最顶层的模型相比,效果有所提升,而跟目前的SOA相比,也是很有竞争力的,并且效果总是比cove要好。

词性标注:为了判断elmo是否可以捕捉到词性信息,我们把elmo的词向量直接输入到线性模型中,做PTB 数据集的词性标注问题。因为线性模型的内容非常有限,所以这种方法可以直接检验elmo捕捉词性的能力。跟词义消歧类似,elmo也得到了跟精调的模型相比依然很有竞争力的效果。然而跟词义消歧不同的是,elmo用第一层向量比顶层效果更好。

image.png

总结:这些试验表明,biLM的不同层捕捉了不同的语言信息,这也是elmo含义更丰富,加入elmo对下游任务更有帮助的原因。并且elmo向量比cove迁移性更好。

5.4 样本利用率

使用elmo,可以让数据的利用率变高,就是说同样的数据量,训练所需的epoch更少。比如SRL模型达到最佳F1需要486个epoch,而加入elmo之后仅需要10个epoch。

另外,ELmo加强过的模型比原模型相比所需的数据量更小。下图是对比:

image.png

数据集越小,使用elmo的效果越明显。

5.5 各层权重的可视化

图2表明了各层在不同任务中的权重:

image.png

好像没什么规律。原文说在输入中加入elmo更倾向于第一层。

6 总结

1. 本文提供了一种通用的biLM的深度表示方法。使用这种方法可以普遍提高多项NLP任务的模型效果。

2. 本文还用试验验证了biLM不同层可以提取不同的语义或者句法信息,而把这些信息使用到下游任务中可以有效提高模型效果。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342