语言模型预训练已被证明对改善许多自然语言处理任务是有效的。这些任务包括:
sentence-level
的任务,如自然语言推理 natural language inference
和转述paraphrasing
,其目的是通过整体分析来预测句子之间的关系。token-level
的任务,如命名实体识别 named entity recognition: NER
和 SQuAD
问答 question answering: QA
,其中模型需要在 token-level
产生细粒度的输出。目前有两种策略将预训练的 language representation
应用于下游任务: feature-based
和 fine-tuning
:
feature-based
方法(如 ELMo
)使用 tasks-specific
架构,其中使用预训练的 representation
作为额外的特征。fine-tuning
方法(如 GPT
),引入了最小的 task-specific
参数,并通过简单地微调 pretrained parameter
从而对下游任务进行训练。在之前的工作中,这两种方法在pre-training
期间共享相同的目标函数,其中它们使用单向语言模型来学习通用的 language representation
。
即,
feature-based
方法和fine-tuning
方法采用相同的预训练方式,但是在应用到下游任务阶段才有所差异。
论文 《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》
认为:目前的技术严重限制了 pre-trained representation
的能力,特别是对于微调 fine-tuning
方法。主要的限制是:标准的语言模型是单向的,这就限制了在预训练中可以使用的架构。例如,在 GPT
中,作者使用了一个从左到右的架构,其中在 Transformer
的self-attention layer
中每个 token
只能关注前面的 token
。
sentence-level
的任务,这样的限制是次优的。token-level
的任务(如 SQuAD
问答任务),当应用基于微调的方法时,这样的限制可能是毁灭性的。因为在这种情况下,从两个方向融合上下文是至关重要的(因为可能需要关注后面的 token
而不是前面的,从而找到问题的答案)。在论文 《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》
中,作者通过从 Transfromer
中提出 Bidirectional Encoder Representation: BERT
来改善基于微调的方法。BERT
通过提出一个新的预训练目标来解决前面提到的单向约束:masked language model: MLM
任务,其灵感来自 Cloze
任务(即,完形填空任务)。 MLM
从输入中随机掩码一些 token
,任务的目标是仅根据上下文来预测被掩码单词的原始 vocabulary id
。与从左到右的语言模型预训练不同的是,MLM
目标允许representation
同时融合左侧和右侧的上下文,这使得我们可以预训练一个深度的双向 Transformer
。除了MLM
,论文还引入了一个 next sentence prediction: NSP
任务来联合预训练 text-pair representation
。
论文贡献如下:
language representation
的重要性。与 《Improving language understanding with unsupervised learning》
使用单向语言模型进行预训练不同,BERT
使用 MLM
来实现 pre-trained deep bidirectional representation
。这也与 ELMo
相反,后者使用独立训练的从左到右和从右到左的语言模型的浅层拼接 shallow concatenation
。representation
消除了许多严重工程化的 task-specific
架构的需要。BERT
是第一个基于微调的 representation model
,它在大量的 sentence-level
和 token-level
任务上取得了SOTA
的性能,超过了许多具有 task-specific
架构的系统。BERT
推动了 11
项 NLP
任务的 state-of-the-art
。作者还报告了BERT
的大量消融实验,表明 BERT
模型的双向特性是唯一最重要的新贡献。相关工作:
feature-based
方法:几十年来,学习广泛适用的 word representation
一直是一个活跃的研究领域,包括非神经方法和神经方法。预训练的 word embeddin
被认为是现代 NLP
系统的一个组成部分,与从头开始学习的 embedding
相比,有很大的改进。
这些方法已被推广到更粗的粒度,如 sentence embedding
或 paragraph embedding
。与传统的 word embedding
一样,这些学到的 representation
通常也被用作下游模型的特征。
ELMo
沿着不同的维度推广了传统的 word embedding
研究。他们提出从语言模型中提取 context-sensitive
的特征。当将contextual word embedding
与现有的 task-specific
架构相结合时,ELMo
推进了几个主要 NLP benchmark
的 SOTA
,包括 SQuAD
上的问答、情感分析 sentiment analysis
和命名实体识别 named entity recognition
。
fine-tuning
方法:最近从语言模型中进行迁移学习的一个趋势是,在为下游监督任务微调同一模型之前,在语言模型目标上预训练该模型架构。这些方法的优点是,只需要从头开始学习非常少的参数。至少部分由于这一优势,GPT
在 GLUE benchmark
的许多 sentence-level
任务上取得了当时 SOTA
的结果。
从监督数据 supervised data
迁移学习:虽然无监督预训练的优势在于几乎有不限量的数据可用,但也有工作表明,可以从具有大型数据集的监督任务中有效地迁移学习,如自然语言推理和机器翻译 machine translation
。在 NLP
之外,计算机视觉领域的研究也证明了从大型预训练模型进行迁移学习的重要性,其中一个有效的秘方是:对基于 ImageNet
预训练的模型进行微调。
BERT
的模型架构是一个多层的、双向的 Transformer encoder
,基于 《Attention is allyou need》
描述的原始实现。由于最近 Transformer
的使用已经变得无处不在,而且我们的实现实际上与原版相同,因此我们将省略对模型架构的详细描述,请读者参考 《Attention is allyou need》
以及 《The Annotated Transformer》
等优秀出版物。
在这项工作中,我们将层数(即 Transformer block
)记做 hidden size
记做 self-attention head
数记做 feed-forward/filter size
设为 4096
。我们主要报告两种模型尺寸的结果:
BERT_BASE
:110M
。BERT_LARGE
:340M
。前馈神经网络是一个双层的全连接网络,输入维度为
、中间层的维度为 、输出层的维度为 。
BERT_BASE
被选择为具有与 GPT
相同的模型大小,以便于比较。然而,关键的是,BERT Transformer
使用的是双向自注意力,而GPT Transformer
使用的是受约束的自注意力(每个token
只能关注其左侧的上下文)。我们注意到,在文献中,双向 Transformer
通常被称为 Transformer encoder
,而只关注左侧上下文的 Transformer
被称为 Transformer decoder
(因为它可以用于文本生成)。
BERT
、GPT
和 ELMo
之间的比较如下图所示。
我们的 input representation
能够在一个token
序列中明确地表示单个文本句子或一对文本句子(如,[Question, Answer]
)。对于一个给定的token
,它的 input representation
是由相应的token embedding
、segment emebdding
和 position embedding
相加而成的。下图给出了我们的 input representation
的直观表示。
具体而言:
我们使用具有 30k
个 token
的vocabulary
的 WordPiece embedding
(《Google’s neural machine translation system: Bridging the gap between human and machine translation》
)。我们用 ##
指示被拆分的 word piece
。
我们使用学到的 positional embedding
,最大可以支持长度为 512
个 token
的序列。
每个序列的第一个 token
总是特殊的 classification embedding
,即 [CLS]
。与这个 token
相对应的 final hidden state
(即 Transformer
的输出)被用作分类任务的 aggregate sequence representation
。对于非分类任务,这个向量被忽略。
sentence pair
被打包成一个单一的序列。我们以两种方式区分这些句子。
首先,我们用一个特殊的 token
(即,[SEP]
)将这两个句子分开。(注意,每个句子的结尾都有一个 [SEP]
)
其次,我们在第一句的每个 token
上添加一个学到的 segment A Embedding
,在第二句的每个 token
上添加一个学到的 segment B Embedding
。
假设
segment
编号为1
和2
,那么segment A embedding
就是segment=1
对应的embedding
,segment B embedding
就是segment=2
对应的embedding
。
对于单个句子的输入,我们只使用 segment A Embedding
。注意,segment A
也称作 sentence A
,因为这里一个句子就是一个 segment
。
进一步地,我们是否可以对句子内部的子句、或者短语也作为更细粒度的
segment
来提供embedding
?
ELMo
和 GPT
不同,我们没有使用传统的从左到右、或从右到左的语言模型来预训练 BERT
。相反,我们使用两个新颖的无监督预训练任务对 BERT
进行预训练。直观而言,我们有理由相信:深度双向模型严格来说比 left-to-right
的模型、或浅层拼接了 left-to-right and right-to-left
的模型更强大。不幸的是,标准的 conditional language model
只能从左到右或从右到左进行训练,因为双向条件会让每个词在multi-layered context
中间接地 "看到自己" 。
为了训练深度双向 representation
,我们采取了一种直接的方法,即随机掩码一定比例的 input token
,然后只预测那些被掩码的 token
。我们把这个过程称为 "masked LM
"(MLM
),尽管它在文献中经常被称为 Cloze task
。在这种情况下,对应于 mask token
的 final hidden vector
被馈入 output softmax
(输出空间为整个 vocabulary
),就像在标准语言模型中一样。在我们所有的实验中,对于每个序列我们随机掩码 15%
的 WordPiece token
。
与降噪自编码器不同的是,我们只预测被掩码的单词,而不是重建整个输入。
被掩码的
token
填充以[MASK]
。
尽管这确实允许我们获得一个双向的预训练模型,但这种方法有两个缺点:
首先,我们在预训练和微调之间产生了不匹配 mismatch
,因为在微调过程中从来没有看到 [MASK]
这个 token
。
为了缓解这一问题,我们并不总是用实际的 [MASK] token
来替换被掩码的 token
。相反,训练数据生成器随机选择 15%
的 token
(例如,在句子 "my dog is hairy"
中它选择了hairy
),然后它将执行以下程序:
80%
的情况下用 [MASK] token
替换该词,例如,"my dog is hairy" --> "my dog is [MASK]"
。10%
的情况下用一个随机的词来替换这个词,例如,"my dog is hairy" --> "my dog is apple"
。10%
的情况下保持该词不变,例如,"my dog is hairy" --> "my dog is hairy"
。这样做的目的是为了使 representation
偏向于实际观察到的单词。Transformer encoder
不知道哪些单词会被要求预测、哪些单词已经被随机词所取代,所以它被迫保持每个 input token
的 distributional contextual representation
。此外,由于随机替换只发生在所有 token
的 1.5%
(即 15%
的 10%
),这似乎并不损害模型的语言理解能力。
似乎论文并没有实验来验证这一点。
其次,每个 batch
中只有 15%
的token
被预测,这表明可能需要更多的 pre-training step
来使模型收敛。在实验部分,我们证明了 MLM
的收敛速度确实比left-to-right
的模型(预测每个 token
)稍慢,但是 MLM
模型的经验改进 empirical improvement
远远超过了增加的训练成本。
许多重要的下游任务,如 Question Answering: QA
和 Natural Language Inference: NLI
,都是基于对两个文本句子之间关系的理解,而语言建模并没有直接捕获到这一点。为了训练一个能够理解句子关系的模型,我们预训练了一个二元化的 next sentence prediction task
,该任务可以从任何单语种的语料库中简单地生成。
具体而言,在为每个预训练样本选择句子 A
和句子 B
时:
50%
的情况下句子 B
是紧随句子 A
的实际的下一句。50%
的情况下句子 B
是语料库中的一个随机句子。例如:
xInput = [CLS] the man went to [MASK] store [SEP] he bought a gallon [MASK] milk [SEP]
Label = IsNext
Input = [CLS] the man [MASK] to the store [SEP] penguin [MASK] are flight ##less birds [SEP]
Label = NotNext
我们完全随机地选择 NotNext
句子,最终的预训练模型在这个任务中达到了 97% ~ 98%
的准确率。尽管该任务很简单,但我们在实验中证明,针对这个任务的预训练对 QA
和 NLI
都非常有利。
实际上后续的论文表明:
NSP
预训练任务是没什么作用甚至是有害的。
预训练程序主要遵循现有的关于语言模型预训练的文献。对于预训练语料库,我们使用 BooksCorpus
(800M
单词)和 English Wikipedia
(2500M
单词)的组合。对于 Wikipedia
,我们只提取文本段落,忽略了 list
、table
、和 header
。至关重要的是,我们使用document-level
语料库而不是混洗过的 sentence-level
语料库(如 Billion Word Benchmark
)从而提取长的连续文本序列。
为了生成每个训练输入序列,我们从语料库中采样两个区间 span
的文本,我们称之为 "句子",尽管它们通常比单个句长得多(但也可能更短)。
Segment A Embedding
,第二个句子接受 Segment B Embedding
。50%
的情况下句子 B
是紧随句子 A
之后的实际的下一句,50%
的情况下句子 B
是一个随机的句子。这是用于 next sentence prediction
任务。512
个 token
。语言模型的 masking
是在 WordPiece tokenization
之后进行的,其中使用 15%
的均匀的掩码率 masking rate
,并没有对部分 word piece
给予特殊考虑。
我们用 batch size = 256
来训练一百万个 step
,每个 mini-batch
有 256 * 512 = 128000
个 token
(这里是近似值,精确值为 131072
),因此相当于在 0.33B
单词的语料库上训练 40
个 epoch
。
Adam
优化器,学习率为L2
权重衰减为 0.01
。学习率在前 10000
步进行 warmup
,学习率线性衰减。layer
上使用 0.1
的 dropout rate
。GPT
,我们使用 gelu
激活函数不是标准的 relu
。training loss
是 mean masked LM likelihood
和 mean next sentence prediction likelihood
之和。BERT_BASE
的训练在 Pod configuration
的 4 Cloud TPUs
上进行(共 16
个TPU
芯片)。BERT_LARGE
的训练在 16 Cloud TPUs
上进行(共 64
个TPU
芯片)。BERT_BASE
和 BERT_LARGE
的预训练都需要 4
天的时间来完成。
对于 sequence-level
分类任务,BERT
的微调是直接的。为了获得输入序列的固定维度的、被池化的 representation
,我们采用输入的第一个 token
的 final hidden state
,这对应于特殊的[CLS]
对应的 word embedding
。我们把这个向量表示为 softmax
计算的,即 BERT
和 ground-truth
标签的对数概率最大化。
对于 span-level
和 token-level
的预测任务,上述过程必须以 task-specific
的方式稍作修改。细节在实验部分给出。
对于微调,模型的大部分超参数与预训练时相同,除了 batch size
、learning rate
和训练 epoch
的数量。 dropout rate
始终保持在 0.1
。最佳的超参数值是 task-specific
的,但我们发现以下数值范围在所有任务中都能很好地发挥作用:Batch size
为 16 、32
;Learning rate (Adam)
为5e-5、3e-5、2e-5
;epoch
数量为3、4
。
微调采用更小的
batch size
、更小的学习率、更少的epoch
。
我们还观察到:大数据集(例如,100k+
带标记的训练样本)对超参数选择的敏感性远低于小数据集。
微调通常是非常快的,所以简单地对上述超参数进行暴力搜索并选择在验证集上表现最好的模型是合理的。
与 BERT
最具可比性的、现有的预训练方法是OpenAI GPT
,它在一个大型文本语料库上训练了一个 left-to-right
的 Transformer
语言模型。事实上,BERT
中的许多设计决定都是有意选择的,以尽可能地接近 GPT
,从而使这两种方法能够得到最低限度的比较。我们工作的核心论点是:我们提出的两个新颖的预训练任务占了经验改进的大部分,但我们确实注意到 BERT
和 GPT
的训练方式还有几个不同之处:
GPT
是在 BooksCorpus
(800M
单词)上训练的,而 BERT
是在 BooksCorpus
和 Wikipedia
( 2500M
单词)上训练的。
通常而言,更大的预训练语料库会带来更好的微调效果。
GPT
使用句子分隔符sentence separator
([SEP]
)和 classifier token
([CLS]
),它们仅在微调期间引入;而 BERT
在预训练期间学习 [SEP]
、[CLS]
和 segment A/B embedding
。
GPT
被训练了 1M
个 step
,batch size
为 32000
个单词;BERT
被训练了 1M
个 step
,batch size
为 128000
个词。
GPT
在所有微调实验中使用相同的学习率 5e-5
;BERT
选择了 task-specific
的、用于微调的学习率,这个学习率在验证集上表现最好。
为了隔绝 isolate
这些差异的影响,我们在实验部分进行了大量消融实验,证明大部分的改进实际上来自新颖的预训练任务。
General Language Understanding Evaluation: GLUE
基准是各种自然语言理解 natural language understanding
任务的集合。大多数 GLUE
数据集已经存在多年,但 GLUE
的目的是:
Train/Dev/Test
的拆分。evaluation server
从而缓解评估不一致和测试集过拟合的问题。GLUE
并未提供测试集的标签,用户必须将他们的预测上传到 GLUE server
进行评估,并对提交的次数有所限制。GLUE benchmark
包括以下数据集:
Multi-Genre Natural Language Inference: MNLI
:是一个大规模、众包式的蕴含分类 entailment classification
任务。给定一对句子,任务的目标是:预测第二个句子相对于第一个句子是蕴含关系entailment
、矛盾关系contradiction
还是中性关系 neutral
。
Quora Question Pairs: QQP
:是一个二元分类任务,任务的目标是确定在 Quora
上提出的两个问题是否在语义上等价 semantically equivalent
。
Question Natural Language Inference: QNLI
:是 Stanford Question Answering Dataset
的一个版本,它被转换为一个二元分类任务。正样本是 sentence
确实包含正确答案的 (question, sentence) pair
,负样本是 sentence
中不包含答案的 (question, sentence) pair
。
Stanford Sentiment Treebank: SST-2
:是一个二元单句分类任务,由从电影评论中提取的句子组成,并具有人类对这些评论的情感的注释 annotation
。
Corpus of Linguistic Acceptability: CoLA
:是一个二元单句分类任务,任务的目标是预测一个英语句子是否在语言上 "acceptable
"。
Semantic Textual Similarity Benchmark: STS-B
:是一个从新闻 headlines
和其他来源抽取的 sentence pair
的集合。它们被标记为 1 ~ 5
分,表示这两个句子在语义上的相似程度。
Microsoft Research Paraphrase Corpus: MRPC
:从在线新闻来源中自动提取的 sentence pair
组成,并由人类注释该 sentence pair
是否具有语义上的等价性。
Recognizing Textual Entailment: RTE
:是一个类似于 MNLI
的二元蕴含任务,但训练数据少得多。
Winograd NLI: WNLI
:是一个小型自然语言推理 natural language inference
数据集,源于 《The winograd schema challenge》
。GLUE
的网页指出:这个数据集的构建存在问题,而且每一个提交给 GLUE
的训练好的系统的表现都比一个简单的 baseline
更差。这个简单的 baseline
直接预测 majority class
,并达到 65.1
的准确率。因此,出于对 OpenAI GPT
的公平比较,我们排除了这个数据集。对于我们的 GLUE submission
,我们总是预测 majority class
。
即,对于每一个测试样本,预测它的类别为训练集中出现概率最高的那个类别(即
majority class
)。
为了在 GLUE
上进行微调,我们根据前文所述来表示输入序列或 sequence pair
,并使用对应于第一个输入 token
([CLS]
)的final hidden vector
aggregate representation
。这在下图 (a)
和 (b)
中得到了直观的证明。在微调过程中引入的唯一新参数是一个分类层
因为
GLUE
数据集都是文本分类任务。
对于所有的 GLUE
任务,我们使用 batch size = 32
以及 3
个 epoch
。
对于每个任务,我们用 5e-5、4e-5、3e-5、2e-5
的学习率进行微调,并选择在验证集上表现最好的一个。
此外,对于 BERT_LARGE
,我们发现微调在小数据集上有时是不稳定的(也就是说,一些 runs
会产生退化degenerate
的结果),所以我们运行了几个随机重启 random restart
,并选择了在验证集上表现最好的模型。
通过随机重启,我们使用相同的 pre-trained checkpoint
,但在微调期间进行不同的数据混洗和 classifier layer
初始化 。
我们注意到,GLUE
数据集不包括测试集的标签,我们只为每个 BERT_BASE
和 BERT_LARGE
做一次 evaluation server submission
。
从图
(a)
中看到,在微调期间只有一个[SEP]
符号,这与预训练阶段不一致。在预训练阶段每个句子的末尾都添加一个[SEP]
。这种不一致是否影响效果?可以通过实验来评估。
实验结果如下表所示:
BERT_BASE
和 BERT_LARGE
在所有任务上的表现都大大超过了现有的系统,分别比 SOTA
的系统获得了 4.4%
和 6.7%
的平均精确度提升。请注意,BERT_BASE
和 OpenAI GPT
在 attention masking
之外的模型架构方面几乎是相同的。
对于最大和最广泛报道的GLUE
任务 MNLI
,BERT
(这里是 BERT_LARGE
)相比 SOTA
获得了 4.7%
的绝对提升。
在 GLUE
的官方排行榜上,BERT_LARGE
获得了80.4
分;相比之下,排在榜首的系统(即 OpenAI GPT
)截至本文撰写之日获得了 72.8
分。
下图中的
Average
稍有差异,因为这里我们排除了有问题的WNLI
数据集。
值得注意的是,BERT_LARGE
在所有任务中都显著优于 BERT_BASE
,即使是那些训练数据非常少的任务。BERT
模型大小的影响将在下面的实验中进行更深入的探讨。
Standford Question Answering Dataset: SQuAD
是一个由 10
万个众包的 (question, answer) pair
组成的集合。给定一个问题和来自维基百科中包含答案的段落,任务的目标是预测该段落中的答案文本的区间 answer text span
。例如:
xxxxxxxxxx
Input Question: Where do water droplets collide with ice crystals to form precipitation?
Input Paragraph:
... Precipitation forms as smaller droplets coalesce via collision with other rain drops or ice crystals within a cloud. ...
Output Answer: within a cloud
这种类型的区间预测任务 span prediction task
与 GLUE
的序列分类任务截然不同,但我们能够以一种直接的方式使 BERT
在SQuAD
上运行。
就像 GLUE
一样,我们将输入的问题和段落表示为一个 single packed sequence
,其中 question
使用 segment A embedding
,段落使用 segment B embedding
。在微调过程中学习到的唯一的新参数是一个 start vector
end vector
input token
在 BERT
中的的 final hidden vector
表示为 Figure 3(c)
所示。然后,单词 answer span
的起点start
的概率被计算为 softmax
:
其中
取值为从段落开始到段落结束。
同样的公式用于 answer span
的终点end
,最大得分的 span
被用作预测。训练目标是正确的起点位置和终点位置的对数可能性。
这里假设起点和终点之间是相互独立的。实际上这种假设通常不成立,终点和起点之间存在关联,如终点的位置大于等于起点。
我们用 5e-5
的学习率和 batch size = 32
训练了 3
个 epoch
。在推理时,由于终点预测并没有考虑以起点为条件,我们增加了终点必须在起点之后的约束条件,但没有使用其他启发式方法。tokenized labeled span
被调整回原始的 untokenized input
以进行评估。
因为经过了
tonenization
之后,原始的单词被拆分为word piece
,这将影响span
的位置。
结果如下表所示。SQuAD
采用了高度严格的测试程序,提交者必须手动联系 SQuAD
的组织者,在一个隐藏的测试集上运行他们的系统,所以我们只提交了我们最好的系统进行测试。下表中显示的结果是我们第一次也是唯一一次向 SQuAD
提交的测试结果。
我们注意到:SQuAD
排行榜上的榜首结果没有最新的公开的系统描述,而且在训练他们的系统时允许使用任何公共数据。因此,我们在提交的系统中使用了非常适度的数据增强:在 SQuAD
和 TriviaQA
上联合训练。
我们表现最好的系统相比排行榜上榜首的系统高出 +1.5 F1
(以 ensembling
系统的方式 )和 +1.7 F1
(以 single
系统的方式)。事实上,我们的单一 BERT
模型在F1
得分方面优于 top ensemble system
。如果我们只对 SQuAD
进行微调(不包括TriviaQA
),我们会损失0.1-0.4 F1
,但仍然以很大的优势胜过所有现有系统。
BERT ensemble
使用了7
个模型,它们分别使用不同的预训练checkpoint
和fine-tuning seed
。
为了评估 token tagging
任务的性能,我们在 CoNLL 2003
命名实体识别(NER
)数据集上对 BERT
进行了微调。这个数据集由 20
万个训练单词组成,这些单词被标注为人物 Person
、组织Organization
、位置Location
、杂项Miscellaneous
、或其他Other
(非命名实体)。
为了进行微调,我们将每个token
final hidden representation
non-autoregressive
和 no CRF
)。
为了与 WordPiece tokenization
兼容,我们将每个 CoNLL-tokenized input word
馈入我们的 WordPiece tokenizer
,并使用与第一个 sub-token
对应的 hidden state
作为分类器的输入。例如:
xxxxxxxxxx
Jim Hen ##son was a puppet ##eer
I-PER I-PER X O O O X
其中 X
没有预测。Figure 3(d)
中也给出了一个直观的表示。在NER
中使用了 cased WordPiece model
(即,保留字母的大小写) ,而在所有其他任务中则使用了 uncased model
(即,所有字母转化为小写)。
结果如下表所示。BERT_LARGE
在 CoNLL-2003 NER Test
中优于现有的 SOTA
(Cross-View Training with multi-task learning
)达到 +0.2
的改进。
如果在
BERT
的final hidden representation
之上再接入自回归或CRF
,预期将得到更好的效果。
Situations With Adversarial Generations: SWAG
数据集包含11.3
万个 sentence-pair completion
的样本,评估了 grounded commonsense inference
。
给定视频字幕数据集中的一个句子,任务是在四个选项中决定最合理的延续concatenation
。例如:
xxxxxxxxxx
A girl is going across a set of monkey bars. She
(i) jumps up across the monkey bars.
(ii) struggles onto the bars to grab her head.
(iii) gets to the end and stands on a wooden plank.
(iv) jumps up and does a back flip.
将 BERT
应用于 SWAG
数据集类似于 GLUE
。对于每个样本,我们构建四个输入序列,每个序列都包含给定句子(句子 A
)和一个可能的延续(句子B
)的拼接。我们引入的唯一 task-specific
参数是一个向量 final aggregate representation
softmax
:
我们用 2e-5
的学习率和 batch size = 16
对模型进行了 3
个 epoch
的微调。结果如下表所示。BERT_LARGE
比作者的 baseline
(即,ESIM+ELMo
系统)要提高 27.1%
。
BERT
框架的每个方面 aspect
的具体贡献分离出来。这里我们对 BERT
的一些方面进行了消融实验,以便更好地了解其相对重要性。我们的核心主张claim
之一是 BERT
的深度双向性deep bidirectionality
,这是由 masked LM pre-training
实现的并且是BERT
与以前的工作相比最重要的一个改进。为了证明这一主张,我们评估了两个新模型,它们使用了与 BERT_BASE
完全相同的预训练数据、微调方案、以及 Transformer
超参数。
No NSP
:该模型使用 MLM
任务预训练,但是没有 NSP
任务。
LTR & No NSP
:该模型使用 Left-to-Right: LTR
的语言模型来训练,而不是使用MLM
来训练 。在这种情况下,我们预测每一个input word
,不应用任何 masking
。在微调时也应用了 left-only
约束,因为我们发现:用 left-only-context
进行预训练然后用 bidirectional context
进行微调总是更糟糕。此外,这个模型没有使用 NSP
任务进行预训练。
这与OpenAI GPT
有直接的可比性,但使用了我们更大的训练数据集、我们的input representation
、以及我们的微调方案。
BERT
在预训练期间学习[SEP]
、[CLS]
和segment A/B embedding
,而GPT
仅在微调期间学习这些input representation
。
结果如下表所示。
我们首先检查了NSP
任务带来的影响。可以看到:去掉NSP
对 QNLI
、MNLI
和SQuAD
的性能有很大的伤害。这些结果表明,我们的预训练方法对于获得前面介绍的强大的经验结果至关重要。
后续的
XLNet
和RoBERTa
都表明:NSP
任务不重要。而且RoBERTa
的作者认为:BERT
得出NSP
任务重要的原因是,BERT
的输入是两个句子的拼接,因此如果此时没有NSP
任务则效果较差。在RoBERTa
中,由于没有NSP
任务,因此预训练样本就是一个完整的、来自单个文件的文档块。
接下来,我们通过比较 "No NSP
"和 "LTR & No NSP
"来评估训练 bidirectional representation
的影响。LTR
模型在所有任务上的表现都比MLM
模型更差,在 MRPC
和 SQuAD
上的下降幅度非常大。
SQuAD
,直观而言,LTR
模型在span
预测和 token
预测方面的表现非常差,因为 token-level hidden state
没有右侧的上下文。MRPC
而言,不清楚这种糟糕的表现是由于数据量小还是由于任务的性质,但是我们发现这种糟糕的表现在多次随机重启的full
超参数扫描中是一致的。为了加强 LTR
系统,我们尝试在它上面添加一个随机初始化的 BiLSTM
进行微调。这确实大大改善了 SQuAD
的结果,但结果仍然比预训练的双向模型差得多。它还损害了其它所有四个 GLUE
任务的性能。
我们认识到:也可以像 ELMo
那样,单独训练LTR
和 RTL
模型,并将每个 token
表示为两个模型的拼接。然而:
QA
这样的任务来说是不直观的,因为 RTL
模型不能以答案作为条件来回答问题(即,条件概率 deep bidirectional model
强大,因为深度双向模型可以选择使用 left context
或 right context
。这里我们探讨了模型大小对微调任务准确性的影响。我们训练了一些具有不同层数、隐单元、以及注意力头的 BERT
模型。除此之外,我们还使用了与前面所述相同的超参数和训练程序。
选定的 GLUE
任务的结果如下表所示。在这个表中,我们报告了 5
次随机重启微调的平均验证准确率。可以看到:
更大的模型在所有四个数据集上都导致了一致的准确性提高,即使是只有 3600
个标记的训练样本的 MRPC
。
同样令人惊讶的是,我们能够在相对于现有文献已经相当大的模型之上实现如此显著的改进。例如:
《Attention is all you need》
探索的最大的 Transformer
是 (L=6,H=1024,A=16)
,编码器的参数为100M
。Transformer
是 (L=64,H=512,A=2)
,参数为 235M
(《Character-level language modeling with deeper self-attention》
)。BERT_BASE
包含 110M
参数,BERT_LARGE
包含 340M
参数。多年以来人们都知道,增加模型规模将导致大型任务(如机器翻译、语言建模)的持续改进,这可以通过下表所示的 held-out
训练数据的 LM perplexity
来证明。然而,我们认为这是第一项工作,证明了扩展到极端的 model size
也会导致在非常小型的任务上有很大的改进,只要模型已经被充分地预训练过。
即,增加模型规模不仅对大型任务有效,对小型任务也有效(模型需要被预训练)。
下图展示了从一个已经预训练了 step
的 checkpoint
进行微调后的 MNLI
验证准确性。这使我们能够回答以下问题。
问题:BERT
是否真的需要如此大量的预训练(128,000 words/batch * 1,000,000 steps
)来实现高的微调准确率?
答案:是的。BERT_BASE
预训练一百万步时,与五十万步相比,在 MNLI
上实现了接近 1.0%
的微调准确率提升。
问题:MLM
预训练的收敛速度是否比 LTR
预训练慢,因为每个 batch
中只有 15%
(而不是 100%
)的单词被预测?
答案:是的,MLM
模型的收敛速度比LTR
稍慢。然而,就绝对准确率而言,MLM
模型几乎从一开始就超过了 LTR
模型。
迄今为止,所有的 BERT
结果都采用了微调方法,即在预训练的模型中加入一个简单的分类层,并在下游任务中联合微调所有的参数。然而,feature-based
的方法,即从预训练的模型中抽取固定的特征,具有一定的优势:
NLP
任务都可以很容易地用 Transformer
编码器架构来表示,因此需要增加一个 task-specific
的模型架构。expensive representation
,然后在这个 representation
的基础上用不太昂贵的模型进行许多实验,这有很大的计算优势。这里我们通过在 CoNLL-2003 NER
任务上生成类似于 ELMo
的 pre-trained contextual representation
来评估 BERT
在 feature-based
的方法中的表现如何。为了做到这一点,我们使用与本文在 Named Entity Recognition
章节中相同的 input representation
,但是使用 BERT
的一个或多个层的激活值而没有微调任何参数。这些 contextual embedding
被用作一个双层 BiLSTM
的输入,这个双层 BiLSTM
具有 768
维并且是随机初始化的,并且这个双层 BiLSTM
位于最终的分类层之前。
结果如下表所示。表现最好的方法是将预训练的 Transformer
的最后四个隐层的 token representation
拼接起来,这比微调整个模型仅相差 0.3 F1
。这表明:BERT
对微调方法和 feature-based
方法都是有效的。
无监督表示学习 unsupervised representation learning
在自然语言处理领域取得了巨大的成功。通常情况下,这些方法首先在大规模的无标签文本语料库中预训练神经网络,然后在下游任务中对模型或 representation
进行微调。在这个共同的 high-level
思想下,人们在各种文献中探讨了不同的无监督预训练目标 unsupervised pretraining objective
。其中,自回归 autoregressive: AR
语言建模language modeling
和自编码 autoencoding: AE
是两个最成功的预训练目标。
自回归语言建模旨在用自回归模型估计文本语料的概率分布。具体而言,给定一个文本序列 likelihood
分解为前向乘积 forward product
backward product
deep bidirectional context
。相反,下游的语言理解任务往往需要双向的上下文信息。这就造成了自回归语言建模和有效的预训练之间的 gap
。
为文本序列 前 个位置的子序列, 为文本序列 后 个位置的子序列。
相比之下,基于自编码的预训练并不进行显式的密度估计 density estimation
(BERT
,它一直是 SOTA
的预训练方法。给定输入的 token
序列,其中输入的某一部分 token
被一个特殊的符号 [MASK]
所取代,模型被训练为从破坏的版本中恢复原始 token
。由于任务目标不包含密度估计,所以 BERT
可以利用双向上下文来重建原始数据。作为一个直接的好处,这弥补了上述自回归语言建模中的 bidirectional information gap
,导致了性能的提高。然而:
BERT
在预训练时使用的 [MASK]
等人造符号在微调时不存在于真实数据中,从而导致了 pretrain-finetune
的不一致。predicted token
在输入中被 masked
了,BERT
不能像自回归语言建模那样使用乘积规则 product rule
建立联合概率模型。换句话说,BERT
假设在给定 unmasked token
的条件下,predicted token
之间是相互独立的。这是过于简化的,因为在自然语言中普遍存在着高阶的、长程的依赖性。面对现有语言预训练目标的优点和缺点,在论文 《XLNet: Generalized Autoregressive Pretraining for Language Understanding》
工作中,作者提出了一种广义的自回归方法,即 XLNet
。XLNet
同时利用了自回归语言建模和自编码的优点,并避免了它们的局限。
XLNet
不是像传统的自回归模型那样使用固定的前向分解顺序forward factorization order
或后向分解顺序 backword factorization order
,而是最大化关于分解顺序的所有可能的排列组合中,序列的期望对数似然 expected log likelihood
。由于排列操作permutation operation
,每个位置的上下文可以同时由左右两侧的 token
组成。在预期中,每个位置学会利用来自所有位置的上下文信息,即捕获双向的上下文。XLNet
不依赖于数据破坏 data corruption
。因此,XLNet
不会受到 BERT
所带来的pretrain-finetune discrepancy
的影响。同时,自回归目标还提供了一种自然的方法,可以使用乘积法则对 predicted token
的联合概率进行分解,消除了 BERT
中的独立性假设 independence assumption
。除了新颖的预训练目标外,XLNet
还改进了预训练的架构设计。
XLNet
将 Transformer-XL
的segment
递归机制和相对编码方案 relative encoding scheme
融合到预训练中。根据经验,特别是在涉及较长文本序列的任务中,这会提高下游任务的性能。Transformer(-XL)
架构应用于 permutation-based
的语言建模是行不通的,因为分解顺序是任意的、目标是模糊ambiguous
的。作为一个解决方案,作者建议重新参数化 reparameterize
Transformer(-XL)
网络从而消除模糊性 ambiguity
。根据经验,XLNet
在 18
个任务上取得了 SOTA
的结果,即: 7
个 GLUE
语言理解任务,3
个阅读理解任务(包括 SQuAD
和RACE
)、7
个文本分类任务(包括 Yelp
和 IMDB
)、以及 ClueWeb09-B
文档排序任务。在一组公平的比较实验下,XLNet
在多个 benchmark
上一直优于 BERT
。
相关工作:permutation-based
的自回归建模的思想已经在 《Neural autoregressive distribution estimation》
和 《Made: Masked autoencoder for distribution estimation》
中进行了探讨,但有几个关键的区别。以前的模型是无序 orderless
的,而 XLNet
基本上是顺序感知 order-aware
的(带 positional encoding
)。这对语言理解 language understanding
很重要,因为无序模型会退化为 bag-of-word
,缺乏基本的表达能力。
上述差异源于动机 motivation
的根本差异:以前的模型旨在通过在模型中加入 "无序" 的归纳偏置 inductive bias
来改善密度估计,而 XLNet
的动机是使自回归语言模型学习双向上下文。
这里我们首先针对语言预训练language pretraining
来回顾并比较传统的自回归语言建模和 BERT
。
给定一个文本序列 forward autoregressive factorization
下的对数似然 likelihood
来进行预训练:
其中:
RNN
或 Transformer
)产生的 context representation
,embedding
。vocabulary
。相比之下,BERT
是基于降噪自编码 denoising auto-encoding
的。具体来说,对于一个文本序列 BERT
首先通过随机设置 15%
)的 token
为特殊符号 [MASK]
从而构建一个破坏的版本 masked token
记做
其中:
masked
。Transformer
,它将一个长度为 T
的文本序列 hidden vector
序列:Transformer
的参数,hidden vector
。 可以看到:在自回归语言建模中,
context representation
为,即模型在位置 仅能看到前面 个位置的 token
(即,);在 BERT
中,context representation
为,即模型在位置 能够看到所有的 token
(即,)。
两种预训练目标的优点和缺点比较如下:
独立性假设 Independence Assumption
:正如 BERT
基于独立性假设来分解联合条件概率 mask token
相比之下,自回归语言建模目标使用普遍适用的乘积规则对
输入噪声 Input Noise
:BERT
的输入包含像 [MASK]
这样的人工符号,而这些符号在下游任务中从未出现过,这就造成了 pretrain-finetune discrepancy
。像 BERT
论文中那样用原始 token
替换 [MASK]
并不能解决问题,因为原始 token
只能以很小的概率被使用,否则
相比之下,自回归语言建模并不依赖于任何输入破坏 input corruption
,因此不会受到这个问题的影响。
上下文不一致 Context Dependency
:自回归 representation
token
作为条件(即,左侧的 token
)。
相比之下, BERT representation
BERT
目标允许对模型进行预训练以更好地捕捉双向的上下文。
根据上面的比较,自回归语言模型和 BERT
拥有各自独特的优势。一个自然的问题是:是否存在一种预训练目标,既能带来两者的优点又能避免它们的缺点?
借用 orderless NADE
(《Neural autoregressive distribution estimation》
)的思路,我们提出了排列语言建模 permutation language modeling
目标,它不仅保留了自回归模型的优点,而且还允许模型捕获双向上下文。
具体而言,对于一个长度为 autoregressive factorization
。直观地说,如果模型参数在所有分解顺序中都是共享的,那么在预期中,模型将学会从两侧的所有位置收集信息。
为了形式化这个思想,令
基本上,对于一个文本序列 likelihood
pretrain-finetune discrepancy
。
前向自回归分解和后向自回归分解分别采用了两种特殊的分解顺序:
。
Permutation
的备注:所提出的目标只是排列分解顺序 factorization order
,而不是序列顺序 sequence order
。换句话说,我们保持原始的序列顺序,使用对应于原始序列的positional encoding
,并依靠 Transformer
中恰当的 attention mask
来实现分解顺序的排列。请注意,这种选择是必要的,因为模型在微调期间只会遇到具有自然顺序的文本序列。
XLNet
在实现过程中并未采样,而是通过生成合适的 attention mask
来达到采样的效果。
为了提供一个总体概览,我们在下图中展示了一个例子:给定相同的输入序列 token
mem
表示 Transformer-XL
的 memory
机制。
虽然排列语言建模目标具有理想的属性,但是标准 Transformer
的朴素实现 naive implementation
可能无法工作。为了说明这个问题,假设我们使用标准的 softmax
公式对 next-token
分布 parameterize
,即:
其中 Transformer
网络生成的 hidden representation
(通过适当的掩码得到)。
现在注意到:representation
representation
。为了避免这个问题,我们建议重新参数化 next-token
分布,使其感知到目标位置:
其中 representation
类型,它还将目标位置
原始的
Transformer
没有这个问题,因为Transformer
输入序列的分解顺序是固定的(),第 个要预测的 token
就是位于序列中的位置。 但是,在排列语言建模目标,由于分解顺序是随机的,因此第
个要预测的 token
的位置不确定(可能是原始序列中第一个位置、也可能是原始序列中最后一个位置)。
标准的语言模型参数化失败的例子:考虑两个不同的排列
如果采用标准 Transformer
的朴素实现,则有:
从效果上看,两个不同的目标位置 ground-truth
分布应当是不同的。
双流自注意力 Two-Stream Self-Attention
:虽然 target-aware representation
的思想消除了 target prediction
中的模糊性 ambiguity
,但如何形式化
目标位置
代表了目标 token
位于原始序列中的位置(而不是排列之后的位置,排列之后的位置就是)。
为了使这个参数化 parameterization
发挥作用,有两个要求在标准的 Transformer
架构中是矛盾的:
token
token
为了解决这样的矛盾,我们建议使用两组 hidden representation
而不是一组:
content representation
Transformer
中的标准 hidden state
类似。这个 representation
同时编码了上下文和
注意,这里是小于等于号:
。
query representation
在计算上:
query stream
以 trainable vector
来初始化(即, content stream
被设置为相应的 word embedding
(即, 对于每个自注意力层 representation stream
用一组共享的参数进行更新:
其中:query, key, value
。
注意:
query stream
中的key, value
使用(小于号); content stream
中的key, value
使用(小于等于号)。
content representation
的更新规则与标准的自注意力完全相同,因此在微调过程中,我们可以简单地放弃 query stream
,将 content stream
作为普通的 Transformer(-XL)
。
最后,我们可以使用最后一层的 query representation
因为
query representation
包含了位置(而 content representation
不包含),因此使用 query representation
来计算。
query representation
会利用content representation
来计算,而content representation
就是传统的自注意力机制而不会用到query representation
。
双流自注意力的示意图如下图所示,其中分解顺序为 3 -> 2 -> 4 -> 1
而当位置
图 (a)
:content stream
,query
,key/value
。
图 (b)
:query stream
,query
,key/value
。
图 (c)
:在 attention mask
中,第 mask
,白色代表不可见(掩码)、红色代表可见。 query stream
无法看到当前位置的内容,因此相比 conent stream
的 attention mask
,query stream
的 attention mask
掩码了对角线。
这就是通过生成合适的
attention mask
来达到采样的效果。
例如,attention mask
的第一行):
content stream
中它可以看到所有位置(包括它自己),因此 attention mask
第一行全部是红色(可见)。query stream
中它可以看到除了自己之外的所有其它位置,因此 attention mask
第一行除了第一个位置之外全部是红色。部分预测 Partial Prediction
:虽然排列语言建模目标有几个好处,但由于排列组合,它是一个更具挑战性的优化问题,并在实验中导致收敛缓慢。为了降低优化难度,我们选择仅预测分解顺序中的最后一批 token
。
正式地,我们把 non-target
子序列 target
子序列 non-target
子序列的条件下最大化 target
子序列的对数似然 log-likelihood
,即:
注意:
我们使用一个超参数 token
被选中从而用于预测,即 token
,它们的 query representation
不需要计算,这就节省了速度和内存。
这里假设序列的长度为
,因此 。对于有效长度较短的序列,用 代替上式中的 。
这里我们对所提出的排列语言建模目标进行了详细的可视化,包括 reusing memory
机制(又称递归机制)、如何使用注意力掩码来排列分解顺序、以及两个注意力流的区别。如 Figure 3
和 Figure 4
所示,给定当前位置 token
此外,比较 Figure 3
和 Figure 4
,我们可以看到 query stream
和 content stream
是如何通过 attention mask
在特定排列中工作的。主要的区别是: query stream
不能做自注意力、不能访问当前位置上的 token
,而 content stream
则执行正常的自注意力。
由于我们的目标函数符合自回归框架,我们将 SOTA
的自回归语言模型 Transformer-XL
纳入我们的预训练框架,并以它命名我们的方法(即,XLNet
)。我们融合了 Transformer-XL
中的两项重要技术,即相对位置编码方案 relative positional encoding scheme
、段递归机制 segment recurrence mechanism
。
如前所述,我们基于原始序列应用相对位置编码,这很直接。现在我们讨论如何将递归机制融合到所提出的 permutation setting
中,并使模型能够重用 previous segments
的 hidden state
。在不失一般性的情况下,假设我们有来自长序列 segment
,即 segment
,然后为每个层 content representation
segment
memory
的注意力机制可以写成:
其中
注意,这里不用缓存
query representation
,因为只有content representation
才会被用来作为key
和value
。
注意:positional encoding
只取决于原始序列中的实际位置。因此,一旦得到 representation
segment
的分解顺序的情况下缓存和复用 memory
。在预期中,该模型学习利用上一个 segment
的所有分解顺序的 memory
。
不管前一个
segment
的分解顺序如何,它始终位于当前segment
之前,因此当前segment
的任何位置都能看到所有的。
query stream
也可以用同样的方法计算(只需要注意力机制中的修改 key
和 value
即可。)。
最后,Figure 2 (c)
展示了所提出的具有双流注意力的排列语言建模的概况。更详细的介绍参考 Figure 3
和 Figure 4
。
许多下游任务都有多个 input segment
,例如,问答question answering: QA
中包含一个问题和一个上下文段落。我们现在讨论一下我们如何预训练 XLNet
以便在自回归框架中对多个 segment
进行建模。在预训练阶段,遵从 BERT
,我们随机抽取两个 segment
(可以来自同一上下文,也可以来自不同的上下文),并将两个 segment
的拼接视为一个序列,以进行排列语言建模。我们仅复用属于同一上下文的 memory
。
具体而言,我们模型的输入与 BERT
类似:[A, SEP, B, SEP, CLS]
,其中 "SEP"
和 "CLS"
是两个特殊符号,"A"
和 "B"
是两个 segment
。尽管我们遵循 two-segment
的数据格式,XLNet-Large
没有使用 next sentence prediction
的目标,因为它在我们的消融研究中没有显示出一致的改进。
注意,这里用于下游任务,即微调阶段。在预训练阶段,是没有多个
input segment
的,因为预训练没有next sentence prediction
目标。
相对段编码 Relative Segment Encoding
:从结构上看,与BERT
在每个位置的 word embedding
中增加一个绝对段嵌入 absolute segment embedding
不同,我们从 Transformer-XL
中扩展了 relative encoding
的思想,也对 segment
进行相对编码。
注意,这里也是用于下游任务,即微调阶段。
给定序列中的一对位置 segment
,我们使用 segment encoding
segment
,则 attention head
的可学习模型参数。换句话说,我们仅考虑这两个位置是否在同一 segment
内,而不是考虑它们来自哪个具体的 segment
。这与 relative encoding
的核心思想是一致的,即,只对位置之间的关系进行建模。
理论上讲,对于
input segment
数量为2
的输入,relative encoding
和absolute encoding
的模型容量是相同的,都是两个待学习的embedding
参数。但是:
- 二者的语义不同:
relative encoding
的embedding
空间编码了是否来自于同一个segment
;absolute encoding
的embedding
空间编码了每个绝对segment id
。- 二者的用法不同:
relative encoding
用于计算relative
注意力系数,然后将这个系数添加到正常的注意力权重中;absolute encoding
直接添加到word embedding
从而直接计算注意力权重。
当位置 attend
位置 segment encoding
query
向量,head-specific
的偏置向量 bias vector
。最后,这个值
使用 relative segment encoding
有两个好处:
首先,relative encoding
的归纳偏置 inductive bias
可以改善泛化性。
其次,relative encoding
为那些有两个以上 input segment
的任务中进行微调提供了可能,而这是使用 absolute segment encoding
所不能做到的。
因为
absolute segment encoding
仅能编码训练期间看到的segment id
(即,segment id = A
、segment id = B
,这两个id
)。
比较公式 BERT
和 XLNet
都进行了部分预测,即仅预测序列中 token
的一个子集。
BERT
来说是一个必须的选择,因为如果所有的 token
都被 maksed
了,就不可能做出任何有意义的预测。BERT
和 XLNet
来说,部分预测仅预测具有足够上下文的 token
,起到了降低优化难度的作用。BERT
无法建模预测目标之间的依赖性。为了更好地理解这种差异,让我们考虑一个具体的例子:[New, York, is, a, city]
。假设 BERT
和 XLNet
都选择 [New, York]
这两个 token
作为预测目标,并最大化 XLNet
采样到了分解顺序 [is, a, city, New, York]
。在这种情况下,BERT
和 XLNet
分别简化为以下目标:
注意,XLNet
能够捕捉到一对目标 (New, York)
之间的依赖关系,而这个依赖关系被 BERT
忽略了。尽管在这个例子中,BERT
学到了一些依赖关系,如(New, city)
和 (York, city)
。但是很明显,在相同的目标下,XLNet
总是能学到更多的依赖关系,并且包含 "denser
" 的有效训练信号(即,上下文更长)。
为了证明超一般性观点(而不是单个例子),我们现在转向更正式的表达。受之前工作的启发(《Breaking the softmax bottleneck: A high-rank rnn language model》
),给定一个序列 target-context pair
:token
从而构成 loss
项 pair
注意:ground-truth
。无论
给定一组 target token
non-target token
BERT
和 XLNet
都能最大化
其中:token
集合。
这两个目标都由 loss
项组成,其中 target-context pair
loss
项 target-context pair
给定这个定义,我们考虑两种情况:
BERT
和 XLNet
所覆盖。XLNet
所覆盖,而无法被 BERT
所覆盖。因此,XLNet
能够比BERT
覆盖更多的依赖关系。换句话说,XLNet
目标包含更有效的训练信号,这将经验empirically
地带来更好的性能。像 GPT
这样的标准自回归语言模型只能覆盖依赖关系 XLNet
则能够在所有分解顺序的期望中覆盖这两种情况。
标准自回归语言建模的这种限制在现实世界的应用中可能是至关重要的。例如,考虑一个 span extraction
的问答任务,其中上下文是 "Thom Yorke is the singer of Radiohead"
,问题是 "Who is the singer of Radiohead"
。在自回归语言建模中,"Thom Yorke"
的 representation
不依赖于 "Radiohead"
,因此 "Thom Yorke"
不会被标准方法(即,在上下文中所有的 token representation
上应用 softmax
)选为答案。
更正式地说,考虑一个 context-target pair
token
,那么自回归语言建模无法覆盖该依赖关系。XLNet
能够覆盖期望中的所有依赖关系。像 ELMo
这样的方法以浅层的方式将前向语言模型和后向语言模型拼接起来,这不足以对两个方向之间的深层交互进行建模。
由于缺乏双向上下文建模的能力,语言建模和预训练之间一直存在着 gap
,正如前面内容所分析的。一些机器学习从业者甚至质疑:如果语言建模不能直接改善下游任务,那么它是否有意义。
XLNet
推广了语言建模并弥补了这个 gap
。因此,它进一步 "证实" 了语言建模的研究。此外,针对预训练而利用语言建模研究的快速进展也成为可能。作为一个例子,我们将 Transformer-XL
融合到 XLNet
中,从而证明最新的语言建模进展的有用性。
遵从 BERT
,我们使用 BooksCorpus
和 English Wikipedia
作为我们预训练数据的一部分,它们合并起来有 13GB
的纯文本。此外,我们还包括 Giga5
( 16GB
文本)、ClueWeb 2012-B
和 Common Crawl
进行预训练。我们使用启发式方法激进地过滤掉ClueWeb 2012-B
和 Common Crawl
中短的或低质量的文章,结果分别得到 19GB
和 78GB
的文本。
在使用 SentencePiece
(《Sentencepiece: A simple and language independent subword tokenizer and detokenizer for neural text processing》
)进行 tokenization
后,我们为 Wikipedia
、BooksCorpus
、Giga5
、ClueWeb
和 Common Crawl
分别得到27.8B
、1.09B
、4.75B
、4.30B
和 19.97B
个 subword piece
,共计 32.89B
个 subword piece
。
我们最大的模型 XLNet-Large
具有与 BERT-Large
相同的架构超参数,这导致了相似的模型大小。序列长度和 memory
长度分别被设置为 512
和 384
。
我们在 512
个 TPU v3
芯片上对 XLNet-Large
进行了 500K
步的训练,使用 Adam
优化器,线性学习率衰减,batch size = 2048
,这大约需要 2.5
天。据观察,模型在训练结束时仍然对数据欠拟合,但继续预训练对下游任务没有帮助,这表明给定优化算法,模型没有足够的容量来充分利用数据规模。然而,在这项工作中,我们避免训练一个更大的模型,因为它在微调方面的实际用途可能是有限的。
此外,类似于 BERT-Base
,我们考虑只在 BooksCorpus + Wikipedia
上训练一个 XLNet-Base
,用于消融研究、以及和 BERT
的公平比较。
由于引入了递归机制,我们使用了一个双向的 data input pipeline
,其中前向和后向各占 batch size
的一半。
双向的
data input pipeline
意思是:在batch
中,既有正序(相对于原始序列顺序)的输入、又有逆序(相对于原始序列顺序)的输入。这是为了配合span-based
预测。因为
span-based
预测直接将原始序列中连续个 token
作为预测目标,顺序不变(如,从I like New York, because ...
中截取(New, York)
)。如果只有正序输入,那么这些预测目标之间只能捕获前向的依赖性(如,p(York | New)
)。增加了逆序输入之后,这些预测目标之间就可以捕获后向的依赖性(如,p(New | York)
)。注意,这里影响的是预测目标之间的依赖性,而不是预测目标和上下文之间的依赖性。
为了训练 XLNet-Large
,我们将部分预测常数 6
。我们的微调程序遵循 BERT
,除非另有说明。我们采用了一种 span-based
预测的思想,首先采样一个长度 token
的上下文中随机选择连续的、跨度为 token
作为预测目标。
假设随机选择的位置为
,则将这 固定为 并且顺序不变。而剩余的位置作为 (它们的顺序不重要,因为它们仅作为上下文而不会作为预测目标)。 这种
span-based
的方法易于实现,但是它强迫预测目标是连续的,且预测目标之间保持原始序列的顺序不变。
预训练 XLNet
的超参数如下表所示。
微调 XLNet
的超参数如下表所示。
Layer-wise decay
是指以自上而下的方式对各个层的学习率进行指数衰减。例如,假设第 24
层使用的学习率为 Layer-wise
衰减率为
这意味着从上到下,更新的步幅越来越小。这隐含了一个约束:底层的更新更小而顶层的更新越大。
RACE
数据集包含了近 10
万个问题,这些问题来自于 12
到 18
岁之间的中国初高中学生的英语考试,答案由人类专家生成。这是最难的阅读理解数据集之一,涉及到具有挑战性的推理问题。此外,RACE
中段落的平均长度超过 300
,这比其他流行的阅读理解数据集如 SQuAD
长很多。因此,这个数据集可以作为长文本理解的一个挑战性的 benchmark
。
在微调过程中,我们使用的序列长度为 640
。如下表所示:
XLNet
的准确率比最佳 ensemble
高出 7.6
分。XLNet
大大超过了其他预训练的模型,如 BERT
和 GPT
。由于 RACE
包含相对较长的段落,我们认为 XLNet
在这个数据集上获得巨大收益的原因之一是:除了自回归目标之外,XLNet
融合了 Transformer-XL
架构从而提高了对长文本建模的能力。
SQuAD
是一个具有两个任务的大规模阅读理解数据集。SQuAD1.1
包含了在给定段落中总是有相应答案的问题,而 SQuAD2.0
则引入了不可回答的问题(即,给定段落中不存在答案)。
为了在 SQuAD2.0
上对 XLNet
进行微调,我们联合应用了类似于分类任务的逻辑回归损失(表明任务是否有答案)、和问答任务的标准 span extraction
损失。由于 v1.1
和 v2.0
在训练集中共享相同的可回答的问题,我们只需在 v2.0
上微调的模型中删除 answerability prediction
部分(即,任务是否有答案的部分),即可对 v1.1
进行评估。由于排行榜头部的方法都采用了某种形式的数据增强,我们在 SQuAD2.0
和 NewsQA
上联合训练了一个 XLNet
从而用于我们的排行榜 submission
。
如下表所示:
XLNet
在排行榜上获得了 SOTA
的单一模型结果,超过了一系列基于 BERT
的方法。v1.1
中,XLNet
的单一模型在 EM
指标上的表现比人类和最佳 ensemble
分别高出 7.6
分和 2.5
分。BERT
直接比较从而消除排行榜 submission
上的额外技巧的影响,我们在验证集上将 XLNet
与 BERT
进行了比较。XLNet
在 v1.1
和 v2.0
的 F1
指标中大大超过了 BERT
,分别超出 3.6
分和 7.0
分。 遵从以前的文本分类工作(《Character-level convolutional networks for text classification》
、《Adversarial training methods for semi-supervised text classification》
),我们在以下 benchmark
上评估了 XLNet
:IMDB
、Yelp-2
、Yelp-5
、DBpedia
、AG
、Amazon-2
和 Amazon-5
。
如下表所示,XLNet
在所有给定的数据集上取得了新的SOTA
结果,与 BERT
相比,在 IMDB
、Yelp-2
、Yelp-5
、Amazon-2
和Amazon-5
上的错误率分别降低了 16%
、18%
、5%
、9%
和 5%
。
GLUE
数据集是一个包含 9
个自然语言理解任务的集合。测试集标签在公开发布的版本中被删除,所有用户必须在 evaluation server
上提交他们的预测,以获得测试集结果。
在下表中,我们展示了多种 setting
的结果,包括单任务和多任务、以及单一模型和 ensemble
。
在多任务 setting
中,我们在四个最大的数据集(即,NLI
、SST-2
、QNLI
和 QQP
)上联合训练 XLNet
,并在其他数据集上微调网络。
对于这四个大型数据集,我们只采用了单任务训练。
即,多任务训练仅用于其他的数据集。
对于 QNLI
,我们在提交测试集时采用了 《Multi-task deep neural networks for natural language understanding》
中的 pairwise relevance ranking
方案。然而,为了与 BERT
进行公平的比较,我们对 QNLI
验证集的结果是基于标准的分类范式 classification paradigm
的。
对于 WNLI
,我们使用 《A surprisingly robust trick for winograd schema challenge》
中描述的损失。
可以看到:
多任务 ensemble
的 XLNet
在公共排行榜的 9
个任务中的 7
个任务上取得了 SOTA
的结果。在最广泛的基准任务 MNLI
上,XLNet
将 "匹配" 和 "不匹配" 的 setting
分别提高了 2.0
分和 1.8
分。
注意,排行榜上的竞争者采用了比 BERT
更好的技术,如蒸馏、修改的多任务损失、或元学习 meta learning
,但仍然低于XLNet
的表现。而 XLNet
除了使用标准的多任务学习方法外,没有采用额外的技巧。由于排行榜的目的不是为了消融研究或超参数调优,我们只在测试集上评估了我们最好的多任务模型。
为了获得与 BERT
的直接比较,我们在验证集上运行一个单任务 XLNet
。如下表的最上面几行所示,XLNet
一直优于 BERT
,在 RTE
、MNLI
、CoLA
、SST-2
和 STS-B
上分别提高了 13.4
分、3.2
分、3.0
分、2.4
分 和 1.8
分。
遵从 《Convolutional neural networks for soft-matching n-grams in ad-hoc search》
的 setting
,我们使用ClueWeb09-B
数据集来评估文档排序 document ranking
的性能。这些 query
是由 TREC 2009-2012Web Tracks
基于 50M
个文档创建的,任务是对使用标准检索方法检索到的前 100
个文档进行 rerank
。由于 document ranking
或 ad-hoc retrieval
主要涉及 low-level representation
,而不是 high-level
的语义,这个数据集可以作为评估 word embedding
质量的测试平台。
我们使用预训练好的 XLNet
来抽取文档和 query
的 word embedding
而不进行微调,并采用 kernel pooling network
(《End-to-end neural ad-hoc ranking with kernel pooling》
)对文档进行排序。
结果如下表所示:XLNet
大大超过了其他方法,包括使用与我们相同训练程序的 BERT
模型。这说明 XLNet
比 BERT
能更好地学习 low-level
的 word embedding
。
注意,为了公平比较,我们排除了 《Word-entity duet representations for document ranking》
中的结果( ERR@20
为19.55
,略差于我们),因为它使用了额外的实体相关数据。
DCG@k
指标:,其中 表示第 个推荐的 item
是否命中真实的目标item
,取值为1
或0
。
NDCG@k
指标:对DCG@k
的归一化,归一化分母为,其中 为总的真实目标 item
数量(小于等于)。
基于四个具有不同特点的数据集,我们进行了一项消融研究从而了解每个设计选择的重要性。具体来说,我们希望研究的主要有三个方面:
BERT
使用的降噪自编码目标相比。Transformer-XL
作为 backbone
神经架构、以及采用 segment-level
递归(即,使用 memory
)的重要性。 span-based
的预测、双向 input pipeline
和 next-sentence prediction
。考虑到这些目的,在下表中,我们比较了具有不同实施细节的 6
个 XLNet-Base
变体(第 3 ~ 8
行)、原始的 BERT-Base
模型(第1
行),以及一个额外的 Transformer-XL baseline
(第 2
行)。这个 Transformer-XL baseline
用 BERT
中使用的降噪自编码 enoising auto-encoding: DAE
目标训练,但具有双向 input pipeline
。为了进行公平的比较,所有的模型都是基于一个12
层的架构,具有与 BERT-Base
相同的模型超参数,并且只对 Wikipedia + BooksCorpus
进行训练。所有报告的结果都是 5
次运行的中位数。
检查结果的第 1 ~ 4
行,我们看到用不同的 full XLNet-Base
模型在各任务中的表现明显优于 BERT
、以及 DAE
训练的 Transformer-XL
,这显示了排列语言建模目标的优越性。
同时,有趣的是,DAE
训练的 Transformer-XL
在 RACE
和 SQuAD
等长文本的任务中取得了比 BERT
更好的表现,这表明Transformer-XL
在语言建模方面的卓越表现。
DAE + Transformer-XL
与BERT
不同的地方在于:相对位置编码、以及segment-level
递归。
接下来,如果我们去掉 memory
缓存机制(第 5
行),则性能明显下降,特别是对于涉及 4
个任务中最长上下文的 RACE
。
此外,第 6 ~ 7
行显示,span-based
预测和双向 input pipeline
在 XLNet
中都发挥了重要作用。
最后,我们意外地发现,在最初的 BERT
中提出的 next-sentence prediction
目标在我们的 setting
中不一定能带来改进。相反,除了RACE
数据集,next-sentence prediction
往往会损害性能。因此,当我们训练 XLNet-Large
时,我们排除了next-sentence prediction
目标。
ELMo
、GPT
、BERT
、XLM
和 XLNet
等自训练 self-training
方法带来了显著的性能提升,但要确定这些方法的哪些方面贡献最大,可能是一个挑战。训练的计算成本很高,限制了可以进行 tuning
的数量,而且通常是用不同规模的 private training data
进行的,这限制了我们衡量模型先进性的能力。
论文 《RoBERTa: A Robustly Optimized BERT Pretraining Approach》
提出了一项关于 BERT
预训练的复制研究 replication study
,其中包括对超参数调优和训练集规模的影响的仔细评估。论文发现 BERT
的训练明显不足。然后论文提出了一个改进的配方 recipe
用于训练 BERT
模型,作者称之为 RoBERTa
。RoBERTa
可以匹配或超过所有的 post-BERT
方法的性能。作者的修改很简单,包括:
batch
来训练模型。next sentence prediction
目标。masking pattern
。论文还收集了一个新的大型数据集(CC-NEWS
),其规模与其他 privately used datasets
相当,以更好地控制训练集的规模效应。
当控制训练数据时,RoBERTa
改进的训练程序改善了 GLUE
和 SQuAD
上公布的 BERT
结果。当对额外的数据进行更长时间的训练时,RoBERTa
在公共 GLUE
排行榜上取得了 88.5
分,与 XLNet
报告的 88.4
分相匹配。RoBERTa
在 GLUE
任务中的 4/9
个任务上实现了 SOTA
,包括:MNLI
、QNLI
、RTE
和 STS-B
四个任务。RoBERTa
还在 SQuAD
和 RACE
上取得了 SOTA
的结果。总的来说,论文重新确立了 BERT
的 masked language model
训练目标相比最近提出的其他训练目标(如 XLNet
的排列自回归语言模型)具有竞争力。
综上所述,本文的贡献在于:
BERT
设计选择和训练策略,并介绍了导致更好的下游任务性能的替代品 alternatives
。CCNEWS
,并确认使用更多的数据进行预训练能够进一步提高了下游任务的性能。improvement
表明,在正确的设计选择下, masked language model
预训练相比所有其他最近发表的方法具有竞争力。论文发布了用 PyTorch
实现的模型、预训练和微调代码。
相关工作:人们为预训练方法设计了不同的训练目标,包括语言建模 language modeling
、机器翻译 machine translation
和掩码语言模型masked language modeling
。最近的许多论文都采用了为每个下游任务微调模型的基本配方 basic recipe
,并以某种变体的掩码语言模型目标进行预训练。然而,较新的方法通过多任务微调(UNILM
)、融合实体嵌入(ERNIE
)、跨度预测 span prediction
(SpanBERT
)和自回归预训练(XLNet
)的多种变体来改善性能。通过在更多的数据上训练更大的模型,通常也能提高性能。
我们的目标是复制、简化和更好地微调 BERT
的训练,作为一个参考,以更好地了解所有这些方法的相对性能。
这里我们简要介绍了 BERT
的预训练方法和一些训练选择,我们将在下一节进行实验研究。
Setup
:BERT
将两个 segment
( token
的序列)的拼接作为输入,即 segment A
segment B
segment
通常由一个以上的自然句子组成。这两个 segment
拼接之后作为单个输入序列馈入 BERT
,并以特殊的 token
来分隔它们:
根据
BERT
的原始论文,应该是。
该模型首先在一个大型的无标记文本语料库中进行预训练,随后使用下游任务的标记数据进行微调。
架构:BERT
使用著名的 Transformer
架构,我们将不详细回顾。我们使用一个具有 Transformer
架构。每个 block
使用
这里的
指的是有 个 block
,每个block
具有多个子层。
训练目标:在预训练期间,BERT
使用两个目标:掩码语言模型和下一个句子预测next sentence prediction
。
Masked Language Model: MLM
:在输入序列中随机选择一个 token
,并用特殊的token
(即,[MASK]
)来代替。MLM
的目标是masked token
预测结果的交叉熵损失。
BERT
均匀随机地选择 15%
的 input token
,然后在所选的token
中:80%
被替换为[MASK]
、10%
保持不变、10%
被替换为另一个被随机选择的 vocabulary token
。
在最初的实现中,random masking
和 random replacement
在开始时进行一次,并在训练期间save
起来(即固定下来)。尽管在实践中,数据是不断重复的(即,每个 epoch
都会重复遍历一轮所有样本),所以每个训练句子在不同 epoch
之间的 mask
并不总是相同的。
即,这里的
random masking
和random replacement
是在所有样本的所有epoch
上进行的,这必然需要对数据集存储多份,每一份对应于一个epoch
。
Next Sentence Prediction: NSP
:NSP
是一种二元分类损失,用于预测两个 segment
是否在原始文本中是相互紧跟着。正样本是通过从文本语料库中抽取前后连续的句子来创建的。负样本是通过将不同文件中的 segment
配对来创建的。正样本和负样本是以相同的概率采样的。
NSP
目标的设计是为了提高下游任务的性能,例如自然语言推理 Natural Language Inference: NLI
,这需要推理句子对sentence pair
之间的关系。
Optimization
:
BERT
用 Adam
优化,超参数为 BERT
训练时,所有层和注意力权重的 dropout rate
为 GELU
激活函数。step
(即,batch size
为 token
。 数据:BERT
是在 BOOKCORPUS
和 English WIKIPEDIA
这两个数据集的联合上进行训练的,总共包含 16GB
的未压缩文本。
实现:我们在 FAIRSEQ
中重新实现了 BERT
。
BERT
超参数,除了峰值学习率和预热 step
的数量(这两个超参数是针对每个 setting
单独调优的)。Adam
batch size
训练时提高稳定性。token
的序列进行预训练。BERT
不同,我们不随机注入短序列,也不在前 90%
的更新中使用缩短的序列长度进行训练。我们只用 full-length
的序列进行训练。DGX-1
机器上用混合精度浮点运算进行训练,每台机器有 8
个 32GB Nvidia V100 GPU
,通过 Infiniband
互连。数据:BERT
风格的预训练依赖于大量的文本。《Cloze-driven pretraining of self-attention networks》
证明,增加数据规模可以提高最终任务的性能。有几项工作在比原始 BERT
更大、更多样化的数据集上进行了训练。不幸的是,并非所有的额外数据集都可以公开发布。对于我们的研究,我们专注于收集尽可能多的数据进行实验,使我们能够根据每个比较对象来匹配数据的整体质量和数量。
我们考虑了五个不同规模和领域的英语语料库,总计超过 160GB
的未压缩文本。我们使用了以下的文本语料库:
BOOKCORPUS plus English WIKIPEDIA
:这是用于训练 BERT
的原始数据(16GB
)。CC-NEWS
:我们从 CommonCrawl News dataset
的英文部分收集得到。该数据包含 2016
年 9
月至 2019
年 2
月间爬取的6300
万篇英文新闻文章(过滤后为 76GB
)。OPENWEBTEXT
:是 GPT-2
中描述的 WebText
语料库的开源复现。该文本是从 Reddit
上分享的 URL
中提取的 web
内容,至少有 3
个以上的点赞 (38GB
)。STORIES
:《A simple method for commonsense reasoning》
介绍的数据集,包含 CommonCrawl
数据的一个子集,经过过滤以符合 Winograd
模式的故事式风格(31GB
)。、评估:遵从前面的工作,我们评估了预训练模型在以下三个 benchmark
的下游任务的性能。
GLUE
:General Language Understanding Evaluation: GLUE benchmark
是一个包含 9
个数据集的集合,用于评估自然语言理解系统。GLUE
组织者提供了训练集和验证集的拆分,以及 submission server
和排行榜从而允许参与者在 private held-out
的测试集上评估和比较参与者的系统。
对于 replication study
,我们报告了在相应的单任务训练数据上对预训练模型进行微调后的验证集结果(即,没有multi-task training
或 ensembling
)。我们的微调程序遵循原始的 BERT
论文。
我们额外报告了从公共排行榜上获得的测试集结果。这些结果取决于一些 task-specific
的修改,我们在后文中描述了这些修改。
SQuAD
:Stanford Question Answering Dataset: SQuAD
提供了一段上下文和一个问题。任务是通过从上下文中提取相关的span
来回答问题。我们对两个版本的 SQuAD
进行评估:V1.1
和 V2.0
。
V1.1
中,上下文总是包含一个答案。此时 ,我们采用与BERT
相同的 span prediction
方法。V2.0
中,一些问题在给定的上下文中没有答案,使任务更具挑战性。此时,我们增加了一个额外的二分类器来预测问题是否可以回答。我们通过将分类损失和跨度损失 span loss
相加来联合训练。在评估过程中,我们只预测那些被分类为可回答的 (context, question)
的 span index
。RACE
:ReAding Comprehension from Examinations: RACE
任务是一个大规模的阅读理解数据集reading comprehension dataset
,包括 28,000
多个段落和近 100K
个问题。该数据集收集自中国的英语考试,这些考试是为初中和高中学生设计的。在 RACE
中,每个段落都与多个问题有关。对于每个问题,任务是从四个选项中选择一个正确的答案。与其他流行的阅读理解数据集相比,RACE
的上下文明显较长,需要进行推理的 question
的占比很高。
本节讨论并量化了哪些选择对成功预训练 BERT
模型是重要的。具体而言,我们首先用与 BERT_BASE
相同的配置来训练 BERT
模型(110M
参数)。
静态掩码和动态掩码:正如前面所讨论的,BERT
依赖于随机掩码 token
并预测这个被掩码的 token
。原始的 BERT
实现在数据预处理过程中进行了一次掩码,导致了单一的静态掩码 static mask
。为了避免对每个训练样本在不同的 epoch
中使用相同的掩码,训练数据被重复了10
次,因此在 40
个 epoch
的训练中,每个样本以10
种不同的方式被掩码。因此,在训练期间,每个训练样本都被以相同的掩码而看过四次。
我们将这一策略与动态掩码 dynamic masking
进行比较。在动态掩蔽中,我们每次向模型馈入序列时都会生成 masking pattern
。在以更多的 step
或更大的数据集进行预训练时,这一点变得至关重要。
如果是静态掩码,那么需要数据集拷贝多份,假如大型数据集是
1TB
,拷贝100
份那么就是100TB
下表比较了 BERT
原始论文公布的 BERT_BASE
结果和我们用静态掩码或动态掩码的重新实现。我们发现,我们对静态掩码的重新实现与原始BERT
模型的表现相似,而动态掩码与静态掩码相当或略好。
模型输入格式和 NSP
:在最初的 BERT
预训练程序中,除了 MLM
目标之外模型还有一个 Next Sentence Prediction: NSP
目标。NSP
目标被认为是训练原始 BERT
模型的一个重要因素。BERT
原始论文观察到:移除 NSP
目标会损害性能,在 QNLI
、MNLI
和 SQuAD 1.1
上的性能明显下降。然而,最近的一些工作质疑了 NSP
目标的必要性。
为了更好地理解这种不一致,我们比较了几种替代的训练格式:
SEGMENT-PAIR+NSP
:这遵循了 BERT
中使用的原始输入格式,以及 NSP
损失。每个输入有一对 segment
,每个 segment
可以包含多个自然句子,但总的拼接长度必须小于 512
个 token
。
SENTENCE-PAIR+NSP
:每个输入包含一对自然句子,可以从一个文档的连续部分采样,也可以从不同的文档分别采样。由于这些输入长度明显小于 512
个 token
,我们增加了 batch size
,使 token
的总数保持与 SEGMENT-PAIR+NSP
相似。我们保留了NSP
损失。
区别在于
segment pair
还是sentence pair
。
FULL-SENTENCES
:每个输入都是由从一个或多个文档中连续采样的完整句子打包而成,其中总长度最多为 512
个 token
。输入可能会跨文档的边界。当我们到达一个文档的末尾时,我们开始从下一个文档中采样句子,并在文档之间增加一个额外的分隔符。我们移除了 NSP
损失。
DOC-SENTENCES
:输入的构造与 FULL-SENTENCES
类似,只是它们不能跨越文档的边界。在文档结尾处采样的输入可能短于 512
个 token
,所以我们在这些情况下动态地增加 batch size
,以达到与 FULL-SENTENCES
相似的总 token
数量。我们移除了 NSP
损失。
下表展示了四个不同 setting
的结果。
BERT
的原始 SEGMENT-PAIR
输入格式和 SENTENCE-PAIR
格式。这两种格式都保留了 NSP
损失,但后者使用了单个句子。我们发现:使用单个句子(而不是 segment
)会损害下游任务的性能,我们假设这是因为模型无法学习长距离的依赖关系。DOC-SENTENCES
)且没有 NSP
损失的训练。我们发现,这种 setting
优于最初公布的 BERT_BASE
结果(下表的倒数第三行),并且相比于该结果,这里移除 NSP
损失后下游任务性能相匹配或略有改善。有可能最初的 BERT
实现中针对移除 NSP
进行评估时,可能只是移除了损失项,而仍然保留了 SEGMENT-PAIR
的输入格式。DOC-SENTENCES
)的表现要比打包来自多个文件(FULL-SENTENCES
)的序列略好。然而,由于 DOC-SENTENCES
格式导致 batch size
大小不一,我们在剩下的实验中使用 FULL-SENTENCES
以便于与相关工作进行比较。更大的 batch size
来训练:过去在神经机器翻译方面的工作表明,在适当提高学习率的情况下,用非常大的 mini-batch
训练既可以提高训练速度、也可以提高 end-task
性能(《Scaling neural machine translation》
)。最近的工作表明,BERT
也适用于大 batch
的训练 《Reducing bert pre-training time from 3 days to 76 minutes》
。
BERT
原始论文最初对 BERT_BASE
进行了一百万步的训练, batch size = 256
。通过梯度积累 gradient accumulation
,这在计算成本上相当于以 batch size = 2K
训练 125K
步,或以batch size = 8K
训练 31K
步。
在下表中,我们比较了当增加 batch size
时(控制了每个训练样本被访问的次数,即相应地减少迭代步数), BERT_BASE
的困惑性 perplexity
和下游任务性能。我们观察到:用大 batch size
的训练改善了 MLM
目标的困惑度、以及下游任务的准确率。大 batch size
的训练也更容易通过分布式数据并行训练来实现(因为 DDP
数据并行等价于扩大 batch size
),在后面的实验中,我们用 batch size = 8K
来训练。
注意,在增加
batch size
的时候也需要相应地增加学习率。
值得注意的是,《Reducing bert pre-training time from 3 days to 76 minutes》
用更大的 batch size
来训练 BERT
,最高可达 batch size = 32K
。我们把对大 batch
训练的极限的进一步探索留给未来的工作。
文本编码:Byte-Pair Encoding: BPE
(《Neural machine translation of rare words with subword units》
)是 character-level representation
和 word-level representation
的混合体,可以处理自然语言语料库中常见的 large vocabulary
。BPE
依赖于子词单元subwords unit
,而不是全词full word
,子词单元是通过对训练语料库进行统计分析而抽取的。
BPE vocabulary size
通常在 10K-100K
个子词单元之间。然而,在对大型和多样化的语料库进行建模时(例如在本文所考虑的语料库),unicode character
可以占到这个 vocabulary
的相当大的一部分。GPT-2
介绍了 BPE
的一个巧妙实现,使用字节 byte
而不是unicode character
作为基本的子词单元。使用字节使得学习一个规模不大的 subword vocabulary
(50K
个单元)成为可能,该 vocabulary
仍然可以对任何输入文本进行编码,而不会引入任何 "unknown
"的标记。
unicode character
是2
个字节,编码空间大小是65536
。相比之下,byte
是1
个字节,编码空间大小是256
。
原始的 BERT
实现使用大小为 30K
的 character-level BPE vocabulary
,这是在用启发式 tokenization
规则对输入进行预处理后学习的。按照 GPT-2
的做法,我们转而考虑用一个更大的 byte-level BPE vocabulary
来训练 BERT
,其中包含 50K
个子词单元,不需要对输入进行任何额外的预处理或 tokenization
。这为 BERT_BASE
和 BERT_LARGE
分别增加了约 15M
和 20M
的额外参数。
早期的实验显示,这些编码之间只有轻微的差异,GPT-2
的 BPE
在一些任务上取得了略差的 end-task
性能。尽管如此,我们认为通用编码方案的优势超过了性能的轻微下降,并在我们其余的实验中使用这种编码。对这些编码的更详细的比较将留给未来的工作。
在前文中,我们提出了对 BERT
预训练程序的修改,以提高下游任务的性能。现在我们汇总这些改进并评估其综合影响。我们称这种配置为 RoBERTa
,即 Robustly optimized BERT approach
。具体而言,RoBERTa
采用动态掩码、无NSP
损失的 FULL-SENTENCES
、大型的 mini-batch
、较大的 byte-level BPE
进行训练。
此外,我们还调研了在以前的工作中没有得到重视的其他两个重要因素:用于预训练的数据、以及训练 epoch
数。例如,最近提出的 XLNet
架构使用比原始 BERT
多了近 10
倍的数据进行预训练。此外,XLNet
也是以 8
倍的 batch size
、一半的训练 step
来进行训练,因此 XLNet
与 BERT
相比在训练期间看到了 4
倍的样本 。
为了帮助将这些因素的重要性与其他建模选择(如,预训练目标)分开,我们首先按照 BERT_LARGE
架构(RoBERTa
。我们在可比的 BOOKCORPUS
加 WIKIPEDIA
数据集上进行了100K
步的预训练,正如 BERT
原始论文所使用的那样。我们使用 1024
个 V100 GPU
对我们的模型进行了大约一天的预训练。
BERT
预训练进行了一百万步,而这里才预训练十万步?这是因为RoBERTa
使用了更大的batch size
(batch size = 8K
),而原始BERT
仅使用batch size = 256
。
实验结果如下表所示。
当控制训练数据时(第一行结果),我们观察到 RoBERTa
比最初报告的 BERT_LARGE
结果有了很大的改进,再次证实了我们在前文中探讨的设计选择的重要性。
RoBERTa
训练期间处理的总数据量为8K * 100K
,要远大于BERT
(0.256K * 1000 K
),为后者的3.125
倍。所以效果好可能是因为训练的总数据量更大?
接下来,我们将这些数据与前文描述的另外三个数据集(CC-NEWS
、OPENWEBTEXT
、STORIES
)结合起来(数据规模扩大十倍,160GB vs 16GB
)。我们在合并的数据集上训练 RoBERTa
,训练的步数与之前相同(100K
)。总体而言,我们对160GB
的文本进行了预训练。我们观察到所有下游任务的性能都有进一步的改善,验证了预训练中数据大小和多样性的重要性。
最后,我们对 RoBERTa
的预训练时间明显延长,将预训练的步数从 100K
增加到300K
甚至 500K
。我们再次观察到下游任务性能的显著提高,300K
和 500K
训练步数的模型在大多数任务中的表现都超过了 XLNet_LARGE
。我们注意到,即使是我们训练时间最长的模型,似乎也没有过拟合我们的预训练数据,很可能会从 additional training
中受益。
这里面引出一个话题:要想评估两个模型架构的相对好坏,需要在相同的数据集上训练相同的
epoch
。
接下来我们在三个不同的 benchmark
(即,GLUE
、SQuaD
、RACE
)上评估我们最好的 RoBERTa
模型。具体而言,我们考虑在所有五个数据集(即BOOKCORPUS
、English WIKIPEDIA
、CC-NEWS
、OPENWEBTEXT
、STORIES
)上训练 500K
步的 RoBERTa
。
对于 GLUE
,我们考虑两种微调 setting
:
在第一种 setting
中(single-task
,dev
),我们为每个 GLUE
任务单独微调 RoBERTa
,只使用相应任务的训练数据。我们考虑对每个任务进行有限的超参数调优,其中 6%
的 step
中进行线性预热然后线性衰减到 0
。我们微调 10
个 epoch
,并根据每个任务的评价指标对验证集进行早停 early stopping
。其余的超参数与预训练时保持一致。
在这种 setting
下,我们报告了每个任务在五个随机初始化中的验证集指标,没有 model ensembling
。
在第二种 setting
中(ensembles
,test
),我们通过 GLUE
排行榜将 RoBERTa
与其它方法比较测试集上的评估结果。虽然许多提交给 GLUE
排行榜的方法都依赖于多任务微调 multi-task finetuning
,但我们的方法只依赖于单任务微调 single-task finetuning
。对于 RTE
、STS
和 MRPC
,我们发现从 MNLI
单任务模型开始微调是有帮助的,而不是从 baseline
预训练的 RoBERTa
开始。我们探索了一个更大的超参数空间(如下表所述),每个任务采用 5 ~ 7
个模型的集成 ensemble
(不同的 checkpoint
)。
task-specific
修改:GLUE
的两项任务需要 task-specific
的微调方法,以获得有竞争力的排行榜结果:
QNLI
: 最近在 GLUE
排行榜上提交的结果对 QNLI
任务采用了 pairwise ranking
,即从训练集中挖掘出候选答案并相互比较,然后将其中一个 (question, candidate)
判定为正类 positive
。这种形式大大简化了任务,但与 BERT
没有直接可比性。遵从最近的工作,我们在 test submission
中采用了 ranking
方法,但为了与 BERT
直接比较,我们报告了基于 pure classification
方法的验证集结果。WNLI
:我们发现提供的 NLI
格式的数据具有挑战性。相反,我们使用了来自 SuperGLUE
的重新格式化的 WNLI
数据,该数据指示了 query
代词和参考词 referent
的跨度 span
。我们使用 《A surprisingly robust trick for winograd schema challenge》
的 margin ranking loss
来微调 RoBERTa
。对于一个给定的输入句子,我们使用 spaCy
从句子中提取额外的候选名词短语(作为负样本),并对我们的模型进行微调,使其对 positive referent phrase
的评分高于任何生成的negative candidate phrase
的评分。这种形式的一个不幸的后果是,我们只能利用positive
的训练样本,这就排除了一半以上的训练样本。实验结果如下表所示。
setting
(single-task
,dev
)中,RoBERTa
在所有 9
个 GLUE
任务的验证集上都取得了 SOTA
的结果。最重要的是,RoBERTa
使用了与 BERT_LARGE
相同的 MLM
预训练目标和架构,但却一致性地优于 BERT_LARGE
和 XLNet_LARGE
。这就提出了模型架构和预训练目标的相对重要性的问题,相比于我们在这项工作中探讨的数据集大小和训练时间等更普通的细节。setting
(ensembles
,test
)中,我们将 RoBERTa
提交到 GLUE
排行榜,并在 9
个任务中的 4
个任务中取得了SOTA
的结果,并且是迄今为止最高的平均得分。这特别令人振奋,因为 RoBERTa
不依赖于多任务微调,与其他大多数 top submission
不同。我们希望未来的工作可以通过纳入更复杂的多任务微调程序来进一步改善这些结果。与过去的工作相比,我们对 SQuAD
采取了更简单的方法。具体而言,虽然 BERT
和 XLNet
都用额外的 QA
数据集来增强他们的训练数据,但我们只用所提供的 SQuAD
训练数据来微调 RoBERTa
。 XLNet
原始论文还采用了一个自定义的 layer-wise
学习率调度来微调XLNet
,而我们对所有层使用相同的学习率。
SQuAD v1.1
,我们遵循与 BERT
相同的微调程序。SQuAD v2.0
,我们还对一个给定的问题是否可以回答进行了分类。我们通过对分类损失和 span loss
进行求和,将这个分类器与 span predictor
联合训练。结果如下表所示。
在 SQuAD v1.1
验证集上,RoBERTa
与 XLNet
相匹配。在 SQuAD v2.0
验证集上,RoBERTa
创造了新的 SOTA
,比 XLNet
提高了 0.4
个点(EM
)和 0.6
个点(F1
)。
我们还将 RoBERTa
提交到公共的 SQuAD 2.0
排行榜,并评估其相对于其他系统的性能。大多数 top
系统都建立在 BERT
或XLNet
的基础上,这两个系统都依赖于额外的外部训练数据。相比之下,我们的 submission
没有使用任何额外的数据。
我们的单个 RoBERTa
模型优于所有单一模型的 submission
,并且是那些不依赖数据增强的系统中得分最高的。
在 RACE
中,系统被提供了一段文字、一个相关的问题和四个候选答案。系统需要回答这四个候选答案中哪一个是正确的。
我们为这项任务修改了RoBERTa
:
[CLS] representation
通过一个全连接层,用来预测正确的答案。我们截断超过 128
个 token
的 question-answer
,如果需要的话也截断段落,使序列的总长度最多为 512
个 token
。
下表列出了 RACE
测试集的结果。RoBERTa
在初中 setting
和高中 setting
上都取得了 SOTA
的结果。
在对 BERT
模型进行预训练时,我们仔细评估了一些设计决策。我们发现以下决策可以大大改善 BERT
在下游任务上的性能:
epoch
)。batch
的训练(需要增大学习率)。next sentence prediction: NSP
的目标。masking pattern
(即 dynamic masking
)。我们改进后的预训练程序被称作 RoBERTa
。
language representation pre-training
已被证明对改善许多自然语言处理任务很有效,如命名实体识别 named entity recognition: NER
、情感分析 sentiment analysis: SA
、问答 question answering: QA
。为了得到可靠的 word representation
,神经语言模型 neural language model
被设计为学习单词共现 word cooccurrence
,然后用无监督学习获得 word embedding
。Word2Vec
和 Glove
中的方法将单词表示为向量,其中相似的单词具有相似的 word representation
。这些 word representation
为其他深度学习模型中的 word vector
提供了一个初始化。最近,很多工作,如 Cove
、Elmo
、GPT
和BERT
通过不同的策略改进了 word vector
,这些改进被证明对下游自然语言处理任务更加有效。
这些研究中,绝大多数都是只通过上下文预测缺失的单词来建模 representation
。这些工作没有考虑句子中的先验知识 prior knowledge
。例如,在 "Harry Potter is a series of fantasy novels written by J. K. Rowling"
这句话中。"Harry Potter"
是一个小说的名字, "J. K. Rowling"
是作者。该模型很容易通过实体(即,小说名字 "Harry Potter"
)内部的单词搭配来预测实体 "Harry Potter"
的缺失词(如,"[MASK] Potter"
),而不需要长的上下文的帮助。该模型不能根据 "Harry Potter "
和 "J. K. Rowling"
之间的关系来预测 "Harry Potter"
(即,预测[MASK][MASK] is a series of fantasy novels written by J. K. Rowling
)。直观而言,如果模型学习了更多的先验知识,模型就能获得更可靠的 language representation
。
在论文 《ERNIE: Enhanced Representation through Knowledge Integration》
中,作者提出了一个叫做ERNIE
(enhanced representation through knowledge integration
)的模型。ERNIE
通过使用知识掩码 knowledge masking
的策略。
除了基础的掩码 basic masking
策略外,ERNIE
还使用了两种知识策略:短语级 phrase-level
策略和实体级 entity-level
策略。ERNIE
把一个短语或一个实体作为一个单元 unit
,每个单元通常由几个单词组成。在 word representation
训练中,同一单元中的所有单词都被掩码,而不是只有一个单词或字符被掩码。这样一来,短语和实体的先验知识就在训练过程中被隐式地学到了。ERNIE
没有直接加入知识嵌入 knowledge embedding
,而是隐式地学习了知识和更长的语义依赖性,如实体之间的关系、实体的属性和事件的类型,从而指导 word embedding
的学习。这可以使模型具有更好的泛化能力和适应性。
为了降低模型的训练成本,ERNIE
在异质的中文数据上进行了预训练,然后应用于 5
个中文 NLP
任务。ERNIE
在所有这些任务中都取得了 SOTA
的结果。另外,在 cloze test
中的实验表明,ERNIE
比其他 strong baseline
方法具有更好的知识推断 knowledge inference
能力。
论文贡献如下:
syntactic information
信息和语义信息 semantic information
。ERNIE
在各种中文自然语言处理任务上的表现显著优于之前的 SOTA
方法。ERNIE
和预训练模型的代码,位于 https://github.com/PaddlePaddle/LARK/tree/develop/ERNIE
。论文还介绍了对话语言模型
Dialogue Language Model: DLM
,它是在实验部分介绍的(而不是正文部分)。
相关工作:
Context-independent Representation
:将单词表示为连续向量的做法由来已久。《A neural probabilistic language model》
提出了一个非常流行模型架构用于估计神经网络语言模型 neural network language model: NNLM
,其中一个带有线性投影层和一个非线性隐藏层的前馈神经网络被用来学习 word vector representation
。
通过使用大量的无标签数据来预训练语言模型,可以有效地学习 general language representation
。传统的方法侧重于与上下文无关的 word embedding
。诸如 Word2Vec
和 Glove
等方法将大型的文本语料库作为输入,并产生 word vector
(通常有几百个维度)。它们为词表 vocabulary
中的每个单词生成单个的 word embedding representation
。
Context-aware Representation
:
然而,一个词在不同的上下文中可以有完全不同的含义。
Skip-thought
提出了一种无监督学习方法,用于学习通用的分布式的 sentence encoder
。Cove
表明,在各种常见的 NLP
任务上,添加这些 context vector
比只使用无监督的 word vector
和 character vector
提高了性能。ULMFit
提出了一种有效的迁移学习方法,可以应用于 NLP
的任何任务。ELMo
沿着不同的维度推广了传统的 word embedding
研究。他们提出从语言模型中抽取 context-sensitive feature
。GPT
通过适配 Transformer
从而增强了 context-sensitive embedding
。BERT
使用两种不同的预训练任务进行语言建模:
BERT
随机掩码句子中一定比例的单词,并学习预测这些被掩码的单词。BERT
学习预测两个句子是否相邻。该任务试图对两个句子之间的关系进行建模,而这是传统的语言模型无法捕获到的。因此,这种特殊的预训练方案有助于 BERT
在各种关键的 NLP
数据集上(如 GLUE
和 SQUAD
等)以较大的幅度超越 SOTA
的技术。
还有一些研究人员试图在这些模型的基础上增加更多信息。
MT-DNN
结合预训练学习和多任务学习来提高 GLUE
中几个不同任务的表现。GPT-2
在预训练过程中加入了任务信息,并使他们的模型适应于 zero-shot
任务。XLM
将 language embedding
添加到预训练过程中,在跨语言任务中取得了更好的结果。异质数据 heterogeneous data
:在异质无监督数据上预训练的语义编码器 semantic encoder
可以提高迁移学习性能。
《Universal sentence encoder》
)采用了来自 Wikipedia, web news, web QA pages, discussion forum
的异质训练数据。response prediction
的句子编码器(《Learning semantic textual similarity from conversations》
)得益于来自 Reddit
对话的 query-response pair data
。XLM
将平行语料库 parallel corpus
引入 BERT
,与掩码语言模型masked language model: MLM
任务联合训练。通过在异质数据上预训练的 transformer
模型,XLM
在监督/无监督的机器翻译任务和分类任务上显示出巨大的性能增益。我们在本节中介绍了ERNIE
及其详细实现。BERT
和 ERNIE
之间的比较直观地显示在下图中。
Transformer Encoder
:就像之前的预训练模型(如,GPT, BERT, XLM
)一样,ERNIE
使用多层 Transformer
作为 basic encoder
。Transformer
可以通过自注意力 self-attention
来捕获句子中每个 token
的上下文信息,并生成 contextual embedding
的序列。
对于中文语料,我们在 CJK Unicode
区间内的每个字符周围添加空格,并使用 WordPiece
来 tokenize
中文句子。对于一个给定的 token
,它的 input representation
是由相应的 token embedding
、segment embedding
、以及 position embedding
相加而成的。每个序列的第一个 token
是特殊的 classification embedding
(即,[CLS]
)。
“在
CJK Unicode
区间内的每个字符周围添加空格” 意味着作者没有采用传统的中文分词工具,而是用字符粒度的分词。
Knowledge Integration
:我们使用先验知识 prior knowledge
来 enhance
我们的预训练语言模型。我们没有直接添加 knowledge embedding
,而是提出了一个多阶段的 knowledge masking strategy
,将 phrase-level
和 entity-level
的知识集成到 language representation
中。下图描述了一个句子的不同 masking level
。
Basic-Level Masking
:第一个 learning stage
是使用 basic-level masking
,它把一个句子当作一个基本语言单元 language unit
的序列。对于英语来说,基本语言单元是单词;对于汉语来说,基本语言单元是汉字。
在训练过程中,我们随机掩码 15%
的基本语言单元,并使用句子中的其他基本语言单元作为输入,然后训练一个 transformer
来预测被掩码的单元。基于 basic level mask
,我们可以得到一个 basic word representation
。因为它是在基本语义单元 basic semantic unit
的随机掩码上训练的,所以 high level
的语义知识很难被完全建模。
Phrase-Level Masking
:第二个 learning stage
是使用 phrase-level masking
。短语 phrase
是一组单词或字符一起作为一个概念单元 conceptual unit
。对于英语,我们使用词法分析 lexical analysis
和分块工具来获得句子中短语的边界,并使用一些与语言相关的分词工具 segmentation tool
来获得其他语言(如中文)的词/短语信息。
在phrase-level masking
阶段,我们也使用基本语言单元作为训练输入,与 basic-level masking
不同的是,这次我们在句子中随机选择几个短语,同一短语中的所有基本单元同时被掩码并被预测。在这个阶段,短语信息被编码到 word embedding
中。
注意:对于中文来讲,
phrase
其实就是 “词” ;word
就是 “字”、character
就是“偏旁部首”。注意:这里的输入仍然是 “汉字” 粒度,但是掩码是短语粒度。
注意:这里需要第三方的中文分词工具,而且分词工具的好坏会影响
ERNIE
模型的效果。
Entity-Level Masking
:第三个 learning stage
是使用 entity-level masking
。命名实体 name entity
包含人、地点、组织、产品等,可以用专有名词来表示。通常情况下,命名实体包含了句子中的重要信息。
与phrase-level masking
阶段一样,我们首先分析句子中的命名实体,相同实体中的所有基本单元同时被掩码并被预测。
注意:这里需要有第三方的
NER
工具,而且识别的好坏会影响ERNIE
模型的效果。
经过三个阶段的学习,我们得到了一个由更丰富的语义信息增强的 word representation
。
论文采用什么中文分词工具、什么中文
NER
工具?作者并未说明。根据论文的描述,读者猜测这三个阶段是依次进行的:前
个 epoch
使用basic-level masking
、接下来个 epoch
使用phrase-level masking
、最后个 epoch
使用entity-level masking
。但是,分别怎么选择?论文并未解释。
ERNIE
被选择为与 BERT-BASE
具有相同的模型尺寸以便于比较:ERNIE
使用 12
个 encoder layer
,768
个隐单元、12
个注意力头。
异质语料库预训练:ERNIE
采用异质语料进行预训练。遵从 《Universal sentence encoder》
,我们从混合语料库(中文维基百科Chinese Wikepedia
、百度百科Baidu Baike
、百度新闻Baidu news
和百度贴吧 Baidu Tieba
)中抽取句子,抽取句子的数量分别为 21M
、51M
、47M
、54M
。其中:
formal language
编写的百科全书文章,这被用作语言建模的 strong basis
。Reddits
的开放式讨论区,每个帖子都可以被视为一个 dialogue thread
。贴吧语料库被用于我们的 Dialogue Language Model: DLM
任务,这将在下一节讨论。我们对汉字进行繁体到简体的转换,并对英文字母进行大写到小写的转换。我们的模型使用了 17964
个 unicode
字符的 vocabulary
。
Dialogue Language Model: DLM
:对话数据对 semantic representation
很重要,因为相同答复所对应的 query semantic
往往是相似的。ERNIE
在 DLM
任务上建模 Query-Response
对话结构。
如下图所示,我们的方法引入了 dialogue embedding
来识别对话中的角色,这与 universal sentence encoder
不同(《Universal sentence encoder》
)。ERNIE
的 dialogue embedding
与 BERT
中的 token type embedding
(即,segment embedding
)起到相同的作用,只是 ERNIE
还可以表示多轮对话(例如 QRQ
、QRR
、QQR
,其中Q
和R
分别代表 "Query"
和 "Response"
)。
在
DLM
任务中,不需要segment embedding
,因为segment embedding
是用于next sentence prediction
任务。
与BERT
中的 MLM
一样,我们应用掩码从而强制模型预测同时以 query
和 response
为条件的 missing word
。更重要的是,我们通过用一个随机选择的句子替换 query
或 response
来生成假的样本。该模型被设计用来判断多轮对话是真的还是假的。
DLM
任务帮助 ERNIE
学习对话中的隐式关系,这也增强了模型学习 semantic representation
的能力。DLM
任务的模型结构与MLM
任务的结构兼容,因此它与 MLM
任务交替进行预训练。
DLM
和MLM
如何进行交替?是否可以联合训练,即,相当于多任务 ( BERT
就是按照这种多任务的方式训练的)?
中文 NLP
任务:ERNIE
被应用于 5
项中文 NLP
任务,包括自然语言推理natural language inference
、语义相似性semantic similarity
、命名实体识别named entity recognition
、情感分析sentiment analysis
和问答question answering
。
自然语言推理:Cross-lingual Natural Language Inference: XNLI
语料库是 MultiNLI
语料库的一个众包集合。这些 sentence pair
都被人工标注为文本蕴含关系textual entailment
,并被翻译成包括中文在内的 14
种语言。标签包含矛盾contradiction
、中性neutral
、以及蕴含 entailment
。我们遵循 BERT
中的中文实验。
语义相似性:Large-scale Chinese Question Matching Corpus: LCQMC
旨在识别两个句子是否具有相同的意图。数据集中的每一对句子都与一个二元标签相关联,表明这两个句子是否具有相同的意图。
命名实体识别:MSRA-NER
数据集是为命名实体识别而设计的,它由微软亚洲研究院发布。实体包含几种类型,包括人名、地名、组织名称等。这个任务可以被看作是一个序列标注任务。
情感分析:ChnSentiCorp: Song-bo
是一个数据集,旨在判断一个句子的情感。它包括几个领域的评论,如酒店、书籍和电子计算机。这项任务的目标是判断该句子是正面positive
的还是负面 negative
的。
问答:NLPCC-DBQA
数据集的目标是选择相应问题的答案。这个数据集的评价方法包括 MRR
和 F1
得分。
Mean Reciprocal Rank: MRR
:。其中 为评估集合的问题总数, 表示第 个问题的预测答案集合 中 ground-truth
答案的位置(ground-truth
的位置越靠前越好)。如果ground-truth
答案不在预测答案集合中,那么 。
下表列出了 5
个中文 NLP
任务的测试结果。可以看出:
ERNIE
在所有任务上都优于 BERT
,在这些中文 NLP
任务上创造了新的 SOTA
结果。XNLI
、MSRA-NER
、ChnSentiCorp
和 NLPCC-DBQA
任务,ERNIE
比 BERT
获得了超过 1%
的绝对准确率的改进。ERNIE
的收益归功于其 knowledge integration
策略。
论文仅仅介绍这个策略,但是究竟用到了哪些知识?以及如何对预训练语料库的中文句子进行分词、命名实体识别,都未提到。
消融研究:
Knowledge Masking
策略的效果:我们从整个语料库中抽取 10%
的训练数据来验证 knowledge masking
策略的有效性(在 XNLI
数据集上评估)。结果如下表所示。
可以看到:
baseline
的 word-level mask
的基础上增加 phrase-level mask
可以提高模型的性能。entity-level mask
策略,模型的性能得到进一步提高。10
倍的情况下,在 XNLI
测试集上实现了 0.8%
的性能提升。DLM
的效果:我们从整个语料库中抽取 10%
的训练数据来验证 DLM
任务的贡献(在 XNLI
数据集上评估)。我们从头开始预训练ERNIE
,并报告XNLI
任务中 5
次随机重启微调的平均结果。注意:这里我们并不是均匀抽取,而是对不同的预训练数据集抽取不同的比例。
详细的实验设置和结果如下表所示。可以看到:纳入 DLM
任务之后,验证集/测试集准确率分别提高了 0.7%/1.0%
。
注意:因为
DLM
是预训练任务,同时也是预训练数据集。如果with DLM
和without DLM
进行对比,那么预训练数据的规模就发生了变化。更好的做法是:
10% of all
,同时对without DLM
用MLM
来代替DLM
(而不是直接丢弃MLM
的预训练数据)。否则这里的数据分布都变化了,实验结果难以直接对比。
Cloze Test
:为了验证 ERNIE
的知识学习能力,我们使用了几个 Cloze test
样本来检验模型。在实验中,我们从段落中删除命名实体,模型需要推断出被删除的命名实体是什么。下图给出了一些 case
。我们比较了 BERT
和 ERNIE
的预测结果。
英文部分只是翻译,因为整篇论文是英文撰写并发表在国外,所以如果没有英文翻译部分,外国读者可能看不懂。
case 1
中,BERT
试图复制上下文中出现的名字,而 ERNIE
记住了文章中提到的relation
的知识。case 2
和 case 5
中,BERT
可以成功地根据上下文学习正确的 pattern
,因此正确地预测了命名实体的类型,但未能得到正确的实体。相反,ERNIE
可以得到正确的实体。case 3、4、6
中,BERT
得到与句子有关的几个字符,但很难预测 semantic concept
。case 4
之外,ERNIE
预测了所有正确的实体。虽然 ERNIE
在 case 4
中预测了错误的实体,但它能正确地预测语义类型,并得到另一个澳大利亚城市。综上所述,这些案例表明 ERNIE
在 context-based
的知识推理中表现得更好。
预训练的 language representation
,如ELMo
、OpenAI GPT
、BERT
、ERNIE 1.0
和 XLNet
,已经被证明可以有效地提高各种自然语言理解任务的性能,包括情感分类、自然语言推理、命名实体识别等等。
一般而言,模型的预训练往往是根据 word
和 sentence
的共现性 co-occurrence
来训练模型。而事实上,在训练语料库中,除了共现性之外,还有其他值得研究的词法 lexical
、句法 syntactic
和语义 semantic
信息。例如,像人名、地名、组织名称这样的命名实体,可能包含概念性的信息 conceptual information
。例如:
sentence order
和句子之间的邻近性 proximity
这样的信息使模型能够学习 structure-aware representation
。document level
的语义相似性、或句子间的篇章关系 discourse relation
使模型能够学习 semantic-aware representation
。为了发现训练语料中所有有价值的信息(无论是lexical
、syntactic
、 还是 semantic
的 representation
),论文 《ERNIE 2.0: A CONTINUAL PRE-TRAINING FRAMEWORK FOR LANGUAGE UNDERSTANDING》
提出了一个continual pre-training framework
,名为 ERNIE 2.0
,它可以通过不断的多任务学习 multi-task learning
来增量地构建和训练大量的预训练任务。
论文的 ERNIE 2.0
框架支持在任何时候引入各种定制化的任务。这些任务共享相同的 encoding network
并通过多任务学习进行训练。这种方法使词法信息、句法信息和语义信息的encoding
跨不同任务成为可能。此外,当给定一个新的任务时, ERNIE 2.0
框架可以根据它所掌握的先前的训练参数来增量地训练 distributed representation
。
总之,论文的贡献如下:
continual pre-training framework
,即ERNIE 2.0
,它以增量的方式支持定制化的训练任务和多任务预训练。ERNIE 2.0
在 16
个任务上比 BERT
和XLNet
取得了显著的改进,包括英文的 GLUE benchmark
和几个中文任务。ERNIE 2.0
的微调代码、以及在英文语料上预训练的模型可在 https://github.com/PaddlePaddle/ERNIE
上找到。相比较于
ERNIE 1.0
,ERNIE 2.0
的改进在于预训练阶段的多任务学习。
相关工作:
用于 language representation
的无监督迁移学习:通过用大量的未标记数据来预训练语言模型从而学习 general language representation
是很有效的。
传统的方法通常专注于与上下文无关的 word embedding
。诸如 Word2Vec
和 GloVe
等方法通过在大型语料库上的 word co-occurrence
来学习 fixed word embedding
。
最近,一些以 contextualized language representation
为中心的研究被提出来,上下文相关的 language representation
在各种自然语言处理任务中显示出 SOTA
的结果。
ELMo
提出从语言模型中提取 context-sensitive feature
。OpenAI GPT
通过调整 Transformer
从而加强了 context-sensitive embedding
。BERT
采用了一个 masked language model: MLM
,同时在预训练中加入了 next sentence prediction
任务。XLM
融合了两种方法来学习跨语言的语言模型,即仅依赖单语数据的无监督方法、以及利用平行双语数据的监督方法。MT-DNN
通过在预训练模型的基础上共同学习 GLUE
中的几个监督任务,最终导致在其它监督任务(这些监督任务未在多任务微调阶段进行学习)中取得改进。XLNet
使用 Transformer-XL
,并提出了一种推广的自回归预训练方法,即:通过对分解顺序的所有排列组合的期望似然 expected likelihood
最大化来学习双向上下文。持续学习 Continual Learning
:持续学习的目的是用几个任务依次训练模型,使模型在学习新的任务时能记住以前学过的知识。这种方法受到人类学习过程的启发,因为人类能够不断积累通过学习或经验获得的信息来有效地发展新的技能。通过持续学习,模型应该能够在新的任务中表现良好,这要归功于在以前的训练中获得的知识。
如下图所示,ERNIE 2.0
框架是基于最近在自然语言处理中日益流行的预训练和微调的架构而建立的。ERNIE 2.0
与传统的预训练方法不同,它不是用少量的预训练目标进行训练,而是可以不断引入大量的预训练任务,从而帮助模型有效地学习lexical
、syntactic
、 以及 semantic
的 representation
。在此基础上,ERNIE 2.0
框架通过多任务学习不断更新预训练的模型。在微调过程中,ERNIE
模型首先用预训练的参数进行初始化,然后用特定任务的数据进行微调。
有两种形式的多任务:预训练阶段的多任务、微调阶段的多任务。这里指的是预训练阶段的多任务。
从下图右下角可以看到:预训练阶段的多任务共享相同的
bottom network
。
Continual Pre-training
:continual pre-training
的过程包含两个步骤:
首先,我们不断地构建具有大数据和先验知识参与的无监督预训练任务。
对于预训练任务的构建,我们构建了不同类型的任务,包括 word-aware
任务、 structure-aware
任务和 semantic-aware
任务。所有这些预训练任务都依赖于自监督信号或弱监督信号,这些信号可以从海量数据中获得,不需要人工标注。
其次,我们通过多任务学习逐步更新 ERNIE
模型。
对于多任务预训练,ERNIE 2.0
框架以 continuous learning
的范式训练所有这些任务。具体而言,我们会先用一个简单的任务训练一个初始模型,然后不断引入新的预训练任务来更新模型。当增加一个新任务时,我们会以前一个任务来初始化 parameters
。每当引入一个新任务时,都会用前面的任务进行训练(这里采用联合训练),以确保模型不会忘记它所学的知识。这样一来,ERNIE
框架就能不断学习和积累 continuous learning
过程中获得的知识,而知识的积累将使模型在新任务中表现更好。
每次引入一个新任务都需要重新训练前面所有的旧任务,此时不是依次训练,而是联合训练(损失函数相加)。
另外,这些任务的学习顺序是否会影响最终效果?更近一步地,哪个任务是第一个学习的、哪个任务是最后一个学习的,是否会影响效果?
如下图所示, continual pre-training
的架构包含一系列共享的 text encoding layer
来编码上下文信息。这些 text encoding layer
可以通过使用 RNN
或 deep Transformer
来定制化。编码器的参数可以在所有预训练任务中更新。
在我们的框架中,有两种损失函数:一种是 sequence-level
损失,另一种是 token-level
损失,它们与BERT
的损失函数类似。每个预训练任务都有自己的损失函数。在预训练期间,一个或多个 sentence-level
的损失函数可以与多个 token-level
的损失函数相结合从而持续地更新模型。
为 Application Task
执行微调:凭借对 task-specific
监督数据的微调,预训练模型可以适配 adapt
不同的语言理解任务,如问答、自然语言推理、以及语义相似性。每个下游任务在被微调后都有自己的 fine-tuned model
。
为了验证该框架的有效性,我们构建了几个无监督的语言处理任务,并开发了一个预训练模型,称为 ERNIE 2.0
模型。在这一节中,我们介绍了该模型在上述框架中的实现。
模型架构:
Transformer Encoder
:ERNIE 2.0
像其他预训练模型(如 GPT
、BERT
、以及 XLM
)一样,使用 multi-layer Transformer
作为 basic encoder
。transformer
可以通过自注意力来捕获序列中每个 token
的上下文信息,并生成 contextual embedding
的序列。给定一个序列,特殊的 classification embedding
(即,[CLS]
)被添加到该序列的第一个位置。此外,对于 multiple input segment
的任务,符号 [SEP]
被添加到segment
之间作为分隔符。
注意,
[SEP]
被添加到每个segment
的结尾,而不仅仅是两个segment
之间。
Task Embedding
:ERNIE 2.0
通过 task embedding
来调制 modulate
不同任务的特性。我们用一个从 0
到 N
的 ID
来表示不同的任务,每个 task ID
被分配给一个唯一的 task embedding
。相应的 token embedding
、 segment embedding
、 position embedding
、以及 task embedding
被作为模型的输入。在微调过程中,我们可以使用任何 task ID
来初始化我们的模型。ERNIE 2.0
的结构如下图所示。
因为微调期间是一个新的任务(即使是相同的任务类型,但是数据集不相同),与预训练的
task ID
都不相同,所以选择任何一个task ID
。
预训练任务:我们构建了几个任务来捕获训练语料中的不同方面的信息:
word-aware
预训练任务:教模型捕获词法信息 lexical information
。
Knowledge Masking Task
:ERNIE 1.0
提出了一个有效的策略,通过 knowledge integration
来增强 representation
。它引入了 phrase masking
和 named entity masking
,并预测 whole masked phrase
和 whole masked named entity
,从而帮助模型同时学习局部上下文和全局上下文中的依赖性。我们用这个任务来训练一个初始版本的模型。
Capitalization Prediction Task
:与句子中的其他词相比,大写的词 capitalized word
通常具有某些特定的语义价值 semantic value
。cased model
(即,考虑字母大小写的模型)在命名实体识别等任务中具有一些优势,而 uncased model
(即,不考虑字母大小写的模型)则更适合于其他一些任务。为了结合两种模型的优势,我们增加了一个任务来预测单词是否被大写。
这意味着
ERNIE 2.0
不能在预处理阶段把所有文本转化为小写。
Token-Document Relation Prediction Task
: 我们增加了一个任务来预测一个 segment
中的 token
是否出现在原始文档的其他 segment
中。根据经验,出现在文档许多部分的词通常是常用的词或与文档的 main topic
有关。因此,通过识别出现在 segment
中的、文档的关键词,该任务可以使模型在一定程度上捕获到文档的关键词。
这里无法区分文档关键词和常用词。那么是否可以分成三类:仅出现在当前
segment
、出现在当前segment
和当前文档的其它segment
但是未出现在其它文档(即,文档关键词)、出现在当前segment
以及其它文档的其它segment
(即,常用词)。
structure-aware
预训练任务:教模型捕获语料的句法信息syntactic information
。
Sentence Reordering Task
:我们增加了一个 sentence reordering
任务来学习句子之间的关系。在这个任务的预训练过程中,一个给定的段落被随机拆分成 segment
,然后这些 segment
被随机混洗。我们让预训练模型来重新排序这些被打乱的 segment
。模型是一个 sentences reordering
任务可以使预训练的模型学习文档中句子之间的关系。
通常
比较小,例如 。
Sentence Distance Task
:我们还构建了一个预训练任务,利用 document-level
信息学习句子距离。该任务被建模为一个三类分类问题:0
代表两个句子在同一个文档中是相邻的、1
代表两个句子在同一个文档中但是不相邻、2
代表两个句子来自两个不同的文档。
semantic-aware
预训练任务:教模型捕获语义信号semantic signal
。
Discourse Relation Task
:除了上面提到的 Sentence Distance Task
,我们还引入了一个预测两个句子之间的语义或修辞关系的任务。我们使用 《Mining discourse markers for unsupervised sentence representation learning》
建立的数据来为英文任务训练一个预训练模型。遵从该论文的方法,我们还自动构建了一个中文数据集从而用于预训练。
篇章关系有
174
个类别标签,典型的例子如下:
sentence 1 sentence 2 y 比赛的动机大不相同,但是“旋转瓶子”设法满足了所有玩家的需求。 这是一款精心制作的游戏。 truly 预谋多年之后,伯纳德没什么比嘲笑法律更好的了。 距基尔万农场不到一英里的沼泽地上的工人们挖出了一个人体躯干。 eventually 考虑某个垂直市场或有关多地点独特需求的知识。 欧内斯特(Ernest)的实力在于多地点竞技场,使伯奇(Birch)具有了新的能力。 indeed @ Sklivvz:但是你自己暗中使用了这样一种解释。 告诉你除了测量以外的任何问题都是不实际的。 namely 与来自B或C的类似能力的船只相比,Jeanneau的价格可能是便宜的。 在西雅图,36号和39号的价格下降了约20G,现在39号的价格比36号高出一些。 locally
IR Relevance Task
:我们建立了一个预训练任务来学习信息检索 information retrieval: IR
中的短文本相关性 short text relevance
。它是一个三类分类任务,预测 query
和 title
之间的关系。我们把 query
作为第一个句子,把 title
作为第二个句子。百度搜索引擎的搜索日志数据被用来作为我们的预训练数据。在这个任务中,有三种标签:
0
表示 query
和 title
之间具有强相关性,这意味着 title
在用户输入 query
后被点击。1
表示 query
和 title
之间具有弱相关性,这意味着当用户输入 query
时,这些 title
出现在搜索结果中,但未能被用户点击。2
表示 query
和 title
之间在语义信息上完全不相关,是随机的。
IR Relevance Task
任务强烈依赖于百度的私有数据。
我们将 ERNIE 2.0
的性能与 SOTA
的预训练模型进行比较。
ERNIE 2.0
与 BERT, XLNet
在 GLUE
上进行比较。ERNIE 2.0
与 BERT, ERNIE 1.0
在几个中文数据集上进行比较。预训练数据:
BERT
类似,英文语料库中的一些数据是从 Wikipedia
和 BookCorpus
爬取的。除此之外,我们还从 Reddit
上收集了一些。我们还使用 Discovery
数据作为我们的篇章关系 discourse relation
数据。discourse relation
数据。预训练数据的细节如下表所示。
预训练 setting
:为了与 BERT
进行比较,我们使用与BERT
相同的 transformer setting
。base model
包含 12
层、12
个自注意力头、768
维的hidden size
,而 large model
包含 24
层、16
个自注意力头、1024
维的hidden size
。XLNet
的模型设置与 BERT
相同。
对于英文语料和中文语料,ERNIE 2.0
的base model
在 48
块 NVidia v100 GPU
上训练,large model
在 64
块 NVidia v100 GPU
上训练。ERNIE 2.0
框架是在 PaddlePaddle
上实现的,这是一个由百度开发的端到端开源深度学习平台。
我们使用 Adam
优化器,其参数固定为 batch size
为 393216
个token
。英文模型的学习率被设定为 5e-5
,中文模型的学习率为1.28e-4
。学习率由衰减方案 noam
来调度的,在每个预训练任务的前 4000
步进行 warmup
。通过float16
操作,我们设法加速训练并减少模型的内存使用。每个预训练任务都被训练,直到预训练任务的指标收敛。
每个预训练任务训练多少个
epoch
?根据这里的说法,每个任务需要被训练到指标收敛。
我们在 General Language Understanding Evaluation: GLUE
上测试 ERNIE 2.0
的性能。具体而言,GLUE
涵盖了多种多样的NLP
数据集,包括:
Corpus of Linguistic Acceptability: CoLA
:CoLA
由 23
种语言的 10657
个句子组成,由其原作者对acceptability
(语法上可接受)进行标注。CoLA
通常被用于这样的任务中:判断一个句子是否符合语法规范 syntax specification
。Stanford Sentiment Treebank: SST-2
: SST-2
由 9645
条电影评论组成,并针对情感分析进行了人工标注。Multi-genre Natural Language Inference: MNLI
:MNLI
是一个众包的集合,包括 433K
个 sentence pair
,并针对文本蕴含textual entailment
进行了人工标注,通常用于文本推理任务。Recognizing Textual Entailment: RTE
:RTE
是一个与 MNLI
类似的语料库,通常用于自然语言推理任务。Winograd Natural Language Inference: WNLI
:WNLI
是一个捕获两个段落之间共指信息 coreference information
的语料库。Quora Question Pairs: QQP
:QQP
由 40
多万个 sentence pair
组成,数据提取自 Quora QA
社区,通常用于判断两个问题是否重复。Microsoft Research Paraphrase Corpus: MRPC
:MRPC
包含 5800
对从互联网上的新闻中提取的句子,并对其进行标注,以捕获一对句子之间的语义相等性 semantic equivalence
。MRPC
通常被用于与QQP
类似的任务。Semantic Textual Similarity Benchmark: STS-B
:STS-B
包含一个精选的英文数据集。这些数据集包含来自图像标题、新闻标题、以及用户论坛的文本。Question Natural Language Inference: QNLI
:QNLI
是一个语料库,会告诉人们一对给定文本之间的关系是否是 question-answer
。AX
:AX
是一个辅助性的手工制作的诊断测试套件,能够对模型进行详细的语言分析 linguistic analysis
。下表是 GLUE
中数据集的详细信息。
我们对 9
个中文 NLP
任务进行了广泛的实验,包括机器阅读理解、命名实体识别、自然语言推理、语义相似性、情感分析、以及问答。具体而言,我们选择了以下中文数据集来评估 ERNIE 2.0
在中文任务上的表现。
Machine Reading Comprehension: MRC
:CMRC 2018
、DRCD
、DuReader
。Named Entity Recognition: NER
:MSRA-NER
。Natural Language Inference: NLI
:XNLI
。Sentiment Analysis: SA
:ChnSentiCorp
。Semantic Similarity: SS
:LCQMC
, BQ Corpus
。Question Answering: QA
:NLPCC-DBQA
。这些数据集的详细情况如下表所示。
机器阅读理解 MCR
:机器阅读理解是一个有代表性的 document-level
建模任务,其目的是从给定文本中提取连续的 segment
来回答问题。对于机器阅读理解任务,CMRC 2018
、DRCD
、DuReader
被作为测试数据集。
Chinese Machine Reading Comprehension 2018: CMRC 2018
:CMRC 2018
是一个用于机器阅读理解的抽取式阅读理解数据集,它由中国中文信息处理学会、IFLYTEK
和哈尔滨工业大学发布。Delta Reading Comprehension Dataset: DRCD
: DRCD
也是一个抽取式阅读理解数据集,由 Delta Research Institute
发布。值得注意的是,DRCD
是一个繁体中文数据集,所以我们使用一个已发布的工具将其预转换为简体中文。DuReader
:DuReader
是一个用于机器阅读理解和问答的大规模真实世界中文数据集,由百度在 ACL 2018
上发布。数据集中的所有问题都是从真实的匿名用户 query
中采样的,问题的答案是手动生成的。实验是在 DuReader
针对机器阅读理解的子集上进行的。命名实体识别 NER
:命名实体识别旨在识别各种实体,包括人名、地名、以及组织名称等。它可以被看作是一个序列标注任务。对于命名实体识别任务,我们选择了由微软亚洲研究院发布的 MSRA-NER (SIGHAN 2006)
数据集。
自然语言推理 NLI
:自然语言推理旨在确定两个句子或两个词之间的语义关系(蕴含 entailment
、矛盾 contradiction
、中性 neutral
)。对于自然语言推理任务,我们选择了流行的 XNLI
数据集。XNLI
是 MultiNLI
语料库的一个众包集合,数据集中的 pair
都标注以文本蕴含标签,并翻译成包括中文在内的 14
种语言。
情感分析 SA
:情感分析旨在分析一个句子的情感是正面的还是负面的。情感分析可以被简单地认为是二分类任务。对于情感分析任务,我们使用 ChnSentiCorp
数据集,其中包括几个领域的评论,如酒店、书籍、以及电子计算机。
语义相似性SS
:语义相似性旨在根据两个句子的语义内容的相似性来识别它们是否具有相同的意图。对于语义相似性任务,我们使用 LCQMC
和 BQ Corpus
数据集。LCQMC
是由哈尔滨工业大学在 COLTING 2018
上发布的。BQ Corpus
由哈尔滨工业大学和WeBank
在 EMNLP 2018
上联合发布。这两个数据集中的每一对句子都与一个二元标签相关联,表明这两个句子是否具有相同的意图。
问答 QA
:问答旨在为相应的问题选择答案。对于问答任务,我们使用 NLPCC-DBQA
数据集,该数据集于 2016
年在 NLPCC
发布。
微调实验的配置如下表所示,分别为英文任务和中文任务的配置。
英文任务实验结果:为了保证实验的完整性,我们对每种方法的 base
模型和 large
模型在 GLUE
上的表现进行了评估。值得注意的是, XLNet
仅报告了单模型在验证集上的结果,因此我们只能比较 ERNIE 2.0
和 XLNet
在验证集上(而不是测试集上)的性能。为了获得与 BERT
和 XLNet
的公平比较,我们在验证集上运行了单任务和单模型的 ERNIE 2.0
。下表描述了关于 GLUE
的详细结果。
这里的单任务指的是微调阶段的单任务(而不是预训阶段的单任务)。
可以看到:
base
模型的比较,ERNIE 2.0 BASE
在所有 10
个任务上都优于 BERT BASE
,获得了 80.6
分。large
模型在验证集上的比较,ERNIE 2.0 LARGE
在除 MNLI-m
之外的所有 8
个任务上都一致性地优于 BERT LARGE
和XLNet LARGE
。large
模型在测试集上的比较,ERNIE 2.0 LARGE
在所有 10
个任务中都优于 BERT LARGE
。最终, ERNIE 2.0 LARGE
在 GLUE
测试集上得到了 83.6
分,比之前的 SOTA
预训练模型 BERT LARGE
实现了 3.1%
的改进。中文任务实验结果: 下表显示了在 9
个经典的中文 NLP
任务上的表现。可以看出:
ERNIE 1.0 BASE
在 XNLI
、MSRA-NER
、ChnSentiCorp
、LCQMC
和 NLPCC-DBQA
任务上的表现优于 BERT BASE
,但在其他任务上的表现则不太理想,这是由于两种方法的预训练不同造成的。具体而言,ERNIE 1.0 BASE
的预训练数据不包含长度超过128
的实例,但 BERT BASE
是用长度为 512
的实例预训练的。
所提出的 ERNIE 2.0
取得了进一步的进展,在所有 9
个任务上都明显优于 BERT BASE
。
ERNIE 2.0 LARGE
在这些中文 NLP
任务上取得了最好的性能,创造了新的 SOTA
结果。
用
ERNIE 2.0 LARGE
和别的模型的BASE
版本比较,这是不公平的比较。应该LARGE
对比LARGE
。
没有消融研究?比如预训练任务的重要性、持续学习的方式等等。
预训练的语言模型(如 ELMo
、GPT
、BERT
和ERNIE
),已被证明能有效提高各种自然语言处理任务的性能,包括情感分类、自然语言推理、文本摘要、命名实体识别等。一般而言,预训练的语言模型是以自监督的方式在大量的文本数据上学习的,然后在下游任务上进行微调,或者通过 zero-shot/few-shot learning
直接部署而无需针对具体任务进行微调。这种预训练语言模型已经成为自然语言处理任务的新范式。
在过去的一两年中,预训练语言模型的一个重要趋势是它们的模型规模越来越大,这导致了预训练中更低的 perplexity
,以及在下游任务中表现更好。
10
亿个参数的Megatron-LM
用于语言理解,Megatron-LM
使用简单但高效的层内模型并行 intra-layer model parallel
的方法,在几个数据集上取得了 SOTA
的结果。100
亿个参数的T5
探索了预训练模型的极限,但很快这个记录就被拥有 1750
亿个参数的 GPT-3
模型所打破。GPT-3
模型在 few-shot
甚至 zero-shot
的 setting
下具有良好的性能。Switch-Transformer
作为世界上第一个万亿参数的预训练语言模型被提出。然而,这些拥有数千亿参数的大型预训练语言模型是在纯文本上训练的。例如,1750
亿参数的 GPT-3
是在具有 570GB
过滤后的文本(这些文本来自 Common Crawl
)的语料库中训练的。这样的原始文本缺乏对语言知识 linguistic knowledge
和世界知识 world knowledge
等知识的 explicit representation
。此外,大多数大型模型是以自回归的方式进行训练的,但 BERT
原始论文显示,这类模型在适配下游语言理解任务时表现出较差的微调性能。
在论文 《ERNIE 3.0: LARGE-SCALE KNOWLEDGE ENHANCED PRE-TRAINING FOR LANGUAGE UNDERSTANDING AND GENERATION》
中,为了解决单一的自回归框架带来的问题,并探索知识增强 knowledge enhanced
的大型预训练模型的性能,作者提出了一个名为 ERNIE 3.0
的统一框架。ERNIE 3.0
融合自回归网络 auto-regressive network
和自编码网络 auto-encoding network
,在一个由纯文本和大型知识图谱组成的 4TB
语料库上训练大型的知识增强模型。ERNIE 3.0
可以通过 zero-shot learning
、few-shot learning
或 fine-tuning
来同时处理自然语言理解任务和自然语言生成任务。此外,ERNIE 3.0
支持在任何时候引入各种定制化的任务。这些定制化的任务共享相同的编码网络,并通过多任务学习进行训练。这种方法使词法信息、句法信息和语义信息的encoding
跨不同任务成为可能。此外,当给定一个新的任务时,ERNIE 3.0
框架可以根据它所掌握的先前的训练参数来增量地训练 distributed representation
。
总而言之,论文贡献如下:
ERNIE 3.0
,它结合了自回归网络和自编码网络,这样训练出来的模型就可以通过 zero-shot learning
、few-shot learning
或 fine-tuning
来同时处理自然语言理解任务和自然语言生成任务。100
亿个参数对大型知识增强模型进行预训练,并在自然语言理解和自然语言生成任务上进行了一系列的实验评估。实验结果表明,ERNIE 3.0
在 54
项 benchmark
中始终以较大的优势胜过 SOTA
的模型,并在 SuperGLUE benchmark
中取得了第一名的成绩。相比较于
ERNIE1.0
和ERNIE2.0
,ERNIE3.0
使用了更大的模型、更大的预训练数据集、以及更多样化的预训练任务。此外,ERNIE 3.0
使用了渐进式学习,并且修改了模型架构:不同的task
具有task-specific network
并共享相同的backbone network
。
相关工作:
大型预训练模型:自从 BERT
被提出后,预训练的语言模型引起了越来越多的关注。研究趋势之一是增加模型规模从而导致更低的 perplexity
和更好的下游任务性能。因此,在过去的两年中,许多大型预训练模型被提出。
T5
模型有 110
亿个参数。T5
模型通过一个统一的框架将所有基于文本的语言任务转换为 text-to-text
的格式,并充分探讨了预训练目标、架构、无标记数据集、迁移方法、以及其他因素的有效性。GPT-3
在 T5
模型之后被提出,其中包括 1750
亿个参数,在 few-shot/zero-shot setting
下在各种任务上取得了惊人的表现。具体而言,GPT-3
是一个自回归的语言模型,比其前身 GPT-2
的规模大 10
倍。然而,GPT-3
在测试中显示出缺乏常识,存在偏见 bias
和隐私问题。《Switch transformers: Scaling to trillion parameter models with simple and efficient sparsity》
提出了一个名为 Switch Transformer
的 1
万亿参数模型,采用简化的MoE
路由算法,以较少的通信和计算成本改进模型。该论文还提出了一个大规模的分布式训练方案来解决训练复杂性、通信成本和训练不稳定性的问题。 除了上面提到的模型,最近还提出了更多的非英语的大型模型。
《Cpm: A large-scale generative chinese pre-trained language model》
发布了一个 26
亿参数的中文预训练语言模型 Chinese Pre-trained Language Model: CPM
。CPM
在大规模中文训练数据上进行了生成式预训练,模型结构受到了 GPT-3
的启发。《Cpm-2: Large-scale cost-effective pre-trained language models》
发布了 110
亿参数的模型 CPM-2
。《M6: A chinese multimodal pretrainer》
提出了一种名为M6
(Multi-Modality to Multi-Modality Multitask Mega-Transformer
)的跨模态预训练方法,包括 1000
亿个参数用于多模态数据的统一预训练。《Pangu-alpha: Large-scale autoregressive pretrained chinese language models with auto-parallel computation》
提出了一个名为 PangGu-α
的 2000
亿参数自回归语言模型。该模型在一个由 2048
个 Ascend 910
人工智能处理器组成的集群上进行训练,其分布式训练技术包括数据并行、op-level
模型并行、pipeline
模型并行、优化器模型并行和 re-materialization
。HyperCLOVA
的韩语 2040
亿参数语言模型,其韩语的机器学习数据量是 GPT-3
的 6500
倍。从上面讨论的内容来看,现在的观察表明,大规模预训练模型已经吸引了工业界和学术界越来越多的关注。
知识增强的模型:预训练的语言模型从大规模语料库中获取句法知识 syntactical knowledge
和语义知识 semantic knowledge
,但缺乏世界知识 world knowledge
。最近,一些工作试图将世界知识纳入预训练的语言模型中。
knowledge graph
。许多工作将知识图谱中的entity embedding
和 relation embedding
集成到预训练的语言模型中。WKLM
(《Pretrained encyclopedia: Weakly supervised knowledge-pretrained language model》
)用同类型的其他实体的名称替换原始文档中提到的实体,并训练模型将正确的实体与随机选择的实体区分开来。KEPLER
(《Kepler: Aunified model for knowledge embedding and pre-trained language representation》
)通过 knowledge embedding
和掩码语言模型目标来优化模型,将世界知识和 language representation
统一到同一语义空间。CoLAKE
(《Colake: Contextualized language and knowledge embedding》
)将语言上下文和知识上下文集成在一个 word-knowledge graph
中,并通过扩展的掩码语言模型目标共同为语言和知识来学习 contextualized representation
。另一种现有的世界知识形式是大规模数据的额外标注。
ERNIE 1.0
引入了 phrase masking
和 named entity masking
,并预测了 whole masked phrase
和 whole masked named entity
,以帮助模型学习局部上下文和全局上下文中的依赖信息。CALM
(《Pretraining text-to-text transformers for concept-centric common sense》
)通过两种自监督的预训练任务,教导模型检测和校正 incorrect ordering of concept
的、被破坏的句子,并将 ground-truth
句子与虚假的句子区分开来。K-Adapter
(《K-adapter: Infusing knowledge into pre-trained models with adapters》
)利用适配器 adapter
来区分知识来自哪里,其中适配器在具有额外标注信息的不同知识源上被训练得到。ERNIE 3.0
框架,对包括纯文本和知识图谱在内的大规模无监督语料进行预训练模型。此外,我们采用各种类型的预训练任务,使模型能够更有效地学习由词汇信息、句法信息和语义信息组成的不同 level
的知识,其中预训练任务分布在三个任务范式中,即自然语言理解、自然语言生成、和知识提取。因此,ERNIE 3.0
创新性地设计了一个 Continual Multi-Paradigms Unified Pre-training Framework
,以实现多任务范式间的协同预训练 collaborative pre-training
。ERNIE 3.0
的框架如下图所示,它可以广泛用于pre-training
、fine-tuning
和 zero-shot/few-shot learning
。
流行的 unified pre-training strategy
针对不同的 well-designed cloze task
共享一个 Transformer network
,然后应用 specific self-attention mask
来控制以何种上下文为条件来得到 prediction
。与普遍的统一预训练策略不同,ERNIE 3.0
设计了一个新的 Continual Multi-Paradigms Unified Pre-training Framework
。
我们认为:自然语言处理的不同任务范式对相同的底层抽象特征的依赖是一致的,如词汇信息和句法信息;但对 top-level
具体特征的要求是不一致的,其中自然语言理解任务有学习语义连贯性 semantic coherence
的要求,而自然语言生成任务则期望进一步的上下文信息。因此,受多任务学习的经典模型架构的启发,即下层是所有任务共享的,而上层是特定任务的,我们提出了 ERNIE 3.0
,使不同的任务范式能够共享在一个 shared network
中学到的底层抽象特征,并分别利用在 task-specific network
中学到的、top-level
的具体特征。
此外,为了帮助模型有效地学习 lexical representation
、syntactic representation
和 semantic representation
,ERNIE 3.0
利用了ERNIE 2.0
中引入的 continual multi-task learning framework
。对不同类型的下游任务,我们首先用预训练好的 shared network
和相应的 task-specific network
的参数组合来初始化 ERNIE 3.0
,然后利用具体任务的数据执行相应的后续程序。
ERNIE 1.0
没有多任务结构。
ERNIE 2.0
虽然采用了多任务,但是这些任务共享相同的底层结构和top-level
结构,并依次训练每个任务。最终只有一个task-specific network
,该network
学习到所有任务的信息。
ERNIE 3.0
也采用了多任务,但是不同的任务共享相同的底层结构、以及不同的top-level
结构。最终有多个task-specific network
,不同network
学到不同任务的信息。
在 ERNIE 3.0
中,我们把 backbone shared network
称作 Universal Representation Module
、把 task-specific network
称作 Task-specific Representation Module
。
具体而言,universal representation network
扮演着通用语义特征提取器的角色,其中的参数在各种任务范式中都是共享的,包括自然语言理解、自然语言生成等等。而 task-specific representation network
承担着提取 task-specific
语义特征的功能,其中的参数是由 task-specific
目标学到的。
ERNIE 3.0
不仅使模型能够区分不同任务范式的 task-specific
语义信息,而且缓解了大型预训练模型在有限的时间和硬件资源下难以实现的困境,其中 ERNIE 3.0
允许模型只在微调阶段更新 task-specific representation network
的参数。
具体而言,ERNIE 3.0
采用了一个 Universal Representation Module
和两个 Task-specific Representation Module
的协同架构。这两个 Task-specific Representation Module
为:natural language understanding specific representation module
和 natural language generation specific representation module
。
Universal Representation Module
:ERNIE 3.0
使用多层 Transformer-XL
作为 backbone network
。显然,Transformer
模型的规模越大,其捕获和存储各种不同 level
的语义信息的能力就越强。因此,ERNIE 3.0
设置了规模较大的 universal representation module
。而需要特别注意的是,memory module
只对自然语言生成任务有效,同时控制attention mask
矩阵。
memory module
对自然语言理解任务也有好处,为什么仅在自然语言生成任务中考虑memory module
?作者未解释。
ERNIE 3.0
使用Transformer-XL
作为backbone network
,相比较而言,ERNIE 1.0
和ERNIE 2.0
使用BERT_BASE
。
Task-specific Representation Module
:task-specific representation module
也是一个多层 Transformer-XL
。ERNIE 3.0
将 task-specific representation module
设置为 manageable size
,相比 shared network
的规模更小(根据论文的实现,仅占 shared network
参数规模的不到 1%
)。
ERNIE 3.0
构建了两个 task-specific representation module
,即 NLU-specific representation module
和NLG-specific representation module
,其中前者是一个双向建模网络(自然语言理解),而后者是一个单向建模网络(自然语言生成)。
我们为各种任务范式构建了几个任务从而捕捉训练语料中不同方面的信息,并使预训练的模型具有理解、生成和推理的能力。
word-aware
预训练任务:
Knowledge Masked Language Modeling
:ERNIE 1.0
提出了一个有效的策略,通过 knowledge integration
来增强 representation
,即 Knowledge Integrated Masked Language Modeling
任务。它引入了 phrase masking
和named entity masking
,预测 whole masked phrase
和 whole masked named entity
,帮助模型学习局部上下文和全局上下文中的依赖信息。
Document Language Modeling
:生成式预训练模型通常利用传统的语言模型(如 GPT
、GPT-2
)或 sequence-to-sequence
的语言模型(如 BART
、T5
、ERNIE-GEN
)作为预训练任务。ERNIE 3.0
选择了传统的语言模型作为预训练任务,以降低网络的复杂性,提高 unified pre-training
的效果。此外,为了使 ERNIE 3.0
的 NLG network
能够对较长的文本进行建模,我们引入了 ERNIE-Doc
中提出的 Enhanced Recurrence Memory Mechanism
,该机制通过将 shifting-one-layer-downwards recurrence
改为同层递归,可以对比传统recurrence Transformer
建模更大的有效上下文长度。
ERNIE-Doc
的更新公式,表示第 层: 和传统
recurrence Transformer
的区别在于:传统recurrence Transformer
使用,注意上标都是 。其中 表示向量拼接, SG(.)
表示stop-gradient
操作。但是,这种同层依赖(类似于
LSTM
)打破了Transformer
的并行性,可能不利于训练。
structure-aware
预训练任务:
Sentence Reordering
:遵从 ERNIE2.0
,我们增加了一个 sentence reordering
任务来学习句子之间的关系。在这个任务的预训练过程中,一个给定的段落被随机拆分成 segment
,然后这些 segment
被随机混洗。我们让预训练模型来重新排序这些被打乱的 segment
(作为一个 Sentence Distance
:遵从 ERNIE2.0
,该任务被建模为一个三类分类问题:0
代表两个句子在同一个文档中是相邻的、1
代表两个句子在同一个文档中但是不相邻、2
代表两个句子来自两个不同的文档。knowledge-aware
预训练任务:
Universal Knowledge-Text Prediction: UKTP
:UKTP
任务是knowledge masked language modeling
的扩展。knowledge masked language modeling
只需要非结构化文本,而 UKTP
任务则同时需要非结构化文本和知识图谱。
UKTP
任务如下图所示。 给出知识图谱中的三元组和百科全书中的相应句子,我们随机掩码三元组中的关系relation
或句子中的单词。
为了预测三元组中的关系,模型需要检测 head entity
和 tail entity
,并确定它们在相应句子中的语义关系。
这个过程的本质与关系抽取任务中的 distant supervision algorithm
相似(《Distant supervision for relation extraction without labeled data》
)。 distant supervision algorithm
认为:如果两个实体参与了某种关系,任何包含这两个实体的句子都可能表达这种关系。
为了预测相应句子中的单词,模型不仅考虑了句子中的依赖信息,还考虑了三元组中的逻辑关系。
具体来说,获得一个三元组和这个对应句子的程序如下:给定百科全书中的一篇文档,我们首先从知识图谱中找到 head entity
或 tail entity
是文档标题的候选三元组,然后从候选三元组中 head entity
和 tail entity
同时在该文档的同一句子中被提及的三元组。
注意,这里只需要
head entity
和tail entity
同时位于同一个句子即可,不需要relation
也位于该句子中。注意,
input
将知识图谱三元组和对应的文档句子拼接起来,这里把三元组也视为一个句子。注意,如果文档中的一个句子对应多个三元组怎么处理?作者未说明,读者猜测把每个三元组视为一个句子,然后与文档句子拼接起来。
预训练算法:渐进式训练 progressive training
最初是为了提高稳定性而提出的,它从一个高效的小模型开始并逐渐增加模型容量。最近的研究利用这一范式来加速模型训练。随着大型预训练的不断推进,其巨大的计算消耗成为进一步开发更强大模型的主要负担。渐进式训练的初步应用已经在 transformer
预训练中得到了体现。
BERT
设计了一个两阶段的训练,在前 90%
的更新中减少序列长度。GPT-2
也线性地逐渐增加 batch size
,从一个小的值到 full value
。Efficientnet-v2
也注意到,阶段性地改变 regularization factor
可以加快训练网络的速度。为了进一步提高训练过程的收敛速度,我们建议通过逐步同时增加包括输入序列长度、batch size
、学习率、dropout rate
在内的training factor
,从而来更全面、更平稳的方式调整 training regularization factor
。事实上,Transformer
模型采用 learning rate warm-up
策略来提高训练稳定性是很常见的,我们改进的渐进式学习策略与现有策略是兼容的。
预训练数据:我们构建了一个大规模、多种类、高质量的中文文本语料库,存储量达 4TB
,分 11
个不同的类别。据我们所知,与CLUECorpus2020
(100GB
)、中文多模态预训练数据(300GB
)、CPM-2
使用的 WuDaoCorpus2.0
(2.3TB
中文数据和 300GB
英文数据)和 PanGu Corpus
(1.1TB
)相比,这是目前最大的中文预训练语料。
具体而言,我们为 ERNIE 3.0
建立的语料库来自ERNIE 2.0
(包括百度百科、维基百科、feed
等等)、百度搜索(包括百家号、知乎、百度贴吧、百度经验)、Web text
、QA-long
、QA-short
、Poetry 2&Couplet
,以及来自医疗、法律和金融等领域的特定数据,以及拥有超过 5000
万条事实的百度知识图谱。
为了提高数据质量,我们采取了以下预处理策略:
数据去重:数据去重是在不同的粒度上进行的,包括字符级、段落级和文档级。
Message Digest Algorithm5: MD5
,通过比较每个文档中最长的前三个句子的 MD5
之和来过滤重复的文档。字符级和段落级去重对于 ERNIE 3.0
生成不重复的内容至关重要。
少于 10
个单词的句子被过滤掉,因为它们可能是有问题的或不完整的句子,包含的语义信息有限,无法用于模型预训练。
我们进一步使用正则表达式进行句子分割,并基于百度的分词工具进行分词。这有助于 ERNIE 3.0
在预训练中学习更好的句子边界和命名实体知识。
然后,每个数据集都乘以一个用户定义的乘数 user-defined multiplier number
,从而为 NLU-network
预训练来增加数据的多样性。
这个乘数代表了数据集的重要性,即:更高质量的数据集被更多地使用、更低质量的数据集被更少地使用。
百度分词工具、百度知识图谱、以及这个数据集都是私有的,没有这些工具和数据我们难以复现论文结果。
预训练 setting
:
ERNIE 3.0
的 universal representation module
和 task-specific representation module
都使用 Transformer-XL
架构作为 backbone
。 universal representation module
具有 48
层、4096
个隐单元、64
个头,task-specific representation module
具有 12
层、768
个隐单元、12
个头。 universal representation module
和 task-specific representation module
的总参数规模为 100
亿。
可以看到,
task-specific representation module
的规模远小于universal representation module
。
激活函数是 GeLU
。上下文的最大序列长度为 512
,语言生成的memory
长度为 128
。所有预训练任务的 total batch size
为 6144
。我们使用 Adam
优化器,学习率为 1e-4
, L2
权重衰减为 0.01
,学习率在前一万步中进行预热,学习率线性衰减。在前一万步中,我们也使用渐进式学习来加速预训练初始阶段的收敛。
模型用 384
块 NVDIA v100 GPU
卡上训练了总共 3750
亿个 token
,并在 PaddlePaddle
框架上实现。凭借在《Zero: Memory optimizations toward training trillion parameter models》
和 《Zero-shot text-to-image generation》
中使用的参数分片,我们设法减少了我们模型的内存占用,并解决了模型的总参数超过单个 GPU
卡的内存的问题。
我们将 ERNIE 3.0
与 SOTA
预训练模型,通过微调,在自然语言理解任务、自然语言生成任务、以及 zero-shot learning
上进行比较。
评估任务:共 54
个 NLP
任务:
自然语言理解任务 Natural Language Understanding Task
:14
种自然语言理解任务,覆盖 45
个数据集。
Sentiment Analysis
:NLPCC2014-SC, SE-ABSA16_PHNS, SE-ABSA16_CAME, BDCI2019
。Opinion extraction
:COTE-BD, COTE-DP, COTE-MFW
。Natural Language Inference
:XNLI, OCNLI, CMNLI
。Winograd Schema Challenge
:CLUEWSC2020
。Relation Extraction
:FinRE, SanWen
。Event Extraction
:CCKS2020
。Semantic Similarity
:AFQMC, LCQMC, CSL, PAWS-X, BQ Corpus
。Chinese News Classification
:TNEWS, IFLYTEK, THUCNEWS, CNSE, CNSS
。Closed-Book Question Answering
:NLPCC-DBQA, CHIP2019, cMedQA, cMedQA2, CKBQA, WebQA
。Named Entity Recognition
:CLUENER, Weibo, OntoNotes, CCKS2019
。Machine Reading Comprehension
:CMRC 2018, CMRC2019, DRCD, DuReader, Dureader_robust, Dureader_checklist, Dureader_yesno, C^3, CHID
。Legal Documents Analysis
:CAIL2018-Task1, CAIL2018-Task2
。Cant Understanding
:DogWhistle Insider, DogWhistle Outsider
。Document Retrieval
: Sogou-log
。自然语言生成任务 Natural Language Generation Task
:7
种自然语言理解任务,覆盖 9
个数据集。
Text Summarization
:LCSTS
。Question Generation
:KBQG, DuReader-QG, DuReader_robust-QG
。Math
:Math23K
。Advertisement Generation
:AdGen
。Translation
:WMT20-enzh
。Dialogue Generation
:KdConv
。自然语言理解任务上的微调结果:
自然语言生成任务上的微调结果:
LUGE benchmark
:我们在 Language Understanding and Generation Evaluation: LUGE
上的六个代表性任务上评估了 ERNIE 3.0
和其它方法。ERNIE 3.0
比 ERNIE 2.0
和 RoBERTa
等领先的预训练模型平均提高 5.36%
。
Zero-shot Learning
评估:我们已经证明,ERNIE 3.0
在 pretraining-then-finetuning
的范式下,在 NLU
和 NLG
任务上都优于以前的 SOTA
方法。这里我们评估 ERNIE 3.0
在 zero-shot setting
下的性能,此时模型没有执行任何梯度更新或微调。结果表明:与最近提出的大型语言模型如 CPM-1
(2.6B
)、PanGu-α-2.6B
和 PanGu-α-13B
相比,ERNIE 3.0
在大多数下游任务上取得了强大的性能。 并且 ERNIE 3.0
可以产生更连贯、更自然和更准确的 response
(这是在我们人工收集的、跨越 13
个不同任务的 450
个案例中评定的)。
评估方法:
Perplexity-based Method
:在从多选答案中选择一个正确答案的任务中(如 CHID
和 CMRC2017
),我们比较了将每个答案填入上下文空白处时的 per-token perplexity
分,得分最低的那个将被预测为正确答案。
在需要二分类或多分类的任务中,我们给每个 label
分配一个更有语义的名字,并使用一个 prompt
将上下文和 label
形式化为人类可读的文本。然后,这类任务可以被视为多选任务。我们使用的 prompt
与 CPM-1
和 PanGu-α
中的 prompt
相似。
Generation-based Method
:在自由形式补全 free-form completion
的任务上(如闭卷问答),我们使用 beam search
,其中 beam width
为 8
并且没有长度惩罚。 completion
的最大生成长度由预定义数字来限制,这个数字基于数据集上答案长度的 95%
百分点来获得。我们使用 exact match: EM
、F1
、Rouge-1
等指标。
ROUGE-N
(其中N
可以为1/2/...
)为N-gram
召回率:
exact match
为预测结果与ground-truth
完全相同的测试样本占比。
在 restrained completion
的任务上(如抽取式机器阅读理解),我们使用 restrained beam search
,参数与自由形式补全任务相同。为每个样本构建一个 Trie-Tree
,以有效地限制生成空间,所生成的 completion
仅出现在给定的文本中。
结果:
案例研究:我们人工收集了 450
个案例,以评估当前大型预训练模型在 5
种不同类型的 13
个任务上的 zero-shot generation
能力,包括问答 Question Answering
、解释 Interpretation
、对话 Dialogue
、文本生成 Text Generation
和摘要 Summarization
。在人类评估中,标注者被要求对生成质量进行评分,评分标准为 [0, 1, 2]
。我们在 Table 6
中报告了连贯性coherence,
、流畅性 fluency
和准确性 accuracy
的平均得分。并在 Table 7
中展示了 ERNIE 3.0
的一些 zero-shot
生成。与 CPM-1
、PLUG
、PanGu-α
相比,ERNIE 3.0
平均能生成最连贯、最流畅和最准确的文本。三个评分指标的介绍如下,评分细节如 Table 8
所示。
coherence
:衡量生成的内容是否与上下文相关并一致。fluency
:评价生成的文本是否自然或可读。一个流畅的文本应该在生成的文本中没有语义上的矛盾。ground truth
相同。SuperGLUE
上的实验:SuperGLUE
是一个针对自然语言理解的多任务 benchmark
。
分析:
Task-specific Representation Module
的有效性:为了验证 task-specific network
的有效性,我们将我们提出的结构与那些在各种预训练任务下共享参数的网络进行比较。
对于消融测试,我们选择自然语言理解和自然语言生成作为两种不同的训练范式,并利用前面提到的相应任务。 unified network
遵循 base model setting
(12
层,768
维,12
个注意力头),每个任务范式的 task-specific network
被设置为3
层、256
维、4
个注意力头。在对比模型, task-specific network
在不同的任务范式中是共享的。下图说明了预训练过程中自然语言生成任务的 perplexity
变化。可以看到:
task-specific network
的模型达到了较高的收敛速度。shared task-specific network
的模型相比,性能优势变得更大。 实验结果显示了所提出的 task-specific network
的有效性,并证明了区分不同任务的必要性。
Universal Knowledge-Text Prediction
:为了 universal knowledge-text prediction
任务的性能,我们进行了一组消融实验。
关系抽取任务是一个典型的 knowledge-driven
任务,旨在预测给定句子中提到的两个实体之间的关系。具体来说,我们增加了四个 special token
,[HD], [/HD], [TL], [/TL]
,分别用来识别提到的头部实体和尾部实体,然后根据上述四个 special token
的 final representation
之和进行关系分类。我们在 SanWen
和 FinRE
数据集上构建了实验,如下表所示,knowledge enhancement
策略在关系抽取任务上取得了卓越的经验性能。
输入为
"[HD]实体A[\HD] .... [TL]实体B[\HD]...."
。这里的前提是,一个句子中只有两个实体。
此外,在 CKBQA
上进行的 zero-shot generation
实验也证实了 universal knowledge-text prediction
任务的有效性。具体来说,基于知识的问答任务需要一个模型基于知识图谱来搜索和推理出正确答案。用 KBQA
任务来衡量预训练语言模型的知识学习能力是合适的。我们使用 "QUESTION: $QUESTION? ANSWER:"
作为 zero-shot learning
的 prompt
,然后在 CKBQA
数据集上比较我们提出的模型和几个 SOTA
的预训练语言模型的性能。如 Table 5
所示,ERNIE 3.0
在 CKBQA
数据集中的表现明显优于 PanGu-α
和 CPM-1
,这表明 ERNIE 3.0
具有记忆和学习更多知识的能力。
Progressive Learning to Speed up Convergence
:我们记录了两种架构配置的训练收敛速度,包括 ERNIE_Base
和ERNIE_1.5B
。其中, ERNIE_Base
的架构设置遵循 《Ernie: Enhanced representation through knowledge integration》
,ERNIE_1.5B
模型的配置为 48
层、1536
维、24
个注意力头。
如下表所示,我们记录了模型的 loss
值收敛到与 ERNIE3.0
相同的训练时间。
对于 ERNIE_Base
模型,渐进式学习的收敛时间减少了 65.21%
,从11
小时减少到4
小时。
在渐进式预热阶段,对于 ERNIE_Base
,我们将 batch size
从 8
增加到 2048
,序列长度从 128
增加到 512
,学习率从 0
线性增加到 1e-4
, dropout rate
保持 0
。
对于 ERNIE_1.5B
模型,渐进式学习的收敛时间减少了 48%
。
在渐进式预热阶段,对于 ERNIE_1.5B
,我们将 batch size
从 8
增加到 8192
,学习率从 0
线性增加到 6e-4
, dropout rate
保持 0
。
对于这两种配置,我们在 8
个 NVIDIA Tesla V100 GPU
上进行了预训练。其余实验设置与 《Ernie: Enhanced representation through knowledge integration》
相同。对于 ERNIE_1.5B
,为了在 GPU
内存的约束下达到峰值 batch size
,在预训练中使用梯度累积策略。
梯度累积策略相当于增大
batch size
。假设有个 batch
,每个 batch
的梯度更新为:其中
为样本 的梯度, 为学习率。 梯度累积策略对于这
个 batch
执行一次梯度更新,而不是次梯度更新。即,先累加 个 batch
的梯度,然后一次性更新。
预训练的 language representation model
,包括基于特征的方法和微调的方法,可以从文本中捕捉丰富的语言信息,从而使许多NLP
应用受益。BERT
作为最近提出的模型之一,通过简单的微调在各种 NLP
应用中获得了 SOTA
的结果,这些任务包括命名实体识别、问答、自然语言推理和文本分类。
尽管预训练的language representation model
已经取得了可喜的成果,但它们忽略了为语言理解纳入知识信息。如下图所示,在不知道 "Blowin’ in the Wind"
是一首歌、以及 "Chronicles: Volume One"
是一本书的情况下,在 entity typing
任务(即,实体分类)中很难识别 Bob Dylan
的两个职业(即 "songwriter"
和 "writer"
)。此外,在关系分类 relation classification
任务中,几乎不可能提取细粒度的关系,如 composer
作曲家和 author
作者。 对于现有的预训练的 language representation model
来说,下图例子中的两个句子在语法上是模糊 ambiguous
的,比如 "UNK wrote UNK in UNK"
。因此,考虑丰富的知识信息可以导致更好的语言理解,并相应地有利于各种 knowledge-driven
的应用,例如 entity typing
和 relation classification
。
将外部知识纳入 language representation model
有两个主要挑战:
Structured Knowledge Encoding
:对于给定的文本,如何为 language representation model
有效地在知识图谱中抽取和编码该文本相关的 informative fact
,这是一个重要的问题。Heterogeneous Information Fusion
:针对 language representation
的预训练程序与 knowledge representation
程序截然不同,这导致了两个独立的向量空间。如何设计一个特殊的预训练目标来融合词法 lexical
的、句法 syntactic
的和知识knowledge
的信息是另一个挑战。为了克服上述挑战,论文 《ERNIE: Enhanced Language Representation with Informative Entities》
提出了 Enhanced Language RepresentatioN with Informative Entities: ERNIE
,它同时在大规模文本语料和知识图谱上预训练 language representation model
。
knowledge information
,ERNIE
首先识别文本中提到的命名实体,然后将这些提到的实体与知识图谱中的相应实体对齐。ERNIE
不直接使用知识图谱中的 graph-based facts
,而是用 TransE
等 knowledge embedding
算法对知识图谱的图结构进行编码,然后将 informative entity embedding
作为 ERNIE
的输入。基于文本和知识图谱之间的对齐 alignments
,ERNIE
将 knowledge module
中的 entity representation
集成到 semantic module
的 underlying layer
。BERT
类似,ERNIE
采用 masked language model
和 next sentence prediction
作为预训练目标。此外,为了更好地融合 textual feature
和 knowledge feature
,论文设计了一个新的预训练目标,即随机掩码输入文本中的一些token-entity alignment
,要求模型从知识图谱中选择合适的实体来完成对齐alignment
。与现有的预训练 language representation model
只利用局部上下文来预测 token
不同,ERNIE
的目标要求模型同时聚合上下文和 knowledge fact
来同时预测 token
和实体,并导致一个 knowledgeable language representation model
。knowledge-driven
的 NLP
任务进行了实验,即 entity typing
和 relation classification
。实验结果表明:通过充分利用词法 lexical
的、句法 syntactic
的和知识knowledge
的信息,ERNIE
在这些 knowledge-driven
的任务上明显优于 BERT
。论文还在其他常见的 NLP
任务上评估了 ERNIE
,ERNIE
仍然取得了可比 comparable
的结果。预训练语料库容易获得,但是知识图谱一般比较难以获得。
本文中提到的
ERNIE
指的是《ERNIE: Enhanced Language Representation with Informative Entities》
,而不是Ernie: Enhanced representation through knowledge integration》
。
相关工作:预训练方法可以分为两类,即 feature-based
的方法和 finetuning
方法。
feature-based
的方法,将单词转化为 distributed representation
。由于这些预训练的 word representation
捕捉了文本语料中的句法信息 syntactic information
和语义信息 semantic information
,它们经常被用作各种 NLP
模型的 input embedding
和初始化参数,并且比随机初始化参数有显著的改进。由于这些 word-level
模型经常受到单词多义性的影响,ELMo
进一步采用 sequence-level
模型来捕捉不同语言上下文下的复杂的 word feature
,并使用ELMo
来生成 context-aware word embedding
。feature-based
的方法只使用 pretrained language representation
作为 input feature
不同,《Semi-supervised sequence learning》
在未标记的文本上训练自编码器,然后将预训练的模型架构和参数作为其他 specific NLP model
的起点。受该论文的启发,人们提出了更多用于微调的预训练 language representation model
,如 GPT
、BERT
。虽然 feature-based
的和 finetuning
的 language representation model
都取得了巨大的成功,但它们忽略了纳入知识信息。 正如最近的工作所证明的那样,注入额外的知识信息可以大大增强原始模型。因此,我们认为,额外的知识信息可以有效地有助于现有的预训练模型。事实上,一些工作已经尝试对单词和实体进行联合的 representation learning
,以有效利用外部知识图谱,并取得了可喜的成果。《Ernie: Enhanced representation through knowledge integration》
提出了 knowledge masking
策略用于 masked language model
从而通过知识来增强 language representation
。在本文中,我们进一步利用语料库和知识图谱来训练 BERT-based
的 enhanced language representation
。
我们记一个 token
序列为 token
序列的长度。同时, 我们用 token
序列的实体序列 entity sequence
,其中 token
都能对齐一个实体。此外,我们把包含所有 token
的整个词表 vocabulary
表示为 entity list
表示为 token
token
和 entity
之间的对齐 alignment
定义为:named entity phrase
中的第一个 token
对齐。
实体有两种位置:第一种位置是位于知识图谱中的实体,第二种位置是位于文本句子中的实体。除了特别说明之外,本文中的实体都指的是位于文本句子中的实体。
这篇文章价值不大,实验部分参考意义也不大(用了预训练好的
BERT
参数来初始化,这导致不公平的比较,而且效果反而不如BERT
)。浪费时间。
如下图所示,ERNIE
的整个模型架构由两个堆叠的模块组成:
T-Encoder
:底层的文本编码器 textual encoder
负责从 input token
中获取基本的词法信息和句法信息。K-Encoder
:上层的知识编码器 knowledgeable encoder
负责将额外的 token-oriented knowledge information
集成到底层的文本信息中,这样我们就可以将 token
和实体的异质信息 heterogeneous information
表示为一个统一的特征空间 feature space
。此外,T-Encoder
的层数记做 K-Encoder
的层数记做
这里的
Entity Input
是实体经过TransE
算法之后得到的entity embedding
。
具体而言,给定一个 token
序列 token
的 token embedding
、segment embedding
、 positional embedding
相加从而计算其 input embedding
,然后计算词法特征 lexical feature
和 syntactic feature
其中 Transformer encoder
。由于 BERT
中的实现相同,而且 BERT
很流行,我们不再对这个模块进行详述。
在计算完 ERNIE
采用 knowledgeable encoder
(K-Encoder
)将知识信息注入 language representation
中。具体而言,我们用 entity embedding
knowledge embedding
模型 TransE
预训练的。然后, K-Encoder
,从而融合异质信息并计算 final output embedding
。
如 Figure 2
所示,K-Encoder
由堆叠的 aggregator
组成,这些 aggregator
被设计用来对 token
和实体进行编码,并融合它们的异质特征 heterogeneous feature
。在第 aggregator
中,来自前一个 aggregator
的输出被作为 input token embedding
entity embedding
multi-head self-attention: MH-ATT
:
然后,第 aggregator
采用信息融合层 information fusion layer
对 token
序列和实体序列进行相互集成 mutual integration
,并计算出每个 token
和实体的 output embedding
。对于一个 token
其中:
token
信息和实体信息的 inner hidden state
。GELU
函数。
information fusion layer
其实就是单层前馈神经网络。
对于没有相应实体的 token
,information fusion layer
计算 output embedding
而不进行集成,如下所示:
为简单起见,第 aggregator
的操作表示如下:
最顶部 aggregator
计算的、token
和实体的 output embedding
将被用作 K-Encoder
的 final output embedding
。
为了通过 informative entity
向 language representation
注入知识,我们为 ERNIE
提出了一个新的预训练任务,即随机掩码一些 token-entity alignment
,然后要求系统根据 aligned token
来预测所有相应的实体。由于我们的任务类似于训练降噪自编码器 denoising auto-encoder
,我们把这个过程称为 denoising entity auto-encoder: dEA
。考虑到 softmax
层来说是相当大的,因此我们仅要求系统根据给定的实体序列而不是知识图谱中的所有实体来预测。
这里把候选的实体集合从
缩小到实体序列 ,相当于是负采样策略,只是负样本局限在当前 token
序列所对应的实体集合中。由于当前token
序列所对应的实体集合存在一定的相关性,因此这些负样本和ground-truth
实体之间是相关的,因此是hard
负样本。因此,建议随机从知识图谱中采样个负样本,作为 easy
负样本。
给定 token
序列 token
aligned entity distribution
为:
其中:
token embedding
空间映射到 entity embedding
空间)。token
final output embedding
。entity
entity embedding
。
entity embedding
没有采用final output
的,因为候选的entity
可能没有馈入模型(如,某些entity
被masked
了)。
然后我们根据 dEA
的交叉熵损失函数。
如何进行掩码?作者并未详细说明。读者猜测:以第一个实体为例,假设第一个实体对应
token
,那么 input
变成:token
序列。模型需要从候选的实体序列 中预测被掩码的实体。 但是根据
Figure 2
,感觉作者是把token
序列和 entity embedding
序列都作为输入。这种做法产生了信息泄露,会降低模型的预测能力。
考虑到在 token-entity alignment
中存在一些错误,我们对dEA
进行了以下操作:
5%
的时间里,对于一个给定的 token-entity alignment
,我们用另一个随机的实体替换该实体,这旨在训练我们的模型来纠正如下错误: token
被 aligned
以一个 wrong entity
。15%
的时间里,我们掩码了 token-entity alignment
,这旨在训练我们的模型来纠正如下错误: entity alignment system
没有抽取所有现有的 alignment
。token-entity alignment
不变,这旨在鼓励我们的模型将实体信息集成到 token representation
中,以便更好地理解语言。与 BERT
类似,ERNIE
也采用了 masked language model: MLM
和 next sentence prediction: NSP
作为预训练任务,以便 ERNIE
能够从文本中的 token
中获取词法信息 lexical information
和句法信息 syntactic information
。总体的预训练损失是dEA
、MLM
和NSP
损失之和。
如下图所示,对于各种常见的 NLP
任务,ERNIE
可以采用类似于BERT
的微调程序。我们可以把第一个 token
的 final output embedding
(这对应于特殊的[CLS] token
)作为具体任务的输入序列的representation
。
对于一些 knowledge-driven
的任务(例如,relation classification
和 entity typing
),我们设计了特殊的微调程序。
relation classification
:该任务要求系统基于上下文对给定 entity pair
的 relation label
进行分类。对relation classification
进行微调的最直接的方法是:将池化层应用于给定实体的 final output embedding
,并用它们的entity embedding
的拼接来表示给定的entity pair
从而用于分类。在本文中,我们设计了另一种方法,它通过添加两个 mark token
来修改 input token sequence
从而以突出 entity
。这些额外的mark token
起到了类似于 relation classification
模型中 position embedding
的作用。然后,我们也采用 [CLS] token embedding
来进行分类。注意,我们为 head entity
和 tail entity
分别设计了不同的token
,即 [HD]
和 [TL]
。 entity typing
:该任务是 relation classification
的简化版。由于之前的 entity typing
模型充分利用了 context embedding
和 entity embedding
,我们认为:带有 mark token [ENT]
的被修改的输入序列可以引导 ERNIE
结合上下文信息和实体信息。预训练数据集:对于从头开始训练 ERNIE
的巨大成本,我们采用谷歌发布的 BERT
的参数来初始化 Transformer block
从而用于 编码 token
。由于预训练是一个由NSP
、MLM
和dEA
组成的多任务程序,我们使用 English Wikipedia
作为预训练的语料库,并将文本与 Wikidata
对齐。在将语料库转换为预训练的格式化数据后,input
有近 45
亿个 subword
和 1.4
亿个实体,并抛弃了少于 3
个实体的句子。
采用
BERT
的参数来初始化ERNIE
,这并不是一个公平的比较。
在对 ERNIE
进行预训练之前,我们采用 TransE
在 Wikidata
上训练的 knowledge embedding
作为实体的 input embedding
。具体来说,我们从 Wikidata
中抽取部分样本,其中包含 5,040,986
个实体和 24,267,796
个 fact
三元组。 entity embedding
在训练期间是固定的,entity encoding module
的参数都是随机初始化的。
超参数配置和训练细节:我们将 token embedding
和 entity embedding
的隐层维度分别表示为 model size
:114M
。
BERT_BASE
的参数总量约为 110M
,这意味着 ERNIE
的 knowledgeable module
要比 language module
小得多,对运行时性能的影响很小。而且,我们只在有标注的语料库上对 ERNIE
进行了一个 epoch
的预训练。为了加速训练过程,我们将最大序列长度从512
减少到 256
,因为自注意力的计算复杂度是序列长度的二次函数。为了保持一个 batch
中的 token
数量与 BERT
相同,我们将 batch size
加倍到 512
。除了将学习率设置为 BERT
中使用的预训练超参数。
对于微调,大多数超参数与预训练相同,除了 batch size
、学习率和训练 epoch
数量。我们发现以下可能的数值范围的效果较好: batch size = 32
,学习率(Adam
优化器)为 epoch
数量从 3
到 10
。
我们还在 distantly supervised dataset
(即 FIGER
)上评估 ERNIE
。由于深度堆叠的 Transformer block
的强大表达能力,我们发现小的 batch size
会导致模型对训练数据的过拟合。因此,我们使用较大的 batch size
和较少的训练 epoch
来避免过拟合,并保持学习率的范围不变,即批 batch size = 2048
、历时数为
由于大多数数据集没有实体标注,我们使用 TAGME
来抽取句子中提到的实体,并将它们与知识图谱中的相应实体联系起来。
Entity Typing
:给定实体及其上下文,entity typing
要求系统为实体标注其各自的语义类型 semantic type
。为了评估这一任务的性能,我们在两个成熟的数据集 FIGER
和 Open Entity
上对 ERNIE
进行了微调。FIGER
的训练集是用 distant supervision
进行标注的,其测试集是由人类进行标注的。Open Entity
是一个完全由人工标注的数据集。这两个数据集的统计数据如下表所示。我们将我们的模型与以下 entity typing
的 baseline
模型进行比较:NFGEC
、UFET
。此外,我们还考虑了对 BERT
进行微调的结果,以便进行公平的比较。
远程监督
distant supervision
:对于一个给定的知识图谱中的一个三元组(由一对实体和一个关系构成),假设外部文档库中任何包含这对实体的句子,在一定程度上都反映了这种关系。因此可以利用知识图谱为外部文档库的句子标注relation
。
在 FIGER
上的结果如下表所示。可以看到,ERNIE
在所有指标上超越了所有的 baseline
。
在 Open Entity
上的结果如下表所示。可以看到,ERNIE
在所有指标上超越了所有的 baseline
。
Relation Classification
:关系分类旨在确定给定句子中两个实体之间的正确关系,这是一项重要的 knowledge-driven
的 NLP
任务。为了评估这项任务的性能,我们在两个成熟的数据集 FewRel
和 TACRED
上对 ERNIE
进行了微调。这两个数据集的统计数据见下表。由于 FewRel
的原始实验设置是 few-shot learning
,我们重新安排了 FewRel
数据集从而用于通用的关系分类。具体来说,我们从每个类中抽取 100
个实例作为训练集,并从每个类中分别抽取 200
个实例作为验证集和测试集。FewRel
中有 80
个类,而 TACRED
中有 42
个类(包括一个特殊的关系 "no relation"
)。
我们将我们的模型与下列关系分类的基线模型进行比较:CNN
、PA-LSTM
、Contextualized GCN: C-GCN
。此外,我们还考虑了对 BERT
进行微调的结果,以便进行公平的比较。
FewRel
和 TACRED
的实验结果如下表所示。可以看到,ERNIE
在所有指标上超越了所有的 baseline
。
GLUE
:General Language Understanding Evaluation: GLUE
基准是一个多样化自然语言理解任务的集合。我们在 GLUE
的 8
个数据集上评估了 ERNIE
,并与BERT
进行了比较。
在下表中,我们报告了我们提交的评估结果和来自排行榜的 BERT
的结果。我们注意到:
MNLI
、QQP
、QNLI
和 SST-2
等大数据集上,ERNIE
与 BERT_BASE
一致。ERNIE
在 CoLA
和 RTE
上更好,但在STS-B
和 MRPC
上更糟。
ERNIE
采用了BERT_BASE
权重初始化,并且模型容量更大,结果反而效果更差?这意味着ERNIE
没有什么价值,或者ERNIE
没有被充分训练?
消融研究:我们利用 FewRel
数据集探讨了 informative entity
和 knowledgeable pretraining task
(dEA
)对 ERNIE
的影响。w/o entities
和 w/o dEA
分别指在没有实体序列输入和预训练任务 dEA
的情况下对 ERNIE
进行微调。如下表所示:
在没有实体序列输入的情况下,dEA
在预训练期间仍然将知识信息注入到 language representation
中,这使F1
分相对于 BERT
增加了 0.9%
。
没有实体序列输入,是怎么执行
dEA
的?作者没有讲。
在没有 dEA
的情况下,informative entity
带来了很多知识信息,从直观上有利于关系分类,这使F1
分相对于 BERT
增加了 0.7%
。
学习文本(如单词和句子)的 vector-space representation
是许多自然语言理解 natural language understanding: NLU
任务的基础。两个流行的方法是多任务学习 multi-task learning: MTL
和语言模型预训练 language model pre-training
。在论文 《Multi-Task Deep Neural Networks for Natural Language Understanding》
中,作者通过提出一个新的 Multi-Task Deep Neural Network: MT-DNN
来结合这两种方法的优势。
多任务学习的灵感来自于人类的学习活动,人们经常应用从以前的任务中学到的知识来帮助学习新的任务。例如,一个知道如何滑雪的人比不知道的人更容易学习滑冰。同样地,多个(相关的)任务联合起来学习是很有用的,这样在一个任务中学到的知识可以使其他任务受益。
最近,人们对将多任务学习应用于深度神经网络的 representation learning
越来越感兴趣,有两个原因:
DNN
的监督学习需要大量的 task-specific
的标记数据,而这些数据并不总是可用的。多任务学习提供了一种有效的方式来利用来自许多相关任务的监督数据。representation
在不同的任务中通用。与多任务学习不同的是,通过利用大量未标记的数据,语言模型预训练显示出针对学习通用 language representation
的有效性。一些最突出的例子是 ELMo
、GPT
、以及 BERT
。这些都是使用无监督目标在文本数据上训练的神经网络语言模型。例如,BERT
基于多层双向 Transformer
,在纯文本上进行训练从而用于 masked word prediction
任务和 next sentence prediction
任务。为了将预训练的模型应用于特定的自然语言理解任务,我们通常需要针对每项任务,利用 task-specific
的训练数据来微调具有 task-specific layer
的模型。例如,BERT
原始论文表明:BERT
可以通过这种方式进行微调从而为一系列自然语言理解任务(如,问答、自然语言推理)创建 SOTA
的模型。
作者认为,多任务学习和语言模型预训练是互补的技术,可以结合起来改善 text representation
的学习,以提升各种自然语言理解任务的性能。为此,作者扩展了最初在 《Representation learning using multi-task deep neural networks for semantic classification and information retrieval》
中提出的 MT-DNN
模型,将 BERT
作为其 shared text encoding layer
。如下图所示:
task-specific
,结合了不同类型的自然语言理解任务,如单句分类、成对文本pairwise text
分类、文本相似性、以及相关性排名。这里的多任务指的是 微调期间的多任务,而不是预训练期间的多任务。
BERT
在预训练期间就是多任务的。
与 BERT
模型类似,MT-DNN
可以通过微调来适配特定的任务。与 BERT
不同,MT-DNN
除了语言模型预训练外,还使用多任务学习来学习 text representation
。
MT-DNN
在通用语言理解评估 General Language Understanding Evaluation: GLUE
基准中使用的 9
个自然语言理解任务中的 8
个获得了 SOTA
的结果,将 GLUE benchmark
得分推到 82.7%
,相比于 BERT
有 2.2%
的绝对改进。
论文进一步将 MT-DNN
的优势扩展到 SNLI
和 SciTail
任务。由 MT-DNN
学到的 representation
允许以比预训练的 BERT representation
少得多的域内标签in-domain label
进行域适应 domain adaption
。例如:
因为训练数据的
domain
和目标任务的domain
不同,因此需要执行domain adaption
。
MT-DNN
在 SNLI上
实现了 91.6%
的准确率、在 SciTail
上实现了95.0%
的准确率,分别比 SOTA
高出 1.5%
和 6.7%
。0.1%
或 1.0%
的原始训练数据,MT-DNN
在 SNLI
和 SciTail
数据集上的表现也优于许多现有模型。所有这些都清楚地表明,MT-DNN
通过多任务学习具有卓越的泛化能力。
MT-DNN
模型结合了四种类型的自然语言理解任务:单句分类single-sentence classification
、成对文本分类 pairwise text classification
、文本相似度评分 text similarity scoring
、以及相关性排名 relevance ranking
。
单句分类:给定一个句子,模型使用预定义的类标签之一对其进行标注。例如:
CoLA
的任务是预测一个英语句子在语法上是否合理。SST-2
的任务是判断从电影评论中提取的句子的情感是正面 positive
的还是负面 negative
的。文本相似度评分:这是一项回归任务。给定一对句子,模型预测一个实值分数来表示这两个句子的语义相似度 semantic similarity
。STS-B
是 GLUE
中该任务的唯一例子。
成对文本分类:给定一对句子,模型根据一组预先定义的标签来确定这两个句子之间的关系。例如:
RTE
和 MNLI
都是语言推理任务,其目标是预测一个句子相对于另一个句子是蕴含关系 entailment
、矛盾关系 contradiction
还是中性关系 neutral
。QQP
和 MRPC
是由句子对组成的同义转述 paraphrase
数据集,其任务是预测这对句子是否在语义上等价。相关性排名:给出一个 query
和一个候选答案列表,该模型按照与 query
的相关性顺序对所有候选答案进行排名。QNLI
是 Stanford Question Answering Dataset
数据集的一个版本。该任务涉及评估一个句子是否包含给定 query
的正确答案。虽然 QNLI
在 GLUE
中被定义为二分类任务,但在本研究中,我们将其表述为 pairwise ranking task
,其中预期模型将包含正确答案的候选 candidate
排在比不包含正确答案的候选更高的位置。我们将表明,这种形式化导致了比二分类更高的准确性。
MT-DNN
模型的架构如下图所示。低层是所有任务共享的,而顶层代表 task-specific
的输出。
sentence pair
),首先在 embedding vector
的一个序列,每个单词都有一个 embedding
。transformer encoder
通过自注意力捕获每个单词的上下文信息,并在 contextual embedding
的一个序列。这就是我们的多任务目标所训练的 shared semantic representation
。在下面的内容中,我们将详细阐述该模型。
Lexicon Encoder
(token
序列。遵从 BERT
的做法,第一个 token
[CLS] token
。如果 token
,即 [SEP]
,来分隔这两个句子。
lexicon encoder
将 input embedding vectors
的一个序列,每个 token
对应一个 embedding
向量(由相应的 word embedding
、segment embedding
和 positional embedding
相加而成)。
Transformer Encoder
(Transformer encoder
将 input representation vector
contextual embedding vector
的一个序列 shared representation
。
与通过预训练学习representation
的 BERT
模型不同,MT-DNN
除了预训练之外还使用多任务目标学习 representation
。
下面,我们将以 GLUE
中的自然语言理解任务为例来描述具体的 task specific layer
,尽管在实践中我们可以加入任意的自然语言任务(如文本生成,其中 output layer
被实现为神经解码器)。
单句分类输出 Single-Sentence Classification Output
:假设 token [CLS]
的 contextual embedding
( semantic representation
。 以 SST-2
任务为例,softmax
的逻辑回归来预测的:
其中:task-specific
参数矩阵。
文本相似性输出 Text Similarity Output
:以 STS-B
任务为例。假设 [CLS]
的 contextual embedding
( semantic representation
。我们引入一个 task-specific
的参数向量
其中
成对文本分类输出Pairwise Text Classification Output
:以自然语言推理 natural language inference: NLI
为例。这里定义的 NLI
任务涉及一个由 premise
hypothesis
NLI
任务旨在找到 stochastic answer network: SAN
(一个 SOTA
的 neural NLI
模型)的答案模块answer module
。SAN
的答案模块使用多步骤推理 multi-step reasoning
。它不是直接预测给定输入的蕴含 entailment
,而是保持一个 state
并迭代地 refine
它的预测。
直接用句子对
的 semantic representation
馈入softmax layer
进行分类,简单又直接,不是挺好的吗?
SAN
的答案模块工作如下:
首先,我们通过拼接 premise
contextual embedding
(这是 transformer encoder
的输出)来构建 premise
的 working memory
,记做 hypothesis
working memory
,记做
然后,我们对 memory
进行 K-step reasoning
从而输出关系标签,其中
开始时,初始状态 summary
:
其中: hypothesis
中的单词 contextual embedding
;
在 time step
state
定义为:
其中,memory
其中: premise
中的单词 contextual embedding
;
最终,一个单层分类器被用来在每个 step
relation
:
其中:
最后,我们通过均值池化来利用所有的
其中
在训练期间,我们在上述均值池化之前应用 stochastic prediction dropout
。
相关性排名输出 Relevance Ranking Output
:以 QNLI
为例。假设 [CLS]
的 contextual embedding
( question
及其候选答案 semantic representation
。我们计算相关性分数为:
其中:sigmoid
)。
对于一个给定的 question
,我们根据计算的相关性分数对其所有的候选答案进行排序。
MT-DNN
的训练程序包括两个阶段:预训练阶段、多任务学习阶段。
预训练阶段:遵循 BERT
模型的预训练。lexicon encoder
和 Transformer encoder
的参数是通过两个无监督的预测任务来学习的:masked language modeling
和 next sentence prediction
。
根据
RoBERTa
的实验结论,应该去掉next sentence prediction
任务。
多任务学习阶段:在多任务学习阶段,我们使用 mini batch-based
的随机梯度下降 SGD
来学习模型的参数(即所有 shared layer
和 task-specific layer
的参数)。在每个 epoch
中,选择一个 mini-batch
9
个 GLUE
任务中),并根据任务 sum
。
即,一个
mini-batch
仅包含特定任务的样本(而不是包含多个任务的样本)。具体做法为:首先随机选择任务 (选择的概率不一定是均匀的,因为不同任务的样本数不同),然后随机选择该任务的一个 mini-batch
。另外,这里并没有先训练完一个任务、然后再训练其他任务,而是不同任务之间交错地训练。
分类任务:即单句分类或成对文本分类,我们使用交叉熵损失作为目标。
其中:
ground-truth
标签为 1
,否则返回 0
。文本相似性任务:如 STS-B
,其中每个 sentence pair
都被标注以一个实值分数
其中
相关性排名任务:其目标遵循 pairwise learning-to-rank
范式。以 QNLI
为例。给定一个 query
query
的正样本的负对数似然:
其中:query
answer
held-out data
上调优。在我们的实验中,我们设置
MT-DNN
模型的训练算法:
输入:
epoch
数量 输出:训练好参数
算法步骤:
随机初始化模型的参数
根据预训练的数据集和任务,预训练 shared layer
(即,lexicon encoder
和 transformer encoder
)。
构建 dataset-level
的 mini-batch
:
迭代:epoch
从 1
到
合并所有的数据集:
随机混洗
遍历 mini-batch
mini-batch
)
计算损失函数
计算梯度
更新参数:
数据集:我们使用了 GLUE
、SNLI
、以及 SciTail
数据集,如下表所述。
General Language Understanding Evaluation: GLUE
:GLUE benchmark
是一个由 9
个自然语言理解任务组成的集合,如下表所示,包括问答、情感分析、文本相似性、以及文本相关性。它被认为是为评估自然语言理解模型的泛化性和鲁棒性而精心设计的。
Stanford Natural Language Inference: SNLI
:SNLI
数据集包含 57
万个人工标注的句子对,其中的前提 premises
来自Flickr30
语料库的标题,假设 hypotheses
则是人工标注的。这是最广泛使用的蕴含数据集 entailment dataset
从而用于自然语言推断 NLI
。在本研究中,该数据集仅用于 domain adaptation
。
SciTail
:SciTail
是一个源自科学问答science question answering: SciQ
数据集的文本蕴含数据集 textual entailment dataset
。该任务涉及评估一个给定的前提 premise
是否蕴含一个给定的假设 hypothesis
。
与前面提到的其他蕴含数据集不同,SciTail
中的假设是从科学问题创建的,而相应的答案候选和前提来自于从大型语料库中检索的相关的 web sentence
。因此,这些句子在语言上具有挑战性,而且前提和假设的词汇相似度 lexical similarity
往往很高,从而使 SciTail
特别困难。在本研究中,该数据集仅用于 domain adaptation
。
实现细节:我们对 MT-DNN
的实现是基于 BERT
的 PyTorch
实现。
BERT
,我们使用 Adamax
优化器,学习率为 5e-5
,batch size
为 32
。除非另有说明,我们使用了一个线性学习率衰减的调度,并且在 10%
的训练步上执行预热。task-specific
层的 dropout rate
设置为 0.1
,除了 MNLI
设置为 0.3
和 CoLa
设置为 0.05
。epoch
数量被设置为 5
。1
以内。wordpiece
进行 tokenize
,并拆分为不超过 512
个 token
。这里是预训练细节还是多任务学习的细节?从作者这里的描述来看,作者应该是用到了预训练好的
BERT
,然后再继续多任务学习,从而省略了预训练阶段。因此,将
MT-DNN
与BERT
直接进行比较是不公平的,因为MT-DNN
使用了更多的数据、训练了更多的轮次。因此作者引入了ST-DNN
从而与MT-DNN
进行更公平的对比。
GLUE
结果:我们将 MT-DNN
及其变体,与 GLUE
排行榜的 SOTA
模型的列表进行比较。结果如下表所示。
BERT_LARGE
:这是 large BERT
模型,我们将其作为 baseline
。我们为每个 GLUE
任务在 task-specific
数据上微调了模型。
为了公平地比较,
BERT_LARGE
也应该在多任务数据集上进行预训练相同的epoch
数。事实上,
ST-DNN
才是和MT-DNN
公平的比较,二者都采用预训练好的BERT_LARGE
,也都在多任务数据集上进行预训练。
MT-DNN
:这是我们提出的模型。我们使用预训练好的 BERT_LARGE
来初始化它的 shared layer
,通过多任务学习在所有的GLUE
任务上 refine
模型,并使用 task-specific
数据为每个 GLUE
任务微调模型。
Table 2
中的测试结果显示,MT-DNN
在所有任务上都优于现有的系统,除了WNLI
,在八个 GLUE
任务上创造了新的 SOTA
结果,并将 benchmark
推高到 82.7%
,这比 BERT_LARGE
有 2.2%
的绝对改进。由于 MT-DNN
使用 BERT_LARGE
来初始化它的 shared layer
,因此收益主要归功于使用多任务学习来 refine shared layer
。
收益不仅仅归功于多任务学习来
refine shared layer
,还归功于多任务学习来refine task-specific layer
。
多任务学习对于域内 in-domain
训练数据少的任务特别有用。正如我们在表中所观察到的,在同一类型的任务上,对于域内训练数据较少的任务,相比那些有较多域内数据的任务,对 BERT
的改进要大得多,即使它们属于同一任务类型,例如,两个 NLI
任务(RTE vs. MNLI
),以及两个转述任务(MRPC vs. QQP
)。
MT-DNN_no-fine-tune
:由于 MT-DNN
的多任务学习使用了所有的 GLUE
任务,因此可以直接将 MT-DNN
应用于每个 GLUE
任务,而不需要进行微调。
MT-DNN
经过三个阶段的训练:预训练、多任务训练、task-specific
任务的微调。其中,前两个阶段是所有任务都共享的,得到一个所有任务都通用的模型。最后一个阶段是每个任务独自微调的,得到task-specific
的模型(有多少个任务就得到多少个模型)。
MT-DNN_no-fine-tune
是两个阶段的训练:预训练、多任务训练。最后得到一个所有任务都通用的模型。
ST-DNN
也是两个阶段的训练:预训练、task-specific
任务的微调。最后得到task-specific
的模型(有多少个任务就得到多少个模型)。
Table 2
中的结果显示,除了 CoLA
,MT-DNN_no-fine-tune
在所有任务中仍然一致地优于 BERT_LARGE
。我们的分析表明,CoLA
是一个挑战性的任务,它的域内数据比其他任务小得多,而且它的任务定义和数据集在所有 GLUE
任务中是独一无二的,这使得它很难从其他任务中获得知识。因此,多任务学习倾向于不适合 CoLA
数据集。在这种情况下,有必要进行微调以提高性能。
如下表所示,经过微调后,准确率从 58.9%
提高到 62.5%
,尽管只有非常少量的域内数据可用于 adaptation
。这个事实,再加上微调后的 MT-DNN
在 CoLA
上的表现显著优于微调后的 BERT_LARGE
(62.5% vs. 60.5%
),显示出学到的 MT-DNN representation
比预训练的 BERT representation
得到更有效的 domain adaptation
。我们将在接下来通过更多的实验重新审视这个话题。
ST-DNN
:MT-DNN
的收益也归功于其灵活的建模框架,它允许我们纳入 task-specific
的模型结构和训练方法。这些模型结构和训练方法都是在单任务 setting
中开发的,有效地利用了现有的研究成果。两个这样的例子是:将 SAN answer module
用于 pairwise text classification output module
、以及将 pairwise ranking loss
用于QNLI
任务(该任务在 GLUE
中的设计是一个二分类问题)。为了研究这些建模设计选择的相对贡献,我们实现了 MT-DNN
的一个变体,即 Single-Task DNN: ST-DNN
。
ST-DNN
使用与 MT-DNN
相同的模型结构。但它的 shared layer
是预训练好的 BERT
模型,没有通过多任务学习进行 refine
。然后,我们使用 task-specific
数据为每个 GLUE
任务微调 ST-DNN
。因此,对于 pairwise text classification
任务,其 ST-DNN
和 BERT
模型之间的唯一区别是 task-specific output module
的设计。
Table 3
中的结果显示:在所有四个任务(MNLI
、QQP
、RTE
和 MRPC
)中,ST-DNN
都优于BERT
,证明了 SAN answer module
的有效性。
这四个任务上,
ST-DNN
相对于BERT
的提升都很小。这是因为多任务数据集的数据规模相比BERT
预训练数据集的数据规模小得多。
我们还比较了 ST-DNN
和BERT
在 QNLI
上的结果。ST-DNN
使用 pairwise ranking loss
进行微调,而 BERT
将 QNLI
视为二分类,并使用交叉熵损失进行微调。ST-DNN
明显优于BERT
,清楚地表明了问题形式 problem formulation
的重要性。
ST-DNN
优于BERT
,除了task-specific
模块、问题形式的优势之外,还有更多的预训练数据(来自于多任务数据集)、更多的训练步数(来自于多任务 数据集上的预训练)。
SNLI
和 SciTail
的 domain adaption
结果:构建实际系统 practical system
的最重要标准之一是快速适应新的任务和领域。这是因为为新的领域或任务收集带标签的训练数据是非常昂贵的。很多时候,我们只有非常小的训练数据,甚至没有训练数据。
为了使用上述标准评估模型,我们在两个自然语言推断任务(即 SNLI
和 SciTail
)上进行了 domain adaptation
实验,使用如下过程:
MT-DNN
模型或 BERT
作为初始模型,包括 BASE
和 LARGE
的 model setting
。SNLI
或SciTail
)创建一个 task-specific
的模型,通过使用 task-specific
的训练数据来适配训练好的 MT-DNN
。task-specific
的测试数据评估模型。我们以这些任务的默认 train/dev/test set
开始。但我们随机抽取训练数据的 0.1%
、1%
、10%
和 100%
。因此,我们为 SciTail
获取了四组训练数据,分别包含23
、235
、2.3k
、23.5k
的训练样本。同样地,我们为 SNLI
获取了四组训练数据,分别包含549
、5.5k
、54.9k
、549.3k
的训练样本。
我们进行了五次随机采样,并报告了所有运行中的平均值。 来自 SNLI
和 SciTail
的不同训练数据量的结果在下图中报告。可以看到:
MT-DNN
的性能一直优于 BERT baseline
,更多细节见 Table 4
。
使用的训练样本越少,MT-DNN
比 BERT
的改进就越大。例如在 SNLI
数据集上:
0.1%
( 23
个样本)的训练数据,MT-DNN
就达到了 82.1%
的准确率,而 BERT
的准确率是 52.5%
。1%
的训练数据,MT-DNN
的准确率是85.2%
,BERT
是 78.1%
。我们在 SciTail
上观察到类似的结果。
结果表明,由 MT-DNN
学到的 representation
在 domain adaptation
方面比 BERT
更有效。
在下表中,我们使用所有的 in-domain
训练样本,将我们的 adapted model
与几个强大的 baseline
(包括排行榜中报告的最佳结果)进行比较。可以看到:MT-DNN_LARGE
在两个数据集上都产生了新的 SOTA
结果,在 SNLI
上将 baseline
推高到 91.6%
(绝对改进 1.5%
)、在 SciTail
上将 baseline
推高到 95.0%
(绝对改进 6.7%
)。这同时为 SNLI
和 SciTail
带来了新的 SOTA
。所有这些都证明了 MT-DNN
在 domain adaptation
上的卓越表现。
自监督方法在广泛的 NLP
任务中取得了显著的成功。最成功的方法是 masked language model
的变体,它是降噪自编码器 denoising autoencoder
,被训练从而重建文本,其中掩码了一组随机的单词。最近的工作显示,通过改善 masked token
的分布(SpanBERT
)、masked token
的预测顺序(XLNet
)、以及替换 masked token
的可用上下文(UNILM
)而获得收益。然而,这些方法通常专注于特定类型的下游任务(如 span prediction
任务、生成任务等),限制了其适用性。
在论文 《BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension》
中,作者提出了 Bidirectional and Auto-Regressive Transformer: BART
,它预训练了一个结合了双向的和自回归的Transformer
的模型。BART
是一个用 sequence-to-sequence
模型构建的降噪自编码器,适用于非常广泛的下游任务。预训练有两个阶段:
sequence-to-sequence
的模型来重建原始文本。BART
使用一个标准的基于 Tranformer
的神经机器翻译架构,尽管它很简单,但可以看作是对 BERT
(具有双向编码器)、GPT
(具有有从左到右的解码器)、以及许多其他最近的预训练方案的推广(如下图所示)。
这种设置的一个关键优势是噪音的灵活性:可以对原始文本进行任意的变换,包括改变其长度。论文评估了一些噪音方法,发现性能最佳的方法是:同时进行随机混洗原始句子的顺序、以及使用一种新颖的 in-filling
方案(任意长度的文本区间 text span
,包括零长度,被替换为单个 mask token
)。这种方法通过迫使模型对整体句子的长度进行更多的推理,以及对输入进行更长范围的变换,从而推广了 BERT
中的原始 word masking
和 next sentence prediction
的目标。
当对文本生成任务进行微调时,BART
特别有效,但对文本理解任务也很有效。BART
在 GLUE
和 SQuAD
上以 comparable
的训练资源获得与RoBERTa
相匹配的性能,并在一系列抽象式对话 abstractive dialogue
、问答、和摘要 summarization
任务上取得了新的 SOTA
的结果。例如,BAER
比以前关于 XSum
的工作提高了 6 ROUGE
的性能。
abstractive dialogue
是非抽取式的。抽取式对话是从给定的段落中抽取答案,而抽象式对话需要生成答案。
BART
还开辟了微调的新思维方式。论文提出了一个新的机器翻译方案,其中 BART
模型被堆叠在几个额外的 transformer layer
之上。这些额外的 transformer layer
被训练成将外语翻译成有噪音的英语,通过 BART
的传播,从而将 BART
作为预训练的 target-side language model
。在 WMT Romanian-English benchmark
中,这种方法比强大的机器翻译 baseline
的性能提高了1.1 BLEU
。
为了更好地理解这些效果,论文还报告了复现最近提出的其他训练目标的消融研究。这项研究使我们能够仔细控制一些因素,包括数据和优化超参数,这些因素已被证明和训练目标的选择一样对整体性能同样地重要。论文发现,在所考虑的所有任务中,BART
表现出一致的最强大性能。
相关工作:
早期的预训练方法是基于语言模型的。
GPT
只建模左侧的上下文,这对某些任务来说是有问题的。ELMo
拼接了纯左侧和纯右侧的representation
,但没有预训练这些特征之间的交互。GPT-2
证明,非常大的语言模型可以作为无监督的多任务模型。BERT
引入了 masked language modelling
,允许预训练学习左右两侧上下文单词之间的交互。最近的工作表明,通过更长的训练时间(Roberta
)、通过跨层绑定参数(Albert
)、以及通过masking span
而不是单词(Spanbert
),可以实现非常强大的性能。然而,预测不是自回归地进行的,这降低了 BERT
对生成任务的有效性。
UniLM
用 an ensemble of masks
对 BERT
进行了微调,其中某些 mask
只允许左侧的上下文。与 BART
一样,这使得 UniLM
可以同时用于生成式的和判别式的任务。一个区别是:UniLM
的预测是条件独立的,而 BART
的预测是自回归的。BART
减少了预训练和生成任务之间的不匹配,因为解码器总是在未被破坏的上下文中被训练。
MASS
可能是与 BART
最相似的模型。掩码了一个连续区间 token
的 input sequence
被映射到由这些缺失的 token
组成的序列上。MASS
对判别式任务不太有效,因为不相交的 token
集合被馈入编码器和解码器。
XL-Net
通过以 permuted order
来自回归地预测被 masked token
从而扩展了 BERT
。这一目标允许预测同时以左侧上下文和右侧上下文为条件。相比之下,BART decoder
在预训练期间从左到右地工作,在generation
期间与 setting
相匹配。
有几篇论文探讨了使用预训练的 representation
来改进机器翻译。最大的改进来自于同时对源语言和目标语言的预训练,但这需要对所有感兴趣的语言进行预训练。其他工作表明,使用预训练的 representation
可以改善编码器(《Pre-trained language model representations for language generation》
),但解码器的收益更为有限。我们展示了如何使用 BART
来改善机器翻译解码器。
BART
是一个降噪自编码器denoising autoencoder: DAE
,它将被破坏的文档映射到其原始文档。BART
被实现为一个 sequence-to-sequence
的模型,包含一个双向编码器(作用于被破坏的文本上)、以及一个从左到右的自回归解码器。对于预训练,我们优化原始文档的负对数似然。
这意味着仅在自回归解码器上计算生成原始文本的损失函数,而编码器用于编码各种被破坏的文本,因此统一了各种预训练任务(如
masked languate modeling
、next stentence prediction
)。
架构:BART
使用 《Attention is all you need》
中的 sequence-to-sequence
的 Transformer
架构,除了以下不同:遵从 GPT
,我们将ReLU
激活函数修改为 GeLU
,并从
对于我们的 base model
,我们在编码器和解码器中各使用 6
层;对于我们的 large model
模型,我们在编码器和解码器中各使用 12
层。BART
架构与 BERT
架构密切相关,但有以下区别:
final hidden laye
进行交叉注意cross-attention
(就像在 sequence-to-sequence
的transformer
模型中那样)。BERT
在 word-prediction
之前使用了一个额外的前馈网络,而 BART
没有这样做。总体而言,BART
比同等规模的 BERT
模型多了大约 10%
的参数。
预训练 BART
:BART
是通过破坏文档,然后优化重建损失(解码器的输出和原始文档之间的交叉熵)来训练的。与现有的降噪自编码器不同,BART
允许我们应用任何类型的文档损坏 document corruption
。在极端的情况下,关于原始文档的所有信息都丢失了,BART
就相当于一个语言模型。
我们用几个先前提出的、新颖的变换 transformation
来进行实验,但我们相信其它的一些新的替代方案有很大的潜力。我们使用的变换总结如下,一些例子如下图所示。
Token
掩码 Token Masking
:遵从 BERT
,随机采样的 token
被替代为 [MASK]
。
Token
删除 Token Deletion
:随机采样的 token
被直接删除。与 Token Masking
相反,模型必须决定哪些位置是缺失的(Token Masking
通过 [MASK]
知道哪些位置是缺失的)。
下图中的
Token Deletion
有误,应该是AC.E.
,因为原始的文本只有两个.
。
文本填充 Text Infilling
:随机采样一些 text span
,其中 span
长度服从泊松分布 span
都被替换为一个 [MASK]
。如果 span
长度为 0
,那么对应于插入 [MASK]
。
Text Infilling
受到 SpanBERT
的启发,但是 SpanBERT
从一个不同的分布(截断的几何分布 clamped geometric
)中采样 span
长度,并且用一个长度完全相同的 [MASK]
序列来替换每个 span
。Text Infilling
使模型能够预测一个 span
中缺失多少个 token
。
泊松分布的
指定了期望,即,这些 span
长度的期望为3
。假设平均的输入序列长度为,那么掩码率为 。
句子排列 Sentence Permutation
:一个文档根据句号被分成几个句子,这些句子以随机的顺序被混洗。
文档旋转 Document Rotation
:均匀随机地选择一个 token
,然后旋转文档,使其以该 token
开始。这项任务训练模型来识别文档的开始。
这些
transformation
的价值在不同的下游任务中差异很大。
微调 BART
:BART
产生的 representation
可以通过多种方式用于下游应用。
序列分类任务 Sequence Classification Tasks
:对于序列分类任务,相同的输入被馈入编码器和解码器, final decoder token
的 final hidden state
被馈入新的线性分类器。
编码器输入:被整体分类的文本序列;解码器输入:被整体分类的文本序列。
这种方法与 BERT
中的[CLS] token
有关。但是,我们将 additional token
添加到最后,这样解码器中的 additional token
的 representation
就可以从完整的输入中 attend
解码器状态(如下图 (a)
所示)。
BART
中没有[CLS] token
,而是把解码器整个序列的representation
视为additional token
(下图中没有画出来)的representation
。因为解码器是从左右到的,因此
[CLS] token
不能位于左侧第一个位置,因为这个位置无法看到任何上下文。
Token
分类任务 Token Classification Tasks
:对于 token
分类任务,如 SQuAD
的 answer endpoint
分类 ,我们将完整的文档馈入编码器和解码器,并使用解码器的 top hidden state
作为每个单词的 representation
。这个 representation
被用来对 token
进行分类。
编码器输入:被
token
分类的文本序列;解码器输入:被token
分类的文本序列。
序列生成任务 Sequence Generation Tasks
: 因为 BART
有一个自回归解码器,它可以直接为序列生成任务进行微调,如抽象式问答abstractive question answering
任务、摘要任务。在这两项任务中,信息都是从输入中复制出来的,这与降噪预训练的目标密切相关。在这里,编码器的输入是输入序列,而解码器则自动生成输出。
编码器输入:上下文序列;解码器输入:目标序列。
机器翻译 Machine Translation
: 我们还探索使用 BART
从而为英语翻译来改进机器翻译解码器。之前的工作 《Pre-trained language model representations for language generation》
表明,通过融合预训练的编码器可以改善模型,但在解码器中使用预训练的语言模型的收益有限。我们表明:可以将整个 BART
模型(包括编码器和解码器)作为机器翻译的单个预训练解码器,方法是增加一组新的编码器参数,这些参数是从 bi-text
中学到的(如下图 (b)
所示)。
bi-text
指的是同时包含源语言文本和对应的翻译语言文本的text pair
。
更准确而言,我们用一个新的随机初始化的编码器取代 BART
的 encoder embedding layer
。该模型是端到端来训练的,它训练新的编码器将外语单词映射成 BART
可以降噪成英语单词的 input
。新的编码器可以使用与原始 BART
模型不同的词表。
我们分两步训练新的编码器,在这两种情况下,都是从 BART
模型的输出中反向传播交叉熵损失:
在第一步中,我们冻结了大部分 BART
参数,只更新随机初始化的新编码器、BART positional embedding
、以及 BART
编码器第一层的 self-attention input projection matrix
。
给定
query
矩阵, key
矩阵, value
矩阵作为 self-attention
的输入,self-attention
为:其中:
就是 self-attention
的输入投影矩阵。 通过针对不同的任务来适配这三个输入投影矩阵,模型就可以很好地迁移到不同的任务。因为冻结后面的层,只需要调整第一层,就可以使得第一层的输出能够适配后面层的需求。
在第二步中,我们以少量的迭代来训练所有模型参数。
与以前的工作相比,BART
在预训练期间支持更广泛的噪声方案。我们使用 base-size
的模型(6
个编码器层和6
个解码器层,隐层维度为 768
)对一系列方案进行了比较,在一个有代表性的任务子集上进行了评估。
预训练目标之间的比较:虽然人们已经提出了许多预训练目标,但这些目标之间的公平比较一直难以进行,至少部分原因是训练数据、训练资源、模型之间的结构差异、以及微调程序的不同。我们重新实现了最近提出的强大的预训练方法。我们的目标是尽可能地控制与预训练目标无关的差异。然而,我们确实对学习率和 layer normalisation
的使用做了微小的改变,以提高性能(为每个预训练目标分别调优这些)。作为参考,我们将我们的实现与 BERT
公布的数字进行了比较。BERT
也是在 Books
和 Wikipedia
数据的组合上训练了 100
万步。我们比较了以下预训练目标:
Language Model
:与 GPT
类似,我们训练一个 left-to-right
的 Transformer
语言模型。这个模型等同于 BART
解码器,没有与编码器的 cross-attention
。Permuted Language Model
:基于 XLNet
,我们采样了 1/6
的 token
,并以随机顺序自回归地生成它们。为了与其他模型保持一致,我们没有实现 XLNet
的 relative positional embedding
或跨 segment
的注意力。Masked Language Model
:遵从 BERT
,我们随机选择 15%
的 token
并用 [MASK]
符号来替代,并训练模型独立地预测被掩码的原始 token
。Multitask Masked Language Model
:与 UniLM
一样,我们用额外的自注意力掩码来训练 Masked Language Model
。自注意力掩码是按以下比例随机选择的:1/6
从左到右、1/6
从右到左、1/3
无掩码、1/3
采用前 50%
的token
无掩码而剩下的 50%
是从左到右的掩码。Masked Seq-to-Seq
:受 MASS
的启发,我们掩码了一个 span
,其中这个 span
包含了 50%
的 token
,并训练一个 sequence-to-sequence
模型来预测被掩码的 token
。对于 Permuted LM
、Masked LM
、以及 Multitask Masked LM
,我们使用双流注意力two-stream attention
(参考 Xlnet
的原始论文)来有效地计算序列的输出部分的似然 likelihood
。
我们进行了两种实验:
将任务视为标准的 sequence-to-sequence
问题,其中 source sequence
馈入编码器,而 target sequence
是解码器的输出。
在解码器中把source sequence
作为前缀加入 target sequence
作为一个整体序列,仅在这个整体序列的 target sequence
部分上计算损失。
即,把
source sequence
视为上下文,而target sequence
视为预测目标。
我们发现前者对 BART
模型的效果更好,而后者对其他模型的效果更好。
论文没有数据来支撑这个结论,所以感觉很突兀。
为了最直接地比较我们的模型对微调目标的建模能力,对于生成任务,我们在Table 1
中报告了困惑度(而不是 ROUGE
指标)。
任务:
SQuAD
:是一项关于百科全书段落的抽取式问答任务 extractive question answering task
。答案是从一个给定的文档上下文中抽取的 text span
。与 BERT
类似,我们使用拼接的问题和上下文作为 BART
编码器的输入;此外,我们也把拼接的问题和上下文传递给解码器,并在解码器上为每个 token
预测:该 token
作为答案开始的概率、作为答案结束的概率。MNLI
:一个 bi-text
的分类任务,预测一个句子是否包含另一个句子。微调后的模型将两个句子与附加的 EOS token
拼接起来,并将它们同时传递给 BART
编码器和解码器。与 BERT
不同的是,解码器上 EOS token
的 representation
被用来对句子关系进行分类。ELI5
:一个格式很长的抽象式问答数据集 abstractive question answering dataset
。模型拼接问题和支持性文档 supporting document
,然后以拼接后的字符串为条件来生成答案。XSum
:一个新闻摘要数据集。ConvAI2
:一个对话响应生成任务 dialogue response generation task
,以上下文和人物为条件。CNN/DM
:一个新闻摘要数据集。这里的摘要通常与源句子 source sentence
密切相关。结果如下表所示,有几个趋势是明显的:
同一个预训练方法的性能在不同的任务中差异很大:预训练方法的有效性高度依赖于任务。例如,简单的语言模型在 ELI5
中取得了最好的性能,但是在 SQUAD
中取得了最差的性能。
根据下表的第二个
block
(即Masked Language Model
到Multitask Masked Language Model
)。
Token Masking
是至关重要的:基于 Document Rotation
或 Sentence Shuffling
的预训练目标在单独的情况下表现很差。成功的方法要么使用 Token Deletion
或 Token Masking
,要么使用 Text Infilling
。在生成任务上,Token Deletion
似乎比 Token Masking
更有优势。
最后四个任务为生成式任务(指标为
PPL
)。
从左到右的预训练改善了生成任务:Masked Language Model
和 Permuted Language Model
在生成方面的表现不如其他模型。
双向编码器对 SQuAD
至关重要 :正如以前的工作(BERT
论文)所指出的,仅仅从左到右的解码器在 SQuAD
上表现不佳(参考 Language Model
这一行),因为未来的上下文对分类决策至关重要。然而,BART
只用一半数量的bidirectional layer
就能达到类似的性能。
预训练目标不是唯一的重要因素:我们的 Permuted Language Model
的表现不如 XLNet
。这种差异的一部分可能是由于没有包括 XLNet
的其他改进,如 relative-position embedding
或 segment-level recurrence
。
纯语言模型在 ELI5
上表现最好:ELI5
数据集是一个例外,其困惑度比其他任务高得多,是唯一的、其他模型优于 BART
的生成任务。纯语言模型表现最好,这表明当输出只受到输入的松散约束时,BART
的效果较差。
BART
取得了最一致的强劲表现:除了 ELI5
之外,使用 Text Infilling
的 BART
模型在所有任务中都表现良好。
最近的工作表明,当预训练扩展到大 batch size
和大型语料库时,下游任务的性能可以大幅提高。为了测试 BART
在这种范围下的表现,并为下游任务创建一个有用的模型,我们使用与 RoBERTa
模型相同的规模来训练 BART
。
实验配置:我们预训练了一个大型模型,编码器和解码器各有 12
层,隐层维度为 1024
。遵从 RoBERTa
的做法,我们 batch size = 8K
,并对模型训练 500K
步。文档采用与 GPT-2
相同的 BPE
进行 tokenize
。
根据前面的实验结果,我们使用 text infilling
和 sentence permutation
的组合。对于每篇文档我们掩码了 30%
的 token
,并对所有的句子进行 permute
。虽然 sentence permutation
在 CNN/DM
摘要数据集上显示出明显的加性增益 additive gain
,但我们假设更大的预训练模型可能会更好地从这个任务中学习。
为了帮助模型更好地适应数据,我们在最后 10%
的训练 step
中禁用 dropout
。我们使用与 Roberta
相同的预训练数据,由新闻、书籍、故事和网络文本组成的 160Gb
数据。
判别式任务:下表将 BART
的性能与最近几种方法在 SQuAD
和 GLUE
任务上进行了比较。最直接的可比 baseline
是 RoBERTa
,它是用相同的资源进行预训练的,但采用不同的预训练目标。
总的而言,BART
和这些模型的表现相似。在大多数任务上,模型之间只有很小的差异。这表明 BART
在生成任务上的改进并没有牺牲分类任务上的性能。
在
CoLA
任务上,BART
与CoLA
的差距有点大。
生成任务:我们还对几个文本生成任务进行了实验。BART
作为标准的 sequence-to-sequence
模型来被微调。在微调过程中,我们使用label smoothed
的交叉熵损失,平滑参数设置为 0.1
。在生成过程中,我们将 beam size
设置为 5
,在 beam search
中删除重复的 trigram
,并在验证集上调优 min-len, max-len, length penalty
。
摘要:为了提供与 SOTA
的文本摘要方法的比较,我们在两个摘要数据集 CNN/DailyMail
和 XSum
上展示了结果,这两个数据集有不同的属性。
CNN/DailyMail
中的摘要倾向于类似于源句子。抽取式模型 extractive model
在这里表现良好,甚至前三个源句子的 baseline
也具有很强的竞争力。然而,BART
的表现超过了所有现有的工作。
相比之下,XSum
是高度抽象 abstractive
的,抽取式模型表现很差。BART
在所有的 ROUGE
指标上比以前最好的工作高出大约 6.0
分(这表明这个问题上性能的重大进步)。从质量上看,样本质量很高(参考本文后续的定性分析)。
ROUGE-N
为:ground-truth
的N-gram
召回率;ROUGE-L
为:prediction
与ground-truth
的最长公共子序列(以token
来计算)的F1
得分。
对话:我们评估了 CONVAI2
的对话响应生成 dialogue response generation
,其中 agent
必须同时根据先前的上下文和文本指定的角色来生成响应。BART
在两个 automated metrics
上优于之前的工作。
抽象式问答:我们使用最近提出的 ELI5
数据集来测试该模型生成长的自由格式答案的能力。我们发现 BART
比以前最好的工作高出 1.2 ROUGE-L
。但该数据集仍然具有挑战性,因为答案只是由问题弱弱地指定了。
翻译: 我们还评估了 WMT16 Romanian-English
的性能,并以 《Edinburgh neural machine translation systems for WMT 16》
的 back-translation
数据作为数据增强。我们使用一个 6
层的 transformer source encoder
将罗马尼亚语 Romanian
映射成一个 representation
,然后 BART
能够利用这个 representation
来降噪成英语 English
。
即,
Romanian
句子首先馈入一个6
层的transformer source encoder
,这个encoder
的输出再馈入BART
。假设我们需要将
A
语言翻译成B
语言,back-translation
的做法分为三步:
- 首先,利用
B -> A
的bi-text
语料来训练一个从B
语言翻译成A
语言的模型(与目标方向相反)。- 然后,利用
B
语言的单语语料、以及B -> A
的模型,翻译得到A
语言的单语语料。- 将生成的
A
语言的单语语料与B
语言的单语语料人工合成A -> B
的bi-text
语料。
实验结果如下表所示。baseline
为 Transformer-Large
。我们同时评估了 Fixed BART
和 Tuned BART
。我们 beam width = 5
、以及 length penalty = 1
。初步结果表明:我们的方法在没有 back-translation
数据的情况下效果较差,而且容易出现过拟合。未来的工作应该探索更多的正则化技术。
这个结论没有数据支撑?
Fixed BART
和Tuned BART
表示什么?作者都没有讲。
BLEU
为prediction
的n-gram
的precision
的加权和,n=1,2,...,N
,权重分为两部分:第一部分是,用于对多个 n-gram
取平均;第二部分是句子简短惩罚Brevity Penalty
,用于惩罚太短的prediction
。
定性分析:BART
在文本摘要指标上有很大的改进,比之前的 SOTA
提升高达 6
个点。为了理解 BART
在 automated metrics
之外的表现,我们对它的生成内容进行了定性分析。
下表展示了由 BART
生成的摘要实例。样本来自 WikiNews
文章,该文章是在我们创建预训练语料库之后才发表的,以消除被描述的事件存在于模型训练数据中的可能性。遵从 《Don’t give me the details, just the summary! topic-aware convolutional neural networks for extreme summarization》
的做法,在总结文章之前,我们删除了文章的第一句话,所以不存在容易抽取的文章摘要。
不出所料,模型输出是流利的、符合语法的英语。然而,模型的输出也是高度抽象的,很少有从输入中复制的短语。输出通常也是事实上准确的,并将整个输入文件的支持性证据 supporting evidence
与背景知识结合起来(例如,正确补全名字,或推断 PG&E
在 California
运营)。在第一个例子中,推断出 “鱼在保护珊瑚礁免受全球变暖的影响” 需要从文本中进行困难的推理。然而,关于 “这项工作发表在《科学》上” 的说法并没有得到 source document
的支持。
这些样本表明,BART
预训练已经学会了自然语言理解和自然语言生成的强大组合。
尽管已被广泛用于其他 NLP
任务,但自监督的预训练在机器翻译machine translation: MT
中还不是常见的做法。现有的方法要么是对模型进行部分预训练partially pre-train
、要么是仅关注英语语料。在论文 《Multilingual Denoising Pre-training for Neural Machine Translation》
中,作者表明:通过预训练一个完整的自回归模型可以获得显著的性能提升,其中这个自回归模型的目标是跨多种语言的完整文本进行加噪音和重建。
在这项工作中,论文提出了mBART
,一个多语言 sequence-to-sequence: Seq2Seq
降噪自编码器。mBART
是通过将 BART
应用于跨多种语言的大型单语语料库 monolingual corpora
而训练的。通过 masking phrase
和 permuting sentence
来对输入文本添加噪音,并学习一个 Transformer
模型来恢复文本。与其他机器翻译的预训练方法不同,mBART
预训练了一个完整的自回归Seq2Seq
模型。mBART
仅对所有语言进行一次训练,提供一组参数。这组参数可以在 supervised setting
和 unsupervised setting
下对任何 language pair
进行微调,无需任何 task-specific
或 language-specific
修改或初始化方案 initialization scheme
。
大量的实验表明,这种简单的方法效果非常好。
对于supervised sentence-level
机器翻译,mBART initialization
在 low-resource/medium-resource pair
(小于 10M
个 bi-text pair
)中带来了显著的增益(高达 12
个 BLEU point
),而在 high-resource setting
中没有牺牲性能。这些结果通过 back-translation: BT
进一步改善,在 WMT16 English-Romanian
和 FloRes
测试集上创造了新的 SOTA
。
Romanian
:罗马尼亚语;Nepali
:尼泊尔语;Korean
:韩语;Italian
:意大利语。
对于 document-level
机器翻译,mBART
的 document-level
预训练将结果提高了 5.5
个 BLEU point
。在无监督的情况下,mBART
得到了一致的增益,并对相关性较低的语言对产生了首个非退化 non-degenerate
的结果(例如,Nepali-English
上的 9.5 BLEU
增益)。以前的预训练方案只考虑了这些 application
的子集,但论文尽可能地比较了性能,并证明 mBART
始终表现最佳。
论文还表明,mBART
能够实现新类型的跨language pair
的迁移。例如,对一个language pair
(如 Korean-English
)中的 bi-text
进行微调,可以创建一个模型,该模型可以翻译在单语预训练集中的所有其他语言(如 Italian-English
),而无需进一步训练。
论文还表明,不在预训练语料库中的语言也能从 mBART
中受益,这强烈表明 initialization
至少部分地是语言通用language universal
的。
最后,论文详细分析了哪些因素对有效的预训练贡献最大,包括语言的数量和它们的整体相似度 overall similarity
。
相关工作:
用于文本生成的自监督学习:这项工作继承了最近预训练为 NLP application
带来的成功,尤其是文本生成。预训练的模型通常被用作 initialization
从而用于微调下游任务(如,可控语言建模controllable language modeling
、摘要、和对话生成)。
具体到机器翻译,无监督的预训练方法也被探索出来,以提高性能。
《When and why are pretrained word embeddings useful for neural machine translation?》
研究了预训练的 word embedding
在机器翻译中的应用。《Unsupervised pretraining for sequence to sequence learning》
提出将 encoder-decoder
模块作为两个独立的语言模型进行预训练。《Towards making the most of bertin neural machine translation》
和 《Incorporating BERT into neural machine translation》
探索了融合方法从而集成预训练的 BERT
权重来改善神经机器翻译的训练。与大多数先前的工作相比,我们专注于预训练一个降噪自编码器,并为各种机器翻译 application
来适配整个模型的权重。
NLP
中的多语言性 Multilinguality
:这项工作也与多语言学习的持续趋势 continual trend
有关,包括将 multilingual word embedding
对齐到通用空间,以及学习跨语言模型 crosslingual model
从而利用跨语言的 shared representation
。
对于机器翻译来说,最相关的领域是多语言翻译 multilingual translation
。多语言翻译的最终目标是联合训练一个翻译模型,该模型同时翻译多种语言,并共享 representation
从而提高 low-resource language
的翻译性能(《Universal neural machine translation for extremely low resource languages》
)。
low-resource language
:bi-text
语料很少的language pair
。
在本文中,我们聚焦于预训练阶段的多语言,并在标准的双语场景 bi-lingual scenario
下对所学模型进行微调。与多语言翻译相比,我们不需要跨多种语言的平行数据 parallel data
,只需要目标方向 targeted direction
(即,翻译方向),这提高了对 low-resource language
和 specific domain
的可扩展性。
假设有
100
种语言,多语言翻译需要种 language pair
的平行数据 。而这里我们只需要100
种语言的单语语料,以及翻译方向。
文档翻译 Document Translation
:作为关键应用之一,我们的工作也与之前将 document-level
上下文纳入神经机器翻译的工作有关。
《Pretrained language models for document-level neural machine translation》
是最相关的工作,也利用预训练的编码器(BERT
)来处理更长的上下文。然而,他们的重点是设计新的 task-specific
技术,并在更 wider
的 input context
下做 sentence-level
翻译 。
据我们所知,我们的多语言预训练模型是首个显示出在 document-level
翻译上相比标准Seq2Seq
模型有改进的结果。
无监督翻译:这项工作也总结了之前的一些工作,其中在语言之间没有直接的平行语料库的情况下来学习翻译。
《Unsupervised neural machine translation》
和 《Unsupervised machine translation using monolingual corpora only》
提出从两个 direction
联合学习降噪自编码器和 back-translation
,然而,这需要良好的 initialization
,并且只在相似的 language pair
上效果良好。《Machine translation with weakly paired bilingual documents》
通过从维基百科中挖掘句子并将其作为弱监督的 translation pair
来解决这个问题。类似于 《Cross-lingual language model pretraining》
和 《MASS: Masked sequence to sequence pre-training for language generation》
,我们遵循第一种方法,并将我们预训练的模型作为 initialization
。
我们还研究了使用 language transfer
的无监督翻译,这与 《Translating translationese: A two-step approach to unsupervised machine translation》
类似,其中他们生成源语言的翻译语translationese
,并在 high-resource language
上训练一个系统来纠正这些中间结果。
我们的工作也与 《XNLI: Evaluating cross-lingual sentence representations》
和 《On the cross-lingual transferability of monolingual representations》
的跨语言 representation learning
密切相关,我们也表明通过 mBART
学到的 representation
可以在没有监督数据的情况下轻松地在语言之间迁移。
Common Crawl: CC
语料库来预训练 BART
模型。我们的实验涉及微调一组模型(这些模型在不同子集上预训练)。数据集:我们对从 CC
语料库中提取的 25
种语言(CC25
)进行预训练。CC25
包括来自不同语言的、不同数量的文本(如下图所示)。遵从 《Cross-lingual language model pretraining》
,我们通过对每种语言 up/down-sampling
,从而重新平衡语料库:
其中:CC-25
中的百分比;
是以 byte-level
还是character-level
还是word-level
还是document-level
?作者并未说明。根据下图,猜测是byte-level
。
时, ,即语言 的文本越少则采样比例越大; 是, ,即均匀采样。 语言缩写:
En
英语,Ru
俄语;Vi
越南语;Ja
日语;De
德语;Ro
罗马尼亚语;Fr
法语;Fi
芬兰语;Ko
韩语;Es
西班牙语;Zh
中文;It
意大利语;NI
尼加拉瓜语;Ar
阿拉伯语;Tr
土耳其语;Hi
印度语;Cs
捷克语;Lt
立陶宛语;Lv
拉脱维亚语;Kk
哈萨克语;Et
爱沙尼亚语;Ne
尼泊尔语;Si
斯里兰卡语;Gu
古吉拉特语;My
马来西亚语。
预处理:我们用一个在完整的 CC
数据上学习的 sentence-piece model
(包括 250K
个 subword token
)来 tokenize
。虽然不是所有这些语言都被用于预训练,但这种 tokenization
支持对额外的语言进行微调。我们不应用额外的预处理,如 true-casing
(即决定单词的合适的大小写)、或者对标点符号以及字符进行规范化。
因为有
25
种语言,因此相当于每种语言包含10K
规模的词表。
我们的模型遵循 BART
的 Seq2Seq
预训练方案。然而 BART
只对英语进行了预训练,我们系统地研究了在不同语言的集合上预训练的影响。
架构:我们使用标准的 Seq2Seq Transformer
架构,模型配置为: 12
层编码器和 12
层解码器,隐层维度为1024
, 16
个注意力头,一共大约 680M
参数。我们在编码器和解码器的基础上加入了一个额外的 layer-normalization
层,我们发现它在 FP16
精度下稳定了训练。
学习:我们的训练数据覆盖了
其中:Seq2Seq
模型定义的条件概率分布。
噪声函数 Noise Function
:遵从 BART
,我们在
首先,我们删除一个区间span
的文本并代之以一个 mask token
。我们根据泊松分布(span length
,从而掩码每个文本实例中 35%
的单词。
这意味着平均每个文本序列的长度为
10
个单词。
我们还对每个文本实例中的句子顺序进行了排列。
解码器的输入是带有一个位置偏移的原始文本。一个 language id
符号 <LID>
被用来作为 initial token
从而用于预测句子。
假设原始文本为
ABCDEFG
,而被掩码的文本为[mask]EFG
。那么:
- 编码器的输入为
[mask]EFG<LID>
。- 解码器的输入为
<LID>ABCDEF
,解码器的label
为ABCDEFG<LID>
。
也可以使用其他噪音类型,如 《Phrase-based & neural unsupervised machine translation》
中的噪音,但我们将最佳噪音策略的探索留给未来工作。
实例格式 Instance Format
:对每个 batch
的每个文本实例,我们对一个 language id
符号 <LID>
进行采样,并尽可能多地打包从<LID>
的相应语料库中采样的连续句子,直到它命中文档边界或达到 512
的 max token length
。实例中的句子由 end of sentence token
(</S>
)分隔。然后,我们将选定的 <LID> token
附加到该实例的末尾。在 "multi sentence"
层面的预训练使我们能够同时在句子翻译和文档翻译上工作。
每个
batch
包含多种语言的文本,即:xxxxxxxxxx
abcdefg...</S>ABCDEFG...</S>abAB<En>
一二三四五...</S>甲乙丙丁...<Zh>
注意:这里的
<LID>
是位于输入序列的末尾,但是在馈入到BART
时:
- 如果是编码器的输入,则
<LID>
仍然位于原始序列的末尾。- 如果是解码器的输入,则
<LID>
放置到原始序列的开头。如果是解码器的输出,那么<LID>
仍然位于原始序列的末尾。一旦 解码器发现解码的token
为<LID>
,那么解码结束。
优化:我们的完整模型(包括 25
种语言)是在 256
个 Nvidia V100 GPU
( 32GB
)上训练了 500K
步 。每个 GPU
的总 batch size
约为 128K
个 token
,与 BART
的配置相匹配。
因为采用了梯度累加策略,因此
GPU
的batch size
会增加。
我们使用 Adam
优化器 ( 2.5
周。我们以 dropout rate = 0.1
开始训练,在 250K
步时减少到 0.05
,在 400K
步时减少到 0
。
所有的实验都是用 Fairseq
完成的。
可复现性:所提出方法的一个潜在问题是可复现性问题,因为需要大量的单语语料和计算资源,以及在预训练期间对超参数进行细粒度选择。如果我们再次对系统进行重新训练,可能会得到略有不同的微调性能。为了解决这个问题,我们将发布预训练的 checkpoint
,以及完整说明的代码从而用于预训练一个新模型。
相关工作 XLM(-R)
和 MASS
:有几种密切相关的机器翻译多语言预训练的方法。
XLM
和 XLM-R
以多语言方式预训练 BERT
,结果得到的参数可用于初始化翻译模型的编码器。与 XLM(-R)
不同的是,由于Seq2Seq
的配置,mBART
同时预训练编码器和解码器,这对于适配机器翻译应用来说更为自然。mBART
类似,MASS
也是一种基于 Seq2Seq
的、具有 word-masking
的预训练技术。然而,MASS
的解码器只预测在编码器中被 masked
的 token
,而 mBART
重建了完整的 target
序列,不仅可以应用于 "masking"
(是噪音函数中的一种) ,还可以应用任何可能的噪音函数。此外,XLM
和 MASS
都没有显示出预训练模型改善两种语言上的翻译性能的证据。
为了更好地衡量预训练期间不同 level
的多语言性的影响,我们构建了一系列模型,具体如下:
mBART25
:如前所述,我们在所有 25
种语言上预训练一个模型。
mBART06
:为了探索对相关的语言进行预训练的效果,我们对所有语言的一个子集(包含 6
种欧洲语言)进行预训练:Ro, It, Cs, Fr, Es, En
(即 ,罗马尼亚语、意大利语、捷克语、法语、西班牙语、英语)。为了进行公平的比较,我们使用了 mBART25 batch size
的大约 1/4
,这使得我们的模型在预训练期间对每种语言有相同的更新数量。
mBART02
:我们预训练双语模型,采用英语和另外一种语言,最终包括各种 language pair
:En-De, En-Ro, En-It
。我们使用了 mBART25 batch size
的大约 1/12
。
注意,这里是每种
language pair
训练一个模型,而不是在这三个pair
上总共训练一个模型。
BART-En/Ro
:为了帮助建立对多语言预训练的更好理解,我们还分别在仅包含 En
语料库、以及仅包含 Ro
语料库上训练单语言 BART
模型。
注意,这里是每种语言训练一个模型,而不是在包含英语和罗马尼亚语的语料库上总共训练一个模型。
Random
:作为额外的 baseline
,我们还将包括与随机初始化的模型的比较,不对每个翻译任务进行预训练。由于不同下游数据集的大小不同,我们总是对超参数(架构、dropout rate
等)进行网格搜索,从而找到最佳的 non-pretrained configuration
。
所有模型都使用相同的词表vocabulary
(CC25
语料库上学到的,包括 250K
个 subword token
)。并非所有的 token
都会频繁地出现在所有的预训练语料库中,但后来的实验表明:这种大型词表可以在多语言环境中提高泛化能力,即使是对未见过的语言。
back-translation
)和其他机器翻译的预训练相比,我们以相对更深的架构在更多的单语数据上预训练 mBART
。这种数据规模和模型参数规模,结合新的多语言训练,是我们结果的核心,尽管未来的工作可以更仔细地研究每一种因素的相对贡献。mBART
预训练在low resource
到 medium resource
的 sentence-level Machine Translation setting
中提供了一致的性能提升,包括仅有 bi-text
和有 back translation
的情况,并且优于其他现有的预训练方案。我们还进行了详细的分析,以更好地了解哪些因素对这些提升贡献最大,并显示预训练甚至可以提高那些不在预训练数据中的语言的性能。数据集:我们收集了 24
对公开可用的平行语料 parallel corpora
,这些语料涵盖了 CC25
的所有语言。大多数 pair
来自以前的 WMT
(Gu, Kk, Tr, Ro, Et, Lt, Fi, Lv, Cs, Es, Zh, De, Ru, Fr <-> En
)和 IWSLT
(Vi, Ja, Ko, Nl, Ar, It <-> En
)比赛。我们还使用 FLoRes pair
(《The FLORES evaluation datasets for low-resource machine translation: Nepali–English and Sinhala–English》
),IITB
的 En-Hi
(《The IIT Bombay English-Hindi parallel corpus》
),以及 WAT19
的 En-My
。我们将数据集分为三类:low resource
(小于 1M
的 sentence pair
),medium resource
(大于 1M
且小于 10M
的 sentence pair
),以及 high resource
(大于 10M
的 sentence pair
)。
微调和解码:我们在 bi-text
数据的单个 pair
上微调 mBART
,将 source language
馈入编码器并且解码 target language
。如下图所示,我们加载预训练的权重,在 bi-text
上训练机器翻译模型。对于所有的翻译方向,我们用 dropout rate = 0.3
、label smoothing = 0.2
、warm-up steps = 2500
、最大学习率为 3e-5
来进行训练。我们对所有low resource, medium resource
的 pair
使用最多 40K
的训练更新,对 high resource pair
使用最多100K
的训练更新。最后的模型是根据验证集的似然 likelihood
来选择的。
这里没有说明微调的序列长度是多少。由于这里是
sentence-level
的翻译,因此序列长度可能不大。相比较而言,document-level
的翻译中,序列长度为512
个token
。
我们解码期间使用beam-search
,beam size = 5
。我们的初步实验表明,微调过程在不同的随机数种子下通常是稳定的。因此,为了减少总的计算量,我们所有的结果都是以单次执行来报告的。我们用mosesdecoder
的脚本来验证统计意义。
注意:
- 编码器输入的末尾为
<LID>
,例如<En>
;解码器输入的开头为<LID>
、解码器输出的末尾为<LID>
,如<Ja>
。- 编码器输入、解码器输入、解码器输出中,句子之间的分隔符均为
</s>
。
主要结果:
如 Table 1
所示,与随机初始化的 baseline
相比,用预训练的 mBART25
权重初始化在所有 low resource pair
、medium resource pair
上都有提高。我们观察到:
low resource pair
(如 En-Vi
、En-Tr
)和 noisily aligned pair
(如 En-Hi
)上有 12
个点或更多的 BLEU
收益。extremely low-resource
的情况下仍然失败,如En-Gu
,它仅有大约 10K
个样本。在这些情况下,无监督翻译更合适,见后面的实验。注意,我们的 baseline
系统使用随机初始化权重的常规 Transformers
的一些运行报告,这与原始竞赛中报告的 SOTA
系统有相当明显的差距。这种差异主要是因为:我们只在官方提供的bi-text
中训练和搜索 baseline
的超参数,而没有使用任何单语语料库或多语适配。例如:
WMT19
中,En -> Gu
的 SOTA
得分是 28.2
,而 Table 1
中是 0
。这基本上是因为原始 bi-text data
的质量很低,而 SOTA
系统通常使用额外的语言(如 Hi
)来提高性能。Kk-En
和 Lt-En
等 pair
中观察到,其中Ru
作为额外的语言也很关键。这一部分的主要目的是讨论多语言预训练在受限的 bi-text setting
中的效果,以便进行更好的比较。我们将在未来的工作中加入更多关于多语言翻译与预训练相结合的讨论。
对于 high resource
的情况(Table 2
),我们没有观察到一致的收益,当有超过 25M
的平行句子 parallel sentence
时,预训练略微损害了性能。当给出大量的 bi-text data
时,我们怀疑监督训练会刷掉预训练的权重。
Plus Back-Translation
:back-translation
(《Improving neural machine translation models with monolingual data》
)是一种标准的方法,用 target-side
的单语数据增强 bi-text
。我们将我们的预训练与back-translation
相结合,并使用 FLoRes
数据集在 low resource language pair
(En-Si
和 En-Ne
)上进行测试。我们使用与 《The FLORES evaluation datasets for low-resource machine translation: Nepali–English and Sinhala–English》
相同的单语数据来生成 back-translation
数据。结果如下图所示。
可以看到:用我们的 mBART25
预训练的参数初始化模型,在back-translation
的每个迭代中提高了 BLEU
分数,从而在所有四个翻译方向上产生了新的 SOTA
的结果。这表明,预训练的 mBART
权重可以直接插入到使用back-translation
的现有 pipeline
中。
对比其它的预训练方法:我们还将我们的预训练模型与最近的自监督预训练方法进行了比较,如下表所示。我们考虑了 En-Ro
翻译,这是唯一一对有既定结果的翻译。可以看到:
mBART
模型优于所有其他预训练模型,无论是否有back-translation
增强。En
和 Ro
数据上训练的传统 BART
模型的比较。尽管比 mBART
的结果要差,但两者都比 baseline
有改进,这表明在多语言环境下的预训练是非常重要的。back-translation
可以带来额外的收益,从而使 Ro-En
翻译达到新的 SOTA
。此外,
mBART25
的效果比mBART02
的效果更差,是否意味着更多的无关预训练数据反而影响下游任务的效果?因为mBART25
的CC25
预训练数据集包含了mBART02
的预训练数据集。接下来的实验表明:如果目标语言的单语料数据很少,那么对更多语言进行预训练对下游翻译任务有帮助;否则,对更多语言进行预训练会略微损害下游翻译任务的性能。
需要对多少种语言进行预训练:我们研究了在什么情况下,将目标 language pair
以外的语言纳入预训练是有帮助的。下表显示了四组 X-En pair
的表现。可以看到:
target language
的单语数据有限时(如 En-My
,My
的单语言数据大小约为 En
的 0.5%
),对更多语言进行预训练最有帮助。target language
的单语数据丰富时(如 De
,Ro
),对多语言的预训练对最终结果略有损害(小于 1 BLEU
)。在这些情况下,额外的语言可能会减少每种测试语言的可用容量。此外,mBART06
在 Ro-En
上的表现与 mBART02
相似,这表明用类似语言(都是欧洲语言)进行预训练特别有帮助。需要预训练多少个 step
:我们在下图中绘制了 Ro-En
的 BLEU
得分与预训练 step
数的对比,在图中我们采用了保存的 checkpoint
(每 25K
步)并应用了前面描述的相同的微调过程。可以看到:
baseline
差很多。25K
步( 5%
的训练)的预训练之后,两个模型的表现都超过了最佳 baseline
。baseline
高达 3 BLEU
以上,在 500K
步之后还没有完全收敛。mBART25
始终比 mBART02
略差,这证实了 Table 4
的观察。需要多少 bi-text
:Table 1
和 Table 2
显示,预训练对low resource
、medium resource
的 language pair
有持续改善。为了验证这一趋势,我们绘制了不同大小的 En-De
数据集子集的性能。更确切地说,我们采用了完整的 En-De
语料库(2800
万 pair
),并随机抽取了10K
、50K
、100K
、500K
、1M
、5M
、10M
的子集。我们将没有预训练的性能与 mBART02
的结果进行比较,如下图所示。可以看到:
10K
个训练样本的情况下达到高于 20 BLEU
的效果,而 baseline
系统的得分是 0
。不难看出,增加 bi-text
语料库的规模可以改善这两个模型。baseline
模型,但随着 bi-text
数量的增加,差距也在缩小,特别是在 10M
个 sentence pair
之后。这一结果证实了我们在前面的观察,即我们的预训练对 high-resource pair
的翻译没有帮助。在这一节中,我们表明:即使对于没有出现在预训练语料库中的语言,mBART
也能提高性能,这表明预训练具有语言通用性。类似的现象在其他 NLP
应用中的其他多语言预训练方法中也有报道。
实验设置:我们报告了使用预训练的 mBART25
、mBART06
和 mBART02
(En-Ro
)模型对 Nl-En
、Ar-En
和 De-Nl
三种 pair
进行微调的结果。mBART06
和 mBART02
模型没有对 Ar
、De
或 Nl
文本进行预训练,但所有语言都在 mBART25
中。 De
和 Nl
都是欧洲语言,与En
、Ro
以及 mBART06
预训练数据中的其他语言有关。
实验结果:如下表所示:
我们发现 English-Romanian
预训练相比 baseline
获得了很大的增益,即使在翻译一种不相关且未见过的语言(阿拉伯语Arabic
)、以及两种未见过的语言(德语 German
和荷兰语 Dutch
)时也是如此。
NI
尼加拉瓜语是荷兰语的一种。
当预训练中包括双方的语言时(即,mBART25
),取得了最好的结果,尽管在其他情况下的预训练也具有令人惊讶的竞争力。
未见过的词汇:Arabic
与 mBART02
和 mBART06
中的语言关系较远,并且有一个不相交的字符集 character set
。这意味着它的word embedding
在很大程度上没有在预训练中被估计。然而,从 Table 5
中可以看到:mBART02/mBART06
在 Ar-En pair
上获得的改进与在 Nl-En pair
上获得的改进相似。
这一结果表明:预训练的 Transformer layer
学习了语言的普遍属性,即使在词汇重叠度 lexical overlap
极低的情况下也能很好地进行泛化。
未见过的 source language
和未见过的 target language
:从 Table 5
中可以看到:
mBART25
的差异来看)比在预训练期间至少见到一种语言(source language
或者 target language
)的情况要差。mBART06
在 X-En pair
上的表现优于 mBART02
,尽管它们在 En-X pair
上表现相似。在 source-side
对未见过的语言进行微调是比较困难的(这里 source-side
就是 NI
和 Ar
),值得今后广泛研究。document-level
机器翻译任务中评估了 mBART
,其目标是翻译包含一个以上句子的文本片段(直到整个文档)。在预训练期间,我们使用多达 512
个 token
的文档片段,允许模型学习句子之间的依赖关系。我们表明,这种预训练大大改善了 document-level
的翻译。数据集:我们在两个常见的 document-level
机器翻译数据集上评估性能:WMT19 En-De
和 TED15 Zh-En
。
En-De
,我们使用 WMT19
的文档数据来训练我们的模型,没有任何额外的 sentence-level
数据。Zh-En
数据集来自 IWSLT 2014
和 IWSLT 2015
。遵从 《Document-level neural machine translation with hierarchical attention networks》
,我们使用 2010-2013 TED
作为测试集。预处理:我们用预训练中使用的方法进行预处理。对于每个 block
,句子被符号</S>
所分隔,整个实例以 specific language id
(<LID>
)结束。平均而言,一个文档被分割成 2
到 4
个实例。
微调和解码:
sentence-level
翻译相同的微调方案,不使用以前的工作所开发的任何 task-specific
的技术,如约束的上下文constrained context
、或受限注意力 restricted attention
。source sentence
打包成 block
,并对每个实例 block
进行自回归地翻译。该模型不知道要提前生成多少个句子,当预测到 <LID>
时,解码就会停止。我们默认使用 beam size = 5
。baseline
和评估:我们训练了 4
个模型:一个 document-level
(Doc-MT
)机器翻译模型,以及 baseline
为一个对应的 sentence-level
(Sent-MT
)机器翻译模型,包括预训练和不预训练。我们使用 mBART25
作为 En-De
和 Zh-En
的通用预训练模型。
En-De
,即使我们的 mBART25 Doc-MT
模型将多个句子解码在一起,但翻译的句子仍然可以与 source sentence
对齐,这使得我们可以同时在 sentence-level
(s-BLEU
)和 document-level
(d-BLEU
)评估 BLEU
分数。Zh-En
,由于测试数据中的对齐错误,我们无法产生与reference
相同数量的翻译句子。我们只提供 d-BLEU
分数。我们还将我们的模型与 Hierarchical Attention Networks
(《Document-level neural machine translation with hierarchical attention networks》
)在 Zh-En
上进行了比较,这是 document-level
翻译的 SOTA
的 non-pretraining
方法。它们结合了两层注意力:首先是在句子内部,然后是跨句子。
下表显示了 En-De
和 Zh-En
在 sentence-level
和 document-level
的主要结果:
随机初始化 vs.
预训练初始化:
sentence-level
训练和 document-level
训练,用预训练权重初始化的机器翻译模型比随机初始化的机器翻译模型要好得多。mBART25
模型(Sent-MT
和 Doc-MT
)也优于 HAN
,尽管 Sent-MT
和 Doc-MT
不是为 document-level
机器翻译而定制化的。Sent-MT vs. Doc-MT
:对于 En-De
和 En-Zh
:
mBART25 Doc-MT
模型的表现超过了 mBART25 Sent-MT
。
超出的绝对数值在
1.0
分左右,不是特别多。
相反,没有预训练的模型的趋势相反,即 Random Doc-MT
模型的表现远远差于 Random Sent-MT
。
对于这两个数据集,随机初始化的 Doc-MT
未能发挥作用,导致其结果比 sentence-level
模型差得多。如此大的性能gap
表明,预训练对 document level
的性能至关重要。一般而言,很难大量收集高质量的document level
数据,这表明预训练可能是未来工作的一个强有力的策略。我们还在 Figure 6
中包括一个采样到的例子。
除了有监督的机器翻译,我们还在对于 target language pair
没有 bi-text
的任务上评估我们的模型。我们定义了三种类型的无监督翻译:
没有任何类型的 bi-text
:一个常见的解决方案是从 back-translation
中学习。我们表明,mBART
为这些方法提供了一个简单而有效的初始化方案。
即,这里只有单语语料。
对于 target language pair
没有 bi-text
,但两种语言都出现在与其他 pair
的 bi-text
语料中:这种配置在多语言机器翻译系统中很常见。在本文中,我们将重点限制在为单个 language pair
建立模型,并将多语言机器翻译的讨论留给未来的工作。
即,没有
A -> B
的bi-text
,但是有A -> C
和D -> B
的bi-text
。注意,
A,B,C,D
都在预训练语料中。
没有 target pair
的 bi-text
,但有从其他语言翻译成 target language
的 bi-text
:即使 source language
没有任何形式的 bi-text
,mBART
也支持有效的迁移。
即,没有
A -> B
的bi-text
,但是只有D -> B
的bi-text
,没有A
的任何bi-text
。注意,
A,B,D
都在预训练语料中。
数据集:我们在 En-De
、En-Ne
和 En-Si
上评估我们的预训练模型。En
和 De
都是共享许多子词 subword
的欧洲语言,而 Ne
和Si
则与 En
完全不同。我们使用与监督学习相同的测试集,并使用相同的预训练数据(CC25
)进行 back-translation
以避免引入新信息。
只有
CC25
如何进行back-translation
?因为back-translation
需要预先训练好一个翻译模型。而CC25
没有bi-text
来微调从而得到一个翻译模型。猜测是:不需要微调,用CC25
预训练好的模型本身就可以充当一个翻译模型。
学习:遵从《Cross-lingual language model pretraining》
(XLM
)的做法,我们用 mBART
的权重初始化翻译模型,然后以 source sentence
(通过 on-the-fly back-translation
来生成)为条件来生成单语句子 monolingual sentence
(即,翻译为单语文本)。此外,对于 on-the-fly back-translation
的前面 1000
步,我们将 mBART
限制为仅生成 target language
的 token
,从而避免 mBART
复制 source text
。
这里是没有任何类型的
bi-text
的情形。
结果:下表显示了与 non-pretrained
模型、以及采用现有预训练方法的模型相比的无监督翻译结果。可以看到:
non-pretrained
模型取得了很大的进步。pair
(En-Ne, En-Si
), 我们的模型显著超越了 XLM
。在这些 pair
上,现有的方法完全失败。En-De
,我们的模型与 XLM
和 MASS
相比也是相差无几的。我们还报告了 target language
与其他 source language
出现在 bi-text
中时的结果。
即,没有
A -> B
的bi-text
,但是只有D -> B
的bi-text
,没有A
的任何bi-text
。
数据集:我们只考虑 X -> En
的翻译,并从监督学习的配置中选择了 12
种 language pair
的 bi-text
,包括 Indic language
(Ne, Hi, Si, Gu
)、European language
(Ro, It, Cs, Nl
)、East Asian language
(Zh, Ja, Ko
)以及Arabic
(Ar
)。
结果:如下表所示,预训练的 mBART25
模型在每个language pair
上进行了微调,然后在剩余 language pair
上进行了评估。我们还在对角线上展示了直接的微调性能,以供参考。可以看到:
Gu-En
之外(最后一列),所有微调模型都能实现迁移,因为在 Gu-En
中,监督模型完全失败(0.3 BLEU
)。Cs-En
,第四行)甚至更好的结果(Ne-En, Gu-En
,倒数第三行和最后一行)。我们还在下图中展示了一个语言迁移的例子。
作为对比,我们也在没有预训练的随机初始化模型上应用同样的程序,其结果总是约为 0 BLEU
。这表明多语言预训练是非常重要的,它能产生跨语言的 universal representation
,因此一旦模型学会了将一种语言翻译成英语,它就能学会用类似的 representation
来翻译所有语言到英语。
下图中,同一个浅色阴影块表示相同语系。
什么时候 language transfer
是有用的:Table 8
还显示,迁移效应的大小随着不同语言的相似度而变化。
language family
中进行时(浅色阴影块所示),语言迁移效果更好,特别是在 Indic language
(Hi, Ne, Gu
)之间。vocabulary sharing
并不是有效迁移的必要条件。例如,Zh-En
(第一行)和 It-En
(第七行)分别从 Ko-En
和 Ar-En
上取得了最好的迁移学习效果。尽管(Zh,Ko)
和(It,Ar)
之间的词表重合度很低(甚至是字符重合度也很低)。使用 back-translation
:我们在下表中比较了使用 back-translation
的无监督机器翻译 vs.
语言迁移的无监督机器。当有相近的语言翻译可以迁移时,语言迁移效果更好。
此外,我们显示了结合这两种技术的有前景的结果。我们从最好的被迁移模型 transferred model
开始,在预训练中使用的同一单语语料库上应用(迭代式的)back-translation
。下表显示了 back-translation
的 1
轮迭代的结果。我们看到所有的 language pair
都有改进。对这两种方法的完整分析将作为未来的工作。