文献阅读笔记:Deep contextualized word representations(ELMo)

0. 背景

机构:Allen 人工智能研究所 & 华盛顿大学
作者:Paul G
发布地方:arxiv、NAACL 2018
面向任务:word representation
论文地址:https://arxiv.org/abs/1802.05365
论文代码:https://github.com/allenai/bilm-tf。顺便安利该研究所的https://github.com/allenai/allennlp

0-1. 摘要

本文介绍一类新的深层上下文的词表征(deep contextualized word representation)模型ELMo。该模型能够对(1)词汇的复杂特征(如句法和语法)(2)及其这些复杂特征在不同的语境中的不同用法(即对一词多义)进行建模。本文的词向量本质上是基于大规模语料训练后双向语言模型(biLM)内部隐状态特征的组合。实验表明,本文所提出的词向量模型能够很轻松地与现有主流模型相结合,并且在6大NLP任务(包括问答、文本蕴含和情感分析)上有巨大提升,并刷新记录。同时,通过实验和分析发现预训练网络的深层内部结构是重点,这能够让下游模型去融合半监督训练出的不同类型特征。

1. 介绍

预训练词表征(Mikolov et al., 2013; Pennington et al., 2014)是很多神经语言理解模型的关键部分。然而,学习高质量词表征非常有难度。它们应该能够做到以下2点:
(1)完美建模单词使用方面的复杂特征(如句法和语义)(2)对单词在不同语言环境下的使用变化(即一词多义)建模。本文介绍了一种新型深度语境化词表征(deep contextualized word representation),可以直接应对上述2个困难。 且这种表征能够轻松整合进现有模型,极大地提升高难度的语言理解任务的当前最优性能。

本文提出的表征与传统的词嵌入不同,每个 token 的表征是整个输入句子的函数。本文的向量来自于双向 LSTM ,该 LSTM 是使用成对语言模型(LM)目标在大型文本语料库上训练得到的。因此,该表征叫作 ELMo(Embeddings from Language Models)表征。与之前学习语境化词向量的方法(Peters et al., 2017; McCann et al., 2017)不同,ELMo 表征是深层的,即它们是 biLM 中所有内部层的函数。具体来说,对于每个任务,学习堆叠在每个输入单词上向量线性组合,其效果显著优于仅使用 LSTM 顶层的表征。

用这种方式组合内部状态可以获取丰富的词表征。使用内在评价进行评估,结果显示更高级别的LSTM状态可以到捕捉词义的语境依赖(如它们不经修改就可以执行监督式词义消歧任务,且表现良好),而较低级别的状态建模句法结构(如它们可用于词性标注任务)。同时揭示所有这些信号是非常有益的,可以帮助学得的模型选择对每个任务最有帮助的半监督信号。

大量实验证明 ELMo 表征在实践中效果优异。本文首先展示可在6个不同且有难度的语言理解问题上(包括文本蕴涵、问答和情感分析等),将 ELMo 表征轻松添加至现有模型。添加 ELMo 表征可以显著提高每个用例中的当前最优性能,包括将相对误差降低 20%。 对于可以直接对比的任务,ELMo 优于 CoVe(McCann et al., 2017),后者使用神经机器翻译编码器计算语境化表征。最后,对 ELMo 和 CoVe 进行分析,分析结果显示深层表征优于仅从 LSTM 顶层获取的表征。

2. 相关工作

基于大规模无标注语料的词向量预训练(Turian et al.,2010; Mikolov et al., 2013; Pennington et al.,2014)已经在实践中证明能够捕获词的句法和语义信息,此后,预训练的词向量便作为各项NLP任务(包括问答、文本蕴含和语义角色标注)中一项标配。但是,现有这些方法学习到的词向量对于每个词仅仅有一个上下文语境表征向量。

先贤们也提出了一些方法以克服传统词向量的不足,比如Wieting et al., 2016; Bojanowski et al.,2017提出的通过subword信息来丰富词向量的表征,再比如Neelakantan et al., 2014 提出分开学习每个单词意义的向量。本文的方法通过使用字符卷积(character convolutions)也能够达到使用subword的效果,同时本文能够无缝地在下游任务中使用多义信息,而无需在训练过程中确切地指明预定义的含义类别,即在训练过程中不用指明词到底是哪个含义。

