谷歌借助ELECTRA实现更高效的NLP模型预训练

最近,在语言预训练方面的进展使自然语言处理领域取得了巨大进展,这得益于BERT、RoBERTa、XLNet、ALBERT和T5等最先进的模型。尽管这些方法在设计上有所不同,但它们都有一个共同的理念,即在对特定的NLP任务(如情感分析和问答系统)进行调优之前,利用大量未标记的文本来构建语言理解的通用模型。

本文最初发布于谷歌AI博客,经原作者授权由InfoQ中文站翻译并分享。

最近,在语言预训练方面的进展使自然语言处理领域取得了巨大进展,这得益于BERTRoBERTaXLNetALBERTT5等最先进的模型。尽管这些方法在设计上有所不同,但它们都有一个共同的理念,即在对特定的NLP任务(如情感分析问答系统)进行调优之前,利用大量未标记的文本来构建语言理解的通用模型。

现有的预训练方法通常归为两类:语言模型(LM),如GPT(从左到右处理输入文本,根据前面的上下文预测下一个单词)和遮蔽语言模型(MLM),如BERT、RoBERTa、ALBERT(它可以预测输入中被遮蔽的一小部分单词的特征。)。MLM具有双向的优点,它不是单向的,因为它们可以“看到”被预测Token左右两侧的文本,而不是只看到一侧的文本。然而,MLM方法(和相关方法,如XLNet)也有一个缺点。与预测每个输入Token不同,这些模型只预测了一个很小的子集,被遮蔽的那15%,减少了从每个句子中获得的信息量。

现有的预训练方法及其不足。箭头表示使用哪些Token来生成给定的输出表示(矩形)。左:传统的语言模型(如GPT)只使用当前单词左边的上下文。右:遮蔽语言模型(例如BERT)使用来自左右两边的上下文,但是只预测每个输入的一小部分单词

在“ELECTRA:将预训练文本编码器作为鉴别器而不是生成器”一文中,我们采用了一种不同的方法来进行语言预训练,它提供了BERT的好处,但学习效率要高得多。ELECTRA(Efficiently Learning an Encoder that Classifies Token Replacements Accurately )是一种新的预训练方法,在计算预算相同的情况下,它的性能要优于现有的技术。例如,在GLUE自然语言理解基准下,仅使用不到¼的算力,ELECTRA的性能就堪比RoBERTa和XLNet,并且在SQuAD问答基准上成果领先。ELECTRA出色的效率意味着它即使在小规模下也能工作得很好——它在一个GPU上进行几天的训练,就可以获得比GPT更高的精度,而GPT使用的算力是前者的30倍。ELECTRA是TensorFlow上的一个开源模型,包含了一些现成的预先训练好的语言表示模型。

加速预训练

ELECTRA使用一种新的预训练任务,称为替换Token检测(RTD),它训练一个双向模型(类似MLM),同时学习所有输入位置(类似LM)。受生成对抗网络(GANs)的启发,ELECTRA训练模型来区分“真实”和“虚假”输入数据。与在BERT中使用“[MASK]”替换Token来变换(corrupt)输入不同,我们的方法通过使用不准确(但有些可信的)的伪Token替换一些输入Token来变换输入。

例如,在下图中,单词“cooked”可以替换为“ate”。虽然这有一定的道理,但它并不能很好地契合整个上下文。预训练任务需要模型(即鉴别器)判断原始输入中的哪些Token已被替换或保持不变。至关重要的是,这个二元分类任务应用于每个输入Token,而不是只有少数被遮蔽的Token(在BERT类模型中是15%),这使得RTD比MLM更高效——ELECTRA只需要更少的样本就可以达到同样的性能,因为它可以从单个样本中获取更多的训练信号。同时,RTD也带来了强大的表示学习,因为模型必须准确地学习数据分布的表示才能解决问题。

替换Token检测训练了一个双向模型,同时从所有的输入位置学习

替换Token来自另一个称为生成器的神经网络。虽然生成器可以是任何生成Token输出分布的模型,但是我们使用的是一个小型的遮蔽语言模型(即与鉴别器联合训练的BERT模型,其hidden size较小)。尽管输入鉴别器的生成器的结构类似于GAN,但由于将GAN应用于文本比较困难,我们尽最大可能地训练生成器来预测遮蔽词,而不是相反。生成器和鉴别器共享相同的输入词嵌入。在预训练之后,生成器被丢弃,鉴别器(ELECTRA模型)会针对下游任务微调。我们的模型都是用的transformer神经结构。

关于替换Token检测(RTD)任务的详细信息。伪Token是从与ELECTRA联合训练的小型遮蔽语言模型中抽取的

ELECTRA试验结果

我们将ELECTRA与其他最先进的NLP模型进行了比较,发现在相同的计算预算下,它比以前的方法有了很大的改进,在使用的计算量不到25%的情况下,其性能就与RoBERTa和XLNet相当。

X轴表示用于训练模型的计算量(以FLOPs为单位),y轴表示dev GLUE得分。ELECTRA比现有的预训练NLP模型学习效率更高。请注意,GLUE上当前最好的模型如T5(11B)并不适合放到这副图上,因为它们比其他模型使用了更多的计算(大约是RoBERTa的10倍)。

为了进一步提高效率,我们试验了一个小型的ELECTRA模型,它可以在4天内在单GPU上训练得到良好的精度。虽然没有达到需要许多TPU来训练的大型模型的精度,但ELECTRA-Small仍然表现得很好,甚至超过了GPT,而只需要1/30的计算。最后,为了看下这令人鼓舞的结果在大规模时是否能够保持,我们使用更多的计算来训练一个大型的ELECTRA模型(与RoBERTa的计算量大致相同,约为T5的10%)。该模型在SQuAD 2.0问答数据集(见下表)上达到了一个新的高度,并且在GLUE排行榜上超过了RoBERTa、XLNet和ALBERT。大型的T5-11b模型在GLUE上的得分更高,但ELECTRA的大小只有T5-11b的1/30,并且只使用10%的算力来训练。

ELECTRA-Large和其他先进模型的SQuAD 2.0分值(仅显示非集成模型)

ELECTRA发布

我们发布了对ELECTRA进行预训练和对下游任务进行调优的代码,目前支持的任务包括文本分类、问答系统和序列标记。该代码支持在一个GPU上快速训练一个小型的ELECTRA模型。我们还发布了ELECTRA-Large、ELECTRA-Base和ELECTRA-Small的预训练权重。ELECTRA模型目前只适用于英语,但我们希望将来能发布许多其他语言的预训练模型。

英文原文:More Efficient NLP Model Pre-training with ELECTRA

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/JCrgNiX3Dlojh0xoUfsw
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券