Deep contextualized word representations(ELMO)

最近在看ELMO以及BERT,为了更好的理解特将相关论文翻译后以供使用。

概要:我们引入了一种新型的深层语境化的词表示,它既模拟了复杂的词特征的使用(例如,语法和语义),也模拟了这些词在不同语言语境中的使用(即,一词多义)。我们的词向量是一个深度双向语言模型(biLM)内部状态的学习函数,该模型是在大型文本语料库上预训练的。我们发现,这些表示可以很容易地添加到现有的模型中,并显著地改善6个具有挑战性的NLP问题的最好结果,包括问题回答、文本内容和情绪分析。我们还提出了一项分析,表明暴露预训练网络的深层内部是至关重要的,允许下游模型混合不同类型的半监督信号。

1.Introduction:预训练词表示法(Mikolov et al., 2013;Pennington等人,2014)是许多神经语言理解模型的关键组成部分。理想情况下,它既模拟了复杂的词特征的使用(例如,语法和语义),也模拟了这些词在不同语言语境中的使用(即,一词多义)。在本文中,我们介绍了一种新的深层语境化的词表示,它直接解决了这两种挑战,可以很容易地集成到现有的模型中,并且显著地提高了在各种具有挑战性的语言理解问题中所考虑的每种情况下的技术水平。

我们的词表示与传统的词类型嵌入不同,因为传统的词嵌入中每个标记都被分配了一个表示,它是整个输入句子的函数。我们使用双向LSTM的来生成词向量,该双向LSTM是用耦合语言模型(LM)目标对大型文本语料库训练得到的。不同于以往根据上下文学习单词向量的方法, ELMo表示法是深层的,在某种意义上,它们是biLM内部所有层的函数。更具体地说,我们学习了每个词的每层结束端向量的线性组合,这比仅仅使用顶部的LSTM层显著地提高了性能。

以这种方式结合内部状态可以提供非常丰富的词语表示。通过使用固有的评估,我们发现LSTM的高层状态能更好的理解上下文中单词的含义(例如,它们可以不加修改地用于监督词义消歧任务,并且表现很好),而低层状态则在语法建模方面表现更好(例如,它们可以用来做词性标注)。同时暴露所有这些信号是非常有益的,允许学习的模型选择对每个最终任务最有用的半监督类型。

大量的实验表明,ELMo表示在实践中非常有效。我们首先展示了它们可以很容易地添加到现有的模型中,以解决六种不同的、具有挑战性的语言理解问题,包括文本含义、问题回答和情感分析。仅增加ELMo表示就能显著改善每种情况下的技术状态,包括高达20%的相对误差减少。对于有可能进行直接比较的任务,ELMo的性能优于CoVe (McCann et al., 2017),后者使用神经机器翻译编码器计算上下文表示。最后,对ELMo和CoVe的分析表明,深度表现优于那些仅仅来自LSTM顶层的表现。我们经过训练的模型和代码是公开的,我们希望ELMo能够为许多其他NLP问题提供类似的好处。

2.Related work:因为它们能够捕捉大规模未标记文本职工单词的句法和语义信息, 预训练词向量是最先进的NLP架构的一个标准组成部分,如问答,文本含义和语义角色标注。然而,这些用于学习单词向量的方法只允许每个单词有一个独立于上下文的表示。

以前提出的方法克服了传统的词向量的一些缺点,方法是使用子词信息丰富它们,或者为每个词的意义学习单独的向量。通过使用字符卷积,我们的方法也从子字单元中受益,并且,我们无缝地将多义信息合并到下游任务中,而无需明确地训练来预测预先定义好的意义类型。