其他近期的工作如context2vec (Melamud et al., 2016)使用一个双向的LSTM围绕一个中心词进行上下文的语境编码。其他捕获上下文的embedding方法有在中心词的基础上,融入有监督的机器翻译系统(CoVe;McCann et al., 2017) 或者无监督的语言模型(Peters et al., 2017)。根据已经工作,已经可以知道biRNNs中不同网络层编码了不同类型信息。比如在深度LSTM网络中的低层引入多任务的句法监督(eg.词性标注)任务能够整体上提升高级任务的性能,如依存句法分析(Hashimoto et al., 2017)和CCG super tagging (Søgaard and Goldberg, 2016)。Belinkov et al. (2017)的工作表明在一个基于RNN的encoder-decoder机器翻译系统中,如果对双层LSTM encoder的第1层和第2层分别进行文本表征学习后,发现第1层的文本表征学习更有助于词性标注任务性能指标的提升。(Melamud et al.,
2016)的工作表明LSTM网络顶层的词上下文编码能够学习到词的语义表征。本文的实验结果表明,改进语义模型目标的ELMo也能发挥类似的作用,且对于混合不同类型半监督的下游任务是很有帮助的。

3. ELMo:来自语言模型的嵌入

与广泛使用的词嵌入(Pennington et al., 2014)不同,ELMo 词表征是整个输入句子的函数。这些表征是在双层biLMs上使用字符卷积计算出来的(详见3-1节),以内部网络状态的线性函数表现出来(详见3-2节)。这种设定使得可以进行半监督学习,在学习中,biLM 进行大规模的预训练(详见3-4节)且能够轻易整合进大量现有神经 NLP 架构(详见3-3节)。

3-1. 双向语言模型

ELMo(Embeddings from Language Models)模型,本质是从语言模型来的。对于一个给定的句子 ( t 1 , t 2 , . . . t N ) (t_1,t_2,...t_N) (t1,t2,...tN),构建的语言模型就是通过一个词汇的上文去,预测一个词 t k t_k tk
p ( t 1 , t 2 , … , t N ) = ∏ k = 1 N p ( t k ∣ t 1 , t 2 , … , t k − 1 ) p\left(t_{1}, t_{2}, \ldots, t_{N}\right)=\prod_{k=1}^{N} p\left(t_{k} | t_{1}, t_{2}, \ldots, t_{k-1}\right) p(t1,t2,,tN)=k=1Np(tkt1,t2,,tk1)

近期流行的神经语言模型(J´ ozefowicz et al., 2016; Melis et al., 2017; Merity et al., 2017)一般是通过token embedding或者在字符级上使用CNN获得带有上下文信息的token表征 x k L M \mathbf{x}_{k}^{L M} xkLM
,然后通过一个多层(比如L层)的前向LSTM网络。在LSTM的每一层都输出基于上下文的一个向量表达 h → k , j L M \overrightarrow{\mathbf{h}}_{k, j}^{L M} h k,jLM,其中j代表层数,k表示位置。其最后的一层的输出 h → k , L L M \overrightarrow{\mathbf{h}}_{k, L}^{L M} h k,LLM,经过一层softmax归一,就可以来预测词 t k + 1 t_{k+1} tk+1

现在都流行双向语言模型,本质就是把句子再逆序输入一遍 p ( t 1 , t 2 , … , t N ) = ∏ k = 1 N p ( t k ∣ t k + 1 , t k + 2 , … , t N ) p\left(t_{1}, t_{2}, \ldots, t_{N}\right)=\prod_{k=1}^{N} p\left(t_{k} | t_{k+1}, t_{k+2}, \ldots, t_{N}\right) p(t1,t2,,tN)=k=1Np(tktk+1,tk+2,,tN),再把前向逆向的结果结合起来,就是最终的双向语言模型,而本文最终目的是使目标函数最大化:
∑ k = 1 N ( log ⁡ p ( t k ∣ t 1 , … , t k − 1 ; Θ x , Θ ⃗ L S T M , Θ s ) + log ⁡ p ( t k ∣ t k + 1 , … , t N ; Θ x , Θ ← L S T M , Θ s ) ) \begin{array}{l}{\sum_{k=1}^{N}\left(\log p\left(t_{k} | t_{1}, \ldots, t_{k-1} ; \Theta_{x}, \vec{\Theta}_{L S T M}, \Theta_{s}\right)\right.} \\ {\left.\quad+\log p\left(t_{k} | t_{k+1}, \ldots, t_{N} ; \Theta_{x}, \overleftarrow \Theta_{L S T M}, \Theta_{s}\right)\right)}\end{array} k=1N(logp(tkt1,,tk1;Θx,Θ LSTM,Θs)+logp(tktk+1,,tN;Θx,Θ LSTM,Θs))
其中, Θ x \Theta_x Θx是token 表征,是一开始输入的词向量, Θ s \Theta_s Θs就是softmax层参数,两个方向的LSTM的参数不是共享的。总的来说,双向语言模型的结构图与Peters et al. (2017),即TagLM中的方法大致是相同的,所不同的是TagLM中不同方向共享部分参数,而不是完全参数独立。

3-2. ELMo

ELMo 是 biLM 中间层表征的任务特定组合。对于每个 token t k t_k tk,第L-layer biLM 计算一组表征(包含 2L + 1 个表征):
R k = { x k L M , h → k , j L M , h ← k , j L M ∣ j = 1 , … , L } = { h k , j L M ∣ j = 0 , … , L } \begin{aligned} R_{k} &=\left\{\mathbf{x}_{k}^{L M}, \overrightarrow{\mathbf{h}}_{k, j}^{L M}, \overleftarrow {\mathbf{h}}_{k, j}^{L M} | j=1, \ldots, L\right\} \\ &=\left\{\mathbf{h}_{k, j}^{L M} | j=0, \ldots, L\right\} \end{aligned} Rk={xkLM,h k,jLM,h k,jLMj=1,,L}={hk,jLMj=0,,L}
其中 h k , 0 L M \mathbf{h}_{k, 0}^{L M} hk,0LM是token层;对于每个 biLSTM 层,有 h k , j L M = [ h → k , j L M ; h ← k , j L M ] \mathbf{h}_{k, j}^{L M}=\left[\overrightarrow{\mathbf{h}}_{k, j}^{L M} ; \overleftarrow{\mathbf{h}}_{k, j}^{L M}\right] hk,jLM=[h k,jLM;h k,jLM]

为了在下游模型中能够包含ELMo,ELMo 将 R R R中的所有层折叠成单个向量 E L M o k = E ( R k ; Θ e ) \mathrm{ELMo}_{k}=E\left(R_{k} ; \mathbf{\Theta}_{e}\right) ELMok=E(Rk;Θe)。在最简单的情况下,ELMo 只选择顶层 E ( R k ) = h k , L L M E\left(R_{k}\right)=\mathbf{h}_{k, L}^{L M} E(Rk)=hk,LLM,如 TagLM(Peters et al., 2017)和 CoVe(McCann et al., 2017)一样。更一般地,针对特定任务计算所有 biLM 层的特定权重如下:
(1) E L M o k t a s k = E ( R k ; Θ t a s k ) = γ t a s k ∑ j = 0 L s j t a s k h k , j L M \mathbf{E L M o}_{k}^{t a s k}=E\left(R_{k} ; \Theta^{t a s k}\right)=\gamma^{t a s k} \sum_{j=0}^{L} s_{j}^{t a s k} \mathbf{h}_{k, j}^{L M} \tag{1} ELMoktask=E(Rk;Θtask)=γtaskj=0Lsjtaskhk,jLM(1)
公式(1)中,可以看出ELMo 不仅仅使用了neural language model 的最后一层输出,而是对所有层的输出做了加权来构造最后的向量。其中 s t a s k s^{task} stask 是 softmax 归一化权重,所以权重加权和为1。
标量参数 γ t a s k \gamma^{task} γtask 允许任务模型扩展至整个 ELMo 向量。在实践中, γ \gamma γ 对优化过程有益(详见补充材料), γ \gamma γ 是一个需要学习的变量, 加不加这个变量对performance 的影响是比较大。鉴于每个 biLM 层的激活函数都有不同的分布,在一些情况下, γ \gamma γ 有助于在加权之前对每个 biLM 层的归一化(Ba et al., 2016)。

