作者 | 王泽洋 单位 | 小牛翻译 王泽洋 东北大学自然语言处理实验室研究生,研究方向为机器翻译。 小牛翻译,核心成员来自东北大学自然语言处理实验室,由姚天顺教授创建于1980年,现由朱靖波教授、肖桐博士领导,长期从事计算语言学的相关研究工作,主要包括机器翻译、语言分析、文本挖掘等。团队研发的支持140种语言互译的小牛翻译系统已经得到广泛应用,并研发了小牛翻译云(https://niutrans.vip)让机器翻译技术赋能全球企业。 |
预训练的方法最初是在图像领域提出的,达到了良好的效果,后来被应用到自然语言处理。预训练一般分为两步,首先用某个较大的数据集训练好模型(这种模型往往比较大,训练需要大量的内存资源),使模型训练到一个良好的状态,然后下一步根据不同的任务,改造预训练模型,用这个任务的数据集在预训练模型上进行微调。
这种做法的好处是训练代价很小,预训练的模型参数可以让新的模型达到更快的收敛速度,并且能够有效地提高模型性能,尤其是对一些训练数据比较稀缺的任务,在神经网络参数十分庞大的情况下,仅仅依靠任务自身的训练数据可能无法训练充分,预训练方法可以认为是让模型基于一个更好的初始状态进行学习,从而能够达到更好的性能。
2003年,Bengio等人提出了神经语言模型(Neural Network Language Model)[1]神经语言模型在训练过程中,不仅学习到预测下一个词的概率分布,同时也得到了一个副产品:词嵌入表示。相比随机初始化的词嵌入,模型训练完成后的词嵌入已经包含了词汇之间的信息。2013年,Mikolov等人提出了word2vec工具,其中包含了CBOW(Continue Bag of Words)模型和Skip-gram模型[2-3],该工具仅仅利用海量的单语数据,通过无监督的方法训练得到词嵌入。
词嵌入本身具有局限性,最主要的缺点是无法解决一词多义问题,不同的词在不同的上下文中会有不同的意思,而词嵌入对模型中的每个词都分配了一个固定的表示。针对上述问题,Peters等人提出了ELMo(Embedding from Language Model)[4],即使用语言模型来获取深层的上下文表示。ELMo的具体做法是,基于每个词所在的上下文,利用双向LSTM的语言模型来获取这个词的表示。ELMo的方法能够提取丰富的特征给下游任务使用,但是ELMo仅仅进行特征提取而没有预训练整个网络,远远没有发挥预训练的潜力,另外一个不足之处是,自注意力机制的Transformer模型结构,相比LSTM能够更有效地捕获长距离依赖,对句子中信息进行更充分的建模。
针对上述两个问题,Radford等人提出了 GPT Generative Pre-Training)[5],即生成式的预训练。GPT将LSTM换成了Transformer,获得了更高的成绩,但是由于使用的是单向模型,只能通过前面词预测后面的词,可能会遗漏信息。Devlin等人提出了BERT(Bidirectional Encoder Representations from Transformers)[6],即基于Transformer的双向编码器表示。BERT和GPT的结构和方法十分相似,最主要的不同之处在于GPT模型使用的是单向语言模型,可以认为是基于Transformer的解码器表示,而BERT使用的基于Transformer的编码器能够对来自过去和未来的信息进行建模,能够提取更丰富的信息。三个预训练模型的图如下所示:
BERT提出后大火,也许是因为BERT的效果太好。目前绝大多数的预训练模型都是在BERT上改造而来。清华大学的王晓智和张正彦同学给出了目前的预训练模型关系图,这里引用一下,如下图所示:
下面主要介绍几个BERT变种模型。
在这项工作中,作者将预训练方法扩展到多种语言并展示跨语言预训练的有效性。笔者认为,这篇工作的创新点有两个:设计了一个用于多语言分类的跨语种的语言模型训练任务;将BERT作为模型初始化用到无监督机器翻译上。
虽然BERT也经过了100多种语言的训练,但并未针对跨语言任务进行优化,因此共享的知识有限。为了克服这个问题,XLM通过以下方式改造了BERT:
在BERT中,每个样本是用一种语言构建的。XLM对它的改进是每个训练样本都包含两种语言的相同文本。与BERT一样,该模型的目标是预测被屏蔽的词,但采用新的体系结构,该模型可以使用一种语言的上下文来预测另一种语言的词。因为不同语种的被屏蔽词是不同的(随机)。改造后的BERT表示为翻TLM(Translation Language Model),而带有BPE输入的“原始” BERT表示为MLM(Masked Language Model)。通过训练MLM和TLM并在它们之间交替进行训练来训练完整的模型。
XLM说明训练一种跨语言的语言模型对于资源匮乏的语言可能非常有好处,因为它们可以利用来自其他语言的数据,尤其是由于BPE预处理而产生的相似语言。
XLM做的另一个工作是,利用BERT初始化无监督模型的Encoder和Decoder。具体做法是在Transformer的Encoder端和Decoder端,进行随机初始化、MLM初始化或者CLM初始化(具体如图),共得到9种不同的结构。
BERT的预训练是在Transformer的Encoder上进行预训练,所以BERT天然比较亲和自然语言理解的任务,而很难应用于像机器翻译这样的语言生成类任务。
微软的工作者认为BERT单纯预训练了Transformer的Encoder部分,但是对于端到端的任务,Encoder-Decoder是有关联的,如果用BERT初始化Encoder端和Decoder端,两端只是分别训练好的没有什么联系。于是为了解决这个问题,微软的工作中提出了MASS(Masked Sequence to Sequence pre-training)。
MASS是在Encoder端和Decoder端通过语言模型预训练。与BERT不同的是mask掉的词是k个(这k个词是连续的),Decoder中只输入前k-1个被mask掉的词,预测被mask掉的k个词。MASS的优势有:
Encoder被强制去抽取未被屏蔽掉词的语义,以提升Encoder理解源序列文本的能力。
Encoder端其它词(在Encoder端未被屏蔽掉的词)都被屏蔽掉,可以让Decoder从Encoder端提取信息来帮助连续片段的预测。
Encoder预测连续的序列片段可以提升Encoder的语言建模能力。
MASS只需要无监督的单语数据进行预训练。MASS支持跨语言的序列到序列生成(比如机器翻译),也支持单语言的序列到序列生成(比如文本摘要生成、对话生成)。比如用MASS做英法的机器翻译时,在一个模型里同时进行英语到英语以及法语到法语的预训练(单独给每个语言加上相应的语言嵌入向量,用来区分不同的语言)。
至于效果,在WMT19中,MASS帮助微软获得了多项翻译的冠军,具体可以查看WMT19的榜单。
自回归语言模型是单向的但是天然匹配自然语言生成任务,自编码(BERT)可以融合双向信息但是引入MASK导致预训练和Fine-tuning阶段的不一致。XLNET融合了自回归语言模型和自编码语言模型的优点。XLNET在模型方面的贡献在于,随然看上去仍然是从左向右的输入和预测模式,但是其实内部已经引入了当前单词的下文信息。
在预训练阶段,引入Permutation Language Model的训练目标。简单点来说就是固定当前要预测的词,通过调换其余词的位置,将预测词后边的词换到当先此的前边,在随机排列组合后的各种可能里,再选择一部分作为模型预训练的输入。这样当前词就能看到上下文的内容了,但是形式上看上去仍然是从左到右在预测后一个单词。具体的实现可以看XLNET的论文。
除此之外,引入了Transformer-XL的主要思路:相对位置编码以及分段RNN机制。实践已经证明这两点对于长文档任务是很有帮助的;在预训练阶段极大扩充了数据规模,并对质量进行了筛选过滤。
相对于BERT模型,XLNET对于长文档的应用有明显的提升,因为Transformer天然对长文档任务处理有弱点。上文提过,对于生成类的NLP任务,BERT仍然不能很好地处理。而XLNET的预训练模式天然符合下游任务序列生成结果。但是目前还没有实验证明。
从BERT的各类变种就可以看出BERT和Transformer的火爆程度,笔者认为目前预训练+下游任务微调有一统自然语言领域的趋势。预训练不仅在低资源任务上有很高的提升作用,甚至在丰富资源的任务上对模型性能也有显著的提高。如果没有超越Transformer的特征提取模型提出的话,相信在BERT上各类的改造会层出不穷,以适应不同类型的下游任务。还有的预训练模型在BERT基础上引入知识图谱等,让BERT变得更加“有知识”,如清华大学的ERNIE[10]。
既然各类不同的任务对预训练模型进行不同的改造,那能不能有一种预训练模型,可以适应全部的NLP任务呢,近期谷歌刚刚发布了超大规模的T5(NLP Text-to-Text)[11]预训练模型。它给整个 NLP 预训练模型领域提供了一个通用框架,把所有任务都转化成一种形式,无论什么任务,直接拿来一个超大预训练模型,然后主要工作就变成了怎么把任务转换成合适的文本输入输出,,比如德英翻译,只需将训练数据集的输入部分前加上“translate German to English”。
另外的思路是,不是改造预训练的模型,而是将庞大的预训练模型进行压缩,比如近期的alBERT,通过共享参数、引入单独的词嵌入层维度来减少BERT的参数。最终性能也登上GLUE第一(刚刚被T5超过)。还有通过知识蒸馏技术,训练出的tinyBERT等,都是对BERT模型进行的模型压缩。
参考文献
[1] Bengio Y, Ducharme R, Vincent P, et al. A neural probabilistic language model.
[2] Mikolov T, Chen K, Corrado G S, et al. Efficient Estimation of Word Representations in Vector Space.
[3] Mikolov T, Sutskever I, Chen K, et al. Distributed Representations of Words and Phrases and their Compositionality.
[4] Matthew Peters, Mark Neumann, Mohit Iyyer, Matt Gardner, Christopher Clark, Kenton Lee, and Luke Zettlemoyer. 2018. Deep Contextualized Word Representations.
[5] Alec Radford, Karthik Narasimhan, Tim Salimans, and Ilya Sutskever. 2018. Improving Language Understanding by Generative Pre-Training.
[6] Jacob Devlin, Ming-Wei Chang, Kenton Lee, and Kristina Toutanova. 2018. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding.
[7] Guillaume Lample and Alexis Conneau. 2019. Cross-lingual Language Model Pretraining.
[8] Kaitao Song, Xu Tan, Tao Qin, Jianfeng Lu, and Tie-Yan Liu. 2019. MASS: Masked Sequence to Sequence Pre-training for Language Generation.
[9] Zhilin Yang, Zihang Dai, Yiming Yang, Jaime Carbonell, Ruslan Salakhutdinov, and Quoc V. Le. 2019. XLNet: Generalized Autoregressive Pretraining for Language Understanding.
[10] Zhengyan Zhang, Xu Han, Zhiyuan Liu1, Xin Jiang, Maosong Sun1, Qun Liu. ERNIE: Enhanced Language Representation with Informative Entities.
[11] Colin Raffel, Noam Shazeer, Adam Roberts, Katherine Lee,et al. Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer.
雷锋网编辑
相关文章: