论文标题:
Pre-training via Paraphrasing
论文作者:
Mike Lewis, Marjan Ghazvininejad, Gargi Ghosh, Armen Aghajanyan, Sida Wang, Luke Zettlemoyer
论文链接:
https://arxiv.org/pdf/2006.15020.pdf
简介
回顾过去两年的自然语言处理发展史,不难发现,自监督预训练是最闪耀的那颗明星。
预训练就是不使用标注文本,只使用原始的文本语料,通过掩码预测(Masked Prediction)的方式,让模型在给定上下文的条件下,预测文本中空缺的词。
这种预训练方式也是使用最为广泛、研究最多的一类。
但是,掩码预测也有其固有缺陷。总的来说有两点:
(1)掩码预测不适用序列到序列的文本生成任务,这是预训练阶段和微调阶段的训练目标不同导致的;
(2)掩码预测难以直接扩展到多语语料中。
基于以上掩码预测的不足,许多工作都着力于设计专有的预训练方式,针对不同的使用场景,如文本生成如何预训练、多语如何预训练等等。
本文基于上述背景,提出一种简单暴力但十分有效的多语、文档级的通用预训练模型——MARGE(Multilingual Autoencoder that Retrieves and GEnerates)。MARGE的核心是“复述”。
所谓复述,就是一句话用另外一句话表达出相同的意思。MARGE的核心思想在于:不设计复杂的预训练目标,只通过简单的序列到序列的生成让模型自动学习文本信息,并且可以直接作用于文本生成和多语任务。
下图是本文所提出模型MARGE的训练示意图。总的来说,MARGE的训练过程很简单,第一步是对目前文档x,使用一个提取模型从语料库中提取若干相关文档z,每个相关文档和目标文档都有一个相关性得分。
第二步是基于所有提取的相关文档和它们的相关性得分,使用一个重构模型,恢复目标文档x。整个流程简单粗暴,但又行之有效。
总的来说,本文贡献如下:
- 提出MARGE——一个多语、文档级的通用预训练模型,避免设计繁琐的预训练目标;
- 表明文档级别的预训练可行且有很大的发展空间;
- 在复述、翻译、文档摘要、信息抽取等任务上MARGE取得显著的效果提升。
MARGE:通过复述实现多语文档预训练
MARGE仍然分为预训练和微调两个阶段,微调即是在预训练的模型上直接按照下游任务的要求进行训练。下面来介绍预训练的做法。
文档相关性得分
由于MARGE涉及到两个文档之间的相关性,所以先来介绍如何计算文档相关性得分。本文使用一个共享的编码器g计算两篇文档的余弦,把余弦值作为它们的相关性,即:
需要注意的是,这里的g是重构模型的一部分,是取的重构模型编码器的前四层。
重构模型
假设现在我们已经有M个相关文档z1,z2,...,zM,和它们与目标文档x之间的相关性得分了,重构模型做的就是基于相关文档和相关性得分,重构目标文档,即优化下式:
注意到前面对i的求和,这是因为模型的训练是以批量进行的。假设一个batch内有N个目标文档,有M个相关文档,那么对每个目标文档x,它们的相关文档都是这M个,并不是说不同的目标文档有不同的相关文档。这一点将在下面阐述。
由于相关性得分是一个标量,如何引入到Transformer中是一个问题。本文提出把它加到自注意力计算中,即:
笔者的理解是,对于重构模型,首先取它的编码器的前4层,分别编码每个相关文档,得到M个特征,然后把这M个特征拼接起来,和目标文档的特征做余弦操作,就得到一个M维向量,之后通过上式,在对应的位置做广播加上对应的相关性得分即可。
提取模型
前面说到,模型的训练是以批量为单位进行的,每一个batch内有N个目标文档和M个相关文档,每个目标文档的相关文档都是一样的。那么,如何构造batch就是一个很关键的问题。
总的来说,处理流程是:(1)把所有数据分成若干片段(shard);(2)在每个片段内使用相关性得分模型计算任意一对文档之间的得分,取其中大于一个阈值的文档对,即认为它们之间存在较强的关联,反复进行上述操作;(3)最后的batch需要最大化目标文档和相关文档之间的关联。
具体来说,步骤如下:
- 片段切分:对不同的数据使用不同的切分方法。比如对新闻数据,如果新闻发布在同一日期,那么它们在同一个片段。对维基百科,一共分为1000个片段,同一篇文档的不同版本语言属于同一个片段,否则随机划入片段。
- 文档相似度:对同一个片段内的所有文档,计算它们的相似度得分。
- 索引:在模型训练的每10k步,随机采样若干片段,然后计算它们的文档相似度。
- 阈值:阈值决定了目标文档和哪些相关文档相关,这通过选取片段内的top-K个最相关的文档对决定。
- 批量化:在有上述定义之后,现在可以进行批量化处理。注意到阈值处理后,我们实际上得到了一个二部图,分别代表目标文档和相关文档以及它们之间的连线,而一个batch就是它的一个子图:使用最小局部搜索找到图中的权值和的最大值。
总结一下,得到batch的过程如下:原始数据——片段切分——索引——文档相似度——阈值——批量化。
实验
实验设置
重构模型的编码器是12层的Transformer,解码器和编码器相似,只是前向层的维度是16536,从而得到了一个参数量为960M的模型。编码器的前4层用于计算相似度。
预训练数据有CC-NEWS和Wikipedia,合计206G,一共有26种语言。在微调的时候,直接根据下游任务进行。
下表是MARGE和若干基线模型在模型大小、语言数、预训练任务和数据量的比较。
第一个任务是跨语言句子抽取,该任务需要模型从若干语言的句子中选取正确的翻译句子。测评数据集是BUCC2018和Tatoeba,直接测评预训练模型,没有进行微调。结果如下表3。可以看到,MARGE大幅度超过基线模型。
第二个任务是文档级机器翻译,这要求模型能够在文档级别的句子上完成自动翻译。这是一个有监督任务,即模型在平行语料上进一步微调。上表4是结果。可以看到,MARGE和mBART表现差不多,都好于其他模型。
第三个任务是无监督文档机器翻译,该任务直接在预训练模型上测评而不进行微调。下表是结果。可以看到,不同语言的结果差别很大,这是由语言之间的数据量差异和语言特性导致的。
第四个任务是文本摘要,模型需要对给定的文本进行摘要。数据集是MLSum,同样测试无监督和有监督两个任务。下表是结果。可以看到,有监督效果比无监督效果好,而仅在新闻语料上预训练的模型(MARGE-NEWS)比在所有语料上预训练的模型(MARGE)表现好,它们都显著好于mBART,体现了MARGE在文本生成上的优势。
第五个任务和第六个任务分别是问答和复述,二者都采用跨语言,即微调的语言是英语,测评的语言为非英语。下表是二者的结果。在MLQA和PAWS-X上,MARGE和最佳模型XLM-R效果差不多,而用了更少的预训练语料(XLM-R用了2394G,MARGE用了206G)。
以上的实验表明,MARGE在机器翻译、文本摘要、句子抽取等任务上表现很好,尤其是在无监督、跨语言的设置下效果更佳显著,这体现了MARGE预训练方法是有效的。
小结
本文提出MARGE——一个简单粗暴有效的多语言、文档级的通用预训练模型。MARGE采用抽取-重构式预训练,直接使用一个序列到序列模型完成“复述”。在文本摘要、机器翻译、句子抽取等任务上,MARGE可以取得显著的效果提升,尤其是在多语言、无监督场景下,MARGE的优势尤其显著,这表明序列到序列的预训练模式是值得关注的。
MARGE的重构部分没有问题,但在抽取部分,即形成batch的时候会引入不少噪声(想一想,为什么?),如何减少噪声,甚至形成完全的端到端模型,读者可以自行思考给出可能的解决方案。