3-3. 在无监督任务上使用biLMs

给定一个预训练的biLM,怎么将其与目标任务框架进行结合呢?

运行biLM,记录每个词在所有层的表征,再让末端的具体任务模型学习表征之间的线性组合。具体来说,对于给定的token序列 ( t 1 , … , t N ) \left(t_{1}, \ldots, t_{N}\right) (t1,,tN),对每个token,通过常见的标准方式(预训练词嵌入,也可以加入基于字符的表征方式)得到带有上下文依赖的token表征 x k \mathbf{x}_{k} xk。再通过双向RNNs或者CNNs或者前馈神经网络得到具体上下文语境的表征 h k \mathbf{h}_{k} hk
那如何将ELMo添加到下游有监督任务模型中?先固定biLM的权重,将ELMo向量  ELMo  k task \text { ELMo }_{k}^{\text {task}}  ELMo ktask和最初始词向量 x k \mathbf{x}_{k} xk(也就是通过字符卷积获得的向量)进行拼接: [ x k ; E L M o k t a s k ] \left[\mathbf{x}_{k} ; \mathbf{E} \mathbf{L} \mathbf{M} \mathbf{o}_{k}^{t a s k}\right] [xk;ELMoktask], 然后将这个向量输入到具体任务的RNN模型中,然后再训练权重因子。在有些任务中,如SNLI和SQuAD中,可以发现在output处添加另一个这样的ELMo向量,即以 [ h k ; E L M o k t a s k ] \left[\mathbf{h}_{k} ; \mathbf{E} \mathbf{L} \mathbf{M} \mathbf{o}_{k}^{t a s k}\right] [hk;ELMoktask]替代原来的 h k \mathbf{h}_{k} hk是可以提高性能指标的。不同是,这里应该采用与输入  ELMo  k task \text { ELMo }_{k}^{\text {task}}  ELMo ktask中不同的权重因子。需要注意的是,由于模型的其他部分是维持不变的,所以添加额外的向量操作可以发生在更复杂的神经模型的上下文中。比如,在SNLI实验中,biLSTMs之后紧跟的是bi-attention层;再比如在指代消解任务中,在biLSTMs之后紧跟的是一个聚类模型。

另外也可以在ELMo模型中加入适量的dropout, 以及采用 L2 loss的方法来提升模型。这对ELMo权重引入了一个归纳偏见,使其接近所有biLM层的平均值。并且, 这里的 L2 项的系数 λ \lambda λ越大, 越有取各层平均值的意思;越小, 越可以发挥各个层之间的不同带来的效果,但是并不是说, 越小越好。

3-4. 预训练双向语言模型

本文预训练biLMs的方法与J´ ozefowicz et al. (2016)和Kim et al. (2015)中的方法是类似的,所作出的修改有以下2点:
(1)修改使其支持多方向的联合训练
(2)在LSTM层之间添加残差连接
在这项工作中,重点关注大规模的biLMs,正如Peters等人(2017)强调过的:使用biLMs比只使用前向LMs和大规模训练更重要。

