原始论文:Deep contextualized word representations
ELMO,是Embedding from Language Model的缩写( Peters等人,2018年),通过无监督预训练多层双向LSTM模型来学习带上下文信息的(Contextualized)单词表示。
双向语言模型
双向语言模型( bi-LM )是ELMO的基础。模型的输入是由n个token构成的序列,( x1,…,xn),语言模型根据历史的序列预测(x1.....xi-1)下一个token xi的概率。
在正向计算(forwar pass)过程中,根据历史之前的序列(x1.....xi-1)预测第i个token xi的概率,
在反向计算(backward pass)过程中,根据历史之后的序列(xi+1......xn)预测第i个token xi的概率,
两个方向上的预测过程都是由多层LSTMs建模的,给定输入token xi得到隐状态为h→i,ℓ和h←i,ℓ。最后一层的输出的隐状态为hi,L=[h→i,L;h←i,L]作为输出层的输入,用于得到最终的输出yi。模型共享embedding层和softmax层,分别由θe和θs参数化表示。
该模型的目标函数(loss function)是最小化两个方向的负对数似然( =最大化真实单词的对数似然) :
ELMO表示
在L层biLM之上,ELMO通过学习task-specific线性组合,将所有隐状态stack在一起。token xi的隐状态表示包含2L+1向量:
Ri={hi,ℓ∣ℓ=0,…,l},其中,h0,ℓ代表embedding层的输出,且hi,ℓ=[h→i,ℓ;h←i,ℓ]。
S(task)表示加权求和中每个任务的权重(通过softmax进行归一化)。缩放因子γ(task)用于校正biLM隐状态分布和task-specific表示分布之间的不一致性。
为了评估不同层的隐状态具体捕获了什么样的信息,ELMO分别被应用于语义密集型(semantic-intensive)和语法密集型(syntax-intensive)任务,使用biLM的不同层中的表示(Representation)处理:
语义(Semantic)任务:词义消歧( word sense disambiguation,WSD )任务强调给定语境下单词的含义。biLM最底层的输出的表示比第一层的输出的表示获得更好的效果。
句法(Syntax)任务:词性标注任务(POS)旨在推断一个单词在一个句子中的语法角色。实验证明使用biLM第一层的输出的表示可以比最底层的输出表示获得更高的精度。
对比研究表明,ELMO底层表示学习到了很多句法特征,而在高层表示学习到更多语义特征。
语义(Semantic)任务:词义消歧( word sense disambiguation,WSD )任务强调给定语境下单词的含义。biLM最底层的输出的表示比第一层的输出的表示获得更好的效果。
句法(Syntax)任务:词性标注任务(POS)旨在推断一个单词在一个句子中的语法角色。实验证明使用biLM第一层的输出的表示可以比最底层的输出表示获得更高的精度。
对比研究表明,ELMO底层表示学习到了很多句法特征,而在高层表示学习到更多语义特征。
因为不同的层倾向于学习不同类型的信息,所以将它们堆叠在一起会更有帮助。
在下游任务中使用ELMO
在下游任务中使用ELMO
类似于CoVe可以帮助不同类型的下游任务,ELMO embedding也可以嵌入到下游不同类型任务的模型中。此外,对于某些任务(如SNLI和SQuAD,但不是SRL ),把ELMO embedding加入到输出端也有帮助。
ELMO提出的改进对于具有少量监督训练数据集的任务来说是非常有帮助的。有了ELMO,我们也可以用更少的标记数据来获得更好的性能。
总结:语言模型的预训练是无监督的,理论上,由于无标签的文本语料库非常丰富,预训练可以尽可能地扩大规模。然而,它仍然依赖于task-specific的模型,因此这种改进只是渐进的,而为每个任务寻找一个好的模型架构仍然不是一件容易的事情。
ELMO仍然存在两个比较明显的不足:
1、使用Bi-LSTM模型构建语言模型,捕捉语义、长距离依赖和task-specific特征抽取、并行计算的能力弱于基于Self-Attention的Transformer模型。论文《Why Self-Attention? A Targeted Evaluation of Neural Machine Translation Architectures》,已经证明Transformer已经在捕捉长距离特征依赖、语义特征、任务相关特征和并行计算的能力,优于LSTM和CNN。关于CNN、LSTM和Transformer的详细对比,可以参考张俊林老师的文章:《放弃幻想,全面拥抱Transformer:自然语言处理三大特征抽取器(CNN/RNN/TF)比较》。
2、通过拼接(word embedding,Forward hidden state,backward hidden state)方式融合特征的方式,削弱了语言模型特征抽取的能力。
因此,GPT、BERT、MT-DNN和GPT-2基于Transformer构建LM,解决了问题一;对各种NLP任务进行改造,以适应pre-trained模型,即预训练的模型结构不变,只是改变输入的组织方式,很好的避免了问题2;具体的任务改造基本类似,这里以BERT为例简要介绍一下,后面会详细介绍。
因此,GPT、BERT、MT-DNN和GPT-2基于Transformer构建LM,解决了问题一;对各种NLP任务进行改造,以适应pre-trained模型,即预训练的模型结构不变,只是改变输入的组织方式,很好的避免了问题2;具体的任务改造基本类似,这里以BERT为例简要介绍一下,后面会详细介绍。
NLP中的任务多种多样,大约有60多种,基本可以分为4类:
分类任务:句子分类、情感分类.....
序列标注任务:词性标注(POS)、实体识别(NER)、分词、语义角色标注(SRL)....
句子关系推理任务:蕴含关系判断、问答、自然语言推理......
文本生成任务:机器翻译、摘要抽取、机器创作......
分类任务,输入整个句子,输出一个类别标签;序列标注任务,输入一个token,输出一个类别标签;关系推理,则是将两个句子拼接到一起作为输入,输出两个句子直接的关系。Bert没有给出文本生成的处理方法,GPT-2中给出了Auto-Regressive的方法来训练语言模型,用于文本生成LM的训练,简单来说,输入一句上文,输出一个下一个token,再把该token作为输入,不停地迭代生成一段话。
GPT、BERT、MT-DNN的训练都分成两步,第一步是无监督的预训练,这和ELMO一致,目的是通过无监督的学习,充分利用海量的单语数据学习关于source language的词法、句法和语义相关的feature;第二步是有监督的fine-tuning,将更多地task-specific相关的信息融合到模型表示中,使学习到的只是更加professional,比如BERT当中的Next Sentence预测问题、MT-DNN中给出的Multi-Task的Fine-tuning等等。
因此,对于ELMO的改进主要有两个重要的思路:
1、Task-Specific相关的Multi-Task微调(Fine Tuning),典型代表微软的MT-DNN。
2、基于Transformer的Generative Pretrain(生成式预训练),典型代表GPT。
这两个思路又是如何产生的呢?首先要介绍下Cross-View训练和ULMFiT模型。