最近的其他研究也集中于学习上下文相关的表示。context2vec (Melamud et al., 2016)使用LSTM以一个关键字为背景进行编码。学习上下文嵌入的其他方法包括表示中的主词本身,并使用监督神经机器翻译(MT)系统或非监督语言模型的编码器进行计算。这两种方法都得益于大型数据集,尽管MT方法受并行语料库大小的限制。在本文中,我们充分利用了大量的单语数据,并在大约3000万句的语料库中训练我们的biLM (Chelba et al., 2014)。我们还将这些方法推广到深层上下文表示,我们展示了这些方法在各种各样的NLP任务中都能很好地工作。例如,在深度LSTM的低层引入多任务语法监督可以提高诸如依赖解析或CCG超级字符(sstl gaard和Goldberg,2016)等高层任务的整体性能。Belinkov et al.(2017)在基于rnnn的编码器译码器翻译系统中发现,2层LSTM编码器第一层的表示比第二层更好地预测POS标签。最后,用于编码单词上下文的LSTM的顶层(Melamud等人,2016)已经被证明可以学习单词意义的表示。我们发现,我们的ELMo表示法修改的语言模型目标也会产生类似的信号,学习混合了这些不同类型的半监督的下游任务的模型是非常有益的。

Dai和Le(2015)和Ramachandran等(2017)使用语言模型和序列自动编码器对编码器进行预训练,然后在任务特定的监督下进行微调。相比之下,在用未字符的数据对biLM进行预处理后,我们确定了权重,并增加了额外的任务特定模型容量,允许我们利用大型、丰富和通用的biLM表示,以便在下游的训练数据规模要求较小的监督模型的情况下使用。

3.ELMo:Embeddings from Language Models

如本节所述,不像最广泛使用的嵌入词, ELMo词表示是整个输入句子的函数。它们以内部网络状态的线性函数(3.2节)的形式,计算在带有字符卷积的两层biLMs之上(3.1节)。这种设置允许我们进行半监督学习,在这种学习中,biLM可以进行大规模的预训练(3.4小节),并且可以很容易地集成到大量现有的神经NLP体系结构(3.3小节)中。                                                                         

3.1 Bidirectional language models                                                                                                                                                 

给定有N个字符的序列,(t_{_{1}},t_{_{2}},...,t_{_{N}}),正向语言模型通过对序列(t_{_{1}},t_{_{2}},...,t_{_{k-1}})进行建模,然后计算字符t_{k}的概率:

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

最近最先进的神经语言模型计算上下文无关的字符表示x_{k}^{LM}(通过字符嵌入或基于字符的CNN),然后通过L层前向LSTM传递它。在每个位置k,每个LSTM层输出一个上下文相关的表示\vec{h}_{k,j}^{LM}其中j=1,....L。最上层的LSTM输出\vec{h}_{k,L}^{LM},使用softmax层预测下一个字符t_{k+1}

后向LM类似于前向LM,只是它倒过来运行序列,预测给定上下文的前一个字符:          

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

它可以以类似于正向LM的方式实现,深度为L的LSTM的每层(j层)产生的字符t_{k}的词表示为\overleftarrow{h}_{k,j}^{LM}

biLM同时具有前向和后向LM功能。我们的公式将前后两个方向的对数似然最大化:        

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

我们将字符表示(\Theta _{x})和Softmax层(\Theta _{s})的参数绑定在前向和后向的方向上,同时为每个方向的LSTMs维护单独的参数。 总的来说,这个公式类似于Peters等人(2017)的方法,只是我们在方向之间共享一些权重,而不是使用完全独立的参数。在下一节中,我们将离开之前的工作,介绍一种学习单词向量标识的新方法,它是biLM层的线性组合。                                                      

3.2 ELMo                                                                                                                                                                                 

ELMo是biLM中中间层表示的特定任务组合。对于每个字符t_{k}, L层的biLM计算2L + 1个表示。            

                                                        R_{k}=\left \{ x_{k}^{LM}, \overrightarrow{h}_{k,j}^{LM}, \overleftarrow{h}_{k,j}^{LM}|j=1,...,L \right \}   

                                                              =\left \{ h_{k,j}^{LM}|j=0,...,L \right \}                                                                                                 

其中h_{k,0}^{LM}是字符层,对于每个bilstm层h_{k,j}^{LM}=\left [ \overrightarrow{h}_{k,j}^{LM};\overleftarrow{h}_{k,j}^{LM} \right ]

对于下游模型的包含,ELMo将R中的所有层组成单个向量,ELMo_{k}=E(R_{k};\Theta _{e})。在最简单的情况下,ELMo只选择顶层,E(R_{k})=h_{k,L}^{LM},如TagLM (Peters et al., 2017)和CoVe (McCann et al., 2017)一样。更一般地说,我们计算所有biLM层的任务特定权重:                                                                                                                                                                                     

                                                          ELMo_{k}^{task}=E(R_{k};\Theta ^{task})=\gamma ^{task}\sum_{j=0}^{L}s_{j}^{task}h_{k,j}^{LM}      (1)                                                     