为了平衡语言模型之间的困惑度以及后期下游NLP任务模型计算的复杂度,同时维持输入表征仍是基于字符的,本文对单个最佳模型CNN-BIG-LSTM(J´ ozefowicz et al.(2016)的所有嵌入和隐藏尺寸减半(字符卷积网络较为低效,能够实现最大效率利用字符共现来表达词义的网络就是biLSTMs网络)。换一句话说,本文采用了2层Bi-Lstm,共计4096个单元,输出纬度为512,并且在第一层和第二层之间有残差连接。最初的那一层文本向量用了2048个n-gram的过滤器,进行基于字符的卷积计算,后续还紧跟2个highway层(Srivastava et al.,
2015)。最后再接一个512维的线性投射层作为输出。整个ELMo会为每一个词提供一个3层的输出,而下游模型学习的就是这3层输出的组合。传统的词嵌入仅仅在一个固定的词典中提供单层的表征。另外,对该模型进行微调训练,对具体的NLP任务会有所提升。

4. 评估

本文从问答、文本蕴含、语义角色标注、指代消解、命名实体抽取和情感分析这6个任务验证本文的模型,且都得到了提升。
在这里插入图片描述
表 1:ELMo 增强神经模型和当前最优(SOTA)单个模型基线在六个 NLP 基准任务上的测试集性能对比。不同任务的性能指标不同:对于 SNLI 和 SST-5 是准确率,对于 SQuAD、SRL 和 NER 是 F1,对于 Coref 是平均 F1。由于 NER 和 SST-5 的测试集较小,研究者的报告结果是使用不同的随机种子进行的五次运行的均值和标准差。「INCREASE」列是基线模型的绝对和相对改进。
更详细的可以参考原始论文,在这里不继续展开说明。

5. 分析

通过消融研究(即控制变量法)以确定本文模型贡献,并阐明ELMo表示一些有趣的方面。5-1节的实验表明在下游任务中采用深层的语境表征比仅仅使用顶层表征(biLM或者MT encoder所产生的)能取得更好的结果。5-3节的实验结果表明biLMs能够捕获到不同类型的上下文信息,底层网络捕获到的是句法信息,高层网络捕获到的是语义信息。这与MT系统的encoders是不谋而合的。此外,biLM能够提供比CoVe更丰富的表征。在5-2节分析了ELMo包含在具体下游任务模型中的位置敏感度;5-4节介绍训练集的一些基本信息,5-5节对ELMo在不同任务中学习到的权重参数进行可视化。

5-1. 交替层加权方案

从方程1中可以看出,biLMs各层的组合是有多种方案的,只是此前的工作仅仅使用最后一层来作为上下文的表征,要么如(Peters et al., 2017)中介绍的biLM,要么如(CoVe; McCann et al., 2017)中的MT encoder。L2 loss的系数 λ \lambda λ给模型带来的影响其实很大, 其值越大,如值为1, 那么最后的  ELMo  k task \text { ELMo }_{k}^{\text {task}}  ELMo ktask越趋近于各层之间的平均值,而值越小如0.001,则层与层之间的权重差异越大。Table 2是在SQuAD、SNIL和SRL数据集上应用4个不同组合的比较结果:

  • 第一列是baseline模型(使用普通的词向量, 例如 CoVe)
  • 第二列是只使用了 BiLSTMs 最后一层输出的结果
  • 第三列是使用了各层次状态值平均的结果(倾向于平均, 并非完全平均, λ \lambda λ=1)
  • 第四列是使用了各层次状态值加权和的结果( λ \lambda λ=0.001)

其结果如下:
在这里插入图片描述
从中可以看出,使用全部网络层的特征比仅使用最后一层效果提升明显;使用了上下文表征信息的最后一层又比baseline要好。从Table 2可以看出,这几个任务中小 λ \lambda λ值效果更好。

5-2. 在哪里加入ELMo

本文发现在具体任务框架的biRNN的output中也加入 ELMo 来进行训练,能够普遍提升结果性能。 实验结果如Table 3所示:
在这里插入图片描述
在SNLI数据集和SQuAD数据集上的输入和输出层加入ELMo,比仅仅在输入层加入ELMo效果要来得好。但是对于SRL数据集(指代消解数据集)则仅在输入层加入ELMo效果最好。一个可能的原因是SNIL和SQuAD网络架构都在biRNN之后使用了attention层,引入ELMo可以使得模型直接注意到biLM的内部表征。而对于SRL数据集,其上下文表征可能比biLM中的信息更重要。
证明确实是有效的。

5-3. biLM的表征捕获到哪些信息

由于添加ELMo能够比单纯的词向量获取更好的效果,那么biLM的上下文表征应该是能够编码出对多个NLP任务都有效的更加泛化的通用信息,而这是词向量所无法捕捉到的。直观上,biLM应该是能够克服词的歧义性。以常见多歧义单词"play"为例,Table 4的上部分列出了在Glove向量中与其最相近的单词,它们分布在演讲的几个部分例如:“play”,“playing”作动词,“player”作动词,“game”作为名词),但集中在与运动有关的“play”的意义上。下面的两行显示来自SemCor数据集的最近邻语句,在各自句子中使用biLM后的“play”的上下文表示。在这种情况下,biLM能够对原句中的词性和词义进行分离。

ELMo和Glove vector 对应的nearest neighborhood的对比:
在这里插入图片描述
这个例子比较明显的区分了Glove vector 和LM 构造出的vector 之间的区别。

word sense disambiguation(一词多义的消歧):
在词义消歧方面可以使用目标词在biLM表征中最近邻的单词来预测目标词的含义,这与Melamud et al. (2016)的方法很类似。实验过程中,使用了 SemCor3.0 这个语料库(PS:这是一个标注了多义的语料库), 该语料库中的每个词汇都对应着 wordnet 的一个位置。具体方法是,在训练语料上,先利用biLMs 计算出语料库中所有词汇的向量表示,然后对每个含义取表征的均值。因为每个词对应着wordnet,所以在wordnet相同位置的,即表示相同含义,进而可以将位于wordnet相同位置的词汇的向量取平均。在测试的时候, 对于一个给出的目标词(即target word)利用 BiLM计算得到其词表征后, 再选用与训练时获得的每个wordnet位置中词汇向量最近的作为其含义。换句话说,就是利用1近邻法在训练后的词向量中查找(从上述可知,此时每个含义都是均值后的结果),其结果就是这个词可能的位置。虽然只用到了1-近邻,没有真的用一个合理的wsd(word sense disambiguation)模型, 只是用了最简单的模型来验证ELMo vector 的质量,但是结果显示, 有很高的F1值。结果如Table 5所示:
在这里插入图片描述
期中,CoVe 是由machine translation 训练出的带上下文信息的vector。通过这个表也可以知道, 第二层的语义信息在语义消歧方面要优于第一层。

POS tagging:
上面的结果测试了 ELMo 表达语义的效果, 接下来利用 POS tagging 检测其对语法的表达效果。直接在 LM 后面接了一个feed-forward 的nn来进行pos-tagging 的训练, 模型的效果如下Table 6所示。类似的, 因为这个结果是没有用额外的crf / lstm 而直接得到的, 所以这个分数其实挺好的了。
在这里插入图片描述

5-4. 样本效率

在模型中添加ELMo会大大提高样本的效率(Sample efficiency),具体体现在参数收敛更快和需要使用的训练集更小。例如在不加 ELMo 的情况下去训练 SRL model , 达到最佳 F1 值要在 486 个epoch之后, 但在加了 ELMo 之后, 只需要十个回合便超越了原来的 F1 值,降低了98%的时间消耗。此外,在使用更少数据下便可以能够获得同样的效果,所以数据的使用更高效。Figure 1对比了baseline是否加入ELMo下不同数据量的性能表现。
在这里插入图片描述
图 1:基线和 ELMo 在 SNLI 和 SRL 上的性能对比,训练集规模的变化幅度是 0.1% 到 100%。
从这个图中就可以看出来. 虽然最后趋于一致,但是在数据量较少的情况下, 带来的进步是很大的。

5-5. 学习到的权重可视化

Figure 2对softmax-normalized学习到的各层权重进行可视化。对指代消解任务和SQuAD数据集更看重biLSTM的第一层,而其他任务似乎没有特殊的层级偏好。
在这里插入图片描述

6. 结论

本文介绍了一种biLMs方法,该方法能够学习到高质量深层上下文相关表示的通用方法,并证明了该方法在多个任务上显著有效。通过消融研究和控制变量法,证实了biLM层能够有效地编码单词上下文相关的不同类型的语法和语义信息,使用所有层特征组合可以提高所有任务的性能。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值