在(1)中,s^{task}是softmax归一化权重,标量参数\gamma ^{task}允许任务模型缩放整个ELMo向量。\gamma对辅助优化过程具有实际重要性(详见补充材料)。考虑到每个biLM层的激活具有不同的分布,在某些情况下,有助于每个biLM层规范化(Ba et al., 2016)。

3.3 Using biLMs for supervised NLP tasks

为目标NLP任务提供了预先训练的biLM和监督架构,使用biLM改进任务模型是一个简单的过程。我们简单地运行biLM,并记录每个单词的所有层表示。然后,我们让最终任务模型学习这些表示的线性组合,如下所述。

首先考虑没有biLM的监督模型的最低层。大多数监督的NLP模型在底层共享一个公共架构,允许我们以一致的、统一的方式添加ELMo。给定一个字符序列(t_{_{1}},t_{_{2}},...,t_{_{N}}),使用预训练的词嵌入和可选的基于字符的表示,为每个字符位置形成上下文无关的字符表示x_{k}是一种标准形式。然后,模型形成上下文敏感的表示h_{k},通常使用双向RNNs、CNNs或前馈网络。

为了将ELMo添加到监督模型中,我们首先冻结biLM的权值,然后将ELMo向量ELMo_{k}^{task}x_{k}连接,并传递ELMo增强表示\left [ x_{k};ELMo_{k}^{task}\right ]到任务RNN。对于一些任务(如SNLI,SQuAD),我们观察到进一步的改进,通过引入了另一组输出的线性权值,并将h_{k}替换为\left [ h_{k}; ELMo_{k}^{task} \right ],将ELMo加入到任务RNN的输出中。由于监督模型的其余部分保持不变,这些添加可以在更复杂的神经模型上下文中发生。例如,请参阅第4节的SNLI实验,在biLSTMs之后有一个双注意层,或者在相关性试验中,一个聚类模型被放在biLSTM之上。

最后,我们发现在ELMo (Srivastava et al., 2014)中加入适量的dropout,是有益的。在某些情况下,通过添加\lambda \left \| w \right \|_{2}^{2}到损失中来正则化权重也是有益的。 这对ELMo权重施加了一个归纳偏差,使其接近于所有biLM层的平均值。

3.4 Pre-trained bidirectional language model architecture

本文预训练的biLMs架构类似于Jozefowicz et al (2016)和金姆et al(2015),但做了修改以支持两个方向上的联合训练,并且在LSTM层之间增加了残差连接。 在这项工作中,我们关注的是大规模的biLMs, Peters等人(2017)强调了在前向LM中使用biLMs和大规模训练的重要性。

为了平衡整体语言模型的复杂性和对下游任务的计算要求,同时保持纯粹的基于字符的输入表示,我们将所有嵌入和隐藏的维度都从Jozefowicz等人(2016)的单一最佳模型cnn-lstm中减半。最终的模型使用L = 2 biLSTM层,每个biLSTM有4096个单元和512维投影,以及从第一层到第二层的残差连接。上下文不敏感类型表示使用2048个字符的n-gram卷积过滤器,然后是两个hightway层(Srivastava等人,2015年)和一个向下延伸到512个表示的线性投影。因此,biLM为每个输入字符提供了三层表示,包括那些纯字符输入而不在训练集中的表示。相比之下,传统的单词嵌入方法只为固定词汇表中的字符提供了一层表示。

经过10个epoch对10亿 Word Benchmark的训练(Chelba et al., 2014),前向perplexities平均为39.7,而前向CNN-BIG-LSTM平均为30.0。一般来说,我们发现前向和后向perplexities近似相等,后向值略低

一旦预训练完成,这个biLM可以计算任何任务的表示。在某些情况下,对领域特定数据的biLM进行微调会导致复杂程度的显著下降和下游任务性能的提高。这可以看作是biLM领域转移的一种类型。因此,在大多数情况下,我们在下游任务中使用了微调的biLM。详见补充资料。

4. Evaluation(本节是一些实验结论,比较容易理解,不翻译了)

表1(见论文)显示了ELMo在6个不同的基准NLP任务集合中的性能。对于每个任务,相对于强大的基础模型,简单地添加ELMo就可以建立一个新的最好的结果,相对误差减少了6 - 20%。这是一个跨越不同集合模型体系结构和语言理解任务的非常普遍的结果。在本节的其余部分中,我们将提供单个任务结果的高级草图;有关完整的实验细节,请参阅补充材料。

5. Analysis

本节提供了一个消融分析来验证我们的主要主张和阐明一些ELMo表现有趣的方面。第5.1节表明,在下游任务中使用深层上下文表示比之前仅使用顶层的工作提高了性能,而不管它们是由biLM或MT编码器生成的,ELMo表示提供了最佳的整体性能。5.3小节探索了biLMs中捕获的不同类型的上下文信息,并使用两种内在评价来表明,语法信息在较低的层中表现得更好,而语义信息在较高的层中表现得更好,这与MT编码器是一致的。这也表明我们的biLM始终提供了比CoVe更丰富的表示。此外,我们还分析了ELMo在任务模型中的位置(5.2小节)、训练集大小(5.4小节)的敏感性,并将ELMo在任务中学习的权重可视化(5.5小节)。

5.1 Alternate layer weighting schemes

对于结合biLM层,方程1有许多备选方案。以前关于上下文表示的工作只使用了最后一层,无论是来自biLM (Peters et al., 2017)还是MT编码器(CoVe;McCann等人,2017)。正则化参数的选择也很重要,因为像\lambda =1这样的大值有效地减少了权重函数在层上的简单平均值,而较小的值(如\lambda =0.001)允许层权重变化。

表2比较了SQuAD、SNLI和SRL的这些备选方案。包含来自所有层的表示比仅使用最后一层更能提高整体性能,包括来自最后一层的上下文表示比基线更能提高性能。例如,在SQuAD中,仅使用最后一层biLM层就比基线提高了3.9%。对所有biLM层进行平均,而不是只使用最后一层,可以使F1提高0.3%(将“最后一层”与\lambda =1列进行比较),并且允许任务模型学习各个层的权重,可以使F1提高0.2% (\lambda =1vs.\lambda =0.001)。在大多数情况下,对于ELMo来说,小\lambda是首选,尽管对于NER来说,一个训练集较小的任务,结果对\lambda是不敏感的(没有显示)。

总体趋势与CoVe相似,但在基线上的增幅较小。对于SNLI来说,与使用最后一层相比,使用\lambda =1平均所有层将开发精度从88.2提高到88.7%。与仅使用最后一层相比,\lambda =1的SRL F1增加了0.1%,达到82.2

5.2 Where to include ELMo?

本文中所有的任务架构都只将word嵌入作为输入输入到最低层biRNN中。但是,我们发现,在特定于任务的体系结构中,在biRNN的输出中包含ELMo,可以提高某些任务的总体结果。如表3所示,对于SNLI和SQuAD的输入和输出层,包括ELMo,它只在输入层上得到了改进,但是对于SRL(和coreference分辨率,没有显示),当它只包含在输入层上时,性能最高。一个可能的解释是SNLI和SQuAD架构在biRNN之后都使用了注意层,因此在这个层引入ELMo允许模型直接关注biLM的内部表示。在SRL中,任务特定的上下文表示可能比biLM中的更重要。

5.3 What information is captured by the biLM’s representations?

由于添加ELMo单独提高了任务性能,因此biLM的上下文表示必须对一般用于NLP任务的信息进行编码,而这些信息不是在字向量中捕获的。直觉上,biLM必须使用上下文来消除词义的歧义。想想“play”,一个高度多义词的词。表4的顶部列出了使用glove向量对应的“play”的最近的邻居。它们分布在言语的几个部分(例如,“play”,“play”作为动词,“player”,“game”作为名词),但集中在“play”的体育相关意义。相反,下面两行使用biLM在源句中对“play”的上下文表示,显示了SemCor数据集中最近的相邻句子(见下文)。在这些情况下,biLM能够消除词义和词义在源句中的歧义。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值