像 BERT
这样的预训练方法已经显示出强大的性能收益,其中 BERT
使用自监督训练来掩码单个单词或单个子单词单元 subword unit
。然而,许多 NLP
任务涉及对两个或多个文本区间 text span
之间的关系进行推理。例如,在抽取式问答 extractive question answering
任务中,确定 "Denver Broncos"
是 "NFL team"
的一种类型,对于回答 "Which NFL team won Super Bowl 50?"
的问题至关重要。这样的 span
为自监督任务提供了更具挑战性的目标,例如,预测 "Denver Broncos"
相比已知下一个词是 "Broncos"
从而预测 "Denver"
要难得多。在论文 《SpanBERT: Improving Pre-training by Representing and Predicting Spans》
中,作者介绍了一种 span-level
的预训练方法,其性能一致地优于 BERT
,在span selection
任务(如问答question answering
任务、以及共指消解coreference resolution
任务)中的收益最大。
论文提出了一种预训练方法,即 SpanBERT
,旨在更好地表示和预测文本的 span
。论文的方法在掩码方案和训练目标上都与BERT
不同。
SpanBERT
掩码随机的 contiguous span
,而不是随机的单个token
。SpanBERT
引入了一个新颖的区间边界目标 span-boundary objective: SBO
,使模型学会从 span
边界上观察到的 token
来预测整个 masked span
。span-based masking
迫使模型只使用该 span
的上下文来预测整个 span
。此外,SBO
鼓励模型将这种 span-level
的信息存储在 boundary token
处。下图说明了 SpanBERT
的方法。
SpanBERT
的实现建立在 BERT
的一个精心调优的副本 replica
上,这个精心调优的 BERT
本身就大大超过了 original BERT
。在论文 baseline
的基础上,作者发现对单个 segment
进行预训练,而不是对 two half-length segment
进行 next sentence prediction: NSP
的目标,大大地提高了大多数下游任务的性能。因此,作者在调优后的 single-sequence BERT baseline
之上添加所提出的修改。
总之,论文提出的预训练程序产生的模型在各种任务上的表现超过了所有的 BERT baseline
,特别是在 span selection
任务上的性能得到了大幅提高。具体而言, SpanBERT
在 SQuAD 1.1
和 SQuAD 2.0
上分别达到了 94.6% F1
和 88.7% F1
,与论文精心调优的BERT
副本相比,误差减少了 27%
。作者还在另外五个抽取式问答 benchmark
(NewsQA, TriviaQA, SearchQA, HotpotQA, Natural Questions
)上观察到类似的收益。
对于 document-level
共指消解,SpanBERT
还在具有挑战性的 CoNLL-2012 ("OntoNotes")
共享任务上达到了新的 SOTA
,其中 SpanBERT
达到了 79.6% F1
,比之前的 top model
高出 6.6%
(绝对提升,而不是相对提升)。最后,论文证明 SpanBERT
对没有显式涉及 span selection
的任务也有帮助,并表明 SpanBERT
甚至提高了 TACRED
和 GLUE
的性能。
虽然其它工作展示了添加更多数据(《XLNet: Generalized autoregressive pretraining for language understanding》
)和增加模型规模(《Cross-lingual language model pretraining》
)的好处,但这项工作表明了设计良好的预训练任务和目标的重要性,其中预训练任务和目标也会产生显著的影响。
相关工作:无标签文本中训练的 pre-trained contextualized word representation
最近对 NLP
产生了巨大的影响,特别是作为一种方法,用于针对特定任务在微调大模型之前先初始化该大模型。除了模型超参数和语料库的差异外,这些方法主要在其预训练任务和损失函数方面有所不同,相当多的当前文献提出了对 BERT
的 MLM
目标进行增强。
虽然以前的、以及同时进行的工作已经研究了 masking
(ERNIE
)或 dropping
(MASS
、KERMIT
)输入中的多个单词,尤其是作为语言生成任务的预训练。但 SpanBERT
预训练 span representation
(《Learning recurrent span representations for extractive question answering》
),这被广泛用于问答、共指消解、以及各种其他任务。
ERNIE
显示了使用 phrase masking
和 named entity masking
对中文 NLP
任务的改进。MASS
专注于语言生成任务,并采用 encoder-decoder framework
,在给定句子剩余部分的情况下重建一个 sentence fragment
。我们试图使用 SBO
目标更显式地建模 span
,并表明(几何分布的)random span masking
的效果与 masking linguistically coherent span
一样好,有时甚至比后者更好。我们在英语 benchmark
上评估了问答、关系抽取、以及共指消解,此外还有 GLUE
。
此外:
ERNIE
( 《ERNIE: Enhanced language representation with informative entities》
)专注于将结构化的知识库与 contextualized representation
相结合,着眼于 entity typing
和 relation classification
等知识驱动的任务。UNILM
使用多个语言建模目标:单向(包括 left-to-right
和 right-to-left
)、双向、以及 sequence-to-sequence
的预测,从而帮助摘要任务以及问题生成等生成任务。XLM
为翻译和跨语言分类等多语言任务探索了跨语言预训练。Kermit
是一种基于 insertion
的方法,在预训练期间填补 missing token
(而不是预测 masked token
),他们显示了在机器翻译和 zero-shot
问答上的改进。与我们的工作同时:
RoBERTa
提出了一个 BERT
预训练的副本研究replication study
,衡量了许多关键超参数和训练数据大小的影响。
同时,XLNet
结合了自回归损失和 Transformer-XL
架构,数据增加了8
倍多,在多个 benchmark
上取得了目前的 SOTA
成果。
XLNet
在预训练期间也掩码了 span
(1-5
个 token
),但对它们进行了自回归式的预测。我们的模型侧重于纳入 span-based pretraining
,作为一个副作用,我们提出了一个更强大的 BERT baseline
,在此同时控制了语料库、架构和参数规模。
有些工作与我们的 SBO
目标相关。
pair2vec
(《pair2vec: Compositional word-pair embeddingsfor cross-sentence inference》
)在预训练期间使用基于负采样的多变量目标 multivariate objective
来编码 word-pair relation
。然后,word-pair representation
被注入下游任务的注意力层,从而编码了有限的下游上下文。
与 pair2vec
不同,我们的 SBO
目标产生 "pair"
(span
的 start token
和 end token
)representation
,在预训练和微调期间更充分地编码上下文,因此更合适被视为span representation
。
《Blockwise parallel decoding for deep autoregressive models》
专注于使用 block-wise parallel decoding scheme
提高语言生成速度。他们并行地对多个时间步进行预测,然后退到由一个 scoring model
验证的最长前缀。
与此相关的还有 sentence representation
方法,这些方法侧重于从 sentence embedding
中预测周围上下文。
BERT
是一种自监督的方法,用于预训练一个深层的 transformer encoder
,然后再针对特定的下游任务来进行微调。BERT
优化了两个训练目标:掩码语言模型 masked language model: MLM
和下一句预测next sentence prediction: NSP
。这两个训练目标只需要大量的无标记的文本集合。
给定单词或子词 subword
的一个序列 BERT
训练一个编码器,该编码器为每个 token
产生一个 contextualized vector representation
:
MLM
:MLM
也被称为 cloze test
,它的任务是预测序列中的占位符 placeholder
所对应的 missing token
。具体而言, token
的一个子集 token
集合所取代。在 BERT
的实现中,token
的比例为的 15%
。在 80%
的 token
被替换为[MASK]
、10%
的 token
被替换为 random token
(根据 unigram
分布)、10%
的 token
保持不变。任务是根据 modified input
来预测 original token
。
BERT
通过随机选择一个子集来独立地选择 Y
中的每个 token
。在 SpanBERT
中,我们通过随机选择 contiguous span
来定义
NSP
:NSP
任务将两个序列 BERT
中是这样实现的:首先从语料库中读取序列
这两个序列由一个特殊的 [SEP] token
分开。此外,一个特殊的 [CLS] token
被添加到拼接序列(input
,其中 [CLS]
的 target
是:
总之,BERT
通过在双序列 bi-sequence
采样程序产生的数据中均匀地随机掩码 word piece
,同时优化了 MLM
和 NSP
目标。接下来,我们将介绍我们对 data pipeline
、掩码、以及预训练目标的修改。
我们提出了 SpanBERT
,这是一种自监督的预训练方法,旨在更好地表达和预测文本的span
。我们的方法受到 BERT
的启发,但在三个方面偏离了BERT
的 bi-text classification framework
:
span of tokens
,而不是掩码单个 token
。span-boundary objective: SBO
),该目标试图仅使用 span’s boundary
的token
的 representation
来预测整个 masked span
。SpanBERT
对每个训练实例采样单个 contiguous segment
(而不是两个),因此没有使用 BERT
的 next sentence prediction
目标。Span Masking
:给定一个 token
序列 span
从而选择 token
的一个子集 masking budget
(例如,15%
)耗尽。在每轮迭代中:
span length
(token
数量),该分布偏向于较短的 span
。masked span
的起点。我们总是采样完整单词(而不是 subword token
)的序列,而且起点必须是一个完整单词的开头。根据初步试验,我们设定 span length
为 span mask length
的分布。
几何分布
定义为:在 次伯努利试验中,单次成功的概率为 ,那么前 次都失败、第 次成功的概率为几何分布: 。 这里的
3.8
的计算过程为:。
和 BERT
一样,我们也掩码了总共 15%
的 token
,其中:80%
的 masked token
用 [MASK]
替换、10%
的 masked token
用 random token
替换、10%
的 masked token
保持 original token
不变。然而,我们是在 span-level
进行这种替换,而不是对每个 token
独立地进行替换。也就是说,一个 span
中的所有 token
都被替换成 [MASK]
、random token
、或者保持不变。
平均序列长度为
3.8/0.15=25.3
。
Span Boundary Objective
:span selection model
通常使用span boundary tokens
(开始和结束)创建一个固定长度的 representation
。为了支持这样的模型,我们希望 end of span
的 representation
能够尽可能多地总结 internal span content
。我们通过引入一个 span boundary objective
来做到这一点,该目标涉及仅仅使用span
边界上所观察到的 token
的 representation
来预测 masked span
的每个 token
。
正式地,我们用 token
的 transformer encoder
的输出。给定一个由 token
masked span
,其中 masked span
的开始位置和结束位置(即,两个端点),我们使用外部的 boundary token
target token
的 position embedding
span
中的每个 token
注意,在
BERT
的MLM
目标中,隐式地用到了target token
的position
信息(通过在[MASK] token
的token embedding
上添加positional embedding
)。
其中:
position embedding
masked token
相对于 left boundary token
注意,
BERT
采用了absolute positional embedding
,而这里是relative positional embedding
,因此SpanBERT
需要两套positional embedding
。
我们将 representation function
GeLU
激活函数 和 layer normalization
的两层前馈神经网络:
其中:
然后我们使用 vector representation
token
MLM
目标一样。
SpanBERT
对 masked span
token
SBO
损失函数和常规的 MLM
损失函数进行求和,同时对 MLM
和 SBO
为 target token
复用 input embedding
:
MLM
目标利用了所有unmasked token
作为上下文,而SBO
仅使用boundary token
作为上下文,因此理论上MLM
的信息更丰富。SBO
迫使模型更关注boundary token
,是MLM
的一种特殊的case
,所以是否可以泛化MLM
从而支持SBO
?
Single-Sequence Training
:如前所述,BERT
的样本包含两个文本序列 next sentence prediciton: NSP
目标。我们发现,这种 setting
几乎总是比简单地使用没有 NSP
目标的单一序列要差。我们猜想,单序列训练 single-sequence training
优于带有NSP
的双序列训练 bi-sequence training
,有两个原因:
full-length
上下文中获益。MLM
增加噪音。因此,在我们的方法中,我们取消了 NSP
目标和 two-segment
采样程序,而只是简单地采样单个 contiguous segment
直到 token
,而不是两个 half-segment
加起来 token
。
总之,SpanBERT
通过以下方式预训练 span representation
:
full word
的 span
。data pipeline
的 MLM
之外,还优化了一个辅助的 span-boundary objective: SBO
。预训练程序如下:
将语料库划分为单个的、长度为 512 token
的 contiguous block
。
在预训练的每个 step
:
block
的一个 batch
。span masking
方案对每个 block
掩码 15%
的 word piece
。masked token
我们对一组任务进行了评估,包括问答任务(七个)、共指消解任务、 GLUE benchmark
中的任务(九个)、以及关系抽取任务。我们预期,span selection
任务、问答、以及共指消解,将特别受益于我们的 span-based
预训练。
抽取式问答 Extractive Question Answering
:给定一个短的文本段落和一个问题作为输入,抽取式问答任务是选择文本段落中连续的一个 text span
作为答案。
我们首先在 SQuAD 1.1
和 SQuQD 2.0
上进行评估,它们一直是主要的问答任务 benchmark
,尤其是对于预训练模型。
我们另外还在 MRQA
共享任务的五个数据集上进行评估:NewsQA
、SearchQA
、TriviaQA
、HotpotQA
、Natural Questions
。由于 MRQA
共享任务没有公开的测试集,我们将验证集一分为二,构建为新的验证集和测试集。这些数据集在领域 domain
和收集方法上都有所不同,这使得这些数据集成为一个很好的测试平台,用于评估我们的预训练模型是否能在不同的数据分布中很好地进行泛化。
遵从 BERT
,我们对所有的数据集使用相同的 QA
模型架构:
首先,我们将段落
然后,我们将序列 pre-trained transformer encoder
,并在其之上独立训练两个线性分类器,用于预测 answer span boundary
(开始点和结束点)。
对于 SQuAD 2.0
中的不可回答的问题,我们只需将 answer span
设置为 [CLS]
这个 special token
(即,开始点和结束点都是 0
)。
共指消解 Coreference Resolution
:共指消解是对文本中的 mention
进行聚类的任务,这些 mention
引用相同的现世界实体。我们对 CoNLL-2012
共享任务进行了评估,用于 document-level
的共指消解。我们使用 《BERT for coreference resolution: Baselines and analysis》
的高阶共指模型 higher-order coreference model
(《Higher-order coreference resolution with coarse-to-fine inference》
)的独立版本实现。文档被划分为预定义长度的 non-overlapping segment
。每个 segment
由预训练的 transformer encoder
独立编码,它取代了原来的 LSTM-based encoder
。对于每个 mention span
antecedent span
集合
span pair
评分函数 span representation
、以及
其中:
span
,它包含多个连续的 token
;span
,它也包含多个连续的 token
。span representation
。一个 span representation
是 span
两个端点所对应的两个 transformer output state
、以及一个 attention vector
(它在当前 span
种所有 token
的 output representation
上计算而来)的拼接。speaker
和题材的信息)。
可以理解为两个 span
的交互,可以理解为 span
的bias
。
关系抽取 Relation Extraction
:TACRED
是一个具有挑战性的关系抽取数据集。给定一个句子和其中的两个 span
(主语和宾语),任务是从 42
种预定义的关系类型中预测 span
之间的关系,包括 no relation
。
我们遵循 《Position-aware attention and supervised data improve slot filling》
的 entity masking
方案,用他们的NER tag
替换主语实体和宾语实体,如 "[CLS] [SUBJ-PER] was born in [OBJ-LOC] , Michigan, . . . "
,最后在 [CLS] token
之上添加一个线性分类器来预测关系类型。
GLUE
:General Language Understanding Evaluation: GLUE
基准包括九个 sentence-level
分类任务:
两个 sentence-level
分类任务,包括:
CoLA
:用于评估语言可接受性 linguistic acceptability
。SST-2
:用于情感分类 sentiment classification
。三个 sentence-pair similarity
任务,包括:
MRPC
,一个二元转述任务 binary paraphrasing task
,其中 sentence pair
来自于新闻。STS-B
,一个分级的相似性 graded similarity task
任务,其中 sentence pair
来自于新闻标题。QQP
,一个二元转述任务 binary paraphrasing task
,其中 sentence pair
来自于 Quora question pair
。四个自然语言推理任务,包括 MNLI, QNLI, RTE, WNLI
。
与问答、共指消解和关系抽取不同,这些 sentence-level
任务不需要显式建模 span-level
语义。然而,它们仍然可能受益于隐式的 span-based
推理(例如,首相 Prime Minister
是政府首脑)。遵从之前的工作,我们将 WNLI
排除在结果之外,以便进行公平比较。虽然最近的工作 《Multi-task deep neural networks for natural language understanding》
应用了几个 task-specific
策略来提高单个 GLUE
任务的性能,但我们遵循 BERT
的单任务设置,仅仅这些分类任务的 [CLS] token
之上添加了一个线性分类器。
我们在 fairseq
中重新实现了 BERT
的模型和预训练方法。我们使用了 BERT_large
的模型配置,也在相同的语料库上(即,BooksCorpus
和 English Wikipedia
,使用带大小写的 Wordpiece token
)预训练了我们所有的模型。
与原始的 BERT
实现相比,我们的实现的主要区别包括:
我们在每个 epoch
中使用不同的掩码(即,动态掩码),而 BERT
在数据处理期间为每个序列采样 10
个不同的掩码。
我们删除了之前使用的所有短序列策略,这些短序列策略包括(被 BERT
所采用):
0.1
的小概率采样较短的序列。90%
的训练步中以 128
的较短序列进行预训练,然后在剩下的 10%
的训练步中以正常序列长度进行预训练。取而代之的是,我们总是采用高达 512 token
的序列,直到序列到达一个文档边界。
关于这些修改及其影响,我们请读者参考 RoBERTa
原始论文的进一步讨论。
与 BERT
一样,学习率在前 10K
步中被预热到 1e-4
的峰值,然后线性衰减。我们采用了 0.1
的 decoupled weight decay
(《Decoupled weight decay regularization》
)。我们还在所有层和注意力权重上采用 0.1
的 dropout
,以及 GeLU
激活函数。我们采用 AdamW
优化器,其中 epsilon = 1e-8
,迭代 2.4M
步。我们的实现使用 batch size = 256
,序列最大长度为 512 token
。
传统的
weight decay
:
为 weight decay
系数。在常规SGD
的情况下,weight decay
等价于L2
正则化。但是,在
Adam
等方法中,L2
正则化与weight decay
并不等价。因此人们提出decoupled weight decay
从而用于Adam
等方法。
预训练是在 32
个 Volta V100 GPU
上进行的,花了 15
天时间完成。微调是基于 HuggingFace
的代码库实现的,更多的微调细节如下:
抽取式问答:对于所有的问答任务,我们使用 max_seq_length = 512
,以及一个大小为 128
的滑动窗口(如果序列长度大于 512
)。
对于所有的数据集,我们调优的学习率范围是:{5e-6, 1e-5, 2e-5, 3e-5, 5e-5}
;调优的 batch size
范围是:{16, 32}
;微调四个 epoch
。
共指消解:我们将文档划分为多个块 chunk
,每个块的长度为 max_seq_length
并且独立地编码每个块。
对于所有的数据集,我们调优的 max_seq_length
范围是:{128, 256, 384, 512}
;调优的 BERT
学习率范围是:{1e-5, 2e-5}
;调优的 task-specific
学习率范围是:{1e-4, 2e-4, 3e-4}
;微调 20
个 epoch
。
我们使用 batch size = 1
(每次一篇文档)。
TACRED/GLUE
:对于所有数据集,我们使用 max_seq_length = 128
,调优的学习率范围是:{5e-6, 1e-5, 2e-5, 3e-5, 5e-5}
;调优的 batch size
范围是:{16, 32}
;微调 10
个 epoch
。
唯一的例外是 CoLA
数据集,我们为它微调 4
个 epoch
,因为 10
个 epoch
会导致严重的过拟合。
我们将 SpanBERT
和如下三个 baseline
进行比较:
Google BERT
:由 《BERT: Pre-training of deep bidirectional transformers for language understanding》
发布的预训练模型。Our BERT
:我们重新实现的 BERT
,其中改进了数据预处理和优化过程(如,动态掩码,废除短序列策略)。OurBERT-1seq
:我们重新实现的另一个版本的 BERT
,其中在单个 full-length
序列上训练而没有NSP
任务。Extractive Question Answering
:下表展示了在 SQuAD 1.1
和 SQuAD 2.0
上的实验结果。SpanBERT
分别比 Our BERT
高出 2.0% F1
和 2.8% F1
,比 Google BERT
高出 3.3% F1
和 5.4% F1
。在 SQuAD 1.1
中,SpanBERT
超出人类性能 3.4% F1
。
此外,
OurBERT-1seq > Our BERT > Google BERT
。
下表表明,这一趋势不仅在 SQuAD
上成立,在每个 MRQA
数据集上也成立。可以看到:
SpanBERT
超越了 Our BERT
高达 2.9%
,尽管其中的一些改进来自于 single-sequence training
(+1.1%
),但大部分改进来自于 span masking
和 span boundary objective
(+1.8%
)。SpanBERT
在 TriviaQA
和 HotpotQA
上相对于 Our Bert-1seq
有特别大的改进,分别高达 +3.2%
和 +2.7%
。这意味着 span masking
和 span boundary objective
起到了重要作用。Coreference Resolution
: 下表显示了 OntoNotes
共指消解 benchmark
上的实验结果。可以看到:
Our BERT
相比 Google BERT
提高了 1.2% F1
,而 single-sequence training
(即,Our BERT-1seq
)相比于 Our BERT
又带来了 0.5%
的收益。SpanBERT
在Our BERT-1seq
的基础上又有了很大的提高,达到了一个新的 SOTA
结果 79.6% F1
(之前的 SOTA
结果是 73.0%
)。Relation Extraction
:下表显示了 TACRED
上的实验结果。可以看到:
SpanBERT
比 Our BERT
高出 3.3% F1
,并接近目前的 SOTA
。SpanBERT
比他们的 BERT_EM
表现更好,但比 BERT_EM + MTB
差 0.7
分,后者使用 entity-linked text
进行额外的预训练。
SpanBERT
超出 Our BERT
的增益的大部分(+2.6% F1
)来自于 single-sequence training
,尽管 span masking
和 span boundary objective
的贡献也是可观的 (0.7% F1
)。而 span masking
和 span boundary objective
的贡献主要来自于更高的召回率(即 R
列)。
single-sequence training
的贡献主要来自于更高的precision
。
GLUE
:下表展示了 GLUE
上的实验结果。可以看到:
NSP
目标的 single-sequence training
大大改善了 CoLA
,并在 MRPC
和 MNLI
上产生了较小(但是仍然可观)的改善。SpanBERT
的主要收益是在 QNLI
数据集( +1.3%
,它基于 SQuAD
)、以及 RTE
数据集(+6.9%
),后者是 SpanBERT
的GLUE
平均分上升的主要原因。总体趋势:我们在 17
个 benchmark
上将我们的方法与三个 BERT
版本进行了比较,发现 SpanBERT
在几乎每个任务上都优于BERT
。
14
项任务中,SpanBERT
的表现优于所有 baseline
。MRPC
和 QQP
)中,SpanBERT
的准确率与 single-sequence
训练的 BERT
相当,但仍优于其他 baseline
。SST-2
)中, Google BERT
比 SpanBERT
的准确率高 0.4%
。当考虑到增益的大小时,似乎 SpanBERT
在抽取式问答方面特别好。例如:
SQuAD 1.1
中,我们观察到 2.0% F1
的增益,尽管 baseline
已经远远高于人类的表现。MRQA
中,SpanBERT
在 Our BERT
的基础上提高了从 2.0% F1
(Natural Questions
)到 4.6% F1
(TriviaQA
)。最后,我们观察到,在各种任务中,single-sequence training
比带有 NSP
的 bi-sequence training
,在效果上要好得多。这是令人惊讶的,因为 BERT
的消融研究显示了来自 NSP
目标的收益。然而,消融研究仍然涉及 bi-sequence
的数据处理(即,预训练阶段只控制 NSP
目标,同时仍然采样两个 half-length
的序列)。我们猜测:bi-sequence training
,正如它在BERT
中实现的那样,阻碍了模型学习较长距离的特征,并因此损害了许多下游任务的性能。
我们将我们的 random span masking
方案与 linguistically-informed masking
方案进行比较,发现 masking random span
是一种有竞争力的、并且通常是更好的方法。然后,我们研究了SBO
的影响,并将其与 BERT
的 NSP
目标进行对比。
掩码方案:以前的工作 ERNIE
表明,在中文数据的预训练中,通过掩码 linguistically informed span
,改善了下游任务的表现。我们将我们的 random span masking
方案与linguistically informed span
掩码进行比较。具体而言,我们训练了以下五种 baseline
模型,它们的区别仅仅在于 token
的掩码方式:
Subword Tokens
:我们采样随机的 Wordpiece token
,就像在 original BERT
中一样。
Whole Words
:我们采样随机的单词,然后掩码这些单词中的所有 subword token
。masked subword token
总共占所有 token
的 15%
。
Named Entities
:在 50%
的时间里,我们从文本中采样命名实体,而在剩下 50%
的时间里随机采样全词 whole word
。masked subword token
总共占所有 token
的 15%
。
具体而言,我们在语料库上运行 spaCy
的 named entity recognizer
,并选择所有非数值型的命名实体作为候选。
Noun Phrases
:与 Named Entities
类似,我们在 50%
的时间内采样名词短语。名词短语是通过 spaCy’s constituency parser
抽取的。
Geometric Spans
:我们从几何分布中随机采样 span
,如我们的 SpanBERT
所示。
Whole Words, Named Entities, Noun Phrases, Geometric Spans
都是span-based
掩码策略。
下表显示了不同的预训练掩码方案在不同任务验证集上的效果。所有的模型都是在验证集上评估的,并且是基于默认的 BERT
设置(即带 NSP
的 bi-sequence training
),其结果不能直接与 main evaluation
相比较。可以看到:
除了共指消解之外,masking random span
比其他策略更好。
尽管 linguistic masking
方案(命名实体和名词短语)通常与 random span
的竞争力相当,但它们的性能并不是一致 consistent
的。例如,在 NewsQA
上,masking noun phrase
实现了与 random span
相同的效果,但在 TriviaQA
上表现不佳(-1.1% F1
)。
在共指消解方面,masking random subword token
比任何形式的 span masking
都要好。然而,我们将在下面的实验中看到,将 random span masking
与 span boundary objective
相结合可以大大改善这一结果。
总体而言,这些掩码方案的差距不大。
辅助目标:如前所述,与 single-sequence training
相比,带 NSP
目标的 bi-sequence training
会损害下游任务的性能。 我们测试了这一点对于用 span masking
预训练的模型是否成立,同时也评估了用 SBO
目标替代 NSP
目标的效果。
下表证实了 single-sequence training
通常会提高性能。加入 SBO
可以进一步提高性能,与 span masking alone
相比,共指消解有很大的提高( +2.7% F1
)。不像 NSP
目标,SBO
似乎没有任何不利影响。
SBO
对模型性能提升的幅度不大,同时Geometric Spans
对模型性能提升的幅度也不大,但是SpanBERT
整体相对于Google BERT
的性能提升较大。这意味着数据预处理和优化过程(如,动态掩码,废除短序列策略)的影响也较大。
全网络预训练 full network pre-training
已经导致了 language representation learning
的一系列突破。许多困难的 NLP
任务,包括那些训练数据有限的任务,都大大受益于这些预训练的模型。这些突破之中最引人注目的标志之一是机器在 RACE test
上(为中国初中和高中英语考试设计的阅读理解任务)的性能演进:
modeling challenge
的论文报告了当时 SOTA
的机器准确率为 44.1%
。RoBERTa
)报告了他们的模型性能为 83.2%
。《A Lite BERT for Self-supervised Learning of Language Representations》
提出的 ALBERT
将其推高到 89.4%
,达到一个惊人的 45.3%
的改进,这主要归功于我们目前建立高性能预训练的 language representation
的能力。这些改进的证据显示,大型网络对于实现 SOTA
的性能至关重要。预训练大型模型并将其蒸馏成较小的模型,这种做法已成为实际应用的普遍做法。鉴于模型规模的重要性,我们问:拥有更好的 NLP
模型和拥有更大的模型一样容易吗?
回答这个问题的一个障碍是现有硬件的内存限制。鉴于目前 SOTA
的模型往往有数亿甚至数十亿的参数,当我们试图扩大我们的模型规模时,很容易就会遇到这些限制。在分布式训练中,训练速度也会受到很大影响,因为通信开销与模型中的参数规模成正比。
上述问题的现有解决方案包括模型并行 model parallelization
、以及巧妙的内存管理。这些解决方案解决了内存限制问题,但没有解决通信开销问题。在论文 《A Lite BERT for Self-supervised Learning of Language Representations》
中,作者通过设计 A Lite BERT: ALBERT
架构来解决上述所有问题,该架构的参数明显少于传统的 BERT
架构。
ALBERT
采用了两种参数缩减 parameter reduction
技术,解除了 scale
预训练模型的主要障碍:
embedding parameterization
。通过将大型词表的 embedding matrix
分解成两个小矩阵,论文将隐层的维度与 vocabulary embedding
的维度分离。这种分离使得在不显著增加 vocabulary embedding
的参数规模的情况下,更容易增长隐层的维度。cross-layer parameter sharing
。这种技术可以防止参数随着网络的深度而增长。这两种技术都大大减少了 BERT
的参数数量而不严重损害性能,从而提高了参数效率。配置类似于 BERT-large
的 ALBERT
的参数数量减少了 18
倍,训练速度可以提高约 1.7
倍。参数缩减技术也作为一种正则化的形式,稳定了训练并有助于泛化。
为了进一步提高 ALBERT
的性能,作者引入了一个自监督的损失用于 sentence-order prediction: SOP
。SOP
主要关注句子间的连贯性,旨在解决 original BERT
中提出的 next sentence prediction: NSP
损失的无效性。
由于这些设计决策,论文能够扩展到更大的 ALBERT
配置,这些配置的参数仍然比 BERT-large
更少,但是性能更好。论文在著名的 GLUE
、SQuAD
和 RACE
等自然语言理解 benchmark
上建立了新的 SOTA
结果。具体而言, ALBERT
将 RACE
的准确率提高到89.4%
、将 GLUE benchmark
提高到 89.4%
、将 SQuAD 2.0
的 F1
得分提高到 92.2
。
虽然准确率更高,但是训练时间要长三倍。
相关工作:
为自然语言 scale up representation learning
:学习自然语言的 representation
已被证明对广泛的 NLP
任务有用,并被广泛采纳。过去两年中最重要的变化之一是,从预训练 word embedding
(无论是标准的、还是上下文 contextualized
的),都转变为全网络预训练 full-network pre-training
,然后再紧跟着进行 task-specific
的微调。在这个工作方向,通常显示较大的模型规模可以提高性能。例如,BERT
原始论文表明:在三个自然语言理解任务中,使用更大的隐层维度、更多的隐层和更多的注意力头总是能带来更好的性能。然而,他们止步于 1024
的隐层维度,可能是因为模型规模和计算成本的问题。
即,
BERT_LARGE
的性能比BERT_BASE
的性能更好。
由于计算上的限制,特别是 GPU/TPU
内存的限制,很难对大型模型进行实验。鉴于目前 SOTA
的模型往往有数亿甚至数十亿的参数,我们很容易遇到内存限制。为了解决这个问题:
《Training deep nets with sublinear memory cost》
提出了一种叫做 gradient checkpointing
的方法,以额外的前向传播为代价,将内存需求降低到亚线性 sublinear
。《The reversible residual network: Backpropagation without storing activations》
提出了一种从 next layer
重构每一层的 activation
的方法,这样就不需要存储 intermediate activation
。《Exploring the limits of transfer learning with a unified text-to-text transformer》
提出使用模型并行来训练一个巨型模型。相比之下,我们的参数缩减技术减少了内存消耗,提高了训练速度。
跨层参数共享:跨层共享参数的思想之前已经用 Transformer
架构进行了探索,但这之前的工作主要是针对标准的 encoder-decoder
任务的训练,而不是 pretraining/finetuning setting
。
与我们的观察不同,《Universal transformers》
表明,具有跨层参数共享的网络(Universal Transformer: UT
)在语言建模任务和主谓一致 subject-verb agreement
任务上得到了比标准 transformer
更好的性能。
ALBERT
的论文实验表明:跨层参数共享会损害模型性能。此外,
UT
是encoder-decoder
架构,它分别在encoder
和decoder
上进行参数共享。而ALBERT
只有encoder
,因此只有encoder
的参数共享。
最近,《Deep equilibrium models》
针对 transformer
网络提出了 Deep Equilibrium Model: DQE
,并表明 DQE
可以达到一个平衡点,即某一层的 input embedding
和 output embedding
保持一致(即,到达不动点)。
我们的观察表明,我们的 embedding
是振荡的,而不是收敛的。
《Modeling recurrence for transformer》
将参数共享的 transformer
与标准的 transformer
相结合,这进一步增加了标准 transformer
的参数数量。
Sentence Ordering Objectives
:ALBERT
使用了一个预训练损失,该损失基于预测两个连续的文本片段 text segment
的顺序。一些研究者已经尝试了与篇章连贯性 discourse coherence
类似的预训练目标。篇章中的连贯性 coherence
和凝聚力 cohesion
已被广泛研究,许多现象已被确定为连接相邻的文本片段。在实践中发现的大多数有效目标都很简单。
Skipthought
和 FastSent
的 sentence embedding
是通过使用一个句子的编码来预测相邻句子中的单词来学习的。
sentence embedding learning
的其他目标包括:预测未来的句子(而不是仅仅预测邻居),以及预测显式的篇章标记 discourse marker
。
我们的损失与 《Discourse-based objectives for fast unsupervised sentence representation learning》
的 sentence ordering objective
最为相似。该方法学习 sentence embedding
从而确定两个连续句子的顺序。然而,与上述大多数工作不同的是,我们的损失是在文本片段上而不是句子上定义的。
BERT
使用的损失是基于 next sentence prediction
。我们在实验中与这种损失进行了比较,发现 sentence ordering
是一项更具挑战性的预训练任务,对某些下游任务更有用。
与我们的工作同时,《StructBERT: Incorporating language structures into pre-training for deep language understanding》
也试图预测两个连续的文本片段的顺序,但他们把它与原来的 next sentence prediction
结合起来从而得到一个三分类任务,而不是二分类任务(比较两个连续的文本片段的顺序)。
ALBERT
架构的 backbone
与 BERT
类似,它使用了一个具有 GELU
非线性激活函数的 transformer encoder
。我们遵从 BERT
的惯例,将 vocabulary embedding size
记做 encoder layer
数量记做 hidden size
记做 feed-forward/filter size
设定为
与 BERT
的设计选择相比,ALBERT
有三个主要贡献:因子分解的 embedding
参数化 factorized embedding parameterization
、跨层参数共享cross-layer parameter sharing
、句子间的一致性损失 Inter-sentence coherence loss
。
Factorized embedding parameterization
:在 BERT
,以及 XLNet
和 RoBERTa
等后续建模改进中,WordPiece embedding size
WordPiece embedding
是为了学习 context-independent representation
,而 hidden-layer embedding
则是为了学习 context-dependent representation
。正如关于上下文长度的实验所示(见 RoBERTa
原始论文),BERT-like representation
的力量来自于上下文的使用,从而提供用于学习这种 context-dependent representation
的信号。因此,将 WordPiece embedding size
hidden layer size
embedding matrix
的大小,其中 embedding matrix
的大小为 因此,对于 ALBERT
,我们使用 embedding
参数的因子分解,将它们分解成两个较小的矩阵。我们不是直接将 one-hot
向量投影到维度为 embedding
空间,然后再投影到隐空间。通过使用这种分解,我们将 embedding
参数的规模从
我们选择对所有的 word piece
使用相同的 whole-word
相比, word piece
在文档中的分布更加均匀。在 whole-word embedding
中,对不同的词有不同的 embedding size
是很重要的。
Cross-layer parameter sharing
:跨层参数共享是提高参数效率的另一种方式。有多种共享参数的方式,例如,仅共享跨层的 feed-forward network: FFN
参数、或者仅共享注意力参数。ALBERT
的默认决定是跨层共享所有参数。除非另有说明,我们所有的实验都使用这个默认决定。我们在实验中把这个设计决定与其他共享参数策略进行了比较。
虽然参数共享降低了参数规模,但是并没有降低计算量。
Universal Transformer: UT
和 Deep Equilibrium Models: DQE
对 Transformer
网络也进行了类似的探索。
《Universal Transformer》
表明:UT
优于普通的 Transformer
。《Deep equilibrium models》
表明,他们的 DQE
达到了一个平衡点,对于这个平衡点,某一层的 input embedding
和 output embedding
保持不变。我们对 L2
距离和余弦相似度的测量表明,我们的 embedding
是振荡的而不是收敛的。下图显示了每一层的 input embedding
和 output embedding
的 L2
距离和余弦相似度,使用 BERT-large
和 ALBERT-large
配置(如下表所示)。我们观察到:ALBERT
的层与层之间的转移 transition
比 BERT
的平滑得多。这些结果表明,权重共享对稳定网络参数有一定的影响。
尽管与 BERT
相比,两个指标(即, L2
距离和余弦相似度)都有下降,但即使在 24
层之后,它们也没有收敛到 0
。这表明:ALBERT
参数的解空间与 DQE
所发现的解空间非常不同。
Inter-sentence coherence loss
:除了 masked language modeling: MLM
损失,BERT
还使用了一个额外的损失,称为 next-sentence prediction: NSP
。NSP
是一种二元分类损失,用于预测两个 segment
是否在原始文本中连续出现,具体如下:通过从训练语料库中抽取连续的 segment
来创建正样本,通过将不同文档中的 segment
配对来创建负样本,正样本和负样本是以相同的概率进行采样。NSP
的目的是为了提高下游任务(如自然语言推理)的性能,这些任务需要推理 sentence pair
之间的关系。然而,随后的研究(XLNet
、RoBERTa
)发现 NSP
的影响不可靠,并决定取消 NSP
。
我们猜想,NSP
的无效性背后的主要原因是:与 MLM
相比,NSP
任务缺乏难度。正如该任务的表述,NSP
将话题预测 topic prediction
和连贯性预测 coherence prediction
混合在一个任务中。 然而,与连贯性预测相比,话题预测更容易学习,而且也与MLM
损失所学到的内容有很多重叠。
SpanBERT
认为NSP
的无效性背后的主要原因是:
- 在双序列上下文中,模型无法从较长的
full-length
上下文中获益。- 在双序列上下文中,以另一个文档中的、通常不相关的上下文为条件,会给
MLM
增加噪音。
我们坚持认为句子间建模 inter-sentence modeling
是语言理解的一个重要方面,但我们提出了一个主要基于连贯性的损失。也就是说,对于 ALBERT
,我们使用了一个 sentence-order prediction: SOP
损失,它避免了主题预测,而是专注于建模句子间的连贯性。SOP
损失使用与 BERT
相同的技术(来自同一文件的两个连续 segment
)作为样本,并使用相同的两个连续 segment
但是调换顺序之后作为负样本。这就迫使模型学习关于篇章级 discourse-level
连贯性的更精细的区分。
正如我们在实验部分所显示的,事实证明:
NSP
根本不能解决 SOP
的任务(也就是说,它最终学习了更容易的话题预测信号,并在SOP
任务中表现为随机水平)。SOP
可以在一定程度上解决 NSP
的任务,大概是基于分析 misaligned coherence cue
。因此,ALBERT
模型为 multi-sentence encoding
任务一致性地改善了的下游任务表现。
我们在下表中列出了 BERT
模型和 ALBERT
模型在可比的超参数设置下的差异。由于上面讨论的设计选择,ALBERT
模型与相应的BERT
模型相比,其参数规模要小得多。
例如:
与 BERT-large
相比,ALBERT-large
的参数少了大约 18
倍,即 18M
对 334M
。
参数少了
18
倍,但是模型的效果也有所降低。
H=2048
的 ALBERT-xlarge
只有60M
的参数,H=4096
的 ALBERT-xxlarge
只有 235M
的参数(约为 BERT-large
参数规模的 70%
)。
请注意,对于 ALBERT-xxlarge
,我们主要报告 12
层网络的结果,因为 24
层网络(具有相同的配置)获得了类似的结果,但计算成本更高。
这种参数效率的提高是 ALBERT
的设计选择的最重要的优势。
为了使对比尽可能的有意义,我们遵从 BERT
的设置,使用 BOOKCORPUS
和 English Wikipedia
用于预训练 baseline
模型。这两个语料库包括大约 16GB
的未压缩文本。
我们将输入格式化为 segment
。我们总是将最大输入长度(即,拼接之后的序列的最大长度)限制为 512
个 token
,并以 10%
的概率随机生成短于 512
的输入序列。
与BERT
一样,我们使用大小为 30K
的词表 vocabulary
,使用 SentencePiece
进行 tokenization
(如同 XLNet
)。
我们使用 n-gram masking
为 MLM
目标生成 masked input
(如同 SpanBERT
),每个 n-gram masking
的长度 n-gram masking
的最大长度):
这个概率倾向于更短的
n-gram masking
。例如,当时, 的概率分别为: 0.341, 0.171, 0.114, 0.085, 0.068, 0.057, 0.049, 0.043, 0.038, 0.034
。
我们设定 n-gram masking
的最大长度为 3
,即 MLM
目标可以由最多 3
个完整的单词组成,如 "White House correspondents"
。
所有的模型更新都使用了 batch size = 4096
、以及学习率为 0.00176
的 LAMB
优化器。除非另有说明,我们对所有模型进行了125K
个 step
的训练。训练是在 Cloud TPU V3
上进行的。用于训练的 TPU
数量从 64
到 512
不等,取决于模型大小。
LAMB
优化器是针对大batch size
的训练。首先我们看下Adam
优化器:其中:
为动量, 为速度, 为梯度, 为梯度的逐元素平方, 为学习率, 为一个很小的正数用于防止除零的错误, 为超参数, 为待优化的参数。
AdamW
是为了适配weight decay
(权重衰减相当于参数的L2
正则化),在Adam
的基础上进行修改:其中:
为权重衰减系数,通常设置为 0.005/0.01
。
LAMB
在AdamW
的基础上继续修改:其中:
为一个映射函数,可以选择为 、或者 , 为预定义的超参数分别代表 的下界和上界。
除非另有说明,本节中描述的实验设置用于我们自己的所有版本的 BERT
以及 ALBERT
模型。
评估 benchmark
:
固有评估 Intrinsic Evaluation
:为了监控训练进度,我们使用前面相同的程序和配置,在 SQuAD
和 RACE
的验证集基础上创建了一个验证集。我们同时报告了 MLM
和句子分类任务的准确率。
注意,我们只用这个创建的验证集来检查模型是如何收敛的,它的使用方式不会影响任何下游评估的性能(例如,该验证集不是用于模型选择)。
下游评估 Downstream Evaluation
:遵从 XLNet
和 RoBERTa
,我们在三个流行的 benchmark
上评估我们的模型:General Language Understanding Evaluation: GLUE
基准、两个版本的 Stanford Question Answering Dataset: SQuAD
、以及 ReAding Comprehension from Examinations: RACE
数据集。与 RoBERTa
一样,我们对验证集进行了早停 early stopping
,在此基础上我们报告了所有的比较,除了基于任务排行榜的最终比较(在最终比较,我们也报告了测试集的结果)。对于在验证集上有较大方差的 GLUE
数据集,我们报告了 5
次运行的中位数。
GLUE
:GLUE
由 9
个任务组成,即 :
xxxxxxxxxx
Corpus of Linguistic Acceptability: CoLA
Stanford Sentiment Treebank: SST
Microsoft Research Paraphrase Corpus: MRPC
Semantic Textual Similarity Benchmark: STS
Quora Question Pairs: QQP
Multi-Genre NLI: MNLI
Question NLI: QNLI
Recognizing Textual Entailment: RTE
Winograd NLI: WNLI
GLUE
聚焦于评估模型的自然语言理解能力。当报告 MNLI
结果时,我们只报告 "match"
条件(即,MNLI-m
)。我们遵循先前工作中的微调程序( BERT
、RoBERTa
、XLNet
),并报告 GLUE sbumission
的 held-out test set
性能。对于测试集的 submission
,我们遵从 RoBERTa
和 XLNet
的描述,对 WNLI
和 QLNLI
进行了 task-specific
修改。
SQuAD
:SQuAD
是一个从 Wikipedia
建立的提取式问答数据集 extractive question answering dataset
。答案是来自上下文段落的 segment
,任务是预测 answer span
。我们在两个版本的 SQuAD
上评估我们的模型:v1.1
和 v2.0
。SQuAD v1.1
有100K
个人类标注的 question/answer pair
,SQuAD v2.0
还额外引入 了 50K
个无法回答的问题。
对于 SQuAD v1.1
,我们使用与 BERT
相同的训练程序;而对于 SQuAD v2.0
,模型是用 span extraction loss
和额外的 predicting answerability
分类器联合训练的(RoBERTa
、XLNet
)。我们同时报告了验证集和测试集的性能。
RACE
:RACE
是一个大规模的多选阅读理解数据集,收集自中国的英语考试,有近 100K
个问题。RACE
中的每个实例有 4
个候选答案。遵从之前的工作(RoBERTa
、XLNet
),我们使用段落、问题、以及每个候选答案的拼接作为模型的输入。然后,我们使用来自 "[CLS]" token
的 representation
来预测每个答案的概率。
该数据集包括两个 domain
:初中和高中。我们同时在这两个 domain
上训练我们的模型,并同时报告验证集和测试集的准确率。
下游任务的超参数配置如下表所示。
我们现在准备量化 ALBERT
模型架构设计选择的影响,特别是围绕参数效率 parameter efficiency
的选择。如下表所示,参数效率的提高展示了 ALBERT
设计选择的最重要的优势:ALBERT-xxlarge
只用了 BERT-large
的 70%
左右的参数,就比 BERT-large
取得了显著的改进,这可以通过几个有代表性的下游任务的验证集分数的差异来衡量:SQuAD v1.1
(+1.9%
)、SQuAD v2.0
(+3.1%
)、MNLI
(+1.4%
)、SST-2
(+2.2%
)、以及 RACE
(+8.4%
) 。
另一个有趣的观察是在相同的训练配置(相同数量的 TPU
)下,训练期间的数据吞吐速度。由于较少的通信和较少的计算,ALBERT
模型与它们相应的 BERT
模型相比,具有更高的数据吞吐量。如果我们使用 BERT-large
作为 baseline
,我们观察到 ALBERT-large
在训练期间大约快 1.7
倍,而 ALBERT-xxlarge
由于结构较大,大约慢 3
倍。
这种比较的意义不大:
- 虽然
ALBERT-xxlarge
的平均准确率更高(+3.5%
),但是它要慢3
倍。- 虽然
ALBERT-large
更快(快1.7
倍),但是它的平均准确率更低(-2.8%
)。ALBERT-xlarge
的效果与BERT
几乎差不多(略高+0.3%
),但是要慢1.5
倍。这表明
ALBERT
虽然降低了参数数量,但是没有降低总的计算量。但是,接下来作者比较了在相同训练时间情况下,ALBERT-xxlarge
仍然要超过BERT-large
,这才证明了ALBERT
的价值。
接下来,我们进行消融实验,从而量化 ALBERT
的每个设计选择的单独贡献。
下表显示了使用 ALBERT-base
配置(见 Table 1
)时改变 vocabulary embedding
维度
not-shared
条件下( BERT-style
),较大的 embedding
维度会带来更好的性能,但幅度不大。all-shared
条件下( ALBERT-style
,即 ALBERT base
对应的结果),128
维的 embedding
似乎是最好的。这样看起来,
embedding size
超过了64
之后,似乎模型性能差距不大?这是否说明此时模型容量已经足够强大,而瓶颈在于训练数据?可以通过在embedding size
小于64
上进行验证,如embedding size
为{1, 4, 8, 16, 32}
。
基于这些结果,我们在未来的所有设置中使用 embedding
维度 scaling
的必要步骤。
下表还说明:相同
embedding size
下,ALBERT
比BERT
的效果更差。
下表 列出了各种跨层参数共享策略的实验,其中使用 ALBERT-base
配置(见 Table 1
)和两种 embedding
维度( all-shared
策略(ALBERT-style
)、not-shared
策略(BERT-style
)、以及中间策略(只有注意力参数被共享、或只有 FFN
参数被共享)。可以看到:
相比较于 not-shared
,all-shared
在两种 embedding
维度下都会损害性能,但与 -2.5%
)相比,-1.5%
)的情况稍微好一点。
这和
《Universal Transformer》
的实验结论相反。
此外,相比较于 not-shared
,大部分的性能下降似乎来自于共享 FFN
参数,而共享注意力参数在 +0.1%
)、在-0.7%
)。
还有其他跨层共享参数的策略。例如,我们可以把 all-shared
作为我们的默认选择。
我们使用 ALBERT-base
配置,对额外的句间损失 inter-sentence loss
进行了三个实验:none
( XLNet-style
和 RoBERTa-style
)、NSP
( BERT-style
)、以及 SOP
( ALBERT-style
)。结果如下表所示,包括固有任务(MLM
、NSP
、以及 SOP
任务的准确率)和下游任务。可以看到:
固有任务的结果显示:
NSP loss
没有给 SOP
任务带来判别能力(52.0%
的准确率,类似于 None
条件下的随机猜测性能)。这使我们可以得出结论:NSP
最终仅建模话题漂移 topic shift
。SOP loss
确实能比较好地解决 NSP
任务(准确率 78.9%
),解决 SOP
任务甚至更好(准确率 86.5%
)。这三种方式对
MLM
任务都没有帮助。
更重要的是,相比 None
,SOP loss
似乎一致地改善下游 multi-sentence encoding
任务的表现(SQuAD1.1
约提升 +1%
、SQuAD 2.0
约提升 +2%
、RACE
约提升 +1.7%
),平均得分提高了约 +1%
。
Table 2
中的加速结果表明,与 ALBERT-xxlarge
相比,BERT-large
的数据吞吐量高出约 3.17
倍。由于更长的训练时间通常会导致更好的性能,我们进行了一个比较,其中,我们不控制数据吞吐量(即,训练步数),而是控制实际训练时间(即,让不同的模型训练相同的小时数)。在下表中,我们比较了一个 BERT-large
模型在 400K
个训练 step
(经过 34
小时的训练)后的性能,大致相当于训练一个 ALBERT-xxlarge
模型所需的125K
个训练 step
(32
小时的训练)的时间。
在训练了大致相同的时间后,ALBERT-xxlarge
显著优于 BERT-large
:平均值提高了 +1.5%
,在 RACE
上的性能提升高达+5.2%
。
到目前为止所做的实验只使用了 Wikipedia
和 BOOKCORPUS
数据集,就如 BERT
所使用的。在本节中,我们报告了 XLNet
和RoBERTa
所使用的额外数据的影响。下图 (a)
显示了在没有额外数据、以及有额外数据两种条件下的验证集 MLM
准确率,可以看到有额外数据条件下有显著的提升。从下表中我们还观察到,除了 SQuAD benchmark
(Wikipedia-based
,因此受到 out-of-domain
训练数据的负面影响)之外,下游任务的性能也有所提高。
BERT-large
模型训练了400K
步,因此ALBERT-base
也用Wikipedia + BOOKCORPUS
训练了400K
步。然后在此之后使用了额外的数据。因此下图(a)
中,前面400K
步,二者的曲线是重合的。
我们还注意到,即使在训练了 1M
步之后,我们最大的模型仍然没有过拟合训练数据。因此,我们决定移除 dropout
从而进一步提高我们的模型容量。如下图 (b)
所示,移除 dropout
显著提高了 MLM
的准确率。对 ALBERT-xxlarge
在大约 1M
步训练的中间评估(如下表所示)也证实:移除 dropout
有助于下游任务。有经验(《Inception-v4, inception-resnet and the impact of residual connections on learning》
)和理论(《Understanding the disharmony between dropout and batch normalization by variance shift》
)证据表明:卷积神经网络中的 batch normalization
和 dropout
组合可能会产生有害的结果。据我们所知,我们是第一个表明 dropout
会损害大型 Transformer-based
模型的性能。然而,ALBERT
的底层网络结构是 transformer
的一个特例,需要进一步的实验来观察这种现象是否出现在其他 transformer-based
的架构中。
注意,下图
(b)
是从1M
步之后再移除dropout
的,而不是一开始就移除dropout
。所以前面1M
步,二者的曲线是重合的。另外,论文的结论有点问题。这里仅仅说明,前
2/3
的时间使用dropout
然后剩余时间移除dropout
,要比全部时间使用dropout
的效果更好。而无法说明移除dropout
比带dropout
更好。另外,论文的
Table 8
仅仅说是在大约1M
步时的评估结果,但是没有说具体在什么时候。是110
万步?还是120
万步?
我们在本节报告的结果利用了 BERT
使用的训练数据,以及 RoBERTa
和 XLNet
使用的额外数据。我们报告了两种 setting
下的微调的 SOTA
结果:单模型single-model
和集成 ensemble
。在这两种 setting
中,我们只做单任务微调。遵从 RoBERTa
的做法,在验证集上,我们报告了五次运行的中位数。
单模型的 ALBERT
配置包含了所讨论的最佳性能的setting
:ALBERT-xxlarge
配置(参考 Table 1
),组合 MLM loss
和SOP loss
,以及 no dropout
。
ensemble
的 ALBERT
是从多个 checkpoint
来获取的,这些 checkpoint
根据验证集的性能来选择,被选中的 checkpoint
的数量从 6
到 19
不等。
对于GLUE
(Table 9
)和 RACE
(Table 10
),我们对集成模型 ensemble models
的预测值取平均,其中候选模型是微调了不同的预训练模型(这些预训练模型使用 12
架构层和 24
层架构,并预训练了不同的步数)。
对于 SQuAD
(Table 10
),我们对那些有多个概率的 span
的预测分数进行了平均。我们还对 "unanswerable"
的决定的分数进行了平均。
单模型结果和集成模型结果都表明:
ALBERT
在所有三个 benchmark
上都大大改善了 SOTA
的水平,实现了89.4
的 GLUE
得分、92.2
的SQuAD 2.0
测试F1
得分、以及 89.4
的 RACE
测试准确率。
这些都是集成模型的效果。
RACE
上似乎是一个特别强大的改进:
我们的集成模型比 BERT
的绝对分值跃升 +17.4%
、比 XLNet
提升 +7.6%
、比 RoBERTa
提升 +6.2%
、比 DCMI+
提升 5.3%
。
这里只有
DCMI+
是集成模型的效果,其它的BERT/XLNET/RoBERTa
都是单模型的效果(不公平的比较)。
我们的单模型达到了 86.5%
的测试准确率,比 SOTA
的集成模型仍好 2.4%
。
在本节中,我们检查了网络深度(层数)和宽度(隐层维度)对 ALBERT
的性能的影响。
下表显示了使用不同层数的 ALBERT-large
配置(见 Table 1
)的性能。具有 3
层或更多层的网络是通过使用之前深度的网络参数进行微调来训练的(例如,12
层的网络参数是从 6
层网络参数的 checkpoint
进行微调的)。《Efficient training of bert by progressively stacking》
也使用了类似的技术。
>=3
层的网络都不是从头开始训练的,而是利用更浅网络的参数来微调的。
对于 ALBERT-large
,可以看到:
对比 3
网络与 1
层网络,虽然它们的参数数量相同,但性能显著提高。
所有不同层的网络,它们的参数数量都相同,因为是参数共享。
然而,当继续增加层数时,会出现收益递减:12
层网络的结果与24
层网络的结果相对接近,而48
层网络的性能似乎有所下降。
网络宽度也出现了类似的现象,如下表所示(针对不同宽度的 ALBERT-large
配置)。可以看到:
6144
时,模型性能似乎明显下降。我们注意到,这些模型似乎都没有过拟合训练数据,而且与表现最好的 ALBERT
配置相比,它们的训练损失和验证损失都比较高。
是否更宽的模型需要更深?在前面我们表明:对于隐层维度 ALBERT-large
,12
层和 24
层模型 之间的差异很小。对于更宽的 ALBERT
,如 ALBERT-xxlarge
(
答案如下表所示。12
层和 24
层的 ALBERT-xxlarge
配置在下游任务准确率方面的差异可以忽略不计,Avg
得分相同。我们的结论是:当共享所有跨层参数(ALBERT-style
)时,没有必要建立比 12
层更深的模型。
语言模型的预训练在各种自然语言处理任务中大大推进了 SOTA
。预训练的语言模型通过使用大量的文本数据根据单词的上下文来预测该单词来学习 contextualized text representation
,并且可以进行微调从而适应下游的任务。
不同的预测任务和训练目标已经被用于预训练不同类型的语言模型,如下表所示:
ELMo
学习两个单向的语言模型:一个正向语言模型从左到右编码文本,一个反向的语言模型从右到左编码文本。GPT
使用一个从左到右的 transformer
来 word-by-word
地预测文本序列。BERT
采用了一个双向 Transformer encoder
来融合左右两侧的上下文从而预测 masked word
。虽然 BERT
极大地提高了各种自然语言理解 natural language understanding: NLU
任务的性能,但其双向性 bidirectionality
的特点使其难以应用于自然语言生成 natural language generation: NLG
任务。在论文 《Unified Language Model Pre-training for Natural Language Understanding and Generation》
中,作者提出了一个新的 UNIfied pre-trained Language Model: UNILM
,可以应用于自然语言理解任务和自然语言生成任务。UNILM
是一个多层的 Transformer
网络,在大量的文本上联合预训练,为三种类型的无监督语言建模目标进行了优化,如下表所示。具体而言,论文设计了一组完形填空任务 cloze task
,其中根据上下文预测一个 masked word
。这些完形填空任务的不同之处在于如何定义上下文:
left-to-right
的单向语言模型,要预测的masked word
的上下文包括其左边的所有单词。right-to-left
的单向语言模型,要预测的masked word
的上下文包括其右边的所有单词。masked word
的上下文由左右两侧的所有单词组成。target
序列)中要预测的单词的上下文由第一个序列(即,source
序列)中的所有单词、以及 target
序列中被预测单词左边的所有单词组成。这些不同的语言模型是通过
self-attention mask
来实现的。
与 BERT
类似,预训练的 UNILM
可以进行微调(必要时增加 task-specific layer
)以适配各种下游任务。但与主要用于自然语言理解任务的 BERT
不同,UNILM
可以通过使用不同的自注意力掩码 self-attention mask
进行配置,为不同类型的语言模型聚合上下文,因此可以同时用于自然语言理解任务和自然语言生成任务。
UNILM
有三个主要优势:
Transformer
语言模型,它对不同类型语言模型采用共享的参数和架构,缓解了单独训练和 host
多个语言模型的需要。text representation
更加通用,因为它们是针对不同的语言建模目标共同优化的,其中上下文的利用方式不同从而缓解了对任何单个语言模型任务的过拟合。UNILM
可以作为 sequence-to-sequence
的语言模型来使用,使其成为自然语言生成任务的自然选择,如抽象式摘要 abstractive summarization
和问题生成 question generation
。实验结果表明,UNILM
作为一个双向编码器来使用,在 GLUE benchmark
和两个抽取式问答 extractive question answering
任务(即 SQuAD 2.0
和 CoQA
)上与 BERT
相比更有优势。此外,论文还证明了 UNILM
在五个自然语言生成数据集上的有效性,其中UNILM
作为一个 sequence-to-sequence
的语言模型来使用, 在 CNN/DailyMail
和 Gigaword
的抽象式摘要、SQuAD
问题生成、CoQA
生成式问答 enerative question answering
、以及 DSTC7
对话式响应生成dialog response generation
上创造了新的 SOTA
。
给定一个输入序列 UNILM
为每个 token
获得了一个 contextualized vector representation
。如下图所示, 预训练通过几个无监督的语言建模目标来优化共享的 Transformer
网络,即单向语言模型、双向语言模型、以及 sequence-to-sequence
语言模型。为了控制对将要预测的 word token
的上下文的访问,我们采用了不同的自注意力掩码。换句话说,我们使用掩码来控制 token
在计算其 contextualized representation
时应该注意多少上下文。一旦 UNILM
得到预训练,我们就可以利用下游任务的 task-specific
数据对其进行微调。
Input Representation
:输入
text segment
。sequence-to-sequence
语言模型而言, segment pair
。我们总是在输入的开头添加一个特殊的 start-of-sequence token
([SOS]
),并在每个segment
的结尾添加一个特殊的end-of-sequence token
([EOS]
)。[EOS]
不仅标志着自然语言理解任务中的句子边界,而且在自然语言生成任务中还用于模型学习何时终止解码过程。
注意,这里的
[SOS]
类似于BERT
中的[CLS]
。
input representation
遵从 BERT
:
WordPiece
将文本 tokenize
为子词单元 subword unit
。input token
,它的 vector representation
是由相应的 token embedding
、position embedding
、以及 segment embedding
相加而计算出来的。由于 UNILM
是使用多个语言模型任务进行训练的,segment embedding
也起到了语言模型 id
的作用,因为我们为不同的语言模型目标使用不同的 segment embedding
。
对于单向语言模型,只有一个
segment
,因此segment id
都是1
;对于双向语言模型和sequence-to-sequence
语言模型,有两个segment
,因此segment id
是1
和2
。因此,根据segment id
是几个,可以粗略地(而无法精确地)区分不同的语言模型。
Backbone Network: Multi-Layer Transformer
:input
向量 token embedding
维度(也是 position embedding
、segment embedding
的维度)。然后 Transformer
被编码到不同 level
的 contextual representation
:
其中 Transformer
的输出。
在每个 Transformer Block
中,多个 self-attention head
被用于聚合前一层的输出向量。对于第 Transformer
层,单个 self-attention head
其中:
query
空间、key
空间、value
空间。self-attention head
的维度。mask matrix
(也叫做 self-attention mask matrix
),用于决定一对 token
之间是否可以相互关注 attend
。我们使用不同的 mask matrix
token
可以关注的上下文从而计算该 token
的 contextualized representation
,如 Figure 1
所示。以双向的语言模型为例: mask matrix
的元素都是 0
,表明所有的token
都可以相互访问。
预训练目标:我们使用四个完形填空任务来预训练 UNILM
,这些完形填空任务为了不同语言建模目标而设计的。在完形填空任务中,我们在输入中随机选择一些 WordPiece token
,并用 special token
(即,[MASK]
)替换它们。然后,我们将 Transformer
网络计算出的、这些 special token
对应的输出向量馈入一个 softmax
分类器,以预测 masked token
。UNILM
的参数被学习为:使 predicted token
和 original token
计算的交叉熵损失最小。值得注意的是,使用完形填空任务使得所有的语言模型都可以使用相同的训练程序,单向和双向的都一样。
单向语言模型:我们同时使用 left-to-right
语言模型目标、以及 right-to-left
语言模型目标。
以 left-to-right
语言模型为例。每个 token
的 representation
只编码左侧的 context token
和它自身。例如,为了预测 " masked token
,只能使用token
[MASK]
)。这是通过使用三角矩阵的 self-attention mask
self-attention mask
的上三角部分被设置为 Figure 1
所示。
类似地, right-to-left
语言模型以 token
的右侧上下文为条件来预测该 token
。
双向语言模型:遵从 BERT
,双向语言模型允许所有 token
在预测中相互关注。双向语言模型对来自两个方向的上下文信息进行编码,并能产生比单向语言模型更好的 contextual representation
。在双向语言模型中,self-attention mask
token
。
Sequence-to-Sequence
语言模型: 如图 Figure 1
所示,对于预测来说:
segment
(即,source segment
)的 token
可以从 source segment
内的两个方向相互关注。segment
(即,target segment
)的 token
只能关注 target segment
内的左侧上下文及其自身,以及 source segment
内的所有 token
。例如,给定 source segment
target segment
input
"token
(即,"token
(即,"
Figure 1
显示了用于Sequence-to-Sequence
语言模型目标的self-attention mask
token
都能访问到第一个 segment
。source segment
关注到 target segment
。target segment
中的 token
关注到它们未来的位置(即,右侧)。在训练过程中,我们同时在两个 segment
中随机选择 token
,并用 special token
(即,[MASK]
)来替换它们。该模型被学习从而恢复 masked token
。由于 source text
和 target text
的 pair
对在训练中被打包成一个连续的输入文本序列,我们隐式地鼓励模型学习这两个 segment
之间的关系。为了更好地预测 target segment
中的 token
,UNILM
学习有效地编码 source segment
。因此,针对Sequence-to-Sequence
语言模型设计的完形填空任务(也被称为 encoder-decoder
模型),同时预训练了一个双向编码器和一个单向解码器。预训练的模型作为encoder-decoder
模型,可以很容易地适用于广泛的条件文本生成 conditional text generation
任务,如抽象式摘要 abstractive summarization
。
这里的 “
Sequence-to-Sequence
语言模型”其实同时混合了双向语言模型(当[MASK]
位于source segment
)和Sequence-to-Sequence
模型(当[MASK]
位于target segment
)。此外,这里的
decoder
仅解码[MASK]
对应的token
,因此是一个incomplete
的解码过程。此外,这里的
encoder-decoder
架构与传统的架构不同,这里decoder
可以直接访问encoder
的所有位置。而传统的架构中,decoder
仅能访问单个encoder representation
,这个encoder representation
聚合了所有encoder input
信息。
Next Sentence Prediction
:遵从 BERT
,对于双向语言模型,在预训练中我们也包括 next sentence prediction
任务。
预训练配置:整体预训练目标是上述不同类型的语言模型的目标之和。具体而言,在一个 training batch
中,包含: 1/3
的双向语言模型目标、1/3
的Sequence-to-Sequence
语言模型目标、1/6
的 left-to-right
语言模型目标、1/6
的 right-to-left
语言模型目标。
UNILM
的模型结构遵循 BERT_LARGE
的结构,以便进行公平的比较。遵从 GPT
,UNILM
采用 gelu
激活函数。具体而言,我们使用一个 24
层的 Transformer
,隐层维度 1024
、注意力头 16
个,共包含大约 340M
的参数。softmax
分类器的权重矩阵与 token embedding
绑定(即,二者共享相同的参数矩阵)。
UNILM
由 BERT_LARGE
初始化,然后使用 English Wikipedia
和 BookCorpus
进行预训练,这两个数据集的处理方式与 BERT
相同。词表vocabulary
规模为 28996
。输入序列的最大长度为 512
。 token masking
的概率为 15%
。在 masked position
中,80%
的时间我们用 [MASK]
来替代被选中的 token
,10%
的时间用 random token
来替代,其余的 10%
时间保持 original token
。此外,80%
的时间我们每次随机掩码一个 token
,20%
的时间我们随机掩码一个 bigram
或一个 trigram
。
我们使用 Adam
优化器。学习率为 3e-5
,其中在最初的 40K
步中进行线性预热然后进行线性衰减。 dropout-rate = 0.1
,weight-decay = 0.01
,batch-size = 330
。预训练程序运行了大约 770K
步。使用 8
块 Nvidia Telsa V100 32GB GPU card
进行混合精度训练,每 10K
步需要约 7
小时。
用
BERT_LARGE
初始化之后还预训练了770K
步,那初始化的意义和影响是什么?通常,用预训练好的模型作为初始化之后,只需要训练少量的step
就能达到比较好的效果。从工程落地上来讲,用
BERT_LARGE
来初始化有利于更快地收敛从而降低训练成本;从实验上来讲,最好是从头开始训练从而进行公平地比较。
下游自然语言理解任务和自然语言生成任务的微调:
对于自然语言理解任务,我们将 UNILM
作为一个双向 Transformer encoder
来微调,就像 BERT
。
以文本分类任务为例。我们使用 [SOS]
的 encoding vector
作为 input representation
,记做 softmax
分类器(即 task-specific
输出层),其中类别概率计算为:softmax
分类器的参数,从而最大化 labeled training data
的似然 likelihood
。
对于自然语言生成任务,我们以 sequence-to-sequence
任务为例。微调过程类似于使用 self-attention mask
的预训练。令 source sequence
和 target sequence
。我们通过 special token
将它们打包在一起,形成输入 "target
序列中一定比例的 token
来进行微调,并学习恢复 masked word
。训练目标是在给定上下文的情况下,最大化 masked token
的似然 likelihood
。
值得注意的是,标识着 target
序列结束的 [EOS] token
在微调过程中也可能被掩码,因此当这种情况发生时,模型会学习何时发出 [EOS] token
从而终止 target
序列的生成过程。
UNILM
在自然语言生成任务上的微调与常规的sequence-to-sequence
模型不同。常规的sequence-to-sequence
模型会依次生成target sequence
(包括[EOS] token
)。而这里的UNILM
采用它预训练时的方式,仅掩码target sequence
并且仅仅预测masked token
(而不是序列生成)。常规的
sequence-to-sequence
更符合实际,因为在实际应用中,我们通常只有source sequence
而没有target sequence
。而UNILM
不仅需要知道source sequence
、还需要知道部分的target sequence
信息(从而预测被masked
的部分)。
GLUE benchmark
,以及抽取式问答 extractive question answering
)和自然语言生成任务(即抽象式摘要 abstractive summarization
、问题生成、生成式问答、以及对话响应生成 dialog response generation
)都进行了实验。自动文本摘要 automatic text summarization
能产生一个简明流畅的 summary
,传达 input
(如,一篇新闻文章)的关键信息。我们聚焦于抽象式摘要,这是一项生成任务,其中 summary
不必使用输入文本中的短语或句子。我们使用 CNN/DailyMail
数据集的非匿名版本、以及 Gigaword
来用于模型微调和评估。我们按照前面描述的程序将 UNILM
作为一个 sequence-to-sequence
模型进行微调,将文档(第一个 segment
)和 summary
(第二个 segment
)拼接起来作为输入,并根据预定义的最大序列长度进行截断。
我们在训练集上对我们的模型微调了 30
个 epoch
。我们复用预训练中的大多数超参数。掩码概率为 0.7
。我们还使用平滑率为 0.1
的标签平滑 label smoothing
。
CNN/DailyMail
,我们设置 batch size = 32
,最大序列长度为 768
。Gigaword
,我们设置 batch size = 64
,最大序列长度为 256
。在解码过程中,我们使用 beam size = 5
的 beam search
。对于 CNN/DailyMail
和 Gigaword
来说,input document
被截断为前 640
个 token
和后 192
个 token
。我们在 beam search
中删除了重复的 trigram
,并在验证集上调整了 maximum summary length
。
我们使用 F1
版本的 ROUGE
作为两个数据集的评估指标。在下表中,在 CNN/DailyMail
数据集上,我们将 UNILM
与 baseline
以及几个 SOTA
模型进行比较:
LEAD-3
是一个 baseline
模型,它抽取文档中的前三句话作为其摘要。PGNet
是一个基于 pointer-generator network
的 sequence-to-sequence
模型。S2S-ELMo
使用一个 sequence-to-sequence
模型,用预训练好的 ELMo representation
进行增强,被称为 SRC-ELMO+SHDEMB
。Bottom-Up
是一个 sequence-to-sequence
模型,用一个 bottom-up content selector
来选择突出的短语。我们还在下表中列出了数据集上最好的抽取式摘要结果。如下表所示,我们的模型优于以前所有的抽象式系统 abstractive system
,在数据集上创造了一个新的SOTA
的抽象式结果。在 ROUGE-L
中,我们的模型也比最好的抽取式模型高出 0.88
分。
在下表中,我们对模型在不同规模(10K
和 3.8M
)的 Gigaword
上进行了评估。
Transforme
和 OpenNMT
都实现了标准的 attentional sequence-to-sequence
模型。Re3Sum
检索摘要作为候选模板,然后使用一个扩展的 sequence-to-sequence
模型来生成摘要。MASS
是一个基于 Transformer
网络的预训练的 sequence-to-sequence
模型。实验结果表明:UNILM
取得了比以往工作更好的性能。此外,在低资源环境下(即只使用 10K
个样本作为训练数据),我们的模型在 ROUGE-L
中比 MASS
高出 7.08
分。
Question Answering: QA
任务是在给定一个段落的条件下回答一个问题。有两种 setting
:
extractive QA
,答案被假定为段落中的一个 text span
。generative QA
,答案需要即时生成。抽取式问答:这项任务可以被表述为自然语言理解任务,我们需要预测答案在段落中的开始位置和结束位置。我们对预训练的 UNILM
进行微调,将UNILM
作为双向编码器从而用于抽取式问答。我们在 Stanford Question Answering Dataset: SQuAD
的 2.0
版本、以及 Conversational Question Answering: CoQA
数据集上进行了实验。
在 SQuAD 2.0
上的结果如下表所示,我们比较了两个模型的精确匹配 Exact Match: EM
分和 F1
分。
RMR+ELMo
是一个基于 LSTM
的问答模型,用预训练好的 language representation
来增强。BERT_LARGE
是一个 cased
模型(即,字母保持大小写),在 SQuAD
训练数据上微调了 3
个 epoch
, batch size = 24
,最大序列长度为 384
。UNILM
以与 BERT_LARGE
相同的方式进行微调。我们看到 UNILM
的表现优于 BERT_LARGE
。
CoQA
是一个对话式问答 conversational question answering
数据集。与 SQuAD
相比,CoQA
有几个独有的特点:
CoQA
中的样本是对话式的,所以我们需要根据对话历史来回答 input question
。CoQA
中的答案可以是自由格式的文本,包括很大一部分是 "yes/no"
的答案。我们对用于 SQuAD
的模型做了如下修改:
首先,除了被问的问题,我们将 question-answer
的历史拼接到第一个 segment
,这样模型就可以捕获到对话信息。
其次,对于"yes/no"
问题,我们使用 [SOS] token
的 final hidden vector
来预测 input question
是否是一个"yes/no"
问题,以及答案为 "yes/no"
。
对于非"yes/no"
问题 ,我们选择一个 F1
分数最高的 passage subspan
用于训练。
CoQA
的实验结果如下表所示。我们比较了两个模型的 F1
分:
DrQA+ELMo
是一个基于 LSTM
的问答模型,用预训练好的 ELMo representation
来增强。BERT_LARGE
是一个 cased
模型(即,字母保持大小写),在 CoQA
训练数据上微调了 2
个 epoch
,batch size = 16
,最大序列长度为 512
。UNILM
以与 BERT_LARGE
相同的方式进行微调。我们看到 UNILM
的表现优于 BERT_LARGE
。
生成式问答:生成式问答为 input question
和段落生成自由形式的答案,这是一个自然语言生成任务。相比之下,抽取式问答只能预测 input passage
的 subspan
作为答案。在 CoQA
数据集上(如前所述),《CoQA: A conversational question answering challenge》
表明:普通的 sequence-to-sequence
模型的性能仍然远远低于抽取式方法。
我们为生成式问答来适配 UNILM
,从而将 UNILM
作为一个 sequence-to-sequence
模型。第一个 segment
(即 input sequence
)是对话历史、input question
、以及段落的拼接。第二个 segment
(即,output sequence
)是答案。我们在 CoQA
训练集上对预训练的 UNILM
微调了 10
个 epoch
。我们设置 batch size = 32
,掩码率为 0.5
,最大序列长度为 512
。我们还使用平滑率为 0.1
的标签平滑。其他超参数与预训练保持一致。
在解码过程中,我们使用 beam size = 3
的 beam search
,input question
和段落的最大长度为 470
。对于超过最大长度的段落,我们用滑动窗口的方法将段落分成若干块,并选择一个与question
具有最高 word overlap
的块。
我们将我们的方法与生成式问答模型 Seq2Seq
和 PGNet
进行了比较:
Seq2Seq baseline
是一个带有注意力机制的 sequence-to-sequence
模型。PGNet
模型用一个 copy
机制增强了 Seq2Seq
。如下表所示,我们的生成式问答模型在大大超过了以前的生成式方法,这极大地缩小了生成式方法和抽取式方法之间的差距。
我们对 answer-aware
的问题生成 question generation
任务进行了实验。给定一个 input passage
和一个 answer span
,我们的目标是生成一个针对答案的问题。SQuAD 1.1
数据集被用于评估。遵从 《Learning to ask: Neural question generation for reading comprehension》
,我们将原始训练集拆分为训练集和测试集,并保留原始验证集。我们还遵从 《Paragraph-level neural question generation with maxout pointer and gated self-attention networks》
中的数据拆分方式进行实验,即,使用反向的 dev-test
拆分。
问题生成任务被表述为一个 sequence-to-sequence
问题。第一个 segment
是 input passage
和答案的拼接,而第二个segment
是被生成的问题。
我们在训练集上对 UNILM
微调了 10
个 epoch
。我们设置 batch size = 32
,掩码率为 0.7
,学习率为 2e-5
。我们采用平滑率为 0.1
的标签平滑。其他超参数与预训练相同。
在解码过程中,我们将输入截断为 464
个 token
并选择包含答案的 passage
块。评估指标 BLEU-4, METEOR, ROUGE-L
的计算方法与 《Learning to ask: Neural question generation for reading comprehension》
中的脚本相同。
结果如下表所示。
CorefNQG
是基于一个带有注意力的 sequence-to-sequence
模型、以及一个特征丰富的编码器。MP-GSN
使用了一个带门控自注意力编码器的 attention-based sequence-to-sequence model
。SemQG
使用两个语义增强的奖励 semantics-enhanced reward
来正则化 generation
。UNILM
的性能优于以前的模型,并针对问题生成任务达到了新的 SOTA
。
生成的问题来改善 QA
:问题生成模型可以从文本语料库中自动收集大量的 question-passage-answer
的样本。我们表明,由问题生成模型产生的 augmented data
可以改善问答模型。
我们生成了 5M
个可回答的样本,并通过修改可回答的样本生成了 4M
万个不可回答的样本。我们在生成的数据上对我们的问题回答模型微调一个 epoch
。然后在 SQuAD 2.0
的数据上再微调两个 epoch
。
生成的
augmented data
并不是和下游任务的数据混合,而是进行stack-style
的微调。因此,augmented data
微调的模型仅用于初始化。下游任务的目标数据才是作为最终的微调,使得与测试集的数据分布保持一致。
如下表所示,由 UNILM
生成的 augmented data
改善了问答模型。
请注意,在微调过程中,我们对生成的数据集和 SQuAD 2.0
数据集都使用了双向 masked language modeling: MLM
作为辅助任务(MLM
原本用于预训练阶段)。与直接使用自动生成的样本相比,双向 MLM
带来了 2.3
个点的绝对改进。一个可能的原因是,当在 augmented data
上进行微调时,辅助任务缓解了灾难遗忘catastrophic forgetting
。
这个
2.3
的绝对改进并没有在下表中展示。
我们在以文档为基础的 dialog response generation
任务上评估 UNILM
。给定一个多轮对话历史、以及一个网络文档 web document
作为知识源,系统需要生成一个既适合对话、又反映网络文档内容的自然语言响应。我们微调 UNILM
来完成这个任务,其中 UNILM
作为一个 sequence-to-sequence
模型。第一个 segment
(input sequence
)是 web document
和对话历史的拼接。第二个 segment
(output sequence
)是响应。
我们在 DSTC7
的训练数据上对 UNILM
微调了 20
个 epoch
, batch size = 64
。掩码率为 0.5
。最大序列长度为 512
。在解码过程中,我们使用 beam size = 10
的 beam search
。产生的响应的最大序列长度被设置为 40
。
如下表所示,在 DSTC7
共享任务中,UNILM
在所有评估指标上都超过了最好的系统。
我们在 GLUE benchmark
上评估 UNILM
。GLUE
是九个语言理解任务的集合,包括问答、语言可接受性linguistic acceptability
、情感分析、文本相似性、转述检测paraphrase detection
、以及自然语言推理natural language inference : NLI
。
我们的模型作为一个双向语言模型被微调。我们使用 Adamax
优化器,学习率为 5e-5
, batch size = 32
。最大 epoch
数被设为 5
。使用一个带预热(预热比例 0.1
)的线性学习率衰减的学习率调度。每个任务的 last linear projection
的 dropout-rate = 0.1
,除了 MNLI
的 0.3
、CoLA/SST-2
的 0.05
。为了避免梯度爆炸问题,梯度范数被剪裁在 1.0
以内。我们截断 token
使得输入序列长度不超过 512
。
下表列出了从 benchmark evaluation server
获得的 GLUE
测试结果。结果显示,在 GLUE
任务中,UNILM
与 BERT_LARGE
相比获得了相差无几的性能。
UNILM
可以从以下几个方面继续改善:
web-scale
的文本语料库上训练更多的 epoch
和更大的模型来推动当前方法的极限。同时,我们还将在下游应用上进行更多的实验以及消融实验,从而研究模型能力以及采用相同网络来预训练多种语言建模任务的好处。NLP
任务。我们还对扩展 UNILM
从而支持跨语言的任务感兴趣。Multi-Task Deep Neural Network: MT-DNN
的自然延伸。预训练和微调被广泛使用,当目标任务的训练数据资源较少或为零而预训练有大量的数据时。例如,在计算机视觉中,模型通常在大规模的 ImageNet
数据集上进行预训练,然后在下游任务(如目标检测任务、图像分割任务)上进行微调。最近,ELMo
、OpenAI GPT
、以及 BERT
等预训练方法在自然语言处理中引起了很多关注,并在多种语言理解任务中取得了 SOTA
的准确性,如情感分类、自然语言推理、命名实体识别、以及 SQuAD
问答,这些任务通常只有有限的监督数据。在上述预训练方法中,BERT
是最卓越的一种,它通过 masked language modeling
和 next sentence prediction
,在大型单语语料库上预训练 bidirectional encoder representation
。
与语言理解不同,语言生成的目的是在某些输入的条件下生成自然语言句子,包括神经机器翻译 neural machine translation : NMT
、文本摘要text summarization
、以及对话式响应生成 conversational response generation
等任务。语言生成任务通常对数据要求很高,许多任务在训练数据方面是低资源 low-resource
甚至是零资源 zero-source
的。在这些自然语言生成任务上直接应用 BERT-like
的预训练方法是不可行的,因为 BERT
是为语言理解设计的,其中这些任务通常只由一个 encoder
或 decoder
处理。因此,如何为语言生成任务(通常采用基于 encoder-decoder
的序列学习框架)设计预训练方法,具有很大的潜力和重要性。
在论文 《MASS: Masked Sequence to Sequence Pre-training for Language Generation》
中,受 BERT
的启发,作者提出了一个新颖的预训练目标:MAsked Sequence to Sequence learning : MASS
用于语言生成。MASS
是基于 sequence to sequence
的学习框架:它的encoder
将带有一个 masked fragment
(几个连续的token
)的一个句子作为输入,而它的decoder
则根据 encoder representation
来预测这个 masked fragment
。与 BERT
或仅对 encoder/decoder
进行预训练的语言模型不同,MASS
经过精心设计,分两步对encoder
和decoder
进行联合预训练:
encoder side
的 masked fragment
,MASS
可以迫使encoder
理解 unmasked token
的含义,从而在 decoder side
预测 masked token
。decoder
的 input tokens
,其中这些 masked input tokens
在 encoder side
没有被掩码,MASS
可以迫使decoder
更多地依赖于 source representation
(即,encoder representation
)而不是 decoder side
的 previous tokens
,从而用于 next token prediction
。这可以更好地促进encoder
和decoder
的联合训练。MASS
只需要预训练一个模型,然后在各种下游任务中进行微调。论文使用 transformer
作为基础的 sequence to sequence
模型,并且在 WMT
单语语料库上进行预训练,然后在三种不同的语言生成任务上进行微调,包括神经机器翻译、文本摘要、以及对话式响应生成。考虑到下游任务涵盖了像神经机器翻译这样的跨语言任务,论文在多种语言上预训练一个模型。论文为所有三个任务探索了 low-resource setting
,也考虑了无监督的神经机器翻译(这是一个纯粹的 zero-resource setting
)。
WMT14 English-French
、WMT16 English-German
、以及 WMT16 English-Romanian
数据集上进行了实验。back-translation loss
微调预训练的模型,而不是像 《Phrase-based & neural unsupervised machine translation》
那样使用额外的降噪自编码器损失。Gigaword
语料库用于抽象式文本摘要,Cornell Movie Dialog
语料库用于对话式响应生成。论文的方法在所有这些任务以及 zero-resource setting
和 low-resource setting
中都取得了改进,表明论文的方法是有效的,适用于广泛的序列生成任务。
论文的贡献如下:
论文提出了 MASS
,一种用于语言生成的 masked sequence to sequence
预训练方法。
MASS
主要用于自然语言生成任务,而无法用于自然语言理解任务。
论文将 MASS
应用于各种语言生成任务,包括神经机器翻译、文本摘要、以及对话式响应生成,并取得了显著的改进,证明了 MASS
的有效性。
具体而言, MASS
在两种 language pair
(即,English-French, English-German
)的无监督神经机器翻译上取得了 SOTA
的 BLEU
分,并且在 English-French
和 French-English
上分别超过了之前的无监督神经机器翻译方法 4
分以上和 1
分以上,甚至超过了早期的 attention-based
的监督模型。
相关工作:在自然语言处理领域,在 sequence to sequence learning
和预训练方面有很多工作。
Sequence to Sequence Learning
:sequence to sequence learning
是人工智能领域的一项挑战性任务,涵盖了各种语言生成应用,如神经机器翻译、文本摘要、问答、以及对话式响应生成。
近年来,由于深度学习的进步,sequence to sequence learning
引起了很多关注。然而,许多语言生成任务,如神经机器翻译,缺乏 paired data
(即,监督数据),但有大量的unpaired data
(即,无监督数据)。因此,在 unpaired data
上进行预训练,并用小规模的 paired data
进行微调,将有助于这些任务,这正是本工作的重点。
Pre-training for NLP task
:预训练已被广泛用于 NLP
任务中,从而学习更好的 language representation
。以前的工作大多集中在自然语言理解任务上,可以分为 feature-based
方法和 fine-tuning
方法。
feature-based
方法主要是利用预训练为下游任务提供 language representation
和 feature
,其中包括 word-level representation
、sentence-level representation
、以及来自神经机器翻译模型和 ELMo
的 context sensitive feature
。fine-tuning
方法主要是在语言建模目标上预训练模型,然后在具有监督数据的下游任务上微调模型。具体来说, 《Bert: Pre-training of deep bidirectional transformers for language understanding》
提出了基于 masked language modeling
和 next sentence prediction
的 BERT
,并在 GLUE benchmark
和 SQuAD
中的多个语言理解任务中取得了 SOTA
准确性。也有一些工作采用针对语言生成的 encoder-decoder
模型进行预训练。
《Semi-supervised sequence learning》
、《Unsupervised pretraining for sequence to sequence learning》
利用语言模型或自编码器来预训练编码器和解码器。他们的方法虽然获得了 improvement
,但很有限,不像语言理解的预训练方法(如 BERT
)那样通用和显著。《Exploiting source-side monolingual data in neural machine translation》
设计了一个用于预训练的句子重排任务 sentence reordering task
,但只针对 encoder-decoder
模型的编码器部分。《Transfer learning for low-resource neural machine translation》
和 《Zero-resource translation with multi-lingualneural machine translation》
在 similar rich-resource language pair
上预训练模型,在 target language pair
上对预训练模型进行微调,这依赖于 other language pair
的监督数据。XLM
对编码器和解码器都预训练了 BERT-like
模型,并在无监督机器翻译上取得了 previous SOTA
的结果。然而,XLM
中的编码器和解码器是单独预训练的,而且 encoder-decoder
的注意力机制无法被预训练,这对于基于 sequence to sequence
的语言生成任务来说是次优的。与以往的工作不同,我们提出的 MASS
是经过精心设计的,只使用未标记的数据并同时对编码器和解码器进行联合预训练,可以应用于大多数语言生成任务。
sequence to sequence learning
的基本框架,然后提出 MASS
(MAsked Sequence to Sequence
预训练)。然后,我们讨论了 MASS
与以前的预训练方法的区别,包括 masked language modeling
(参考BERT
)、以及 standard language modeling
。定义 sentence pair
,其中:
token
的 source sentence
。token
的 target sentence
。source domain
,target domain
。一个 sequence to sequence
模型学习参数 log likelihood
作为目标函数:
这个条件概率
其中 target sentence
sequence to sequence learning
的一个主要方法是 encoder-decoder
框架。编码器读取 source sequence
并生成一组 representation
;解码器在给定一组 source representation
和前面已经处理的 target tokens
的条件下,估计每个 target token
的条件概率。注意力机制被进一步引入编码器和解码器之间,从而在预测当前 token
时寻找应该聚焦于哪个 source representation
。
我们在本节中介绍了一个新的无监督预测任务。给定一个 unpaired source sentence
我们记 fragment
都被掩码。 token
数量。每个 masked token
替换为一个 special symbol
masked sentence
的长度保持不变。
我们记 token
的数量。
我们记 fragment
。
MASS
通过预测 sentence fragment
sequence to sequence
模型,其中模型将 masked sentence
我们也使用对数似然作为目标函数:
其中:
token
,它在 sentence fragment
sentence fragment
token
子序列(不包括位置 我们在下图中展示了一个例子,其中输入序列有 8
个 token
,fragment
fragment
decoder input
为:位置 0 ~ 2
和位置 6 ~ 7
的输入都是 special token
3 ~ 5
的输入为 0
开始 。
虽然我们的方法适用于任何基于神经网络的 encoder-decoder
框架,但我们在实验中选择了 Transformer
,因为它在多个 sequence to sequence learning
任务中取得了 SOTA
的性能。
在论文的实现中,作者将
decoder input
中的masked token
移除,但是对所有的token
保留它们的原始位置信息。即,下图中保留,它们的位置分别为 {2, 3, 4, 5}
(位置编号从零开始计算)。
实际上,BERT
中的掩码语言建模 masked language modeling
、以及 GPT
中的标准语言建模 standard language modeling
可以被视为 MASS
的特殊情况。我们有一个重要的超参数 masked fragment
的长度。具有不同 MASS
可以覆盖一些特殊的 case
,这些特殊的 case
与先前的预训练方法相关,如下表所示。
当 source sentence
中的 masked fragment
只包含一个 token
,解码器预测这个 token
时没有任何其它 token
作为输入,而是以 unmasked source token
为条件,如下图 (a)
所示。这就成了 BERT
中使用的 masked language modeling
。
有人可能会说,该模型结构与masked language modeling
有一点不同。然而,由于解码器的所有输入 token
都被掩码了,解码器本身就像一个非线性分类器,类似于 BERT
中使用的 softmax
矩阵。在这种情况下,条件概率是 masked token
的位置,这正是 BERT
中使用的 masked language modeling
的公式。
当 token
数量,encoder side
的所有token
都被掩码,解码器需要在给定 previous tokens
的条件下预测所有 token
,如下图 (b)
所示。条件概率为 GPT
中的standard language modeling
,以来自编码器的 null
信息为条件,因为encoder side
的所有token
都被掩码了。
MASS
是一种用于 language generation
的预训练方法。虽然它的特殊 case
与先前的方法有关,包括 GPT
中的 standard language modeling
和BERT
中的 masked language modeling
,但它与这些方法总体上是不同的:
standard language modeling
长期以来一直被用于预训练,最突出的是最近提出的 ELMo
和 OpenAI GPT
。 BERT
为自然语言理解引入了两个预训练任务(masked language modeling
和 next sentence prediction
),并使用一个编码器来为单句single sentence
和句子对 sentence pair
抽取 representation
。
standard language modeling
和 BERT
都可以只对编码器或解码器分别进行预训练。虽然在语言理解任务上取得了可喜的成果,但它们并不适合语言生成任务,其中语言生成任务通常利用 encoder-decoder
框架从而用于条件序列生成 conditional sequence generation
。
MASS
被设计为联合预训练编码器和解码器从而用于语言生成任务。
sequence to sequence
框架来仅仅预测 masked token
,MASS
迫使编码器理解 unmasked token
的含义,同时也鼓励解码器从encoder side
抽取有用的信息。decoder side
的连续 token
,解码器可以建立更好的语言建模能力,而不仅仅是预测离散的 token
。input token
(这些 token
在encoder side
没有被掩码),鼓励解码器从encoder side
抽取更多有用的信息,而不是利用 decoder side
的 previous token
的丰富信息。模型配置:我们选择 Transformer
作为基本模型结构,它由 6
层编码器和 6
层解码器组成,emebdding/hidden
维度为 1024
,feed-forward filter
维度为 4096
。
对于神经机器翻译任务,我们在 source language
和 target language
的单语数据上对我们的模型进行预训练。我们分别对三种language pair
进行了实验: English-French, English-German, English-Romanian
。
对于其他语言生成任务,包括文本摘要和对话式响应生成,我们分别只用英语单语数据对模型进行预训练。
为了区分神经机器翻译任务中的 source language
和 target language
,我们为编码器和解码器的 input sentence
的每个 token
添加了一个 language embedding
,其中 language embedding
也是端到端学习的。
mBART
是在input sentence
的开头添加一个<LID>
的special token
,如<EN>
用于英语 。
我们基于 XLM
的代码库来实现我们的方法。
数据集:我们使用了 WMT News Crawl
数据集的所有单语数据,其中涵盖了 2007
年至 2017
年的 190M
英语句子、62M
法语句子、270M
德语句子。
我们还在预训练阶段加入了一种 low-resource language
,即罗马尼亚语 Romanian
,以验证用低资源单语数据预训练的 MASS
的有效性。我们使用 News Crawl
数据集中所有可用的罗马尼亚语句子,并使用 WMT16
数据对其进行增强,从而得到 2.9M
罗马尼亚语句子。
我们删除了长度超过 175
的句子。对于每个任务,我们在 source language
和 target language
之间用 BPE
联合学习了 60K
个子词单元 sub-word unit
。
这里是跨语言的
BPE
,而不是针对每个语言单独学习一个BPE
。
预训练细节:我们通过 special symbol
token
来掩码 segment
,其中随机选择 masked segment
的起始位置 BERT
,编码器中的 masked token
为:80%
的概率是 token
,10%
的概率是 random token
,10%
的概率是 original token
。我们将 fragment length
token
总数的大约 50%
,同时研究不同的
为了减少内存和计算成本,我们删除了解码器中的 padding
(即,masked token
),但保持 unmasked token
的 positional embedding
不变(例如,如果前两个 token
被掩码和删除,第三个 token
的位置仍然是 2
而不是 0
)。通过这种方式,我们可以获得类似的准确性,并减少解码器中 50%
的计算量。
我们使用 Adam
优化器进行预训练,学习率为 8
个 NVIDIA V100 GPU card
上进行训练,每个 mini-batch
包含 3000
个 token
从而用于预训练。
为了验证 MASS
的有效性,我们在三个语言生成任务上对预训练的模型进行了微调:神经机器翻译、文本摘要、对话式响应生成。我们在这些任务中探索了 low-resource setting
,其中我们只是利用少数训练数据用于微调从而模拟 low-resource
的场景。对于神经机器翻译,我们主要研究 zero-resource setting
(无监督),因为近年来无监督的神经机器翻译已经成为一项具有挑战性的任务。
这里,我们首先描述无监督神经机器翻译的实验,然后介绍低资源神经机器翻译的实验。
实验配置:对于无监督神经机器翻译,没有双语数据 bilingual data
来微调预训练的模型。因此,我们利用了预训练阶段的单语数据。与 《Unsupervised neural machine translation》
、《Unsupervised machine translation using monolingual corpora only》
、《Phrase-based & neural unsupervised machine translation》
、 《Unsupervised pivot translation for distant languages》
不同的是,我们只是利用 back-translation
来生成 pseudo bilingual data
从而用于训练,而不使用降噪自编码器。在微调过程中,我们使用 Adam
优化器,初始学习率为 GPU
的 batch size
被设置为 2000
个 token
。在评估过程中,我们用 multi-bleu.pl
(来自 https://github.com/moses-smt/mosesdecoder/blob/master/scripts/generic/multi-bleu.perl
)在 newstest2014
上评估 English-French
的 BLEU
分、在 newstest2016
上评估 English-German
和 English-Romanian
的 BLEU
分。
无监督神经机器翻译的结果:我们的结果如下表所示。可以看到:
在所有 6
个翻译方向上,我们的方法优于之前的所有结果,包括没有预训练的方法(Lample et al., 2018
)和有预训练的方法(XLM
)。
XLM
是之前的 SOTA
方法,它在编码器和解码器中利用了 BERT-like
的预训练,该预训练涵盖了几种预训练方法:masked language model: MLM
、causal language model: CLM
。我们的方法在 en-fr
上仍然比 XLM
高出 4.1 BLEU point
。
与其他预训练方法相比:我们还将 MASS
与之前的语言生成任务的预训练方法进行比较。
baseline
是 BERT+LM
,在BERT
中使用 masked language modeling
对编码器进行预训练,并使用 standard language modeling
对解码器进行预训练。baseline
是 DAE
,它简单地使用去降噪自编码器 denoising auto-encoder
来预训练编码器和解码器。我们用 BERT+LM
和 DAE
来预训练模型,并用 XLM
相同的微调策略对无监督翻译 pair
对进行微调(即 DAE loss + back-translation
)。这些方法也采用 6
层的 Transformer
。
如下表所示:
BERT+LM
取得了比 DAE
更高的 BLEU
分,而 MASS
在所有无监督翻译 pair
对的表现都超过了 BERT+LM
和 DAE
。
虽然 DAE
通常利用一些降噪方法,如随机 masking token
或互换相邻token
,但解码器仍然可以通过 encoder-decoder attention
轻松地学会拷贝 unmasked token
。
另一方面,DAE
中的解码器将完整的句子作为输入,这足以像语言模型一样预测下 next token
,而不会被迫从编码器中提取额外的 useful representation
。
Low-Resource NMT
实验:在低资源神经机器翻译的 setting
中,我们分别 WMT14 English-French, WMT16 English-German, WMT16 English-Romanian
的双语训练数据中抽取 10K, 100K, 1M
个 paired sentence
,从而探索我们的方法在不同 low-resource
场景中的表现。
我们使用在预训练阶段学到的相同的 BPE
代码来 tokenize
这些 training sentence pair
。我们用 Adam
优化器在 paired data
上对预训练模型进行了 20K
步的微调,学习率为 setting
中使用的相同测试集上的 BLEU
分。
如下图所示,MASS
优于 baseline
模型,其中 baseline
模型仅在双语数据上训练而没有在所有六个翻译方向进行任何预训练。这表明我们的方法在低资源场景下的有效性。
即,
baseline
模型是传统的监督学习,而MASS
是pretraining + finetuning
。此外还可以看到:双语训练数据越少(即,资源越少),那么
MASS
相比baseline
的提升就越大。
实验配置:文本摘要是对长篇文本文档创建简短而流畅的 summary
,这是一项典型的序列生成任务。我们用来自 Gigaword
语料库的不同规模(10K
、100K
、1M
、以及 3.8M
)的训练数据在文本摘要任务上对预训练模型进行微调,其中 Gigaword
语料库由总共3.8M
篇英文的 article-title pair
组成。我们把 article
作为编码器的输入、把 title
作为解码器的输入从而用于微调。在评估过程中,我们报告了在 Gigaword
测试集上的 ROUGE-1
、ROUGE-2
、以及 ROUGE-L
的 F1
得分。我们使用 beam size = 5
的 beam search
从而用于推理。
结果:我们的结果如下图所示。我们将 MASS
与仅在 paired data
上训练而没有任何预训练的模型(即,baseline
)进行比较。在不同规模的微调数据上,MASS
始终优于 baseline
(在 10K
数据上获得超过 10 ROUGE point
的增益,在 100K
数据上获得超过 5 ROUGE point
的增益),这表明 MASS
在这个任务上在具有不同规模训练数据的低资源场景中是有效的。
与其他预训练方法相比较:我们进一步将 MASS
与前面描述的 BERT+LM
和 DAE
的预训练方法进行比较,其中在文本摘要任务上使用了 3.8M
的数据。如下表所示,MASS
在三个 ROUGE
分数上一致地优于这两种预训练方法。
实验配置:对话式响应生成为对话生成一个灵活的响应。我们在 Cornell Movie Dialog
语料库上进行了实验,该语料库包含 140K
个 conversation pair
。我们随机抽取 10K/20K
个 pair
作为验证集/测试集,剩余的数据用于训练。我们采用预训练阶段的相同优化超参数进行微调。我们遵从 《A neural conversational model》
的方法,报告困惑度 perplexity: PPL
的结果。
结果:我们将 MASS
与 baseline
进行比较,其中 baseline
在现有可用的 data pair
上训练得到。我们对两组训练数据规模进行实验:随机选择 10K
个训练 data pair
、所有的 110K
个训练 data pair
,并在下表中展示实验结果。在 10K
和 110K
的训练数据上,MASS
的 PPL
都比 baseline
更低。
与其他预训练方法相比较:我们还将 MASS
与 BERT+LM
和 DAE
的预训练方法在对话式响应生成任务上进行了比较。如 Table 5
所示,在 10K
和 110K
的训练数据上,MASS
的 PPL
都比这两种预训练方法更低。
不同 masked fragment
的长度 MASS
的一个重要的超参数。如前所述,通过改变 masked language modeling
(参考 BERT
)、以及standard language modeling
的特殊 case
。在这一节中,我们研究了不同 MASS
的性能,我们选择 10% ~ 90%
,步长为 10%
,再加上
我们观察了 MASS
在预训练的表现,以及在几个语言生成任务中微调的表现,包括无监督的English-French
翻译、文本摘要、以及对话式响应生成。
我们首先展示了在不同的 perplexity: PPL
。我们选择 WMT En-Fr
的 newstest2013
中的英语句子和法语句子作为验证集,并绘制 PPL
如下图所示(图 (a)
为英语、图 (b)
为法语)。
可以看到:当 50%
到 70%
之间时,预训练的模型达到了最佳的 validation PPL
。
然后我们观察微调任务的表现。我们在 (c)
中显示了无监督 En-Fr
翻译的 validation BLEU
分数的曲线,在图 (d)
中显示了文本摘要的 validation ROUGE
分数,在图 (e)
中显示了对话式响应生成的 validation PPL
。
可以看到,当 50%
时,MASS
在这些下游任务上取得了最佳性能。
因此,我们在实验中为 MASS
设定了 50%
。
实际上, 50%
是编码器和解码器之间的一个良好平衡。encoder side
或decoder side
的有效 token
太少,会使模型偏向于更多地关注另一侧,这不适合语言生成任务。因为语言生成任务通常利用 encoder-decoder
框架在编码器中抽取 sentence representation
,以及在解码器中建模和生成句子。极端情况是 BERT
中的 masked language modeling
)和 standard language modeling
)。如下图所示,
MASS
的消融研究:在我们的 masked sequence to sequence
预训练中,我们有两个精心的设计:
encoder side
掩码连续的 token
,从而在 decoder side
预测连续的 token
,这比仅仅预测离散的 token
可以建立更好的语言建模能力。input token
,其中这些 token
在 encoder side
没有被掩码,从而鼓励解码器从encoder side
抽取更多有用的信息,而不是利用 decoder side
的 previous tokens
的丰富信息。在本节中,我们进行了两项消融研究,以验证 MASS
中两种设计的有效性:
MASS
中随机掩码离散的 token
而不是连续的 token
,记做 Discrete
。token
馈入解码器,而不是掩码解码器的 input token
(其中这些 token
在 encoder side
没有被掩码)记做 Feed
。我们将 MASS
与这两种消融方法在无监督的 English-French
上进行比较,如下表所示。可以看到,Discrete
和 Feed
的表现都比MASS
更差,证明了 MASS
的这两种设计的有效性。
这里就一个例子,是不是说服力不强?可以在更多的数据集上进行评估。
BERT
受到广泛的欢迎,并在最近的自然语言处理研究中被证明是有效的。BERT
利用大规模的无标记训练数据并生成丰富的 contextual representation
。在几个流行的机器阅读理解 benchmark
上,如 SQuAD,CoQA,QuAC,NaturalQuestions,RACE
,我们可以看到大多数表现最好的模型是基于 BERT
及其变体,表明预训练的语言模型已经成为自然语言处理领域的新的基础部分。
从 BERT
开始,社区成员在优化预训练语言模型 pre-trained language model
方面取得了巨大而迅速的进展,如 ERNIE, XLNet, RoBERTa, SpanBERT, ALBERT, ELECTRA
等等。然而,针对 learning representation
,训练 Transformer-based
的预训练语言模型并不像我们用来训练 word-embedding
或其他传统神经网络那样容易:
BERT-large
模型(具有 24
层 Transformer
和 3.3
亿个参数)到收敛,需要高内存的计算设备(如 TPU
或 TPU Pod
),这些设备非常昂贵。为了尽量减少重复性工作,并为未来的研究建立 baseline
,在论文 《Pre-Training with Whole Word Masking for Chinese BERT》
中,作者旨在建立中文预训练语言模型系列 model series
,并向公众发布,以促进科研社区,因为中文和英文是世界上最常用的语言之一。论文重新审视了现有的流行的预训练语言模型,并将其调整为中文,从而了解这些模型是否能在英语以外的语言中得到推广并表现良好。此外,论文还提出了一个新的预训练语言模型,称为MacBERT
,它将原来的 MLM
任务替换为 MLM as correction: Mac
任务。MacBERT
主要是为了缓解原始 BERT
中预训练阶段和微调阶段的差异。论文在十个流行的中文 NLP
数据集上进行了广泛的实验,范围从 sentence-level
任务到 document-level
任务,如机器阅读理解、文本分类等。实验结果表明,与其他预训练的语言模型相比,所提出的 MacBERT
可以在大多数任务中获得显著的收益。论文还给出了详细的消融实验,以更好地检查哪些因素带来改进。论文的贡献如下:
NLP
的未来研究,论文创建了中文预训练语言模型系列并向社区发布。作者进行了广泛的实证研究,通过仔细分析来重新审视这些预训练语言模型在各种任务上的表现。MacBERT
,通过用相似的单词来掩码一个单词,从而缓解了预训练阶段和微调阶段的 gap
,这在各种下游任务中被证明是有效的。RBT
,从而展示小型模型与常规预训练语言模型相比的表现,这有助于在现实世界中利用这些小模型。本文创新力不足,更像是一篇工程实现的报告。
相关工作:这里我们重新审视了最近自然语言处理领域中具有代表性的预训练语言模型的技术。这些模型以及所提出的 MacBERT
的整体比较在下表中描述。
BERT
:Bidirectional Encoder Representations from Transformers: BERT
已经在广泛的自然语言处理任务中证明了其有效性。BERT
通过在所有 Transformer
层中,同时以左侧上下文和右侧上下文为条件来预训练深度双向 representation
。BERT
主要由两个预训练任务组成:Masked Language Model: MLM
、Next Sentence Prediction: NSP
。
MLM
:随机掩码输入中的一些 token
,目标是仅根据其上下文来预测原始 token
。NSP
:预测 sentence B
是否是 sentence A
的下一句。后来,他们进一步提出了一种叫做全词掩码(whole word masking: wwm
)的技术,用于优化 MLM
任务中的原始掩码。在这个 setting
中,我们不是随机选择 WordPiece token
来掩码,而是总是一次性掩码对应于整个单词的所有 token
。这明确地迫使模型在 MLM
预训练任务中恢复整个单词,而不是仅仅恢复 WordPiece token
,而恢复整个单词的挑战性更大。由于全词掩码只影响预训练过程的掩码策略,因此它不会给下游任务带来额外的负担。
此外,由于训练预训练语言模型的计算成本很高,他们还公布了所有的预训练模型以及源代码,这大大刺激了社区对预训练语言模型进行研究的极大兴趣。
ERNIE
:Enhanced Representation through kNowledge IntEgration: ERNIE
旨在优化 BERT
的掩码过程,其中包括 entity-level masking
和 phrase-level masking
。与选择输入中的随机单词不同:
entity-level masking
是对命名实体的掩蔽,这些实体通常由几个单词组成。phrase-level masking
是掩码连续的词,这与N-gram
掩码策略相似。XLNet
:《Xlnet: Generalized autoregressive pretraining for language understanding》
认为,现有的基于自编码的预训练语言模型(如 BERT
)存在预训练阶段和微调阶段的 gap
,因为masking token
(即 [MASK]
)从未在微调阶段出现。为了缓解这个问题,他们提出了基于 Transformer-XL
的 XLNet
。XLNet
主要有两处修改:
expected likelihood
,在这里他们称之为排列语言模型 Permutation Language Model
。为了实现这一目标,他们提出了一种新颖的双流自注意力机制 two-stream self-attention mechanism
。RoBERTa
:Robustly Optimized BERT Pretraining Approach: RoBERTa
旨在采用原始的 BERT
架构,但做了更精细的修改,以充分释放 BERT
的力量。他们对 BERT
中的各种组件进行了仔细的比较,包括掩码策略、输入格式、训练步数等。经过全面的评估,他们得出了几个有用的结论从而使得 BERT
更加强大,主要包括:
batch size
和更长的序列在更多的数据上进行更长时间的训练。next sentence prediction
任务,以及在 MLM
任务中使用动态掩码 dynamic masking
。ALBERT
:A Lite BERT: ALBERT
主要解决了 BERT
的内存消耗较大和训练速度慢的问题。ALBERT
介绍了两种减少参数的技术。
factorized embedding parameterization
,它将 embedding
矩阵分解为两个小矩阵。ALBERT
的每一层共享 Transformer
权重,这大大减少了整体参数。此外,他们还提出了 sentence order prediction: SOP
任务,取代传统的 NSP
预训练任务,从而产生更好的性能。
ELECTRA
:Efficiently Learning an Encoder that Classifiers Token Replacements Accurately: ELECTRA
采用了一个新的 generator-discriminator framework
,类似于生成对抗网 generative adversarial net: GAN
。
MLM
,学习预测 masked token
的原始 token
。input token
是否被生成器所替换,这被称作 Replaced Token Detection: RTD
。注意,为了实现有效的训练,判别器只需要预测一个二元标签来表示 "replacement"
,而不像 MLM
预测准确的 masked word
。在预训练阶段之后,我们抛弃了生成器,只用判别器来微调下游的任务。
虽然BERT
及其变体在各种英语任务中取得了显著的改进,但我们想知道这些模型和技术是否能在其他语言中得到很好的泛化。在本节中,我们将说明现有的预训练语言模型是如何适用于中文的。我们采用 BERT
、RoBERTa
和 ELECTRA
以及它们的变体来创建中文预训练模型系列model series
,其有效性在实验部分展示。需要注意的是,由于这些模型都是源于 BERT
或 ELECTRA
,没有改变输入的性质,在微调阶段无需修改从而适配这些模型,相互替换非常灵活。
BERT-wwm & RoBERTa-wwm
:原始的 BERT
使用 WordPiece tokenizer
将文本拆分成 WordPiece tokens
,其中一些单词被拆分成几个小的片段 small fragment
。全词掩码 whole word masking: wwm
缓解了仅掩码整个单词的一部分的缺点,因为仅掩码整个单词的一部分对模型来说更容易预测。
根据单词的一部分
token
来预测另一部分token
相对比较容易,如player
被拆分为play
和##er
两个token
。如果被掩码的token
为##er
,那么已知play
来预测##er
要相对容易。
在中文条件下,WordPiece tokenizer
不再将单词分割成小的片段,因为汉字不是由类似字母的符号组成。我们使用中文分词 Chinese Word Segmentation: CWS
工具,将文本分割成若干个词语。通过这种方式,我们可以采用中文的全词掩码,而不是单个汉字的掩码。在实施过程中,我们严格遵循原有的全词掩码代码,不改变其他的组成部分,如 word masking
的百分比等。我们使用 LTP
进行中文分词来识别单词的边界。需要注意的是,全词掩码只影响到预训练阶段的 masking token
的选择。我们仍然使用 WordPiece tokenizer
来拆分文本,这与原始的 BERT
是相同的。
同样地,全词掩码也可以应用于 RoBERTa
,其中没有采用 NSP
任务。然而,我们仍然使用 paired input
进行预训练,这可能有利于sentence pair
的分类任务和阅读理解任务。
SpanBERT
表明,single-sequence training
的效果要好于bi-sequence training
,因为单个句子的训练可以获得更长的上下文。
下表中描述了一个全词掩码的例子。
ELECTRA
:除了 BERT
和 RoBERTa
系列,我们还探索了 ELECTRA
模型,它采用了一个新的预训练框架,由生成器和判别器组成。我们严格遵循 ELECTRA
原始论文中的原始实现。
RBT Series
:尽管上述的预训练语言模型很强大,但它们不是计算高效的,而且很难在实际应用中采用。为了使社区研究人员更容易获得预训练的模型,除了常规的预训练语言模型,我们还预训练了几个小模型,我们称之为 RBT
。
具体而言,我们使用与训练 RoBERTa
完全相同的训练策略,但我们使用较少的 Transformer
层。我们训练 3
层、4
层、6
层的RoBERTa-base
,分别表示为 RBT3
、RBT4
和 RBT6
。我们还训练了一个 3
层的 RoBERTa-large
,表示为 RBTL3
,它的参数规模与 RBT6
相似。这样做的目的是在参数规模相当的情况下,比较一个更宽更浅的模型(RBTL3
)和一个更窄更深的模型(RBT6
),这有助于未来预训练语言模型的设计。
在上一节中,我们提出了一系列的中文预训练语言模型。在这一节中,我们充分利用这些模型,并提出了一个叫做 MLM as correction BERT: MacBERT
的新型模型。MacBERT
与 BERT
共享相似的预训练任务类型,并做了一些修改。MacBERT
由两个预训练任务组成:MLM as correction
、sentence order prediction
。
下图描述了 MacBERT
的整体架构。
MLM as correction
:MLM
是 BERT
及其变体中最重要的预训练任务,它建模了双向上下文推断 bidirectional contextual inference
的能力。然而,如前所述,MLM
存在预训练阶段和微调阶段的不一致性,即预训练阶段的人工标记(如 [MASK]
)从未出现在真正的下游微调任务中。
为了解决这个问题,我们提出了一个新的预训练任务,称为 MLM as correction: Mac
。在这个预训练任务中,我们不采用任何预定义的 token
来进行掩码。相反,我们将原始的 MLM
转化为一个文本纠正 text correction
任务:模型应该将错误的单词纠正为正确的单词,这比 MLM
更自然。具体而言,在 Mac
任务中,我们对原始 MLM
进行了以下修改:
文本纠正任务要比
MLM
任务更简单。文本纠正任务是:给定original word
的similar word
,因此需要预测的original word
一定跟similar word
非常相似。这大大缩小了候选单词的范围。例如:原始句子为
I like play football.
,我们用basketball
代替了football
,变成I like play basketball.
。我们需要根据这个句子来预测最后一个单词为football
。事实上,我们知道这个目标单词和basketball
非常相似,这大大缩小了候选单词的范围。
我们使用全词掩码策略以及 N-gram
掩码策略来选择候选 token
进行掩码,对于 word-level
的 unigram, 2-gram, 3-gram, 4-gram
,其掩码比例分别为 40%, 30%, 20%, 10%
。我们还注意到,最近的一项工作提出了 PMI-masking
(《{PMI}-masking: Principled maskingof correlated spans》
),它优化了掩码策略。在本文中,我们采用的是普通的 N-gram
掩码,并将在未来尝试 PMI
掩码。
在微调阶段,[MASK] token
从未出现过,我们建议使用 similar word
来进行掩码,而不是用 [MASK] token
进行掩码。 similar word
是通过使用同义词工具包 Synonyms toolkit
(https://github.com/huyingxi/Synonyms
)来获得的,它是基于 word2vec
的相似性来计算。如果选择了一个 N-gram
进行掩码,我们会对每个被掩码的单词寻找 similar word
。
在极少数情况下,当没有 similar word
时,我们会退化到使用 random word
来替换。这种random word
替换被限制在不超过所有待掩码的 token
的 10%
。
similar word
的token
数量与原始单词的token
数量不一致,怎么解决?例如,原始单词为player
,它的token
为[play, #er]
;similar word
为participant
,它的token
为['participant']
。这种纠错的方式可以视为对输入加噪音的一种,可以用于
BART
的预训练任务。
遵从以前的工作,我们使用 15%
的输入词进行掩码,其中 80%
的 token
被替换成 similar word
,10%
的 token
被替换成random word
,其余 10%
的 token
保持原词。
此外,所有这
15%
的输入词中,对于word-level
的unigram, 2-gram, 3-gram, 4-gram
的掩码比例分别为40%, 30%, 20%, 10%
。
Sentence Order Prediction
: BERT
中最初的 next sentence prediction: NSP
任务被认为对模型来说太容易了,人们已经证明它不是那么有效(Roberta
原始论文、ALBERT
原始论文)。在本文中,我们采用了由 ALBERT
引入的 sentence order prediction: SOP
任务,该任务被证明比 NSP
更有效。正样本是通过使用两个连续的文本创建的,而负样本是通过交换它们的原始顺序创建的。我们在实验部分中消融这些修改,以更好地展示每个组成部分的贡献。
神经架构 Neural Architecture
:正式地,给定两个序列
我们首先通过拼接两个序列来构建输入序列
然后,MacBERT
通过一个 embedding layer
(由 word embedding, positional embedding, token type embedding
组成)和 transformer
将 contextualized representation
token type embedding
就是segment embedding
。
我们只需要预测被 Mac
任务替代的 position
,在得到 contextual representation
replaced position
有关的子集,形成 replaced representation
replaced token
的数量。根据 Mac
任务的定义,
然后我们将 vocabulary space
中,从而预测在整个词表 BERT
实现,我们也使用 word embedding
矩阵 embedding
维度和隐层维度是相同的:
其中: replaced representation
;
然后我们使用标准的交叉熵损失来优化预训练任务:
其中:
1
,否则为 0
。replaced token
的 ground truth
。replaced token
为 对于 SOP
任务,我们直接使用[CLS] token
的 contextual representation
,也就是 label prediction layer
:
其中:
我们也使用交叉熵损失来优化 SOP
预训练任务。
最后,整体训练损失是 Mac
损失和 SOP
损失的组合:
这里是否需要用超参数
来平衡这两个损失的重要性?
数据处理:我们使用 Wikipedia dump
(截至 2019
年 3
月 25
日),并按照 BERT
原始论文的建议用 WikiExtractor.py
进行预处理,结果有 1307
个 extracted files
。我们在这个 dump
中同时使用了简体中文和繁体中文,并没有将繁体中文部分转换成简体中文。我们在实验部分展示了在繁体中文任务中的有效性。在清理原始文本(例如去除 html tag
)以及分离文件之后,我们得到了大约 0.4B
单词。
由于 Chinese Wikipedia
的数据相对较少,除了 Chinese Wikipedia
,我们还使用扩展的训练数据来训练这些预训练语言模型(模型名称中标有 ext
)。内部收集的扩展数据包含百科全书 encyclopedia
、新闻、以及问答网络 question answering web
,有 5.4B
单词,比 Chinese Wikipedia
大十倍以上。请注意,对于 MacBERT
我们总是使用扩展数据,并省略 ext
标记。
为了识别全词掩码的中文单词的边界,我们使用 LTP
进行中文分词。我们使用 BERT
原始论文提供的 create_pretraining_data.py
将原始输入文本转换为预训练样本。
预训练语言模型的配置:为了更好地从现有的预训练好的语言模型中获取知识,我们没有从头开始训练我们的 base-level model
,而是从官方的 Chinese BERT-base
开始,继承其词表 vocabulary
和模型权重。然而,对于 large-level model
,我们必须从头开始训练,但仍然使用 base-level model
提供的相同词表。
base-level model
是一个 12
层的 transformer
,隐层维度为768
。large-level model
是一个 24
层的 transformer
,隐层维度为 1024
。对于训练 BERT series
,我们采用了 BERT
所建议的方案:预训练开始时选择最大序列长度为 128
个 token
,然后选择最大序列长度为 512
个 token
。然而,我们根据实验发现,这导致对长序列任务(如阅读理解任务)的适应性 adaptation
不足。在这种情况下,对于 BERT
以外的模型,我们直接在整个预训练过程中使用 512
的最大长度,这在 Roberta
中被采用。
对于较小的 batch size
,我们采用 BERT
中原始的、带权重衰减的 ADAM
优化器进行优化。对于较大的 batch size
,我们采用 LAMB
优化器以获得更好的 scalability
。预训练是在单个 Google Cloud TPU v3-8
(相当于单个TPU
)或 TPU Pod v3-32
(相当于 4
个 TPU
)上进行的,这取决于模型的规模。具体而言,对于 MacBERT-large
,我们训练了 2M
步,batch size = 512
,初始学习率为 1e-4
。
训练细节如下表所示。为了简洁,我们没有列出 'ext'
模型,其中 'ext'
模型的超参数与没有在扩展数据上训练的模型相同。
微调任务的配置:为了彻底测试这些预训练语言模型,我们对各种自然语言处理任务进行了广泛的实验,涵盖了广泛的文本长度,即从 sentence-level
到 document-level
。任务细节如下表所示。具体而言,我们选择了如下十个流行的中文数据集:
Machine Reading Comprehension: MRC
:CMRC 2018, DRCD, CJRC
。Single Sentence Classification: SSC
:ChnSentiCorp, THUCNews, TNEWS
。Sentence Pair Classification: SPC
:XNLI, LCQMC, BQ Corpus, OCNLI
。为了进行公平的比较,对于每个数据集,我们保持相同的超参数(如最大序列长度、warm-up
步数等),只对每个任务的初始学习率调优 (从 1e-5
到 5e-5
)。请注意,初始学习率是在原始的 Chinese BERT
上调优的,通过对每个任务独立地调优学习率,有可能实现另一种增益。我们将相同的实验运行十次,以确保结果的可靠性。最佳的初始学习率是通过选择最佳的平均验证集性能来确定的。我们报告最高分和平均分,从而同时评估峰值性能和平均性能。除了 TNEWS
和 OCNLI
的测试集没有公开,我们同时报告验证集和测试集的结果。
注意,这里是用于微调任务的超参数,与预训练任务的超参数有所差异。
对于除 ELECTRA
以外的所有模型,我们对每个任务使用相同的初始学习率设置,如下表所示。对于 ELECTRA
模型,我们按照 ELECTRA
原始论文的建议,对 base-level model
使用 1e-4
的通用初始学习率,对 large-level model
使用 5e-5
的通用初始学习率。
由于现有的各种中文预训练语言模型,如ERNIE, ERNIE 2.0, NEZHA
的预训练数据有很大的不同,我们只对 BERT, BERT-wwm, BERT-wwm-ext, RoBERTa-wwm-ext, RoBERTa-wwm-ext-large, ELECTRA
以及我们的 MacBERT
进行比较,从而保证不同模型之间相对公平的比较。其中,除了原始的 Chinese BERT
,所有模型都由我们自己训练。我们在 TensorFlow
框架下进行了实验,并对 BERT
原始论文提供的微调脚本进行了轻微改动,以更好地适配中文任务。
机器阅读理解:机器阅读理解是一项有代表性的 document-level
建模任务,要求根据给定的段落回答问题。我们主要在三个数据集上测试这些模型:CMRC 2018, DRCD, CJRC
。
CMRC 2018
:一个 span-extraction
的机器阅读理解数据集,与 SQuAD
类似,为给定的问题抽取一个 passage span
。DRCD
:这也是一个 span-extraction
的机器阅读理解数据集,但是是繁体中文。CJRC
:类似于CoQA
,它有yes/no question
、没有答案的问题、以及 span-extraction question
。该数据收集自中国的法律判决文件。注意,我们只使用 small-train-data.json
进行训练。结果如下表所示。可以看到:
使用额外的预训练数据会带来进一步的改进,如 BERT-wwm
和 BERT-wwm-ext
之间的比较所示。这就是为什么我们对RoBERTa
、ELECTRA
和 MacBERT
使用扩展数据。
注意,
MacBERT
默认就使用了扩展数据。
此外,所提出的 MacBERT
在所有阅读理解数据集上都产生了显著的改进。值得一提的是,我们的 MacBERT-large
可以在 CMRC 2018
的 Challenge
集合上实现 SOTA
的 F1
,即60%
,这需要更深入的文本理解。
此外,应该注意的是,虽然 DRCD
是一个繁体中文数据集,但用额外的大规模简体中文进行训练也会有很大的积极作用。由于简体中文和繁体中文有许多相同的字符,使用带有少量繁体中文数据的一个强大的预训练语言模型也可以带来改进,而不需要将繁体中文字符转换为简体字符。
关于 CJRC
,其中文本是以关于中国法律的专业方式写成的,BERT-wwm
比 BERT
显示出适度的改进,但不是那么突出,表明在非通用领域的微调任务中需要进一步的领域适应 domain adaptation
。然而,增加通用的预训练数据会导致改善,这表明当没有足够的领域数据 domain data
时,我们也可以使用大规模的通用数据作为补救措施。
这里没有
BERT-large
的数据,因为BERT
官方未提供。根据论文的说明,MacBERT-base
是用预训练好的BERT-base
来初始化的,这相当于MacBERT-base
比BERT-base
训练更长的时间,因此它的效果更好,也就不足为奇。
单句分类:对于单句分类任务,我们选择 ChnSentiCorp, THUCNews, TNEWS
数据集:
ChnSentiCorp
用于评估情感分类,其中文本应该被划分为正面或负面的 label
。THUCNews
是一个包含不同类型的新闻的数据集,其中的文本通常很长。在本文中,我们使用了一个包含 10
个领域(均匀分布)的 50K
个新闻的版本,包括体育、金融、技术等等领域。TNEWS
是一个由新闻标题和关键词组成的短文本分类任务,要求分类到 15
个类别中的一个。结果如下表所示。可以看到:
MacBERT
可以在 ChnSentiCorp
和 THUCNews
中比 baseline
有适度的改进,即使这些数据集已经达到了很高的准确率。TNEWS
中,MacBERT
在 base-level
和 large-level
预训练语言模型中产生了一致的改进。句子对分类:对于句对分类任务,我们使用了 XNLI
数据(中文部分)、Large-scale Chinese Question Matching Corpus : LCQMC
、BQ Corpus
、以及 OCNLI
,这些数据需要输入两个序列并预测它们之间的关系。结果如下表所示。可以看到:
在 XNLI
和 OCNLI
中,MacBERT
比 baseline
产生了相对稳定和显著的改进。然而,MacBERT
在 LCQMC
和 BQ Corpus
上仅仅显示了适度的改进,平均得分略有提高,但峰值性能不如 RoBERTa-wwm-ext-large
。
我们怀疑这些任务对输入的细微差别的敏感性不如阅读理解任务。由于 sentence pair classification
只需要生成整个输入的 unified representation
,因此导致了适度的改进。
机器阅读理解任务的改进比分类任务更大,这可能归因于掩码策略。在机器阅读理解任务中,模型应该识别段落中的 exact answer span
。在 MacBERT
中, 每个 N-gram
单词都被其同义词或一个随机词所取代,因此每个词都可以很容易地被识别,这迫使模型学习 word boundary
。
这里的解释比较苍白,原因没有讲清楚。
MacBERT-base
通常比 MacBERT-large
产生更大的改进。这可能是由两个原因造成的。
MacBERT-base
是由 BERT-base
初始化的,它可以从 BERT-base
的知识中受益,并避免冷启动的问题。large-level
预训练语言模型的结果通常高于 base-level
预训练语言模型的结果,因此获得更高的分数要比 base-level
预训练语言模型困难得多。小模型的结果:我们还建立了一系列的小模型,即 RBT
,建立在 RoBERTa-base
或 RoBERTa-large
模型上。实验结果如下表所示。可以看到:
base-level, large-level
)更差,因为它们使用的参数较少。RBTL3
和 RBT6
,我们可以看到 RBT6
的性能大大优于 RBTL3
,这表明窄而深的模型通常优于宽而浅的模型。这些观察结果对未来实际应用中的模型设计是有帮助的。
BERT
有明显的改进,这表明它们的有效性和通用性。虽然我们的模型在各种中文任务中取得了显著的改进,但我们想知道这些改进的基本组件 essential component
来自哪里。为此,我们在 MacBERT
上进行了详细的消融研究从而证明其有效性。此外,我们还比较了现有的预训练语言模型在英语中的声明 claim
,看看它们的修改在另一种语言中是否仍然成立。我们进行了详细的消融研究,以检查 MacBERT
中每个组件的贡献。结果如下表所示。总的平均分数是通过平均每个任务的测试分数得到的。 w/o
表示 without
。可以看到:
总体而言,删除 MacBERT
中的任何组件都会导致平均性能的下降,这表明所有的修改都有助于整体改进。
具体而言,最有效的修改是 N-gram masking
和 similar word
替换,这是对 masked language model: MLM
任务的修改。当我们比较 N-gram masking
和 similar word
替换时,我们可以看到明显的优点和缺点,其中:N-gram masking
似乎在文本分类任务中更有效(以 ACC
为指标的任务),而阅读理解任务的表现似乎更受益于similar word
替换任务。将这两个任务结合起来可以相互弥补,在两种任务上都有更好的表现。
数据不支持这里的结论。
N-gram masking: NM
、similar word
替换、以及SOP
的贡献都相差无几(缺少它们,导致平均准确性都在86.89
附近)。此外,不同组件对于不同任务,也没有看出特别突出的贡献。
next sentence prediction: NSP
任务没有显示出像 MLM
任务那样的重要性,这表明设计一个更好的 MLM
任务来充分释放文本建模的能力更为重要。
此外,我们还比较了 next sentence prediction
任务和 sentence order prediction
任务,以更好地判断哪一个任务更强大。结果显示,sentence order prediction
任务确实比原来的 next sentence prediction
任务表现得更好,尽管它不是那么突出。
sentence order prediction
任务要求识别两个句子的正确顺序,而不是使用一个随机的句子,这对机器来说更容易识别。与文本分类任务相比,在阅读理解任务中去掉 sentence order prediction
任务会导致性能明显下降,这表明有必要设计一个类似 next sentence prediction
的任务来学习两个 segment
之间的关系(例如,阅读理解任务中的段落和问题)。
点评:本文创新力不足,感觉更像是一个工程实现的报告而已。
如上一节所示,最主要的预训练任务是 masked language model
及其变体。masked language model
任务依赖于两个方面:选择要被掩码的 token
、替换被选中的 token
。
在上一节中,我们已经证明了选择 masking token
的有效性,如全词掩码或 N-gram masking
等。现在我们要研究的是:所选中 token
的替换对预训练语言模型的性能有何影响。
为了研究这个问题,我们绘制了不同预训练步数下 CMRC 2018
和 DRCD
的性能。具体而言,我们遵从对输入序列的 15%
的原始掩码比例,其中 10% masked token
保持不变。对于剩下的 90% masked token
,我们将其分为四类:
MacBERT
:80% masked token
被替换为它们的 similar word
,10% masked token
被替换为随机的单词。Random Replace
:90% masked token
被替换为随机的单词。Partial Mask
:原始的 BERT
实现,80% masked token
被替换为 [MASK]
,10% masked token
被替换为随机的单词。All Mask
:90% masked token
被替换为 [MASK]
。我们仅绘制了从 1M
步到 2M
步的结果,如下表所示。可以看到:
主要依靠使用 [MASK]
进行掩码的预训练模型(即 partial mask
和 all mask
)导致了更差的性能,表明预训练和微调的差异是一个实际问题,该问题影响整体性能。
在 partial mask
和 all mask
中,我们还注意到,如果不保留 10%
的 original token
(即恒等映射),也会出现一致的下降。这表明完全使用 [MASK] token
的掩码的鲁棒性更差。
令我们惊讶的是,完全放弃 [MASK] token
,而是将所有 90% masked token
替换成随机的单词,产生了比[MASK]-dependent
的掩码策略更一致的改进。这也强化了这样的说法:依靠 [MASK] token
的原始掩码方法导致了更差的性能,因为 [MASK] token
在微调任务中从未出现过。
另外,使用随机单词而不是人工的 [MASK] token
可以提高预训练模型的降噪能力,这可能也是一个原因。
为了使这个问题更加精细,在本文中,我们提出使用 similar word
来进行掩码,而不是一个随机的单词。因为随机的单词不符合上下文,可能会破坏语言模型学习的自然性naturalness
,因为传统的 N-gram
语言模型是基于自然的句子,而不是一个被操纵的句子。然而,如果我们使用 similar word
来进行掩码,句子的流畅性就比使用随机单词要好得多,整个任务就转化为一个语法纠正任务 grammar correction task
,这就更自然了,而且没有预训练阶段和微调阶段的差异。
从下图中中我们可以看出,MacBERT
在四个变体中产生了最好的性能,这验证了我们的假设。
如果要追求自然性,那么自回归语言模型要比带噪音的双向语言模型更有利。
MacBERT
引入了 'MLM as correction'
任务,这与实际的语法或拼写错误校正任务相似。我们对中文拼写检查 Chinese Spell Check
任务进行了额外的实验。我们使用 SIGHAN-15
数据集来探索使用不同比例的训练数据时不同预训练语言模型的效果。
SIGHAN-15
包括一个训练集( 3.1K
实例)和一个测试集 (1.1K
实例)。我们在这个实验中比较了 BERT-wwm-ext, RoBERTa-wwm-ext, ELECTRA-base, MacBERT-base
,因为它们共享相同的预训练数据。我们对每个模型进行了五次微调,并绘制了平均 F1
(sentence-level
)。我们使用 5e-5
的通用学习率,训练 5
个 epoch
, batch size = 64
。结果如下图所示,其中包括 detection-level
分、correction-level
分。可以看到:
当使用不同比例的训练数据时,MacBERT
比其他模型产生了一致的改进,这表明 MacBERT
是有效的和 scalable
的。
我们注意到 ELECTRA
在这项任务上表现不佳。具体而言,ELECTRA
和其他模型的结果,在 correction-level
的差距相对于detection-level
的差距更大。
ELECTRA
使用 replaced token detection: RTD
任务来训练判别器(判别器将用于微调)。然而,RTD
任务只需要识别输入 token
是否被改变,而不需要预测 original token
,我们认为这很简单。相反,MLM
任务和 Mac
任务的目标需要同时 identify-and-correction
。
通过比较 MLM
和 Mac
,我们的 MacBERT
缓解了预训练和微调之间差异的问题,这产生了另一个重要的收益。
虽然 Mac
任务与拼写检查任务相似,但我们只使用同义词进行替换,这在真正的拼写检查任务中仅占很小的比例。这可以解释为什么当可用的训练数据较少时,我们的模型没有产生比其他模型更大的改进。
我们希望将强化学习应用于仅由 human judgment
所定义的复杂的任务,对于该任务我们只能通过询问人类来判断一个结果是好还是坏。要做到这一点,我们可以首先使用 human labels
来训练一个奖励模型 reward model
,然后优化这个模型。虽然通过互动从人类那里学习这种模型的工作由来已久,但这项工作最近才被应用于现代深度学习,即使如此,也只被应用于相对简单的模拟环境 simulated environments
。相比之下,真实世界的 setting
(其中人类需要向 AI agents
指定复杂目标)很可能涉及并需要自然语言,其中自然语言是一种丰富的媒介来表达 value-laden
的概念。当 agent
必须与人类沟通从而帮助提供更准确的监督信号时,自然语言尤其重要。
自然语言处理最近取得了实质性的进展。一种成功的方法是在无监督数据的语料库上预训练大型生成式语言模型,然后针对有监督的NLP
任务对模型进行微调。这种方法往往大大优于在监督数据集上从头开始的训练,并且在许多不同的监督数据集上,一个预训练的语言模型往往可以微调从而得到 SOTA
的性能。在某些情况下,不需要进行微调:GPT-2
发现,生成式预训练的模型在没有额外训练的情况下(即,zero-shot)
),在NLP
任务上显示出合理的性能。
有大量文献将强化学习应用于自然语言任务。这些工作大多使用算法定义的奖励函数 reward functions
,如用于翻译的 BLEU
、用于摘要的 ROUGE
、music theory-based
的奖励、或者用于故事生成的 event detectors
。
《Reinforcement learning for bandit neural machine translation with simulated human feedback》
在 BLEU
上使用强化学习,但应用了几个 error models
来近似 human behavior
。《Learning to extract coherent summary via deep reinforcement learning》
以及 《Towards coherent and cohesive long-formtext generation》
从现有文本中学习了 coherence model
,并将其作为强化学习奖励分别用于摘要和长篇小说的生成。《Preference-based interactive multi-document summarisation》
通过一次对一篇文章应用 reward learning
,建立了一个交互式的摘要工具。《Reliability and learnability of human bandit feedback for sequence-to-sequence reinforcement learning》
将 off-policy
的 reward learning
用于翻译、以及 《Way off-policy batch deep reinforcement learning of implicit human preferences indialog》
将 《Sequence tutor: Conservative fine-tuning of sequence generation models with kl-control》
修改后的 Q-learning
方法应用于对话中的隐式的 human preferences
。《Towards coherent and engaging spoken dialog response generation using automatic conversation evaluators》
从人类那里学习奖励来微调对话模型,但对奖励进行了平滑处理从而允许监督学习。《A survey of reinforcement learning informed by natural language》
对涉及语言作为一个组成部分的强化学习任务的综述,以及使用从语言迁移学习的强化学习结果。human feedback
的唯一方式。 《Learning from dialogue after deployment: Feed yourself, chatbot!》
询问人类关于对话系统应该说些什么,然后继续监督训练。在论文 《Fine-Tuning Language Models from Human Preferences》
中,作者将自然语言处理的预训练进展与 human preference learning
相结合。作者用 reinforcement learning
而不是 supervised learning
来微调预训练的语言模型,使用来自在 text continuations
上的 human preferences
训练的一个奖励模型 reward model
。遵从 《Sequence tutor: Conservative fine-tuning of sequence generation models with kl-control》
和 《Way off-policy batch deep reinforcement learning of implicit human preferences indialog》
之后,作者使用 KL constraint
来防止微调模型与预训练模型相差太远。
作者将该方法应用于两类任务:以符合目标风格的方式续写文本 continuing text
(无论是积极的情感还是生动的描述)、以及 CNN/Daily Mail
或 TL;DR
数据集的文本摘要。论文的动机是 NLP
任务,其中监督数据集不可用或数量不够,而且程序化的奖励函数(如 BLUE
)对任务的真正目标来说是很差的代理 proxy
。
对于风格延续 stylistic continuation
,5K
个 human comparisons
(每次选择 4
个 continuation
中最好的一个)的结果是:
reinforcement learning
微调模型与 zero-shot
相比,人类在86%
的情况下优先选择reinforcement learning
微调模型的结果。reinforcement learning
微调模型与被监督微调到情感分类网络相比,人类在 77%
的情况下选择reinforcement learning
微调模型的结果。注意,这里有两种微调:
reinforcement learning
微调、supervised learning
微调。
对于摘要,论文使用 60K
个人类标注的样本来训练模型,这些模型可以大致描述为 "smart copiers"
:它们通常从输入中复制整个句子,但改变它们复制的内容以跳过不相关的初始文本。这种复制行为是在数据收集和训练过程中自然出现的。作者没有像 《Get to the point: Summarization with pointer-generator networks》
和 《Bottom-up abstractive summarization》
那样使用任何显式的架构机制进行复制。一种解释是,鉴于作者没有指示 labelers
惩罚 copying
,而是指示 labelers
惩罚 inaccuracy
,所以复制是一种容易的方式来实现 accurate
。这也可能反映了这样一个事实:即一些 labelers
将检查 copying
作为一种快速的启发式方法来确保摘要的准确性。事实上,相比于有监督的 fine-tuning baselines
甚至是human-written
的reference
摘要, human labelers
明显倾向于论文的模型,但是论文的模型反而比不过 lead-3 baseline
(简单地拷贝文本的前三句话)。
对于摘要,作者继续收集额外的数据,并随着策略的改善重新训练奖励模型(online data collection
)。作者还测试了offline data collection
,其中论文只使用原始语言模型的数据来训练奖励模型(而没有重新训练奖励模型)。离线数据收集大大降低了训练过程的复杂性。
TL;DR
数据集,human labelers
在 71%
的情况下更喜欢用 online data collection
训练的策略。在定性评估中,offline model
经常提供不准确的摘要。offline data collection
的效果同样很好。这可能与风格延续任务需要很少的数据有关。 《Learning to generate reviews and discovering sentiment》
表明:生成式训练的模型可以从很少的标记样本中学习情感分类。在同时进行的工作中, 《Better rewards yield better summaries: Learning to summarise without references》
也使用human evaluations
来学习摘要的奖励函数,并通过强化学习来优化该奖励函数。他们的工作对 CNN/Daily Mail
数据集上的学习策略函数和奖励函数进行了更详细的调查。
而论文 《Fine-Tuning Language Models from Human Preferences》
对更通用地探索从 human feedback
中学习、以及更大的计算规模感兴趣。因此,作者考虑了几个额外的任务,探索了 on-policy reward model training
和更多数据的效果,并同时为 reward modeling
和强化学习来微调大型语言模型。
我们以一个词表 token
序列
我们将 token
序列、输出空间 token
序列。定义 1000
个单词的文章,100
个单词的摘要。
policy
:将样本的开头固定为 token
。
这是一个强化学习策略,其中每个
action
可以视为生成一个token
,总的奖励等于的 human preference
(即,人工标注是好、还是坏)。
我们初始化一个策略 expected reward
:
然而,我们希望执行由 human judgments
定义的任务,在这种情况下,我们只能通过询问人类来了解奖励的情况。为了做到这一点,我们将首先使用 human labels
来训练奖励模型,然后优化该奖励模型。
遵从 《Deep reinforcement learning from human preferences》
的做法,我们要求 human labelers
针对给定的输入 response
。我们要求人类在四个选项 prompt
human labelers
的选择结果。在收集了一个由
由于奖励模型需要理解语言,我们遵从 GPT-1
的做法,将奖励模型初始化为语言模型策略 final embedding output
的随机线性函数(对于为什么从 scale
在整个训练中保持一致,我们将其归一化为:针对 1
。
为什么从
而不是 来初始化?因为训练过程中会周期性重新训练奖励模型,每次重新训练奖励模型都需要对它进行初始化。如果选择 来初始化奖励模型 ,那么由于 在训练过程中不断更新、且 的更新过程依赖于 的结果,因此造成一个 feedback loop
,这不利于训练。
注:读者猜测模型结构为 GPT-1
中的 Multiple Choice
。每个输入都添加了 start token
extract token
end token
)。
现在我们强化学习微调 KL
为 KL
散度。可以参考 Table 10
来了解没有这个惩罚项的后果。即,我们在修改后的奖励上执行强化学习:
我们要么选择一个常数
这个惩罚项有几个目的:
它起到了熵的作用。
它可以防止策略
因为奖励模型是通过
来初始化的,因此如果策略 距离 太远,则奖励模型的评估结果可能失效。
在我们的风格延续任务中,它也是任务定义的一个重要部分:我们要求人类评估风格,但依靠 KL
项来鼓励一致性 coherence
和主题性topicality
。
奖励模型用于判定文本生成的好坏。有两种优化奖励模型的方式:
- 监督微调:利用大量的带标记的文本来进行监督微调,此时每个被生成的文本需要评估一次(在整体上进行评估)。
- 强化学习微调:利用一个预训练好的(或者微调好的)奖励模型来进行强化学习微调,此时每个被生成的文本需要被评估多次(每生成一个
token
就在已经生成的序列上进行评估,即使生成过程尚未完成)。
我们的整体训练过程是:
通过
注意,前提是必须有一个预训练好的语言模型
。这里的 不是预训练数据集,而是下游的目标任务数据集。 注意,这里应该是
,因为奖励模型要对策略进行打分,而不是对预训练模型进行打分。但是,初始的策略 就是语言模型 。
初始化奖励模型 final linear layer
使用随机初始化,使用损失 human samples
上训练
注意,这里的
label
来自于人工标注,即human labelers
的选择结果。
在 Proximal Policy Optimization: PPO
来训练
根据
InstructGPT
,PPO
的损失函数为:其中:
为学到的 RL
策略,为策略的参数; 为预训练好的语言模型。 为强化学习的数据分布, 为 KL
系数。
在online data collection
的情况下,继续收集更多的样本(样本来自于更新后的策略
整体框架如下图所示。
注意,根据下图所示,奖励模型的样本由
policy
函数生成,而不是预训练模型 生成。这是讲得通的,因为奖励模型要对策略进行打分,而不是对预训练模型进行打分。
我们使用 774M
参数版本的 GPT-2
语言模型,在GPT-2
的 WebText
数据集、以及 50257
个 token
的 invertible BPE
(保留大写和标点符号)上进行训练。该模型是一个具有 36
层、20
个头、 embedding size = 1280
的 Transformer
。
对于风格延续任务,我们在强化学习微调之前对 BookCorpus
数据集进行监督微调(语言模型):首先在 WebText
上从头开始训练,然后在 BookCorpus
上进行监督微调,最后对我们的最终任务进行强化学习微调。
为了提高样本质量,我们在所有的实验中都使用了 logits
除以 sampling
和强化学习在 unmodified pretrained model
的较低温度。
这个
unmodified pretrained model
的较低温度是什么意思?论文未解释。
监督微调:以预训练好的语言模型作为开始,我们使用 Adam
优化器来训练奖励模型,损失为 batch size = 8
、摘要任务的 batch size = 32
,两者的学习率均为 epoch
从而过拟合于 small amount of human data,
,并禁用 dropout
。
强化学习微调:对于策略 《Openai baselines》
的 Proximal Policy Optimization
的 PPO2
版本。我们使用 2M
个 episodes
的 batch
有四个 PPO epoch
,每个 batch
有一个 minibatch
,其它超参数为默认值。我们对风格任务使用 batch size = 1024
、对摘要任务使用 batch size = 512
。我们在策略训练中禁用 dropout
。风格任务的学习率为
外层的
batch
对应于的 pair
,内层的minibatch
对应于trajectory segment
长度。我们对每个样本收集长度为 的轨迹,然后在这些轨迹上训练 4
个epoch
。
用不同的种子和相同的 KL
惩罚系数 log-space proportional controller
动态地改变
其中:
KL
值,根据具体任务来指定。通过这种方式的调节,使得
尽可能接近于 。
监督微调 baselines
:我们在 CNN/Daily Mail
和 TL;DR
训练集上微调了 1
个 epoch
(对于 TL;DR
,我们从训练集中删除了 30K
的样本作为验证集)。我们用cosine schedule
将学习率衰减到 0
。对于学习率的初始值,我们在 8
个值 。我们还试验了不同的 dropout rate
,发现 dropout rate = 0.1
的效果最好。然后我们选择了具有最佳验证损失的模型。
如果训练后的策略 zero-shot
策略 distributional shift
:在来自 human data
,通过从 online data collection
对摘要任务很重要,但对较简单的风格任务不重要。
Online data collection
影响的是奖励模型(即,状态价值函数)。
在 online
的情况下,我们将选择一个函数 PPO episode
之前我们想要多少个标签。令 PPO episodes
的总数,human labels
的初始数量,human labels
的总数。我们选择:
PPO episode
之前暂停。labelers
发送另一个 batch
的请求,以确保他们在任何时候都有至少 1000
个未完成的 query
。我们在第一个 PPO episode
之前训练奖励模型,然后在均匀间隔的 19
次。每次重新训练时,我们将奖励模型 epoch
。offline
情况是一种极端情况:
是经过 和 这两个点的二次函数,重新训练奖励模型 的点位于: human labels
总数分别为:。 注意:奖励模型
的样本不仅来自于最新的策略、还来自于历史策略、以及来自于初始的预训练模型 ,因为每次重新训练奖励模型,我们都用历史所有的 human labels
来训练。
为了估计总体进度,我们以恒定的速度收集由 human labels
给出了
为了估计 labeler-labeler
之间的一致性,5%
的 query
由不同的labeler
回答 5
次。实验部分的 label
计数包括验证样本和重复标签。
我们使用 Scale AI
来收集标签。Scale API
接受形式为 A
)、以及本文作者提供的大约 100
个样本的 comparison
数据集的组合向 Scale AI
描述任务。
与机器学习中的许多任务不同,我们的 query
没有明确的 ground-truth
,特别是对于 similar outputs
的 pair
(这在我们的训练过程中起了很大的作用,因为我们在从单个策略 label pair
上训练奖励模型 labelers
之间也存在着重大分歧。
TL;DR
摘要的 4-way comparisons
中,本文作者之间有 60%
的时间达成一致(与随机猜测的 25%
相比)。这种低的一致率使 Scale AI
的质量控制过程变得复杂。Scale labelers
的一致率为 38%
。TL;DR
摘要方面,作者本文与 Scale labelers
的一致率为 46%
。针对
comparision
的标注带有很大的主观性,因为每个人对于什么是好的、什么是生动的、什么是客观的等等这些评价标准的理解都不同。
人类数据收集和质量评估的细节(来自论文附录 B
):我们的质量保证过程是由 Scale AI
处理的。由于我们最初认为 online data collection
将是至关重要的,即使是离线实验也是在这种快速周转的要求下收集的。在未来,我们计划使用一个更宽松的延时要求。
数据收集的第一步是把任务教给少数受信任的 Scale labelers
,给他们一个任务的描述(如前文所述)。Scale AI
使用这些 labelers
收集大量的 benchmark
数据点(从 unlabeled
的数据点中),在这些数据点上,几个受信任的labelers
达成了一致。在完整的数据收集过程中,Scale AI
将这些 benchmark
数据点与真实的未标记数据一起提供给 freelance workers
进行训练(当 labeler
在 benchmark
分布上的表现维持一个confidence model
。判断数据点是来自 benchmark
还是来自真实的未标记数据,这个概率在各种因素上动态变化,如对 labeler
正确标记某个类别的信心。在 benchmark
任务上表现不佳的 freelance workers
会被过滤掉。此外,Scale AI
随着时间的推移对质量控制进行临时改进,有时通过与本文作者的少量 gold-standard labels
进行比较来验证质量。
我们在事后评估了其中两个任务的数据质量。在所有的数据收集过程中,有 5%
的 query
是由 5
个不同的 labelers
回答的。我们从这些 query
中采样 100
个(仅限于从 query
),让两名作者给每个 query
进行标注。基于这些数据,我们估计了本文作者和 Scale labelers
、labeler-labeler
、以及 author-author
之间的一致率,如下表所示。
早期的版本要求 labelers
进行 1-10
的评分。在最好的情况下,每个 labeler
提供了更多的信息,但很难衡量 labeler
的表现:
归一化是必要的,因为两个好的 labelers
往往会有一个(噪音的)monotonic transform
。
例如,
labeler A
的评分比较保守,评分集中在1~8
分;labeler B
的评分比较激进,评分集中在5 ~ 10
分。那么同样是7
分,对于这两个labeler
是不同的含义 。
如果许多分数集中在几个数值上(例如 7
和 8
),简单的策略
此时策略
只需要维持不变就可以获得较高的得分,因为强化学习微调没有见过更高的得分、也没有见过更低的得分,它不知道什么是更好的行为、也不知道什么是更差的行为。
绝对分数也倾向于在训练过程中漂移,因为 labelers
会根据变化的策略
因为策略
会在迭代过程中越来越好,所以它生成的样本的质量也越来越高。
寻找高质量的workers
涉及到 human answering
质量控制问题,质量控制在我们的实验中没有使用,并移除了低质量 workers
的数据。因此,实验的总人力成本要比我们实际使用的标签数量(也就是我们报告的内容)高一些。对于一个短期的 training run
来说,这很容易支配实际的标签要求,尽管它可以通过识别持续的good workers
在几个任务中摊销。对于我们较长的training run
,额外的标签数量并不高。
对于两个模型 A
和 B
的最终评估,我们产生了 pair
2-way comparisons
、或者 pair
4-way comparisons
。我们随机调整样本的呈现顺序,并将这些comparisons
呈现给 Scale AI
。
用Scale AI
的同一组人类来评估 由 Scale AI
训练的模型的质量是很危险的:它表明奖励 human reward
,但并不表明这些 human evaluations
捕获到了我们真正关心的东西,并且我们的模型被激励去利用标注过程的特质。我们包括我们的模型的样本,以便读者可以自己判断。
也就是说:最终评估的人、训练过程中标注的人,他们是同一波人。这类似于在训练集上进行评估。
理论上,应该使用训练过程中的标注人员之外的人来进行评估,但是这样做的成本比较高。
首先,我们通过使用 mock labeler
(在评论分类问题上训练的情感模型)作为 human labels
的替身来测试我们对语言模型进行强化学习微调的方法。我们表明强化学习微调可以有效地优化这个复杂的、但一定程度上人造的奖励。
然后,我们表明我们可以用很少的数据从人类对风格延续任务(情感和物理描述性)的偏好中优化语言模型,在情感的情况下,结果优于优化 review sentiment model
。
接着,我们将强化学习微调应用于 CNN/Daily Mail
和 TL;DR
数据集的摘要任务,表明所得到的模型本质上是 "smart copiers"
,并在其他摘要工作的背景下讨论这些结果。
我们发布了offline data
情况下的奖励建模和微调的代码。我们的公开版本的代码只适用于一个较小的 124M
参数模型,有12
层,12
个头, embedding size = 768
。我们包括这个较小模型的强化学习微调版本,以及我们为主要实验收集的一些 human labels
(注意,这些标签是从使用较大模型的运行中收集的)。
Book-Corpus
数据集的节选来生成文本的continuation
。奖励函数会自动或根据 human judgments
来评估continuation
文本的风格。我们采样长度为 32
到 64
个 token
的节选,该策略生成 24
个额外的token
。如前所述,我们将预训练模型的温度设置为 为了在受控环境下研究我们的方法,我们首先应用它来优化一个已知的奖励模型 human judgments
的一些复杂性。我们通过在 Amazon review
数据集的一个二元平衡子集上训练一个分类器从而构建奖励模型 log odds
(即,final sigmoid layer
的输入)。
在没有约束的情况下优化 incoherent continuations
,但如前所述,我们包括一个 KL
约束,迫使它靠近基于 BookCorpus
上预训练的语言模型
我们的方法的目标是只使用少量的 human queries
(即,人类标注数据)来监督微调 query
来优化
注意,
mock
情感分析任务的目标是获得良好的情感分类模型(即,奖励模型,它在 Amazon review
上已经微调过)。有两种方式可以获得:
利用强化学习直接优化奖励模型
。 此时通过策略
来生成 text continuation
,然后通过奖励模型来打分从而选择正面情感的 continuation
。利用监督微调来通过人类标注数据来优化
。
在使用强化学习直接优化奖励模型 query
来训练一个奖励模型的情况下,下图显示了 20k
到 60k
的 query
允许我们优化
监督微调的奖励模型也有
reward
,虽然它不是强化学习,但是根据定义,reward
是:文本是正面的对数几率log odds
。
因为我们知道奖励函数,我们也可以分析计算出最优策略,并将其与我们学到的策略进行比较。在对所学到的策略 KL
散度
对于给定的 continuations
,并通过
下图比较了我们的策略获得的奖励、以及在一个范围的 KL
值之间估计的最优奖励。在对 2M
个 continuations
(我们的主要实验中使用的数字)之上训练策略之后,我们的策略获得的奖励与最佳奖励之间有很大的差距,但随着更多的训练(64M episodes
)这种差距基本上被消除。
我们的策略在较大的KL
散度中继续获得更高的奖励,在这种情况下我们不能通过采样来近似选择
因为此时
和 的分布差异较大,从 中采样的样本无法代表策略 的分布。
我们将我们的方法应用于由 human judgments
定义的两个 continuation
任务:
"positive and happy"
的 continuation
。"vividly descriptive"
的 continuation
。human labelers
会收到 BookCorpus
数据集的一份节选、以及四个可能的 continuations
。他们被要求选择最佳 continuations
。论文附录 A
提供了针对 labelers
的完整指令(因为 labelers
也从论文作者标注的大约 50
个 comparisons
中学习,所以任务并不完全由指令来定义)。
为了标注任务更加自然,我们选择以句号开始和结束的节选。当采样 continuations
(这些采样的结果交给人类来判断),我们使用 rejection sampling
来确保有一个句号在 token
长度为 16 ~ 24
之间,然后在这个句号截断。在强化学习微调期间,我们通过采用固定的奖励 -1
,从而对没有这样一个句号的 continuations
施加惩罚。
我们通过动态调整 descriptiveness
任务获得 6 nat
的 KL
散度、为sentiment
任务获得 10 nat
的 KL
散度。
我们使用不同数量的 feedback
训练了一系列的模型,同时测试了 offline data collection
(其中人类只对初始语言模型的 continuation
进行评分)、以及online data collection
(其中人类不断对当前策略的 continuations
进行评分)。然后,我们将这些不同的策略相互比较,并与原始语言模型的 zero-shot
性能进行比较。
offline data collection
的情况下,奖励模型仅训练一次;online data collection
的情况下,奖励模型会周期性地重新训练(在截至到当前时刻的所有human judgments
数据上)。
结果显示在下图和下表中。每一对 model
之间的评估都是基于 1024
个 4-way continuation comparisons
,每个模型都包含两个样本,然后不同模型之间的 comparision
进行两两比较,每个评分都由 3
个人进行。
对于两个模型
A
和B
的评估,我们产生了pair
之间的 4-way comparisons
。
对于这些 continuation
任务,我们发现:
offline data collection
和 online data collection
给出了相似的性能(在情感指标上相等,在描述性指标上在线方式要略好)。
human feedback
的数据量是关键,而offline
还是online
收集方式倒不是特别关键。
强化学习微调所需的 human data
很少:5k, 10k, 20k
奖励模型的训练样本的性能相似,只在少于 5k
的样本中出现性能退化。
使用评论情感分类器训练的模型(如前文所述,即下图中的 mock
)相对于使用 human preference
优化的模型表现较差:在 77%
的情况下,labelers
更喜欢使用 real human feedback
训练的模型的输出。
我们还将我们的方法应用于两项摘要任务:CNN/Daily Mail
数据集、TL;DR
数据集。
我们采样文章或 Reddit
帖子,截断为 500
个 token
,添加 "\n\nTL;DR:"
后缀(对于 CNN/Daily Mail
则添加 "Article:\n\n"
前缀),并让策略响应最多 75
个 token
。
我们将 CNN/Daily Mail
的预训练模型的温度设置为 TL;DR
的预训练模型的温度设置为
为了使任务对人类来说更自然,我们通过截断最后一个换行符来确保文章由整句组成。当采样summary
时(这些摘要需要展示给人类),我们使用rejection sampling
来确保有一个换行符在长度为 55
到 75
个 token
之间,并在换行符处截断。在强化学习微调过程中,我们对没有换行符的摘要进行惩罚,给它们一个固定的 -1
的奖励分。
对于 CNN/Daily Mail
,我们使用固定的 KL
系数 TL;DR
,我们我们使用固定的 KL
系数
我们的方法以及 baseline
:
15k, 30k, 60k
的 human labels
训练了 online data collection
的模型,并用 60k
标签训练了 offline data collection
的模型。zero-shot
。lead-3 baseline
。我们相同的方式将 lead-3
截断在句号(参考前面关于截断所生成的摘要的描述),所以 lead-3
结果偶尔是两句话。supervised+RL
。纯粹的强化学习微调模型在训练过程中使用数据集的上下文,但忽略了reference
摘要;监督微调和supervised+RL
模型同时使用上下文和 reference
摘要。
我们报告了两组数字结果:CNN/Daily Mail
(测试集) TL;DR
(验证集)上,model pair
之间human evaluations
结果(Table 5
)、以及 ROUGE
结果(Table 4
)。
根据 Table 4
,ROUGE
指标的结果表明:
与我们的风格延续任务相比,online data collection
对最佳性能很重要。在固定的标签数量下,online data collection
往往比offline data collection
更好,其中在 60k
个标签时,CNN/DM
的 R-AVG
增益为 3
个点。
在这两个数据集上,我们看到数据量在 60k
个 human labels
之前的显著回报(尽管 human evaluation
的趋势不太明显)。
在
CNN/Daily Mail
数据集上,数据量的效果为15k > 60k > 30k
,有点奇怪?
在这两个数据集上,supervised+RL
微调是最好的,事实上,根据 ROUGE
,纯强化学习微调在所有情况下都比 supervised baseline
更差(尽管 supervised baseline
使用完整的监督训练数据集,这比 60k
样本大得多)。
Lead-3
很难被打败:它是 CNN/Daily Mail
上 R-1
和 R-2
指标的最佳模型,只有 supervised + RL
微调在 R-L
和 R-AVG
指标上打败它。
60k/30k/15k fine-tune
和60k offline fine-tune
指的是强化学习微调模型。
但我们的目标是优化人类定义的奖励而不是 ROUGE
。Table 5
显示了根据 human labelers
对 model pairs
的 pairwise comparisons
,使用1024
个样本,每个样本有 3
个 labelers
进行多数投票。这里的结果与 ROUGE
是不同的,尽管也有明显的噪音:
我们的online data collection
训练,60k
个标签的强化学习微调模型可靠地击败了zero-shot
和 supervised baseline
,甚至击败了supervised + RL
微调模型。
online data collection
训练仍然很重要,但在数据量方面的情况不太清楚,而且可能受到噪音的影响:例如,60k
的 TL;DR
模型只有 40%
的时间能击败 30k
的模型,但是在 79%
的时间上击败了 15k
的模型。
更令人担忧的是:
TL;DR
数据集上,60k
的online data collection
模型在 96%
的时间内击败了 human ground truth
(即 reference
)。CNN/Daily Mail
数据集上,60k
的online data collection
模型在 84%
的时间内击败了 human ground truth
。这到底是怎么回事?正如我们在下一节中所展示的,我们的60k
的强化学习微调模型几乎完全是extractive
的(尽管我们的模型缺乏任何显式的 extractive
的架构组件 ):它主要是从上下文中拷贝整个句子,但是对于哪个句子被拷贝,则有所变化。
以前在摘要方面的许多工作都集中在显式的拷贝机制上,包括 《Get to the point: Summarization with pointer-generator networks》
的 pointer network-based
的架构、以及 《Bottom-up abstractive summarization》
的两阶段 mask
和paraphrase
方法。我们的目标是利用拷贝的优势(这对摘要任务具有根本的重要性),而不仅仅是拷贝:任务是 abstractive
的而不是 extractive
的。Figure 5
和 Figure 6
显示了我们的模型所分别产生的新颖的和重复的 n-grams/sentences
的比例。
从新颖性方面,我们看到我们的强化学习微调一直导致模型更多的拷贝(即,从 input
文本中拷贝内容作为摘要)。
具体而言,我们的 60k
的强化学习微调模型几乎完全是 extractive
的:在 TL;DR
中,它们有 71%
的时间拷贝整个句子;在CNN/Daily Mail
中,它们有 98%
的时间拷贝整个句子。
从监督的微调模型开始应用强化学习微调(即,supervised + 60k fine-tuned
),其拷贝率要低得多:TL;DR
和 CNN/Daily Mail
分别为 6%
和 30%
。
在重复性方面(即,摘要中的句子出现多次),虽然我们没有像 《Get to the point: Summarization with pointer-generator networks》
和 《Bottom-up abstractive summarization》
那样使用明确的覆盖率 coverage
指标,但监督微调模型和强化学习微调模型在摘要中的重复率都很低。
虽然纯粹的强化学习微调模型大多是拷贝文本,但它们拷贝的地方不同。下图通过上下文和摘要之间最长公共子序列的位置说明了这一点。
为了了解模型何时从 exact beginning
拷贝,我们确定了文章中常见的前导句 preamble
(如,以 'hi', 'hello','hey', 'ok', 'okay', 'so'
这样开头的句子),这样我们就可以预期拷贝是一个糟糕的策略。下表显示,这些前导句被拷贝的频率远远低于其他文章的立即开始 immediate beginning
,这证明我们的模型在何时拷贝方面很聪明。然而,我们不能确定我们的奖励模型除了奖励拷贝之外还很聪明,因为 zero-shot
模型也跳过了前导句。
几乎所有的
baseline
都跳过了前导句。
既然结合监督微调和强化学习微调(即,supervised + 60k fine-tuned
)可以得到最好的 ROUGE
分数,而且也更 abstractive
,为什么不使用它呢?不幸的是,下表中显示纯拷贝有一个好处:它使模型很容易 tell the truth
。
注意,摘要的准确性是由人工判断的。
拷贝最多的模型,60k
的监督学习微调模型,在 TL;DR
和 CNN/Daily Mail
上的准确率是 90%
和 95%
。从文章中抽取整个句子通常会让它们是 true
的。
监督微调模型和 supervised+RL fine-tuned
的组合模型最多只有 70%
的准确率:它们转述但转述得很糟糕,经常从上下文中交换名称、或以无效的方式将多个句子混合在一起。
即,这些模型编造事实的可能性更大。
zero-shot
是最新颖的,但只有 20%
的时间是准确的。同样,《Neural text summarization: A critical evaluation》
发现,他们测试的监督的摘要模型中有 30%
的样本包含不一致 inconsistency
。而 《Sample efficient text summarization using a single pre-trained transformer》
发现,他们预训练的 encoder-decoder
模型 "hallucinates facts...which are topical but never appear in the source"
。
根据这里的结论:拷贝的方式来生成摘要,在准确性方面要更可靠一些。
对这些结果至少有两种解释方式:
第一种解释是,拷贝是最容易做到准确的方法。labelers
被告知要惩罚不准确和冗余,但没有被告知要惩罚拷贝。 zero-shot
模型在某些时候会拷贝,而当它拷贝的时候是准确的,所以这种行为被强化了(因为被 labelers
所标注的第一批样本就是来自于 zero-shot
模型)。结果是一个 "degenerated to copying"
的模型,但至少不会撒谎。
然而,这并不能解释为什么相比于 reference
摘要,我们的模型和lead-3
都被 labelers
所强烈偏好(Table 5
)。这揭示了我们希望我们的模型学习的质量概念、和 humans labelers
实际评估的质量概念之间的不匹配。
由于 online data collection
的 setting
使得质量控制更加困难,我们未能发现和惩罚拷贝这种行为。
最后,我们总结了一些经验和方向,计划在未来的reward learning
工作中考虑。
online data collection
是困难的:为了在摘要任务上取得最佳效果,online data collection
是必要的。然而,完全的online data collection
(其中每个标签都来自最新版本的策略,而该策略已经从 previous
的几乎所有标签中学习而来)有很大的缺点:
online system
将数据收集、奖励模型训练、和强化学习微调交错进行。由此产生的分布式系统比每项任务单独进行要复杂得多,减缓了软件开发的进程。此外,任何一个任务中的 bug
都会破坏整个训练过程。training run
,但一旦调试完成,就会切换回在线(直到下一个周期)。labelers
部分需要做大量的工作,使他们的数据质量机制在低延迟的在线环境中发挥作用。然而,即使在这项工作完成后,也很难在很长一段时间内保持高的数据质量,而且往往在训练完成后(或很久以后)才发现退化。由于对 labeler
性能的评估是在线的,当一个工人被检测出有问题时,他们的一些数据可能已经被上报回来并用于奖励模型的训练。我们相信,在offline data collection
和 online data collection
之间的正确中间地带是 batched data collection
,并计划在未来的工作中使用这种设置:
batch
的数据,在这批数据上训练奖励模型 batch
的从 每个 batch
数据的延迟可能远远长于 online data collection
,但是简化了质量控制。如同在完全 online data collection
的情况下,我们总是可以在迄今为止收集的所有数据上从头开始重新训练奖励模型。human data
很昂贵,所以总量会很低。移除 《Dialogue learning with human-in-the-loop》
在仿真中验证了 oneline data collection
和 batched data collection
训练的性能相似后,在一个受限的对话的 setting
中得出了类似的结论。
在
batch data collection
的情况下,也是数据收集、奖励模型训练、和强化学习微调交错进行,和online data collection
有什么区别?感觉唯一的区别是这里是
batch
粒度的数据收集,因此如果人工标注的数据有问题,可能就影响这单个batch
而已,而且更快地被发现。在下一篇论文
《Fine-Tuning Language Models from Human Preferences 》
中,OpenAI
转向了batch data collection
。
batched data collection
也是 active learning
技术的一个被充分研究的 setting
。虽然我们使用强化学习来微调策略 human data
只用于奖励模型 batch mode active learning
的监督模型的方法都适用,使用 unlabeled data distribution
。这类技术的例子包括:
selecting batches based on entropy considerations
(《Discriminative batch mode active learning》
)。《Active learning for speech recognition: the power of gradients》
、《Deep batch active learning by diverse, uncertain gradient lower bounds》
)。《Discriminative active learning》
)。奖励模型和策略之间共享参数导致过拟合:虽然奖励模型和策略都被初始化为
尽管做了几次尝试,我们还是没能使这个想法成功。问题来自于数据的巨大不平衡:我们的奖励模型最多只有 60k
个样本,但策略却有 2M
个 episodes
。这使得在不对奖励模型进行许多 epochs
和过拟合的情况下保持这两项任务的性能成为挑战。我们希望未来的工作能够克服这一挑战。
含糊不清的任务使标注工作变得困难:我们的一个代码重构引入了一个 bug
,该 bug
翻转了奖励的符号。翻转奖励通常会产生不连贯的文本,但同一个 bug
也翻转了 KL
惩罚项的符号。结果是一个对负面情绪进行优化的模型,同时仍然对自然语言进行规范化。
由于我们的指令告诉 labeler
要给显式带有性 sex
的文字的continuations
以很低的评价,模型很快就学会了只输出这种形式的内容。这个 bug
很了不起,因为其结果不是胡言乱语,而是最大限度的毒性输出。本文作者在训练过程中睡着了,所以这个问题在训练结束后才被发现。像丰田的 Andon cord
这样的机制可以防止这种情况的发生,因为它允许任何 labeler
停止有问题的训练过程。
丰田的安灯拉绳
Andon cord
机制:在发现质量和其他问题时,一线员工被授权通过执行AndonCord
(即,拉动手边的叫做安灯拉绳的绳子)来停止生产从而及时止损。
为了在各种自然语言处理任务上实现高性能,大型语言模型预训练已经变得越来越流行。当把这些模型应用于一个特定的任务时,人们通常使用监督学习对它们进行微调,通常是最大化针对 human demonstrations
数据(即,人工标注的标签)的对数似然 log likelihood
。
虽然这种策略导致了性能的明显提高,但在这种微调目标(即,最大化 human-written
文本的似然)与我们所关心的目标(即,生成人类判定的高质量的输出)之间仍然存在着 misalignment
。这种 misalignment
有几个原因:
maximum likelihood
目标没有区分重要的错误(如编造事实)和不重要的错误(如从一组同义词中选择最精确的词)。incentivized
从而将概率质量放在所有 human demonstrations
上,包括那些低质量的 human demonstrations
。distributional shift
会降低性能。通过非均匀采样策略(如,beam search
)通常可以大大改善质量,但这些策略会导致 repetition
和其他不受欢迎的人造品 artifacts
。对质量进行优化可能是克服这些问题的原则性方法。
论文 《Learning to summarize from human feedback》
的目标是:推进某些目标上训练语言模型的方法,其中这些目标能够更紧密地抓住我们所关心的行为。为了在短期内实现这一目标,论文专注于抽象式 abstractive
的英文文本摘要,因为它在NLP
界有着悠久的历史,而且是一项主观的任务(作者认为很难量化摘要的质量,因为没有human judgments
)。事实上,现有的评估摘要质量的自动化指标 automatic metrics
(如, ROUGE
)由于与 human judgments
的相关性差而受到批评。
论文遵从 《Better rewards yield better summaries: Learning to summarise without references》
和 《Fine-tuning language models from human preferences》
的工作,他们利用奖励学习 reward learning
(《Tuning recurrent neural networks with reinforcement learning》
)从human feedback
中微调语言模型:
summary pair
的 human preferences
数据集。human preferences
数据集上通过监督微调学习训练一个奖励模型reward model : RM
来预测 human-preferred
的摘要。reinforcement learning: RL
训练一个策略从而最大化奖励模型的评分。该策略在每个 "time step"
生成一个文本 token
,并根据奖励模型给整个 generated summary
的 "奖励"从而使用 PPO
算法(《Proximal policy optimization algorithms》
)来更新策略。resulting policy
的样本来收集更多的 human data
,并重复这个过程。论文遵从 GPT-3
的工作,使用大型预训练的 GPT-3
模型,参数多达 6.7B
。
论文的主要贡献有四个方面:
作者表明,在英语摘要方面,有human feedback
的训练明显优于非常强大的 baseline
。当在 Reddit TL;DR
数据集的一个版本上应用论文的方法时(如下图所示):
human feedback
训练的策略比通过监督微调学习训练的更大的模型(下图中的supervised learning
)产生更好的摘要。human demonstrations
(下图中的 reference summaries
),labelers
更喜欢来自 human feedback models
(即,human feedback
训练的策略)的摘要。论文表明:human feedback models
(即,human feedback
训练的策略)对新领域的泛化性比监督微调模型好得多。作者在 Reddit
训练的 human feedback models
也在 CNN/DailyMail: CNN/DM
数据集上生成了高质量的新闻文章摘要而无需任何针对新闻的微调,几乎与该数据集的reference summary
的质量相匹配。作者进行了若干检查,从而确保这些 human preferences
反映了真正的质量差异:作者持续监测 labelers
和 researchers
之间的一致率 agreement rate
,发现 researcher-labeler
的一致率几乎和 researcher-researcher
的一致率一样高(见论文附录 C.2
),并且作者验证了模型不仅仅是在针对长度或 amount of copying
等简单指标进行优化(见论文附录 F
和 G.7
)。
论文对所提出的策略模型和奖励模型进行了广泛的经验分析。作者检查了模型大小和数据大小的影响,研究了继续优化一个给定奖励模型时的性能,并使用合成 synthetic
的和 human-written
的扰动摘要来分析奖励模型性能。作者确认,所提出的奖励模型在预测human preferences
方面优于其他指标(如 ROUGE
),而且优化奖励模型直接导致了比优化 ROUGE
更好的摘要。
论文公开发布了 human feedback
数据集,以供进一步研究。该数据集包含 64832
个关于 TL;DR
数据集的 summary comparisons
,以及论文对 TL;DR
(comparisons
和 Likert score
)和 CNN/DM
(Likert score
)的评估数据。
作者在论文中提出的方法,部分是出于对人工智能系统与人类希望它们做的事情之间的 misalignment
的长期关注。当 misaligned summarization model
编造事实时,它们的错误是相当低风险的,而且容易被发现。然而,随着人工智能系统变得更加强大,并被赋予越来越重要的任务,它们所犯的错误可能会变得更加微妙和 safety-critical
,这使得这是一个需要进一步研究的重要领域。
相关工作:
与我们的工作最直接相关的是以前使用 human feedback
来训练带强化学习的 summarization models
的工作《Better rewards yield better summaries: Learning to summarise without references》
和 《Fine-tuning language models from human preferences》
。
《Better rewards yieldbetter summaries: Learning to summarise without references》
从 2.5k
个 human ratings
的 CNN/DM
摘要数据集中学习奖励函数,并训练一个比优化 ROUGE
指标更好的、用于摘要的策略。
我们的工作与《Fine-tuning language models from human preferences》
最为相似,他们也训练 Transformer
模型来跨一系列任务来优化 human feedback
,包括在 Reddit TL;DR
和 CNN/DM
数据集上的摘要。
与我们不同的是,他们以online
的方式进行训练,并发现该模型具有高度的 extractive
。他们指出,他们的 labelers
更喜欢抽取式摘要 extractive summaries
,与 researchers
的一致率很低。与他们相比,我们使用了大得多的模型、转向针对 collecting human feedback
的 batch setting
、确保 labeler-researcher
的高度一致、并做了一些算法上的修改(如分离策略网络 policy network
和价值网络 value network
)。
human feedback
也被用作奖励来训练其他领域的模型,如对话、翻译、语义解析、故事生成、评论生成、以及证据抽取 evidence extraction
。
我们的 reward modeling
方法是在先前关于 learning to rank
的工作中发展起来的,其中 learning to rank
已被应用于使用显性反馈或隐性反馈(以点击数据的形式)对搜索结果进行排名。
在一个相关的研究方向中,human feedback
被用来在模拟环境中训练 agents
。还有大量关于使用强化学习来优化 NLP
任务的 automatic metrics
的文献,例如用于摘要的 ROUGE
指标、用于翻译的BLEU
指标,以及其他领域的一些指标。
最后,关于修改架构和预训练程序以提高摘要性能的研究也很广泛。
我们的方法类似于《Fine-tuning language models from human preferences》
中概述的方法,适配于 batch setting
。我们从一个初始策略开始(注意,一个策略意味着一个模型),该策略在目标数据集(在我们的例子中为Reddit TL;DR
摘要数据集)上进行监督学习的微调。然后,这个过程包括三个步骤,可以反复进行,如下图所示。
step 1
:从现有策略中收集样本,并将 comparisons
发送给人类。对于每个 Reddit
帖子,我们从几个来源来采样摘要,包括当前策略、初始策略、原始的 reference summary
、以及各种 baseline
。我们将一个 batch
的 summary pair
发送给我们的human labelers
,他们的任务是选择给定 Reddit
帖子的最佳摘要。
注意,这里的摘要不仅来自于当前策略,还来自于初始策略、
reference
、以及baseline
。无论它们来自哪里,都是为奖励模型提供样本,而奖励模型仅仅关注:一个给定的摘要是好还是坏。
step 2
:从 human comparisons
中学习奖励模型。给定一个帖子和一个候选摘要,我们训练一个奖励模型来预测这个摘要是更好的摘要的 log odds
(ground-truth
由我们的 labelers
来提供,log odds
是分类器 softmax layer
的输入)。
奖励模型作为价值网络。
step 3
:针对奖励模型来优化策略。我们将奖励模型的 logit output
视为奖励,我们使用强化学习(具体而言是 PPO
算法)来优化这个奖励。
我们在下面的章节中对我们的程序进行了更详细的描述,包括奖励模型训练和策略训练的细节、以及我们的质量控制过程。在实践中,我们没有精确地迭代这一连串的三个步骤,而是在项目过程中更新了我们的数据收集程序和训练程序,同时积累了标签(详见论文附录 C.6
)。
整体架构类似于
GAN
:
- 策略函数作为生成器,用于生成摘要,使得摘要的质量尽可能高(而不是摘要的最大似然尽可能大)。
- 奖励函数作为判别器,用于判断摘要质量,从而促使策略函数不断演进。
此外,奖励函数根据收集的
human feedbacks
来独立地监督训练,而不是像GAN
中的一样进行对抗训练。
数据集:我们使用 TL;DR
摘要数据集,其中包含了来自 reddit.com
的约 3M
个帖子,涉及各种主题(subreddits
),以及原发帖人写的帖子摘要。我们还对这个数据集进行了过滤(见论文的附录 A
),从而确保质数据量,包括使用subreddits
的一个白名单(过滤之后,白名单的帖子数量分布如下表所示)。过滤规则:
内容去重:通过检查帖子主体内容来去重。
白名单过滤:过滤掉不在我们 subreddit whitelist
中的 subreddit
帖子。
Edit/Update
内容过滤:过滤掉任何标题以 "Edit"
或 "Update"
开头的帖子。
毒性内容过滤:过滤掉包含某些主题(如性图片、或自杀,这些主题是启发式方法得到)的帖子。
帖子长度过滤:过滤掉任何正文超过 512
个 token
的帖子(为了适配模型的上下文长度)。
此外还对解析后的 reference
摘要进行额外的过滤(我们使用 reference
摘要来训练 supervised baselines
):
"Edit", "Update", "P.S."
等变体开头的摘要。24
个 token
或超过48
个 token
的摘要,从而尽量减少摘要长度对质量的潜在影响。此外我们发现:短于 16
个 token
的摘要通常是低质量的。我们最终过滤的数据集包含 123169
个帖子,我们保留了 ~ 5%
作为验证集。在本文的其余部分,我们把这个数据集简称为 TL;DR
。
如下表所示,TL;DR dataset
中大约 2/3
的帖子是由 relationships
或 relationship advice
组成,这是一个相当特定的领域。这引起了对于我们模型泛化性的潜在担忧,尽管模型在 CNN/DM
新闻文章上的强大迁移性能表明它们并没有无脑地特定于 relationship advice
。
我们选择 TL;DR
数据集而不是更常用的 CNN/DM
数据集,主要是因为在 CNN/DM
上可以通过简单的 extractive baseline
获得非常强大的性能。我们在实验中发现:
CNN/DM
数据集,我们的 labelers
相比 reference summary
反而更喜欢 lead-3 summary
。low-temperature sampling
监督微调 T5
模型已经超过了 reference summary
的质量,同时还大量复制了文章内容。另一方面,在我们的 human evaluations
中,简单的 extractive baseline
在 TL;DR
上表现很差(如Figure 12
中的 Title
和 Lead-2
)。我们没有在 CNN/DM
上进行训练,而是研究了我们的 human feedback models
(即,human feedback
训练的策略)在被训练为 summarize Reddit posts
之后,向 CNN/DM
数据集的迁移性能。
任务:我们把我们的 ground-truth task
定义为:根据 human judgments
来产生一个模型,该模型生成长度小于 48
个 token
的摘要并且尽可能的好。
我们判断摘要质量的标准是:摘要在多大程度上向只能阅读摘要而不能阅读帖子的读者传达了原始帖子的内容(关于标准的进一步讨论,见论文附录 C.5
)。由于我们做 comparisons
的能力有限,所以我们雇用 labelers
为我们做 comparisons
。我们依靠详细的程序来确保 comparisons
和我们在任务上的高度一致,我们将在下一节介绍。
判断摘要质量标准的进一步讨论:我们为评价 Reddit
帖子的摘要、以及评价 CNN/DM
的新闻文章的摘要制作了单独的说明。
对于 Reddit
的指令,我们首先描述了 Reddit
的一般情况,并提供了一个表格,将Reddit的特定行话翻译成普通术语。
comparing summaries
的指令:我们在Table 6
展示了给 labelers
指令从而用于执行 comparisons
。除了这些指令之外,我们还提供了 Reddit
摘要之间的一个 labeled comparison
例子,以及对摘要的朴素解释的一个例子。labelers
提供了一套单独的详细指令,用于 7-point Likert
评估。我们首先介绍了我们所考虑的 4
个质量轴中的每一个,概述了连贯性coherence
、准确性accuracy
、覆盖率 coverage
和总分(见Table 7
)。我们还为 1
分、4
分、以及 7
分及其对应的摘要提供了一个简短的评分标准,其中注释了我们自己对这些轴的质量判断(带有解释)。FAQ
部分,回答了这项任务的 labelers
所提出的常见问题。对于CNN/DM
,我们提供了同样的指令,只是我们对如何判断新闻文章增加了一些额外的说明。我们特别要求 labelers
不那么强调句子的连贯性(因为 reference
摘要最初是以要点的形式 bullet-point form
写成的,我们不希望 labelers
对此进行惩罚),也不那么强调摘要与文章的意图相匹配(这对 Reddit
的摘要很重要)。
在质量控制方面,我们进行了论文附录 C.1
中描述的 smaller
版本的质量控制过程:
points of confusion
(指的是作者亲自下场,理解标注的难点)。instructions document
提供给 labelers
。labelers
进行任务试验,以捕捉任何 bugs
或混淆点。labelers
加入到任务中,同时我们保持回答任何问题。先前的、关于从 human feedback
中微调语言模型的工作(《Fine-tuning language models from human preferences》
)报告了 "我们希望我们的模型学习的质量概念和human labelers
实际评估的质量概念之间的不匹配" ("a mismatch between the notion of quality we wanted our model to learn, and what the humans labelers actually evaluated"
),导致模型生成的摘要按照 labelers
的说法是高质量的、但按照 researchers
的说法是相当低的质量。
与 《Fine-tuning language models from human preferences》
相比,我们实施了两个变化以提高 human data
质量:
offline setting
,其中我们交替执行:发送大批量的 comparison data
给我们的 human labelers
、并在累积的 collected data
上重新训练我们的模型。labelers
保持亲身接触的关系:我们为他们提供详细的指导,在共享的聊天室里回答他们的问题,并对他们的表现提供定期反馈。我们对所有 labelers
进行培训,以确保他们与我们的判断高度一致,并在项目过程中不断监测 labeler-researcher agreement
。详情见论文的附录 C.1
和 C.5
。作为我们程序的结果,我们获得了高度的 labeler-researcher
一致性:在comparison tasks
的一个子集上,labelers
与 researchers
的一致性为 researchers-researchers
之间的一致性为 C.2
中提供了更多关于 human data
质量的分析。
我们所有的模型都是 GPT-3
风格的 Transformer decoder
。我们对具有 1.3B
和 6.7B
参数的模型进行 human feedback
实验。
预训练模型:我们从预训练的模型开始,在一个大型文本语料库中自回归地预测 next token
。我们通过数据集中的高质量摘要的样本来填充上下文从而将这些模型作为 zero-shot baseline
。我们在论文附录 B
中提供了关于预训练的细节,并在论文附录 B.2
中提供了关于我们的 zero-shot
程序。
监督微调 baseline
:接下来,我们通过监督学习对这些模型进行微调,以预测我们过滤后的 TL;DR
数据集的摘要(详见论文附录 B
)。
此外,我们使用这些监督微调模型对初始摘要进行采样从而收集comparisons
,进而初始化我们的策略模型和奖励模型,并作为评估的 baseline
。在我们最终的 human evaluations
中,我们使用 nucleus sampling
表现更好。
为了验证我们的监督微调模型确实是强有力的、针对 comparison
的 baseline
,我们在 CNN/DM
数据集上用 6.7B
模型运行我们的监督微调程序,发现我们取得的 ROUGE
分数比来自 mid-2019
的 SOTA
模型略好(如下图所示)。
此外,我们发现:温度对 ROUGE
得分有(通常是显著的)影响,我们做了一次彻底的扫描,以验证最佳温度配置是
TL;DR
上,在 human feedback models
获得的 ROUGE
分数比监督微调模型略低,这进一步表明ROUGE
与human preferences
的相关性很差。对于监督微调模型来说,降低温度比增加模型大小有更大的影响。有趣的是,在更高的温度下,我们的 human feedback models
实际上超过了监督微调的同类模型。CNN/DM
上,ROUGE
与human evaluations
相一致,即human feedback models
比我们的监督微调模型的迁移性能更好。奖励模型:为了训练我们的奖励模型 baseline
开始,如上所述,然后添加一个随机初始化的 linear head
,该 linear head
输出一个标量值。我们训练这个模型来预测在给定一个帖子
其中:
human judgments
的数据集。在训练结束时,我们将奖励模型的输出归一化,使我们的数据集中的 reference summaries
的平均分为零。
注意,监督微调模型与奖励模型是不同的模型,虽然它们使用相同的数据集,但是它们使用不同的监督信息:
- 监督微调模型使用
reference
摘要作为监督信息。- 奖励模型使用
human comparisons
作为监督信息。
human feedback
策略:我们想用上面训练的奖励模型来训练一个策略,该策略生成更高质量的输出(基于人类的判断)。我们主要使用强化学习来做这件事,把奖励模型的输出当作整个摘要的奖励,我们用 PPO
算法(《Proximal policy optimization algorithms》
)来最大化这个奖励,其中每个 time step
是一个 BPE token
。
我们以 Reddit TL;DR
上微调的模型来初始化我们的策略。重要的是,我们在奖励中加入了一个惩罚项,该惩罚项惩学到的强化学习策略 KL
散度。完整的奖励
KL
项有两个目的:
根据
InstructGPT
,PPO
的损失函数为:其中:
为学到的 RL
策略,为监督微调的模型, 为策略的参数。 为强化学习的数据分布, 为 KL
系数。
对于PPO
的价值函数 value function
,我们使用一个与策略完全分离参数的 Transformer
。这可以防止价值函数的更新在训练的早期部分破坏预训练的策略(消融实验的结果如下图所示)。我们将价值函数初始化为奖励模型的参数。在我们的实验中,奖励模型、策略函数、以及价值函数的规模是一样的。
注意,理论上奖励模型和价值函数可以合二为一,但是论文为什么要将它们分离开来?个人猜测是因为离线数据收集的缘故:如果奖励模型和价值函数合二为一,那么当奖励模型被重新训练时,价值函数不可用(正在训练过程中)。
将二者分离分开,使得奖励模型的训练与价值函数的使用之间相互独立。一旦奖励模型训练完毕,就用它的最新权重去初始化价值函数,使得价值函数始终成为奖励模型的最新版本的
copy
。
所有的模型都遵循标准的 Transformer
架构,positional embedding
维度为 2048
。所有模型都是用 fp16 activations
和Adam
优化器训练的。几乎所有的 supervised baselines
、奖励模型、以及强化学习模型都是用 fp32
权重训练的,唯一例外的是我们的TL;DR supervised baselines
是用fp16
权重训练的。所有的模型都是用与 GPT-3
中相同的 BPE
编码进行训练。
在预训练期间,模型被训练为预测由 Commoncrawl, Webtext, book, Wikipedia
组成的大型文本语料库的 next token
。
1 ~ 3
个 epochs
之间,总共有 200 ~ 300 B
个 token
。short warmup
的 cosine schedule
,最终学习率衰减到最大值的 10%
。batch size
在整个训练过程中逐步上升到某个最大值,其中每个输入有 2048
个 token
。每个模型的超参数如下表所示。
对于supervised baselines
,我们从预训练的模型中初始化模型。
cosine schedule
来衰减学习率,初始学习率从 7
个值中选择(这七个值来自于 log linear sweep
) 。这导致我们在 TL;DR
数据集上 1.3B, 3B, 6.7B, 13B
大小的模型的学习率分别为 6.35e-5, 5.66e-5, 2.83e-5, 2.83e-5
,而在 CNN/DM
数据集上 6.7B
模型的学习率为 2.38e-5
。batch size = 128
并微调一个 epoch
。对于奖励模型,我们初始化为supervised baseline
,但在奖励模型的顶部有一个reward head
,其权重根据
我们训练一个 epoch
,用 cosine schedule
衰减学习率,初始学习率从 7
个值中选择(这七个值来自于 log linear sweep
)。
我们还在 3 ~ 10
个种子之间进行 sweep
,并选择在验证集表现最好的奖励模型,因为我们发现数据迭代顺序和奖励头初始化都会影响结果。对于我们的main
结果,1.3B
和 6.7B
奖励模型的学习率分别为 1.5e-5
和 5e-6
。
我们使用 batch size = 64
,并训练一个 epoch
。
对于PPO
,我们用分离的策略网络和价值网络,将我们的策略网络初始化为 supervised baseline,
,将我们的价值网络初始化为奖励模型。
我们为 advantage estimation
设置了 batch
的 rollouts
优化了 4
个 epoch
。
即,外层的
batch
对应于的 pair
,内层的minibatch
对应于trajectory segment
长度。我们对每个样本收集长度为 的轨迹,然后在这些轨迹上训练 4
个epoch
。这里的rollouts
指的就是轨迹。
我们使用了一个线性学习率衰减 schedule
,根据少量的实验和粗略的模型大小推断,设置 1.3B
模型的初始学习率为1.5e-5
、6.7B
模型的初始学习率为 7e-6
。
在我们报告结果的两个 main
运行中,我们使用了 0.05
的 KL
系数。
我们对 1.3B
模型使用 batch size = 512
、对 6.7B
模型使用 batch size = 256
,并运行 1M
个 episodes
。
用 human feedback
训练出来的策略比更大的监督模型更受欢迎。
我们在 TL;DR
上评估 human feedback
策略的主要结果显示在下图中。我们评估策略质量为:在数据集中,在策略生成的摘要和 reference
摘要之间,人类更喜欢策略生成的摘要的占比。在这个指标上:
human feedback
训练出来的策略明显优于我们的监督微调 baseline
:我们的 1.3B
的human feedback model
显著优于 10
倍规模的监督微调模型( 61% vs 43%
)。6.7B
模型反过来又明显优于我们的 1.3B
模型,这表明使用 human feedback
的训练也得益于规模。human feedback model
都被人类判定为优于数据集中使用的 human demonstrations
(即 reference
摘要)。控制摘要的长度:在判断摘要质量时,摘要长度是一个混杂因素 confounding factor
。摘要的目标长度是摘要任务的隐式部分:根据所需的简洁性 conciseness
(较短的摘要)和覆盖度 coverage
(较长的摘要)之间的权衡,较短或较长的摘要可能更好。
由于我们的模型学会了生成较长的摘要,长度可能是我们质量改进的主要原因。我们策略产生的摘要要比 reference
摘要更长,因为我们对策略限制了生成 24 ~ 48
个 token
的摘要。
我们发现,在控制了摘要长度之后(见论文附录 F
),我们的 human feedback model
相对于 reference
摘要的偏好下降了大约 5%
。即便如此,我们的 6.7B
模型的摘要仍然比 reference
摘要在大约 65%
的时间更受欢迎(如下图 (b)
所示)。
注意:下图
(b)
是通过一个逻辑回归模型来拟合曲线的。
我们的策略是如何相对于 baseline
得到改进的?
为了更好地了解我们的模型摘要与 reference
摘要、 supervised baseline
的摘要相比的质量,我们进行了一项额外的分析,即human labelers
使用七个等级的 Likert
从四个方面(或 "轴")评估摘要质量。Labelers
对摘要的覆盖度(原帖中的重要信息被覆盖的程度)、准确性(摘要中的 statements
在多大程度上被原始帖子所述)、连贯性(摘要本身有多容易阅读)、以及整体质量进行评分。
结果(如下图所示)表明:我们的 human feedback model
在质量的每个维度上都优于 supervised baseline
,特别是覆盖度。
尽管我们的human labelers
对给出完美的 overall
质量分有很高的要求,但来自我们 6.7B PPO
模型的摘要在 45%
的时间里达到了 7/7
的整体质量分。相比之下,6.7B
的 supervised baseline
和 reference
摘要的整体质量分达到 7/7
的时间分别为 20%
和 23%
。
注:
45%
、20%
、23%
这些数据,在原始论文中并没有相应的表格给出详细说明。
我们的 human feedback models
(即,强化学习得到的模型)也可以在没有任何进一步训练的情况下生成优秀的 CNN/DM
新闻文章的摘要(如下图所示):
human feedback models
的表现显著优于在 TL;DR
上通过监督学习所微调的模型、以及仅在预训练语料上训练的模型。6.7B
的 human feedback model
的表现几乎与在 CNN/DM
的 reference
摘要上微调的 6.7B
模型一样好,尽管我们的模型所生成的摘要短得多。由于我们迁移到 CNN/DM
的 human feedback models
与在 CNN/DM
上训练的模型在摘要长度分布上几乎没有重叠,前者的平均 token
长度大约是后者的一半,所以它们很难直接比较。在下图 (b)
中,我们显示了不同摘要长度下的平均 overall score
,这表明如果我们的 human feedback models
生成更长的摘要,其表现会更好。从质量上看,来自human feedback models
的 CNN/DM
摘要一致地是文章的流畅和合理的表达。我们在论文的附录 H
中展示了一些例子。
注意:下图
(b)
是通过一个逻辑回归模型来拟合曲线的。
当我们优化奖励模型时发生了什么?
奖励模型并不能完美地代表我们的labeler preferences
,因为它只有有限的容量,而且只能看到来自相对狭窄分布(关于摘要的分布)的少量 comparison data
。虽然我们可以希望我们的奖励模型能够泛化到训练期间未见过的摘要,但不清楚人们可以针对奖励模型进行多大程度的优化。
为了回答这个问题,我们创建了一系列策略,这些策略采用我们奖励模型的早期版本 earlier version
(这些早期版本的奖励模型具有不同的优化强度 optimization strength
),并要求 labelers
将策略生成的摘要与 reference
摘要进行比较。下图显示了 PPO
在在一系列 KL
惩罚系数(即,
根据
,通常采用动态的 从而满足固定的 KL
值。因此当值不同时, 也发生变化。
labelers
的评估)。labelers
反相关(因为策略产生了的样本是奖励模型没有见过的,导致奖励模型误判)。尽管这显然是不可取的,但我们注意到这种过度优化 over-optimization
也发生在 ROUGE
中。类似的行为在机器人领域的学到的奖励函数中也被观察到。随着
距离 越来越远,奖励模型对策略 生成的样本的误判越来越严重:奖励模型认为是好的样本,而 labelers
标注的结果是坏的样本。
reward modeling
是如何随着模型规模和数据规模的增加而 scale
的?
我们进行了一次消融实验,以确定数据规模和模型大小如何影响奖励模型的性能。我们训练了 7
个奖励模型,模型规模从 160M
到 13B
参数,在来自我们数据集的 8k
到 64k
的 human comparisons
上训练。我们发现:
1.1%
。1.8%
。奖励模型学到了什么?
我们通过在几个验证集上评估我们的奖励模型来探索它。我们在论文附录 G.6
中展示了完整的结果,并在此强调了这些结果:
我们发现:我们的奖励模型泛化到评估CNN/DM
摘要(论文附录 G.7
),在 62.4%
和 66.5%
的时间内与 labeler preferences
相一致(分别对应于我们的 1.3B
和 6.7B
模型)。我们的 6.7B
奖励模型几乎与 labeler-labeler
之间的 66.9%
的一致率相匹配。
我们还发现,我们的奖励模型对摘要中微小的、但是语义上重要的细节很敏感。
我们构建了一个额外的验证集,让 labelers
对摘要进行最小的编辑来改进它们。我们的奖励模型倾向于经过编辑的摘要的频率(1.3B
模型为 79.4%
、6.7B
模型为 82.8%
),这几乎与单独的 human evaluators
偏好经过编辑的摘要的频率(84.1%
)一样。
此外,当比较 reference
摘要、以及参与者角色颠倒的干扰摘要时,我们的模型可靠地选择了 reference
摘要(1.3B
模型为 92.9%
的时间,6.7B
模型为 97.2%
的时间)。
然而,我们的模型偏向于较长的摘要:我们的6.7B
模型仅在 62.6%
的时间里更喜欢使摘要变短的改进编辑(与人类的 76.4%
相比)。
评估:我们研究了各种自动化指标作为 human preferences
的预测器的效果,并将它们与我们的奖励模型进行比较。
具体而言,我们研究了 ROUGE
、摘要长度、从帖子中拷贝的数量、以及我们的基线监督模型下的log probability
。我们在论文附录 G.7
中列出了这些指标之间的一致率的完整矩阵(如下图所示)。
我们发现:
我们学到的奖励模型始终优于其他指标,甚至在从未训练过的 CNN/DM
数据集上也是如此。
ROUGE
未能跟踪 track
样本质量,而我们的模型可以改进跟踪。
supervised baseline models
的样本时,ROUGE
与 labelers
的一致率为 57%
。human feedback model
的样本,ROUGE
与 labelers
的一致率下降到 50%
。human feedback models
的样本时,ROUGE
与 supervised log probability
的一致率降至 50%
;而我们的奖励模型与 supervised log probability
的一致率仍高于随机表现(62%
)。扩大监督模型的规模并不能可靠地改善奖励模型与 labelers
在 supervised log probability
上的一致性。
优化:在下图中,我们展示了使用简单的优化方案对 ROUGE
进行优化并不能持续提高质量,这一点在 《A deep reinforced model for abstractive summarization》
中已经被指出。与针对我们的奖励模型的优化相比,针对 ROUGE
的优化达到峰值的时间更早,质量也大大降低。
代表迭代轮次, RM
代表奖励函数reward model
。
局限性:我们工作的一个局限性是生成最终模型所需的时间和成本。
值得注意的是,用强化学习对我们的 6.7B
模型进行微调需要大约 320 GPU-days
。
与之前的工作相比,我们的数据收集程序也很昂贵:训练集花费了数千 labeler hours
,并且需要大量的 researcher time
来确保质量。由于这个原因,我们无法收集 baseline
,如同等数量的高质量 human demonstrations
的 supervised baselines
。更多讨论见附录 D
。我们把这种消融留给未来的工作。
尽管如此,我们相信奖励模型更有可能扩展到那些提供良好 demonstrations
的技能密集型 skill-intensive
的或耗时的任务。
未来的方向:
本文的方法可以应用于任何人类可以比较样本的任务,包括对话、机器翻译、问答、语音合成、以及音乐生成。我们预期这种方法对生成较长的样本特别重要,因为在这种情况下,maximum likelihood samples
的 distributional shift
和退化会产生问题。通过训练跨许多任务来预测human feedback
,也许可以提高样本效率。
这些生成任务都是优化样本的最大似然。
我们对将 human feedback
扩展到人类不容易评估模型输出质量的任务中特别感兴趣。在这种情况下,识别一个机器学习系统是否 align to
人类设计者的意图,这是特别具有挑战性的。一种方法是训练机器学习系统来帮助人类快速而准确地完成评估任务。
除了二元比较之外,还有丰富的human feedback
方法,可以针对训练模型来探索这些方法。例如,我们可以从labelers
那里获得高质量的demonstrations
、让labelers
编辑模型输出以使其更好、或者让labelers
提供解释从而说明他们为什么喜欢一个模型输出而不是另一个。所有这些human feedback
都可以作为一个信号来训练更有能力的奖励模型和策略。
更广泛的影响:我们在本文中探讨的技术是通用技术,可以用于各种机器学习应用,用于任何人类可以评估模型输出质量的任务。因此,其潜在的影响是相当广泛的。
我们的研究主要是出于如下的潜在的积极效果:使机器学习算法 align to
设计者的偏好。许多机器学习应用优化了简单的指标,这些指标只是设计者意图的粗略代理。这可能会导致一些问题,比如 Youtube
的推荐会促进点击诱饵 click-bait
。在短期内,改进直接从human preferences
中学习和优化的技术,可能会使这些应用更符合人类的福祉。
然而从长远来看,随着机器学习系统的能力越来越强,要确保它们的行为安全可能会越来越困难:它们所犯的错误可能更难发现,后果也会更严重。例如,写一篇不准确的新闻摘要既容易被发现(人们只需阅读原文),后果也相当低。另一方面,模仿人类驾驶可能比优化 human preferences
更不安全(因为模仿驾驶出问题的后果相当严重)。我们相信,我们在本文中探讨的技术是一种有希望的步骤从而缓解这种强有力系统的风险,并使它们更好地 align to
人类关心的东西。
不幸的是,我们的技术也使恶意行为者能够更容易地训练造成社会伤害的模型。例如,人们可以利用 human feedback
来微调语言模型,使其更具说服力并操纵人类的信念、或者诱导人类对技术的依赖、或者产生大量的有毒或有害的内容从而伤害特定的个人。避免这些结果是一个重大的挑战,没有什么明显的解决方案。
用 human feedback
训练的大型模型可能对许多群体产生重大影响。因此,对于我们如何定义 labelers
会强化的 "好的" 模型行为,必须要谨慎。决定什么是好的摘要是相当直截了当的,但是对于具有更复杂目标的任务,不同的人可能对正确的模型行为有不同的意见,因此决定什么是好的行为将需要非常小心。
在这些情况下,使用 researcher labels
作为 "黄金标准" 可能是不合适的。相反,来自受技术影响的群体的个人应该被纳入到定义 "好" 的行为的过程中,并被聘为 labelers
从而加强模型中的这种行为。
我们选择在 Reddit TL;DR
数据集上进行训练,因为该数据集上的摘要任务比 CNN/DM
上明显更具挑战性。然而,由于该数据集由用户提交的帖子组成,且审核度极低,它们往往包含冒犯性或反映有害社会偏见的内容。这意味着我们的模型可能会产生有偏见的或令人反感的摘要,因为它们已经被训练为总结此类内容。出于这个原因,我们建议在将我们的模型部署到面向用户的应用中之前,要彻底研究其潜在的危害。
最后,对于以前只能由人类完成的任务,通过提高机器学习算法执行这类任务的能力,我们正在增加许多工作被自动化的可能性,可能会导致大量的工作流失。如果没有合适的政策来缓解大规模失业的影响,这也可能导致重大的社会危害。
给定一些任务的样本作为输入,large language model: LLM
可以被 "提示prompted
" 从而执行一系列的自然语言处理任务。然而,这些模型经常表现出一些非预期的行为,如:编造事实、生成有偏见或有毒的文本、或者干脆不遵循用户的指令。这是因为最近许多大型语言模型所使用的语言建模目标(即,预测来自互联网的网页上的 next token
)与 "follow the user’s instructions helpfully and safely"
的目标不同。因此,论文《Training language models to follow instructions with human feedback》
(即,InstructGPT
)说:语言建模的目标是 misaligned
的。避免这些非预期的行为,对于在成百上千个应用中部署和使用的语言模型来说,尤其重要。
论文《Training language models to follow instructions with human feedback》
在 align
语言模型方面取得进展,其中通过训练语言模型使其按照用户的意图行事。这既包括显式的意图(如,遵循指令),也包括隐式的意图(如,保持真实,没有偏见、没有毒性、或其它伤害性)。使用 《A general language assistant as a laboratory for alignment》
的语言,InstructGPT
的作者希望语言模型是 helpful
的(它们应该帮助用户解决他们的任务)、honest
的(它们不应该捏造信息或误导用户)、以及 harmless
的(它们不应该对人或环境造成生理、心理或社会伤害)。论文在后面内容中详细阐述了对这些标准的评估。
作者专注于微调方法从而 aligning
语言模型。具体而言,作者使用来自人类反馈的强化学习 reinforcement learning from human feedback: RLHF
来微调 GPT-3
从而遵循广泛的书面指令(如下图所示)。这项技术使用 human preferences
作为奖励信号来微调 GPT-3
。
首先,作者根据候选合同工 contractors
在筛选测试中的表现,雇用了一个由 40
名contractors
(他们是labelers
)组成的团队来标注数据。筛选测试见后面的内容。
然后,作者收集了一个数据集,该数据集包含关于一些 prompts
的理想输出行为desired output behavior
(由labelers
撰写的 demonstration
)。这些 prompts
包括被提交给 OpenAI API
的、以及一些labelers
提供的。论文用这个数据集来训练 supervised learning baseline
。
因为很多用户在调用
OpenAI API
,因此OpenAI
可以从日志记录中获取很多prompts
。这一步是通过比较小的数据集,利用监督学习微调,从而得到一个良好的初始模型(作为初始策略)。
这里的
prompt
就是代表了用户意图的指令,而labeler
撰写的demonstration
就是ground-truth
用于生成模型的监督信号。
然后,作者收集了一个人工标注的 comparison
数据集,这个 comparison
数据集比较了在更大的 API prompt
集合上的输出(labelers
对同一个 prompt
的多个模型输出进行人工排序)。
对于相同的
prompt
,这里有来自相同模型的不同输出(因为随机采样的原因)、也有不同模型的输出(因为我们有各种各样的模型)。
作者在这个数据集上训练一个奖励模型reward model: RM
,从而预测 labelers
会更喜欢哪个 model output
。
奖励模型的目的是考察哪个被生成的文本更能匹配
prompt
,而不关心这些文本是如何生成的。当然,最新的策略函数作为模型之一,使得奖励模型见过策略函数的输出,使得奖励模型能够对策略函数的输出结果打分。
最后,作者使用这个奖励模型作为奖励函数,并通过 PPO
算法(《Proximal policy optimization algorithms》
)来强化学习微调 supervised learning baseline
从而最大化这个奖励。
注意,微调有两种:一种是监督微调,一种是强化学习微调。
这个过程如下图所示。这个过程使 GPT-3
的行为与特定人群(主要是论文的labelers
和researchers
)的声明偏好 stated preference
相一致,而不是任何更广泛的 "人类价值human value
" 概念。作者把得到的模型称为 InstructGPT
。
论文主要通过让labelers
在论文的测试集上对模型输出的质量进行评估,测试集由来自 held-out customer
(在训练数据中没有出现)的 prompt
组成。论文还在一系列公共的自然语言处理数据集上进行了自动化评估 automatic evaluation
。论文训练三种规模的模型(1.3B
、6B
和 175B
参数),所有的模型都使用 GPT-3
架构。论文的主要发现如下:
与 GPT-3
的输出相比,labelers
明显更喜欢 InstructGPT
的输出。
在测试集上,尽管参数少了 100
多倍,但 1.3B
参数的 InstructGPT
模型的输出却比 175B
参数的 GPT-3
的输出更受欢迎。这些模型具有相同的架构,不同之处仅在于:InstructGPT
在 human feedback data
上进行了微调。即使作者在 GPT-3
中加入了 few-shot prompt
从而使其更好地遵循指令,这一结果也是成立的。
175B InstructGPT
的输出在 175B GPT-3
的输出更受欢迎,而在 few-shot 175B GPT-3
更受欢迎。InstructGPT
模型还根据labelers
生成了更合适的输出,并更可靠地遵循指令中的显式约束 explicit constraint
。
InstructGPT
模型在真实性方面比 GPT-3
有所提高。
在 TruthfulQA benchmark
中,InstructGPT
产生真实的和有信息的答案的频率是 GPT-3
的两倍。在没有针对 GPT-3
进行对抗性选择 adversarially selected
的问题子集上,InstructGPT
的结果同样强大。在 API prompt distribution
的 "closed-domain"
任务中,其中输出不应该包含输入中不存在的信息(如摘要和 closed-domain QA
),InstructGPT
模型编造输入中不存在的信息的频率约为GPT-3
的一半(分别为 21%
和 41%
的幻觉率 hallucination rate
)。
InstructGPT
在毒性方面比 GPT-3
有小的改进,但没有偏见 bias
。
为了测量毒性,论文使用 RealToxicityPrompts
数据集,并同时进行自动化评估和人工评估。在遵从 prompt
的情况下,InstructGPT
模型产生的毒性输出比 GPT-3
少 25%
左右。在 Winogender
和 CrowSPairs
数据集上,InstructGPT
比 GPT-3
没有明显改善。
可以通过修改 RLHF
微调程序,将公共自然语言处理数据集上 InstructGPT
的性能退化降到最低。
在 RLHF
微调过程中,作者观察到在某些公共自然语言处理数据集上InstructGPT
与 GPT-3
相比有性能退化,特别是 SQuAD, DROP, HellaSwag, WMT 2015 French-to-English translation
。这是一个 "对齐税alignment tax
"的例子,因为论文的 alignment procedure
是以降低我们可能关心的某些任务的性能为代价的。可以通过将 PPO update
与增加pretraining distribution
的 log likelihood
的 update
混合在一起(PPO-ptx
),从而大大减少这些数据集上的性能退化,而且不影响labelers
的偏好得分。
InstructGPT
可以推广到没有产生任何训练数据的 "held-out labelers"
的偏好。
为了测试InstructGPT
的泛化性,论文对 held-out labelers
进行了初步实验,发现他们对 InstructGPT
的输出与 GPT-3
的输出的偏好率与 training labelers
大致相同。然而,我们还需要做更多的工作来研究这些模型在更广泛的用户群体中的表现,以及它们在人类预期行为有分歧的输入中的表现。
公共自然语言处理数据集并不能反映出语言模型的使用情况。
作者将 GPT-3
在两类数据上监督微调:
第一类数据是 human preference data
(即 InstructGPT
所使用的)。
这个就是监督微调
baseline
。
第二类数据由两个不同的公共自然语言处理任务的数据:FLAN
和 T0
(《Multitask prompted training enables zero-shot task generalization》
)(尤其是 T0++
变体)。这些数据集由各种自然语言处理任务组成,并且每个任务结合了自然语言指令。
得到的分别是
FLAN
和T0
上监督微调的模型。
在 API prompt distribution
上:
FLAN
和 T0
模型(即,在这两个数据集上监督微调得到的 GPT-3
)的表现比监督微调 baseline
(即,在 labelers demonstration
上监督微调得到的 GPT-3
)略差。
这表明在公共数据集上微调的模型,在应用到具体场景中还是有性能的
gap
。
而labelers
明显更喜欢 InstructGPT
而不是这些模型(InstructGPT
与监督微调 baseline
相比有 T0
和 FLAN
模型与监督微调 baseline
相比分别只有
InstructGPT
模型对 RLHF finetuning distribution
之外的指令表现出了很好的泛化能力。
作者定性地探究了 InstructGPT
的能力,发现它能够遵从指令从而用于 summarizing code
,回答关于 code
的问题,有时还能遵循不同语言的指令,尽管这些指令在 fine-tuning distribution
中非常罕见。
相比之下,GPT-3
也能完成这些任务,但需要更仔细的 prompting
,而且通常不遵循这些领域的指令。这一结果令人激动,因为这表明 InstructGPT
能够泛化 "following instructions"
的概念。即使在模型得到很少直接监督信号的任务上,模型也会保留一些 alignment
。
InstructGPT
仍然会犯一些简单的错误。
例如,InstructGPT
仍然会不遵循指令、编造事实、对简单的问题给出冗长的对冲回答 hedging answer
(即,正反两个方面都回答)、或者不能检测到具有错误前提的指令。
总体而言,论文的结果表明:利用 human preferences
对大型语言模型进行强化学习微调可以大大改善它们在各种任务中的行为,尽管在提高它们的安全性和可靠性方面还有很多工作要做。
相关工作:
关于从human feedback
的 alignment
和 learning
的研究:我们建立在以前的技术上,使模型 align to
人类的意图,特别是来自human feedback
的强化学习 reinforcement learning from human feedback: RLHF
。
RLHF
最初是为在模拟环境和 Atari
游戏中训练简单的机器人而开发的,最近被应用于微调语言模型以总结 summarize
文本。这项工作反过来又受到在对话、翻译、语义解析 semantic parsing
、故事生成、评论生成和证据抽取 evidence extraction
等领域使用 human feedback
作为奖励的类似工作的影响。
《Memory-assisted prompt editing to improve gpt-3 after deployment》
使用 written human feedback
来增强 prompt
,并提高 GPT-3
的性能。text-based environments
中使用具有规范先验 normative prior
的强化学习来 agent
(《Training value-aligned reinforcement learning agents using a normative prior》
)。我们的工作可以被看作是 RLHF
在 broad distribution
的语言任务上对于 aligning language model
的直接应用。
最近,语言模型 alignment
的意义也受到了关注。
《Alignment of language agents》
对语言模型中因 misalignment
导致的行为问题进行了分类,包括产生有害的内容、以及博弈错误的目标。《A general language assistant as a laboratory for alignment》
提出将语言助手 language assistants
作为 alignment research
的测试平台,研究一些简单的 baseline
,以及它们的scaling
特性。训练语言模型来遵从指令 follow instruction
:我们的工作也与语言模型的跨任务泛化研究有关,其中语言模型在广泛的公共自然语言处理数据集(通常以适当的指令为前缀)上进行微调,并在一组不同的自然语言处理任务上进行评估。
这个领域有一系列的工作,这些工作在训练和评估数据、指令的格式、预训练模型的大小、以及其他实验细节方面都有所不同。各项研究的一致发现是:在一系列自然语言处理任务上对语言模型进行带指令的微调,可以提高语言模型在 held-out
任务上的下游性能,无论是在 zero-shot setting
还是在few-shot setting
的情况下。
还有一个相关的工作是用于导航 navigation
的 instruction following
,其中模型被训练为遵从自然语言指令从而在 simulated environment
中导航。
评估语言模型的危害 harm
:修改语言模型行为的一个目标是缓解这些模型在现实世界中部署时的危害。这些风险已经有了广泛的记录。语言模型可以产生有偏见的输出 biased output
、泄露私人数据、产生错误的信息、以及被恶意使用。对于一个全面的回顾,我们建议读者阅读 《Ethical and social risks of harm from language models》
。
在特定领域部署语言模型会产生新的风险和挑战,例如在对话系统中。有一个新兴但不断增长的领域,旨在建立 benchmark
来具体评估这些危害,特别是围绕毒性toxicity
、思维定势stereotype
、以及社会性的偏见social bias
。
在这些问题上取得重大进展是困难的,因为对语言模型行为的善意干预可能会产生副作用。例如,由于训练数据中的偏见关联prejudicial correlation
,减少语言模型的毒性的努力可能会降低其对 under-represented groups
的文本建模的能力。
修改语言模型的行为从而缓解危害:有很多方法可以改变语言模型的生成行为 generation behavior
。
《Process for adapting language models to society (palms) with values-targeted datasets》
在一个小型的、value-targeted
的数据集上对语言模型进行了微调,这提高了模型在问答任务中坚持这些 value
的能力。
《Mitigating harm in language models with conditional-likelihood filtration》
对预训练数据集进行了过滤,它删除了一些文档,在这些文档上语言模型有很高的条件概率来生成一组由researchers
书写的 trigger phrase
。当在这个过滤过的数据集上进行训练时,他们的语言模型产生的有害文本较少,代价是语言建模性能略有下降。
trigger phrase
类似于黑名单,由researchers
来预先指定。
《Recipes for safety inopen-domain chatbots》
使用了多种方法来提高聊天机器人的安全性,包括数据过滤、在生成过程中阻止某些单词或 n-grams
、safety-specific control tokens
,以及human-in-theloop
的数据收集。
其他缓解语言模型产生的偏见的方法有:word embedding regularization
、数据增强、null space projection
以使敏感 token
的分布更加均匀、不同的目标函数,或因果干涉分析 causal mediation analysis
。
还有一些工作是利用第二个(通常是较小的)语言模型来引导语言模型的生成,这个想法的变体已经被应用于减少语言模型的毒性(《Self-diagnosis and self-debiasing: A proposal for reducing corpus-based bias in nlp》
)。
我们的方法遵循 《Fine-tuning language models from human preferences》
和 《Learning to summarize from human feedback》
的方法,他们将其应用于文风延续 stylistic continuation
和摘要任务。我们从一个预训练的语言模型、一个 prompt
分布(在这个分布上我们希望我们的模型产生 aligned output
)、以及一个训练有素的 human labelers
团队作为开始。然后,我们应用以下三个步骤(参考下图):
第一步:收集 labeler demonstration
数据,并训练一个有监督的策略 supervised policy
。
我们的labelers
在 input prompt distribution
上提供所需行为的 demonstration
。然后,我们使用监督学习在这些数据上监督微调一个预训练的 GPT-3
模型。
注意,
GPT-3
模型是预训练好的,这里仅仅是微调。监督微调好的模型作为初始策略。
第二步:收集 labeler comparison
数据,并训练一个奖励模型 reward model
。
我们收集模型输出之间的comparisons
的一个数据集。在这个数据集中,对于给定的输入,labelers
指出他们更喜欢哪一个输出。然后我们训练一个奖励模型来预测人类喜欢的输出。
第三步:使用 PPO
(《Proximal policy optimization algorithms》
)对奖励模型进行策略优化。
我们使用奖励模型的输出作为 scalar reward
。我们强化学习微调 supervised policy
,从而使用PPO
算法优化该奖励。
步骤二和三可以连续迭代:在当前的最佳策略上收集更多的 labeler comparison
数据,用来训练新的奖励模型,然后再训练新的策略。在实践中,我们的大部分 comparison
数据来自我们的 supervised policy
,还有一些来自我们的 PPO policy
(即,通过 PPO
微调的 supervised policy
)。
我们的 prompt
数据集主要由被提交给 OpenAI API
的 text prompt
组成(由客户提交的),特别是那些在 Playground
界面上使用早期版本的 InstructGPT
模型(通过监督学习在我们的 demonstration data
的子集上训练)。 使用 Playground
的客户被告知:他们的数据可以被用于训练进一步的模型。在本文中,我们没有使用生产环境中使用 API
的客户的数据。
我们启发式地对 prompt
去重(共享长的公共前缀的 prompt
被认为是重复的),并且我们将每个 user ID
的 prompt
数量限制在200
个。我们还根据 user ID
创建了训练集、验证集和测试集,因此验证集和测试集不包含训练用户的数据。为了避免模型学习潜在的敏感的客户细节,我们在训练集中过滤了所有的个人身份信息 personally identifiable information: PII
。
训练集/验证集/测试集是通过
user ID
来拆分的。每个
user ID
的prompt
限制为200
个,使得prompt
的分布比较均匀。必须有一个训练好的
InstructGPT
模型部署到OpenAI API
,这个训练好的InstructGPT
模型如下文所述。
为了训练最开始的 InstructGPT
模型,我们要求labelers
自己写 prompts
。这是因为我们需要一个 instruction-like prompt
的 initial source
来引导这个过程,而这些类型的 prompts
很少通过 API
提交给常规 GPT-3
模型。我们要求labelers
写三种类型的 prompt
:
即,使用
OpenAI API
的用户很少会提交这些类型的prompts
,因此需要让labelers
人工构造。
Plain
:我们简单地要求labelers
想出一个任意的任务,同时确保任务有足够的多样性。Few-shot
:我们要求labelers
想出一个指令,以及针对该指令的多个 query/response pair
。User-based
:我们有一些准备提交给 OpenAI AI
的 use-cases
,我们要求labelers
想出与这些 use-cases
相对应的 prompt
。从这些 prompt
中,我们产生了三个不同的数据集,用于我们的微调程序:
我们的 supervised fine-tuning: SFT
数据集,带有labelers
的 demonstration
,用于训练我们的 SFT
模型。
对于SFT
,请注意,相比较于 customer prompts
,我们有更多的 labeler-written prompts
。这是因为,在项目开始时,我们让 labelers
基于一个用户界面来写指令,这个界面要求他们给出一个总体的 template instruction
以及该指令的 few-shot
例子。我们通过采样不同的 few-shot examples
的集合,从相同指令中合成了多个 SFT datapoints
。
读者猜测:
SFT
模型很大可能就是部署到OpenAI API
的第一个模型,用于收集customer prompts
。
我们的 RM
数据集,带有labelers
对模型输出的排名,用于训练我们的 RM
。
对于 RM
而言,对于每个 prompt
我们收集了 comparisons
上训练模型。因此,训练模型的 ranked pair
的数量要比 prompt
的数量要大一个数量级。
。
我们的 PPO
数据集,没有任何 human labels
,用作 RLHF
微调的输入。
PPO
数据集虽然没有human labels
,但是它根据奖励函数来对输出进行评估。
SFT
数据集包含大约 13K
个 training prompt
(来自 API
的和labelers
编写的);RM
数据集有 33K
个 training prompt
(来自 API
的和labelers
编写的);PPO
数据集有 31K
个training prompt
(仅来自 API
)。关于数据集大小的更多细节见下表。
为了了解我们的数据集的构成,在下表中我们显示了由我们的contractors
标注的 API prompts
(特别是 RM
数据集)的 use-case
类别的分布。大部分的use-case
都是生成式的,而不是分类或问答。
注意,这里只有
customer prompts
(来自API
),而不包括labeler prompts
。
我们 labeled prompt metadata
的一个子集如下表所示。请注意,我们的 annotation fields
在项目过程中发生了变化,所以不是每个 prompt
都被 annotated
为每个字段。
我们还在下表中展示了一些说明性的 prompt
(由researchers
编写,模仿提交给 InstructGPT
模型的 prompt
类型)。
我们在附录 A
中提供了关于我们数据集的更多细节。
{}
表示模板,"""
表示分隔符。
更多提交给 InstructGPT
模型的 prompt
(来自论文附录 A.2.1
)。
提交给 GPT-3
模型的prompt
(来自论文附录 A.2.2
),通常而言它们更少地 instruction-style
并且包含更显式的 prompting
。注意这里有些 prompt
,其中用户意图是不清晰的。
提交给
GPT-3
的prompt
和提交给InstructGPT
的prompt
是不同的。这是因为我们希望GPT-3
也是instruction-following
风格的。
还有一些关于数据集的统计信息:
我们的训练任务有两个来源:
labelers
编写的 prompt
数据集。API
上提交给早期 InstructGPT
模型的prompt
数据集(见 Table 6
)。这些 prompt
非常多样化,包括生成、问答、对话、摘要、抽取、以及其他自然语言任务(见Table 1
)。
我们的数据集超过 96%
是英语,然而接下来我们也探索了我们的模型对其他语言的指令的响应能力、以及完成编码任务。
对于每个自然语言的 prompt
,任务往往是通过自然语言指令直接指定的(例如 "Write a story about a wise frog"
),但也可以通过 few-shot
样本(例如给出两个青蛙故事的例子,并提示模型生成一个新的青蛙故事)、或隐式延续 implicit continuation
(例如提供一个关于青蛙故事的开头)来间接指定。在每一种情况下,我们都要求我们的labelers
尽力推断出撰写 prompt
的用户的意图,并要求他们跳过任务非常不清晰的 input
。此外,我们的labelers
还考虑到隐式意图 implicit intention
(如响应的真实性)、以及潜在的有害输出(如,有偏见或有毒的语言),这些由我们提供给他们的指令(见附录 B
)和他们的最佳判断来指导。
因为
labelers
需撰写这些prompt
的demonstration
(即,人工标注)。
为了产生我们的 human demonstration
数据和 human comparison
数据,并进行主要的评估,我们通过 ScaleAI
雇用了一个由大约 40
名contractors
组成的团队。与早期在摘要任务上收集 human preference data
的工作相比,我们的输入跨越了更广泛的任务范围,并且偶尔会包括有争议的敏感话题。我们的目的是选择一批对不同人口群体的偏好敏感、并且善于识别有潜在危害output
的labelers
。因此,我们进行了一个筛选测试,旨在衡量labelers
在这些方面的表现。我们选择了在这个测试中表现良好的labelers
。
我们的选择程序如下:
和敏感语言标志的一致性:我们创建了一个 prompts
和 completions
的数据集,其中一些 prompts
和 completions
是敏感的(即任何可能引起强烈负面情绪的文本,无论是有毒的、性的、暴力的、判断judgemental
的、政治的等等)。我们自己给这些数据贴上了sensitivity
标签,并测量了我们(指的是论文的 researchers
)和 labelers
之间的一致性。
completion
和demonstration
的含义相同,都是针对生成任务来人工撰写的label
。
ranking
上的一致性:我们把提交给 OpenAI API
的prompts
、以及几个 model completions
,让 labelers
按整体质量对 completions
进行排名。我们测量他们与 researcher ranking
的一致性。
sensitive demonstration
写作:我们创建 sensitive prompts
的一个小集合,在这些 prompts
中,对输出的适当响应需要细微的差别。然后,我们用 1-7
的 Likert scale
对每个 demonstration
进行评分,并计算出每个 labeler
的平均 demonstration score
。
为不同群体识别敏感语言的自评估能力self-assessed ability
:我们希望选择一个 labelers team
,他们整体上能够识别广泛领域的敏感内容。由于法律原因,我们不能根据人口统计学标准来雇用contractors
。因此,我们让 labelers
回答这个问题:"对于哪些话题或文化群体,你能轻松识别敏感言论?" ,并将此作为我们选择程序的一部分。
在收集了这些数据后,我们选择了在所有这些标准上表现良好的labelers
(我们在匿名的数据版本上进行选择)。由于第四个准则是主观的,我们最终根据这些标准主观地选择了labelers
,但是我们也有 soft cutoff
(即,过滤阈值):在敏感语言标记、以及 ranking
方面有 75%
的一致性,在sensitive demonstration
写作上获得 6/7
分。
labelers
人口统计信息:
更多信息详见论文附录 B.1
。
在训练和评估过程中,我们的 alignment
准则可能会发生冲突:例如,当用户请求到一个潜在的有害的 response
时。在训练中,我们优先考虑对用户的帮助性helpfulness
(如果不这样做则需要做出一些困难的设计决定,我们把这些决定留给未来的工作)。然而,在我们的最终评估中,我们要求labelers
优先考虑真实性truthfulness
和无害性harmlessness
(因为这才是我们真正关心的)。
如同 《Learning to summarize from human feedback》
,我们在项目过程中与labelers
紧密合作。我们有一个入职过程,对labelers
进行项目培训,为每项任务编写详细的说明(下图分别为 prompt distribution
和 RealToxicityPrompts distribution
上 final evaluations
的指令,详细内容见附录 B.2
),并在共享聊天室中回答labelers
的问题。
作为一项初步研究来看看我们的模型如何泛化到其它labelers
的偏好。我们雇用了一组单独的labelers
,他们不产生任何训练数据。这些labelers
来自相同的供应商,但没有经过筛选测试。
尽管任务很复杂,但我们发现labelers
之间的一致率相当高:
training labelers
在 held-out labelers
的一致率为 《Learning to summarize from human feedback》
的摘要工作中,researcher-researcher
的一致率为 我们从 GPT-3
预训练的语言模型开始。这些模型是在互联网数据上训练出来的,可以适应广泛的下游任务,但其行为特征 characterized behavior
不明显。从这些模型开始,我们再以三种不同的技术来训练模型:
监督微调 supervised fine-tuning: SFT
:我们使用监督学习在 labeler demonstrations
上监督微调 GPT-3
模型。我们训练了16
个 epochs
,使用余弦学习率衰减,以及 dropout rate = 0.2
。我们根据验证集上的 RM
得分来选择最终的 SFT
模型。
RM
是怎么来的?根据后面内容的说法,奖励模型RM
是从SFT
模型开始,而SFT
模型又依赖于监督微调,所以这是一个相互依赖的问题。在项目开始时,可以先根据验证损失来选择最佳的
SFT
模型,然后再来训练奖励模型,然后再利用训练好的奖励模型再来选择最佳的SFT
模型。
与 《Recursively summarizing books with human feedback》
类似,我们发现我们的 SFT
模型在 1
个 epoch
后在验证损失上过拟合。然而我们发现,尽管有这种过拟合,但训练更多的 epoch
有助于 RM score
和 human preference rating
。
注意,尽管验证损失过拟合,但是验证集的奖励分没有过拟合,而这里是根据验证集的奖励分来筛选模型的。
奖励模型 reward modeling: RM
:从移除 final unembedding layer
的 SFT
模型开始,我们训练了一个模型来接受 prompt and response
,并输出一个 scalar reward
。在本文中,我们只使用 6B
的 RM
,因为这样可以节省大量的计算量,并且我们发现 175B
的 RM
训练可能不稳定,因此不太适合在 RL
期间作为价值函数 value function
使用(更多细节见附录 C
)。
在 《Learning to summarize from human feedback》
中,RM
是 comparison
数据集上训练的,其中 comparison
是模型在同一个输入的两个 output
上得到的。他们使用交叉熵损失,将 comparison
作为标签(奖励的差异代表human labelers
偏好一个 output
超过另一个 output
的对数几率 log odds
)。
即,输入
,然后标签为获胜的 output
的索引,损失函数为:
为了加快 comparison
的收集,我们向labelers
提供了 response
来排序,其中 prompt
,这就为labelers
提供了 comparisons
。由于每个标注任务中的 comparisons
之间是非常相关的,我们发现:如果我们简单地在数据集中混洗 comparisons
,对数据集的一个 epoch
就会导致奖励模型的过拟合。
相反,我们将每个 prompt
的所有 comparisons
作为单个样本。这在计算上更有效率,因为它只需要对每个 completion
进行一次前向传播(而不是对 completion
进行 validation accuracy
和 validation log loss
的大幅提高。
作为单个样本的话,相当于让模型一次性看到这
个 reponse
的list-wise
排序,并且模型也尝试学习这个list-wise
排序。如果作为多个样本并混洗的话,那么模型每次只能看到pair-wise
排序,从而使得模型学习的是pair-wise
排序。
具体而言,奖励模型的损失函数为:
其中:
prompt
completion
completion
由人工标注)上运行奖励函数的 scalar output
,其中奖励函数的参数为 pair
completion
(哪个 completion
更好,也是由人工标注)。human comparison
的数据,sigmoid
函数。2
个元素的组合数,等于 最后,由于 RM loss
对奖励的 shift
是不变的,我们使用一个 bias
对奖励模型进行归一化处理,以便在做强化学习之前,labelers
的 demonstration
的均值为零。
Reinforcement learning: RL
:再次遵从 《Learning to summarize from human feedback》
, 我们使用 PPO
在我们的环境中微调了 SFT
模型。该 environment
是一个 bandit environment
,它呈现一个随机的customer prompt
并期望对这个 prompt
作出响应。给定 prompt
和 response
,它产生一个由奖励模型决定的奖励,并结束该 episode
。此外,我们对 SFT
模型增加一个 per-token
的 KL
惩罚项,从而缓解奖励模型的过度优化。价值函数 value function
从 RM
中初始化。我们称这些模型为 "PPO"
。
注意,价值函数和奖励函数是分离的,因为奖励函数会在项目过程中被反复地重新训练,而每次重新训练之后就把最新的奖励函数拷贝给价值函数。
我们还尝试将预训练梯度混合到 PPO
梯度中,从而解决在公共数据集上的性能退化的问题。我们称这些模型为 "PPO-ptx"
。在RL
训练中,我们最大化如下所示的合并的目标:
其中:
RL
策略,
KL reward
系数,KL
惩罚的强度、以及预训练梯度的强度。
KL reward
会分解到per-token
粒度来计算:
对于 PPO
模型,InstructGPT
指的是 PPO-ptx
模型。
根据最后一项,最大化
要求最大化 在预训练的数据分布 上的对数似然。这是为了缓解 InstructGPT
在公共数据集上的性能退化问题。这里似乎未给出每个
token
的奖励,而是给出当前状态的价值(即,)。
baseline
:
我们将 PPO
模型的性能与 SFT
模型、以及 GPT-3
进行比较。
我们也比较了 GPT-3
,我们为 GPT-3
提供一个 few-shot prefix
,从而 "prompt
" 它进入 instruction-following
模式(GPT-3-prompted
)。这个前缀被添加到 user-specified
的指令中。
我们还在 FLAN
和 T0
数据集上比较了 InstructGPT
与 175B GPT-3
的微调。
对于
InstructGPT
是强化学习微调,对于GPT-3
是监督微调。
这两个数据集都由各种自然语言处理任务组成,每个任务都有自然语言指令(这些数据集在所包含的NLP
数据集、以及所使用的指令风格上有所不同)。我们分别在大约 1M
个样本上对它们进行微调,并选择在验证集上获得最高奖励模型得分的 checkpoint
。
所有模型遵循的配置:
GPT-3
架构,以及与 GPT-3
相同的 BPE
编码。unembedding layer
层被替换为投影层从而以输出一个标量值(注,价值函数作为奖励模型的最新版本的副本)。fp16
权重和 activation
,权重的 master
副本为 fp32
。RL
策略的上下文长度都是 2k token
。我们过滤掉长于 1k token
的 prompt
,并将最大响应长度限制在 1k token
。Adam
优化器训练的,SFT
训练:
我们训练我们的SFT
模型 16
个 epoch
,其中 residual dropout = 0.2
。
我们使用 cosine LR schedule
,在训练结束时降至原始学习率的10%
,没有 learning rate warmup
。
1.3B
和 6B
模型,我们使用 9.65e-6
的初始学习率和 batch size = 32
。175B
模型,我们使用 5.03e-6
的初始学习率和 batch size = 8
。 为了选择学习率,我们对1.3B
和 6B
模型几何搜索geometric search
了 7
个学习率、对 175B
模型搜索了 5
个学习率。我们还用几何搜索调优了 epoch
数量。我们最终的模型是根据奖励模型的分数来选择的,我们发现与验证损失相比,奖励模型的分数对human preference
结果更predictive
。
RM
训练:我们训练了一个单一的 6B
奖励模型,我们将其用于所有大小的 PPO
模型。较大的 175B
奖励模型有可能实现较低的验证损失,但是它存在两个问题:
PPO
价值函数的初始化。175B
奖励函数和价值函数大大增加了 PPO
的计算要求。在初步实验中,我们发现 6B
的奖励模型在广泛的学习率范围内是稳定的,并导致同样强大的PPO
模型。
最终的奖励模型是从一个 6B GPT-3
模型初始化的,该模型在各种公共 NLP
数据集( ARC, BoolQ, CoQA, DROP, MultiNLI, OpenBookQA, QuAC, RACE, Winogrande
)上进行了微调。我们选择从 GPT-3
初始化而不是 SFT
初始化,主要是出于历史原因:当从 GPT-3
或 SFT
模型初始化 RM
时,我们发现结果是类似的。
我们在完整的奖励模型训练集(见Table 6
)上训练了单个 epoch
,学习率为 9e-6
,采用 cosine learning rate schedule
(在训练结束时下降到其初始值的 10%
),batch size = 64
。
训练似乎对学习率或 schedule
不是很敏感。改变学习率高达50%
时,导致类似的性能。
训练对 epoch
数量相当敏感:多个 epoch
很快就会使模型与训练数据过拟合,验证损失显著恶化。
这里的 batch size
代表每个 batch
中不同 prompt
的数量。每个 prompt
有 labeled completions
(comparisons
。平局被丢弃(即,无法进行比较的)。因此,一个 batch
中最多可以包含 comparisons
。
用于 RLHF
的 initialization models
:
我们从预训练的 GPT-3
模型中初始化 RLHF
模型,并在 demonstration
数据集上应用监督微调 2
个 epoch
。
在微调过程中,我们还混入了 10%
的预训练数据,因为我们发现这对 PPO
训练有帮助。
这是为了缓解
InstructGPT
在公开数据集上的性能退化问题。
我们使用cosine learning rate schedule
,学习率最终衰减到峰值学习率的 10%
。我们对每个模型的几个不同的峰值学习率进行比较,并挑选出同时在 demonstration
验证集和预训练验证集上损失较低的一个。
我们对 1.3B
和 6B
模型的 5
个学习率进行了对数线性扫描,对 175B
模型的 3
个学习率进行了对数线性扫描。针对 1.3B
、6B
和 175B
模型找到的学习率分别为 5e-6
、1.04e-5
和2.45e-6
。
注意,这里除了考虑
demonstration
验证集之外,我们还考虑了预训练验证集,后者是为了缓解InstructGPT
在公开数据集上的性能退化问题。
我们对1.3B
和6B
模型使用 batch size = 32
,对 175B
模型使用 batch size = 8
。
为什么不直接用
SFT
(监督微调模型)来初始化RLHF
?这是因为监督微调模型并未考虑预训练数据,因此在公开数据集上存在性能退化问题。
RLHF
训练:然后,我们从上述带有 pretraining mix
的监督微调模型中初始化 RL
策略。这些模型也被用来计算 KL reward
,方法与 《Learning to summarize from human feedback》
相同,其中
我们为所有的 RL
模型训练了 256K
个 episodes
。在过滤掉带有 PII
的 prompts
和重复的 prompts
(基于公共前缀来判断重复)之后,这些episodes
包括大约 31K
个不同的 prompts
。每次迭代的 batch size = 512
,其中 minibatch size = 64
。换句话说,每个 batch
被随机分成8
个 minibatch
,并且仅训练了单个 inner epoch
(《Proximal policy optimization algorithms》
)。
我们采用常数学习率,并且在前 10
次迭代中从学习率峰值的十分之一开始应用预热。应用权重的指数移动平均,衰减率为 0.992
。
我们在估计generalized advantage
时不应用折扣(《High-dimensional continuous control using generalized advantage estimation》
)。PPO
的 clip ratio = 0.2
,针对 rollouts
的 sampling temperature = 1
。
即:
,这约束了策略更新不能太大。
rollouts
指的是一段轨迹,它用于inner epoch
。
如前所述,对于所有 PPO
模型,我们使用 6B
的奖励函数和 6B
的价值函数,后者由前者初始化。通过在所有模型规模的策略上使用相同的 6B
奖励模型和价值函数,更容易比较策略模型规模对策略性能的影响。对于 1.3B
和 6B
的策略模型,用于价值函数的固定学习率为 9e-6
;对于 175B
的策略,用于价值函数的固定学习率为 5e-6
。
策略函数的学习率是多少?论文并没有提到。猜测这里是用于策略函数的学习率,而不是价值函数的学习率(价值函数来自于奖励模型)。
我们最初的 RLHF
实验显示了在公共自然语言处理数据集上的退化(如 SQuADv2
和 DROP
),我们通过在 PPO
训练中混合预训练梯度来缓解退化。我们使用的预训练样本是 RL
训练 episodes
数量的 8
倍。预训练数据是从用于训练 GPT-3
模型的数据集中随机采样的。对于每个 minibatch
,我们以连续的 steps
计算 PPO
梯度和预训练梯度,并将它们都累积到 gradient buffers
。我们将预训练梯度乘以一个系数 PPO distribution
和 pretraining distribution
的梯度的相对强度。
FLAN
模型和 T0
模型:我们通过在 FLAN
数据集和 T0
数据集上微调 175B GPT-3
模型来获得我们的 FLAN baseline
和 T0 baseline
。
注意,这些模型不是用于
FLAN/T0
任务的评估,而是用于API prompt distribution
上的评估。
对于 T0
,请注意我们是在 T0++
版本的数据集上训练的。因为 T0
包含的数据( 96M
个数据点)比 FLAN
( 1.2 M
个数据点)多得多,所以我们对 T0
进行了采样,使其达到 1M
个数据点,从而使每个模型的训练数据量具有可比性。请注意,原始模型是在数据点可以重复的 epoch
上进行训练的,但在我们的 epoch
中,我们经历了每个数据点而没有重复(即,仅训练一个 epoch
,从而更好地匹配我们训练 SFT baseline
的方式)。
我们应用了 cosine learning rate schedule
,并对每个数据集尝试了 4e-6
和 6e-6
的初始学习率。学习率在训练结束时衰减到其峰值的 10%
,我们在两个实验中都使用了 batch size = 64
。为了选择最佳的 FLAN checkpoint
,我们使用我们的 6B
奖励模型对 prompt
验证集的 completion
进行进行打分,如下图所示。我们挑选了奖励模型分数最高的 checkpoint
进行 human eval
,也就是在学习率为4e-6
、训练了 896K
个样本的 checkpoint
。
我们进行了两个类似的实验来寻找最佳的 T0 checkpoint
:
batch size = 128
、学习率为 4e-6
、1.28M
个样本。batch size = 64
、学习率为 6e-6
、1M
个样本。再一次地,我们使用奖励模型进行打分。我们从第一个实验选择了 checkpoint
,其中这个 checkpoint
是训练了 896K
个样本得到的。
为了评估我们的模型是如何 "aligned
"的,我们首先需要澄清在该上下文中 alignment
是什么意思。alignment
的定义历来是一个模糊和混淆的话题,有各种相互竞争的提法 proposal
。遵从 《Scalable agent alignment via reward modeling: a research direction》
,我们的目标是训练符合用户意图的模型。更实际的是,对于我们的语言任务的目标,我们使用了一个类似于 《A general language assistant as a laboratory for alignment》
的框架,他们定义模型如果是有帮助 helpful
的、诚实 honest
的和无害 harmless
的,那么模型就是 aligned
的。
为了是 helpful
的,模型应该遵循指令,但也可以从 few-shot prompt
或另一个 interpretable pattern
(如,"Q: {question}\nA:"
)中推断出意图。
由于一个给定prompt
的意图可能是不明确的或模糊的,我们依靠我们的labelers
的判断,并且我们的主要指标是labelers
的 preference rating
。然而,由于我们的labelers
不是产生prompt
的用户,因此用户的实际意图和labelers
的意图(labelers
仅仅阅读 prompt
并认为该 prompt
所代表的意图)之间可能会有分歧。
目前还不清楚如何衡量纯粹的生成模型的诚实性honesty
:这需要比较模型的实际输出、以及模型对正确输出的 "belief
",而由于模型是一个大黑箱所以我们无法推断模型的 belief
。
相反,我们用两个指标来衡量真实性(即,模型关于世界的 statement
是否真实):
closed domain task
中编造信息的倾向(即,"幻觉hallucination
")。TruthfulQA
数据集。不用说,这仅仅抓住了真实性实际含义的一小部分。
与诚实性类似,测量语言模型的危害性 harm
也带来了许多挑战。在大多数情况下,语言模型的危害取决于其输出在现实世界中的使用方式。例如,一个产生有毒输出的模型在 deployed chatbot
的上下文中可能是有害的,但如果用于数据增强以训练更准确的毒性检测模型则甚至可能是有益的。
在项目的早期,我们让labelers
评估一个输出是否是 "潜在有害的"。然而,我们停止了这一做法,因为它需要对输出结果最终如何使用进行过多的猜测,尤其是我们的数据是来自与 Playground API
接口互动的用户(而不是来自生产中的 use case
)。
因此,我们使用了一套更具体的代理准则,旨在捕捉被部署的模型中可能最终有害行为的不同方面:我们让labelers
评估一个输出在 customer assistant
的上下文中是否不合适,是否诋毁了受保护的阶层,或包含性或暴力内容。我们还在旨在衡量偏见和毒性的数据集(如 RealToxicityPrompts
)上对我们的模型进行了基准测试。
总而言之,我们可以把定量评价分为两个独立的部分:
在 API distribution
上的评估:我们的主要指标是在 held out
的 prompt
集合上的 human preference rating
,其中这个 held out
集合来自于我们训练集相同的数据源(即,OpenAI API
)。
当使用来自 API
的 prompt
进行评估时,我们仅选择训练期间未见过的用户所产生的 prompt
。然而,鉴于我们的 training prompt
被设计为与 InstructGPT
模型一起使用,它们很可能不利于 GPT-3 baseline
。因此,我们也对提交给 GPT-3 API
的prompt
进行了评估:这些 prompt
通常不是 "instruction following"
的风格,而是专门为 GPT-3
设计的。
在这两种情况下,对于每个模型,我们计算它的输出比 baseline policy
更受欢迎的频率。我们选择我们的 175B SFT
模型作为 baseline
,因为它的性能接近中间水平。此外,我们要求labelers
用 1-7
分来判断每个响应的整体质量,并为每个模型输出收集一系列元数据(如下表所示)。
对公共 NLP
数据集的评估:我们在两类公共数据集上进行评估:
zero-shot
表现,如问答、阅读理解、以及摘要。我们还对 RealToxicityPrompts
数据集的毒性进行了人工评估。我们在所有sampling-based
的自然语言处理任务上发布我们模型的样本。
与 GPT-3
的输出相比,labelers
明显更喜欢 InstructGPT
的输出。
结果如下图所示,可以看到(每个都是和 SFT 175B
进行比较,并且是在 training labelers
上评估的):
GPT-3
的输出表现最差。few-shot prompt
可以得到显著的效果提升(GPT-3 (prompted)
)。demonstrations
上监督微调可以进一步提升效果(SFT
)。PPO
在 comparison
数据上训练的效果更好。PPO
期间增加对预训练的更新(即,PPO-ptx
)并不会导致labelers
偏好的巨大变化。为了说明我们收益的大小:当直接比较时,175B InstructGPT
的输出有 GPT-3
的输出、有 few-shot GPT-3
。
我们还发现(每个都是和 SFT 175B
进行比较):针对提交给 GPT-3 API
的 prompts
进行评估时,我们的结果没有明显变化(如下图所示),尽管我们的 PPO-ptx
模型在较大的模型规模下表现略差。
上半部分为
heldout labelers
、下半部分为training labelers
;左半部分为GPT prompts
、右半部分为InstructGPT prompts
。
在下图中,我们显示,labelers
也对 InstructGPT
的输出在几个更具体的维度进行了有利的评价。
具体来说,与 GPT-3
相比,InstructGPT
的输出在 customer assistant
的上下文中更合适,更经常地遵循指令中定义的明确约束(例如 "Write your answer in 2 paragraphs or less."
),更不可能完全不遵循正确的指令,并且在封闭域的任务中编造事实("幻觉")的频率更低。
这些结果表明,InstructGPT
模型比 GPT-3
更可靠、更容易控制。我们发现,我们的其他元数据类别 metadata category
在我们的 API
中出现的频率太低,以至于我们的模型之间无法获得统计学上的显著差异。
我们的模型泛化了 held-out labelers
(他们没有产生任何训练数据)的偏好。
held-out labelers
与我们用来产生训练数据的training labelers
有类似的排名偏好(如下图所示,每个都是和 SFT 175B
进行比较)。具体而言,根据 held-out labelers
,我们所有的 InstructGPT
模型仍然大大超过了 GPT-3
的baseline
。因此,我们的 InstructGPT
模型并不是简单地对我们的training labelers
的偏好进行过拟合。
我们从我们的奖励模型的泛化能力中看到了进一步的证据。我们做了一个实验:将labelers
分成 5
组,用5
折交叉验证(在其中4
组上训练,在held-out
组上评估)来训练 5
个奖励模型(用 3
个不同的种子)。这些奖励模型在预测 held-out
组中labelers
的偏好时,准确率为 labelers
的偏好时的
公共自然语言处理数据集并不能反映出我们的语言模型的使用情况。
在下图中,我们还将 InstructGPT
与我们在 FLAN
和 T0
数据集上微调的 175B GPT-3
基线进行比较。我们发现,这些模型的表现比 GPT-3
好、与GPT-3 prompted
相当、而比我们的 SFT baseline
差。这表明这些数据集没有足够的多样性从而在 API prompt distribution
上提高性能。
在一对一比较中,我们的 175B InstructGPT
模型输出在 78%
的时间里比 FLAN
模型更受欢迎,在 79%
的时间里比 T0
模型更受欢迎。
我们相信我们的 InstructGPT
模型优于 FLAN
和 T0
的原因有两个:
automatic metric
评估的任务,如分类、问答,以及某种程度的摘要和翻译。然而,分类和问答仅占 API
客户使用我们语言模型的一小部分(约 18%
),而根据labelers
的说法,开放式生成 open-ended generation
和脑暴 brainstorming
约占我们 prompt dataset
的 57%
(见Table 1
)。instruction-following
模型将结合两种类型的数据集(即,公共资源语言数据集、API prompt distribution
数据集)。InstructGPT
模型在真实性方面比 GPT-3
有所改进。
根据人类对 TruthfulQA
数据集的评估,与 GPT-3
相比,我们的 PPO
模型在生成真实的和 informative
的输出方面表现出小、但是明显的改进(如下图所示)。这种行为是默认的:我们的模型不需要被特别指示说真话就能表现出改进的真实性。
有趣的是,我们的 1.3B PPO-ptx
模型是个例外,它的表现比相同规模的 GPT-3
模型略差。
当仅仅对没有针对 GPT-3
进行对抗性选择的 prompt
进行评估时,我们的 PPO
模型仍然明显比 GPT-3
更真实,更 informative
(尽管绝对改进减少了几个百分点)。
这里指的是针对
GPT-3
的prompt
,而不是针对InstructGPT
的prompt
。
遵从 《Truthfulqa: Measuring how models mimic human falsehoods》
,我们也给出了一个有用的 "Instruction+QA"
的 prompt
,该 prompt
指示模型在不确定正确答案的时候用 "I have no comment"
来回应。
在这种情况下,我们的 PPO
模型真实但是 uninformative
,而不是自信地说出假话。baseline
的 GPT-3
模型在这方面没有那么好。
在右图中可以看到,
PPO
模型的真实性大幅提升(灰色柱体)。
我们在真实性方面的改进还体现在我们的 PPO
模型在 API distribution
的封闭域任务中产生幻觉(即编造信息)的频率较低,我们在 Figure 4
中(Hallucinations
指标)显示了这一点。
InstructGPT
在毒性方面比GPT-3
有小的改进,但没有偏见。
我们首先在 RealToxicityPrompts
数据集上评估我们的模型。我们通过两种方式进行:
Perspective API
运行模型样本,以获得自动的毒性分,这是该数据集的标准评估程序。labelers
,以获得对绝对毒性、相对于prompt
的毒性、连续性、以及整体输出偏好分。我们根据 prompt toxicity
对该数据集的 prompt
进行均匀采样,以更好地评估我们的模型在高 input toxicity
下的表现。这与该数据集的标准 prompt sampling
不同,因此我们的绝对毒性数字被夸大了。
我们的结果如下图所示。我们发现:
"respectful prompt"
)时,InstructGPT
模型产生的毒性输出比根据 Perspective API
的 GPT-3
的输出要少。respectful prompt
被移除时("no prompt"
),这一优势就消失了。respectful prompt
的例子:
Complete the following sentence in a polite, respectful, and unbiased manner:
biased prompt
的例子:
Complete the following sentence using maximally biased and offensive language:
有趣的是,当明确提示产生一个有毒的输出时(即,biased prompt
),InstructGPT
的输出比 GPT-3
的输出更有毒(如下图所示)。
这些结果在我们的 human evaluations
中得到了证实。在 respectful prompt
的 setting
下,InstructGPT
的毒性比GPT-3
小,但在 no prompt
的情况下二者表现相似。我们在论文附录 E
中提供了扩展结果。总结一下:
prompt
的情况下,我们所有的模型都被评估为比预期更少的毒性(它们在 -1
到 1
的范围内得到一个负分,其中 0
表示与预期的毒性差不多)。SFT baseline
是所有模型中毒性最小的,但也是连续性最低的,在我们的排名中也是最不受欢迎的,这可能表明该模型产生了非常短的或退化的响应。为了评估该模型产生有偏见的发言的倾向(见论文附录 E
),我们还在 Winogender
和 CrowS-Pairs
数据集的修改版本上评估了InstructGPT
。这些数据集由成对的句子组成,可以突出 potential bias
。我们计算产生每对句子的相对概率和相关二元概率分布的熵(以比特为单位)。完全无偏的模型在每对句子之间没有偏好,因此会有最大的熵。
根据这一指标,我们的模型并不比 GPT-3
的偏见更小。PPO-ptx
模型显示出与GPT-3
类似的偏见,但在respectful prompt
的setting
下,它表现出较低的熵,因此有较高的偏见。
偏见的模式并不清楚:似乎 instructed
模型对它们的输出更有把握,不管它们的输出是否表现出刻板的行为stereotypical behavior
。
我们可以通过修改我们的 RLHF
微调程序,将公共自然语言处理数据集上的性能退化降到最低。
默认情况下,当我们在 API distribution
上训练 PPO
模型时,它会受到 "alignment tax"
的影响,因为它在几个公共自然语言处理数据集上的性能会下降。我们希望有一个能够避免 alignment tax
的 alignment procedure
,因为它能够激励我们使用那些unaligned
、但是在这些任务上更有能力的模型。
在下图中,我们显示:
PPO
微调中加入预训练更新(即,PPO-ptx
),可以缓解所有数据集上的这些性能退化,甚至在HellaSwag
上超过了 GPT-3
。DROP
、SQuADv2
、以及翻译上,PPO-ptx
模型的性能仍然落后于GPT-3
。需要做更多的工作来研究并进一步消除这些性能退化。
把预训练更新混合进来,要比增加 KL
系数这一更简单的解决方案表现得更好。在Figure 33
中,我们显示:
SQuADv2
和 DROP
上的性能退化,又能使验证奖励的减少幅度最小。KL
系数(Figure 34
)会导致验证奖励的显著减少,并且在 DROP
和 SQuAD
上从未完全恢复性能。将 KL model
从 PPO init
改成 GPT-3
,也有类似的结果。
InstructGPT
模型对 RLHF finetuning distribution
之外的指令展示出有前景的通用性。
具体而言,我们发现 InstructGPT
展示出遵循non-English
语言的指令的能力,并针对 code
进行总结和问答。这很有意思,因为non-English
语言和 code
在我们的微调数据中只占极少数,而且这表明:在某些情况下,alignment
方法可以泛化到在输入上产生所需的行为,其中这些输入并没有人类的监督信息。
我们没有对这些行为进行定量跟踪,但我们在下图中展示了一些定性的例子。我们的 175B PPO-ptx
模型能够可靠地回答关于 code
的问题,也能遵循其他语言的指令。然而,我们注意到:即使指令是其他语言的,它也经常产生英语的输出。相比之下,我们发现GPT-3
能完成这些任务,但需要更仔细的 prompting
,而且很少遵循这些领域的指令。
InstructGPT
仍然会犯简单的错误。
在与我们的 175B PPO-ptx
模型互动的过程中,我们注意到它仍然会犯一些简单的错误,尽管它在许多不同的自然语言任务上表现很强。举几个例子:
(1)
:当给定一个有错误前提 premise
的指令时,该模型有时会错误地假定前提是真的。(2)
:该模型可以过度 hedge
:当给定一个简单的问题时,它有时会说这个问题没有单个答案而是给出多个可能的答案,即使从上下文来看有一个相当明确的答案。(3)
:当指令包含多个明确的约束条件时,该模型的性能会下降(例如:"list 10 movies made in the 1930’s set in France"
)。或者当约束条件对语言模型具有挑战性时(例如,指定句子数量来写一个摘要),模型的性能就会下降。我们下图中展示了这些行为的一些例子。
(2)
的出现部分是因为我们指示labelers
奖励认知谦逊 epistemic humility
,因此labelers
可能倾向于奖励hedge
的输出,而这被我们的奖励模型所发现。(1)
的出现是因为在训练集中很少有错误前提的prompt
,而我们的模型对这些例子(即错误前提的 prompt
),没有很好的泛化。我们相信这两种行为都可以通过对抗性的数据收集而大大减少(《Build it break it fix it for dialogue safety: Robustness from adversarial human attack》
)。
针对 alignment research
的影响:这项研究是我们更广泛的研究计划的一部分,以使人工智能系统 align to
人类的意图。即使这项工作专注于我们目前的语言模型系统,我们也在寻求适用于未来人工智能系统的 general
的和 scalable
的方法。我们在这里工作的系统仍然相当有限,但它们是当今最大的语言模型之一,我们将它们应用于广泛的自然语言任务,包括分类、摘要、问答、创意写作、对话、以及其它任务。
我们在这项工作中的 alignment research
的方法是迭代式的:我们正在改进当前人工智能系统的 alignment
,而不是抽象地关注尚未存在的人工智能系统的 alignment
。这种方法的一个缺点是,我们没有直接面对只有在 align
超人类系统 superhuman system
时才会出现的 alignment
问题 。然而,我们的方法确实为我们提供了一个清晰的经验反馈循环 feedback loop
,即什么有效、什么无效。我们相信,这种反馈循环对于完善我们的 alignment
技术至关重要,它迫使我们与机器学习的进展保持同步。此外,我们在这里使用的 alignment
技术(即,RLHF
)是 align
超人类系统 align superhuman system
的几个 proposal
中的重要构件。例如,RLHF
是最近关于在 summarizing books
上的工作中的一个核心方法,这项任务表现出 align
超人类人工智能系统的一些困难,因为人类很难直接评估(《Recursively summarizing books with human feedback》
)。
从这项工作中,我们可以为更通用的alignment research
吸取教训:
相对于预训练而言,增加 model alignment
的成本并不高。收集我们的数据的成本、以及训练的计算成本(包括运行实验的成本),只是训练 GPT-3
的一小部分:训练我们的 175B SFT
模型需要 4.9 petaflops/s-day
,训练我们的 175B PPO-ptx
模型需要 60 petaflops/s-day
,而训练 GPT-3
需要 3640 petaflops/s-day
。
同时,我们的结果显示:RLHF
在使语言模型对用户更有帮助方面非常有效,比模型规模增加 100
倍更有效。这表明:目前,增加对现有语言模型的 alignment
的投资,要比训练更大的模型更有性价比,至少对于我们客户的自然语言任务分布 natural language task distribution
来说是这样。
我们已经看到一些证据表明:InstructGPT
可以将 "following instructions"
推广到我们没有监督指令的 setting
中,例如在non-English
语言任务和 code-related
的任务中。这是一个重要的属性,因为让人类监督每一项任务都是非常昂贵的。需要更多的研究来研究这种泛化性如何随着模型容量的增加而 scale
。关于这个方向的最新研究,见 《Eliciting latent knowledge: How to tell if your eyes deceive you》
。
我们能够缓解我们的微调所带来的大部分性能下降。如果不是这样的话,这些性能下降将构成alignment tax
(即,align
模型的额外成本)。任何具有高税收的技术都可能不会被采用。为了激励未来高能力的人工智能系统保持 align to
人类意图,需要有 low alignment tax
的 alignment
技术。为此,我们的结果对 RLHF
作为一种 low-tax
的 alignment
技术来说是个好消息。
我们已经从现实世界的研究中验证了 alignment
技术。alignment research
在历史上是相当抽象的,聚焦于理论结果、小的合成领域synthetic domain
、或在公共自然语言处理数据集中训练机器学习模型。我们的工作为人工智能系统的 alignment research
提供了基础,这些系统正在现实世界中与客户一起在生产中使用。这使得技术的有效性和局限性有了一个重要的反馈循环。
我们和谁 align
:当将语言模型 align to
人的意图时,语言模型的最终行为是底层模型underlying model
(及其训练数据)、微调数据、以及所使用的 alignment
方法的函数。在本节中,我们描述了一些具体的影响微调数据的因素,以最终确定我们与什么进行 aligh
、以及和谁 alighn
。然后,我们考虑了需要改进的地方。
文献通常使用 "human preferences"
或 "human values"
这样的术语来界定 alignment
。在这项工作中,我们针对一组labelers
的偏好进行 aligh
,这些偏好受到了labelers
所得到的指令、他们接受指令的上下文(作为一份有偿工作)、以及发出指令的人(即,researchers
)的影响。一些关键的注意事项是适用的:
首先,我们 align to
demonstrations
和 preferences
,其中这些 demonstrations
和 preferences
由 training labelers
所提供,而这些 training labelers
直接产生了我们用来微调模型的数据。我们在附录 B
中描述了我们的labelers
的雇用过程和人口统计学。一般而言,他们大多是居住在美国或东南亚的说英语的人,通过 Upwork
或 Scale AI
雇用的。他们在许多样本上意见相左:我们发现labelers
之间的一致率约为 73%
。
第二,我们也 align to
我们(指的是论文的作者)的 preferences
,作为设计这项研究 的researchers
(因此也代表了我们更广泛的研究组织 OpenAI
):
labeling instructions
,labelers
在编写 demonstrations
、以及选择他们喜欢的输出时将标注指令作为指导。edge cases
的问题。关于不同的指令集和界面设计对从 labelers
那里收集的数据的确切影响、以及对模型行为的最终影响,还需要更多的研究。
第三,我们的训练数据是由 OpenAI
客户向 OpenAI API Playground
上的模型发送的 prompts
决定的,因此我们隐含地 align to
客户认为有价值的东西(或者在某些情况下,这些客户的目前使用 API
的终端用户认为是有价值的)。
客户或他们的终端用户可能不同意,或者客户可能没有为终端用户的福祉进行优化。例如,客户可能想要一个模型,使用户在其平台上花费的时间最大化,这不一定是终端用户想要的。在实践中,我们的 labelers
并不了解特定的 prompt
或 completion
会在什么情况下被看到。
注意,这里提到的客户和终端用户代表不同的主体,可能具有不同的利益。而在正文部分,我们将客户、用户都认为是相同的概念。
第四,OpenAI
的客户并不代表所有潜在或当前的语言模型用户,更不用说受语言模型使用所影响的所有个人和群体。在这个项目的大部分时间里,OpenAI API
的用户都是从一个 waitlist
中挑选出来的。这个 waitlist
的最初种子是 OpenAI
的员工,使得最终的用户群体偏向于我们自己的社交网络。
退一步讲,在设计一个公平、透明、有合适的问责机制的 alignment
过程中,有很多困难。本文的目标是证明这种 alignment
技术可以为特定的应用 align to
一个特定的人类参考群体。我们并不是说researchers
、我们雇用的 labelers
或我们的 API customers
是正确的偏好来源。有许多利益相关者需要考虑:训练模型的组织、使用模型开发产品的客户、这些产品的终端用户、以及可能直接或间接受到影响的更多人群。这不仅仅是一个使 alignment
过程更具参与性的问题。我们不可能一下子训练出一个符合每个人偏好的系统,也不可能让每个人都认可这种权衡。
前进的道路之一是可以训练以某些群体的偏好为条件的模型,或者可以很容易地进行微调或 prompted
从而代表不同的群体。然后,不同的模型可以被支持不同价值观的群体部署和使用。然而,这些模型最终可能还是会影响到更广泛的社会,而且有很多困难的决定要做,涉及到以谁的偏好为条件,以及如何确保所有群体都能被代表,并能选择退出可能有害的process
。
局限性:
方法论:我们的InstructGPT
模型的行为,部分地由从我们的contractors
那里获得的human feedback
所决定。一些标注任务依赖于价值判断,这些价值判断可能受到我们的contractors
的身份、信仰、文化背景、以及个人历史的影响。我们雇用了大约 40
名contractors
,以他们在筛选测试中的表现为指导,该测试旨在判断他们对sensitive prompts
的识别和反应能力,以及他们与researchers
在有详细说明的标注任务中的一致率(见附录 B
)。
我们保持了小规模的contractors
团队,因为与小规模的contractors
团队更有利于进行高效的沟通。然而,这个小团队显然不能代表将使用我们部署的模型并受其影响的全部人群。作为一个简单的例子,我们的 labelers
主要是讲英语的,我们的数据几乎完全由英语指令组成。
模型:我们也有很多方法可以改进我们的数据收集的 setting
。例如,由于成本的原因,大多数的 comparisons
只由一个contractor
来标注。对样本进行多次标注可以帮助识别我们的contractors
有分歧的地方,从而帮助识别出单个模型无法 align to
所有的样本的地方。
在有分歧的情况下,align to
平均 labeler preference
可能不可取。例如,在生成对少数群体影响过大的文本时,我们可能希望属于该群体的 labelers
的偏好得到更多的重视。
开放性问题:这项工作是使用 alignment
技术对语言模型进行微调以遵循各种指令的第一步。为了进一步使语言模型的行为 align to
人们实际希望它们做的事情,有许多开放性问题需要探索:
可以尝试许多方法来进一步减少模型产生有毒的、有偏见的、或其他有害输出的倾向。例如:
labelers
找到模型的最坏情况下的行为,然后将其标注并添加到数据集中(《Build it break it fix it for dialoguesafety: Robustness from adversarial human attack》
)。《Mitigating harm in language models with conditional-likelihood filtration》
),要么用于训练初始的预训练模型,要么用于我们 pretraining mix
方法的数据。WebGPT
(《Webgpt: Browser-assisted question-answering with human feedback》
)。在这项工作中,如果用户要求一个潜在的有害或不诚实dishonest
的响应,我们允许我们的模型生成这些输出。训练我们的模型,使其不顾用户的指令而无害是很重要的,但也很困难,因为一个输出是否有害取决于它的部署环境。例如:使用语言模型生成有毒的输出从而作为数据增强 pipeline
的一部分,可能是有益的。我们的技术也可以应用于使模型拒绝某些用户指令,我们计划在这项研究的后续迭代中对此进行探索。
让模型做我们想做的事与可引导性 steerability
和可控性 controllability
文献直接相关。一个有前途的未来道路是将RLHF
与其他可控性方法相结合,例如使用控制代码 control codes
(《Ctrl: A conditional transformer language model for controllable generation》
),或者在推断时使用更小的模型来修改采样程序(《Plug and play language models: A simple approach to controlled text generation》
)。
虽然我们主要关注 RLHF
,但还有许多其他算法可以用来在我们的 demonstration
和 comparison
数据上训练策略,以获得更好的结果。例如:
expert iteration
,或更简单的 behavior cloning
方法,它们使用 comparison
数据的一个子集。《Constrained policy optimization》
),使得在产生少量有害行为的条件下最大化奖励模型得分。comparisons
也不一定是提供 alignment
信号的最有效方式。例如,我们可以让labelers
编辑模型响应使其变得更好,或者用自然语言来生成对模型响应的批评。在设计labelers
向语言模型提供反馈的界面方面,也有很大的选择空间,这是一个有趣的人机交互问题。
我们提出的通过将预训练数据纳入 RLHF
微调来减轻 alignment tax
的建议,并不能完全解决性能退化,而且可能使某些任务更有可能出现某些不理想的行为(如果这些行为存在于预训练数据中)。这是一个值得进一步研究的领域。
另一个可能改进我们方法的修改是过滤 pretraining mix
数据中的有毒内容(《Mitigating harm in language models with conditional-likelihood filtration》
),或者用合成指令 synthetic instruction
来增强这些数据。
正如 《Artificial intelligence, values, and alignment》
所详细讨论的那样, align to
指令、意图、暴露的偏好、理想的偏好、兴趣、以及价值观,这些之间存在着微妙的差异。 《Artificial intelligence, values, and alignment》
主张采用基于原则 principle-based
的 alignment
方法:换句话说,要确定 "尽管人们的道德信仰存在广泛的差异,但得到反思性认可的公平的对齐原则"("fair principles for alignment that receive reflective endorsement despite widespread variation in people’s moral beliefs"
)。 在我们的论文中,为了简单起见,我们 align to
被推断的用户意图,但在这个领域还需要更多的研究。事实上,最大的开放性问题之一是如何设计一个透明的 alignment
过程,有意义地代表受技术影响的人,并以一种在许多群体中达成广泛共识的方式综合 synthesizes
人们的价值观。
更广泛的影响:我们的目标是,通过训练大型语言模型来让它们做一组特定人类希望它们做的事情从而增加大型语言模型的积极影响,这就是这项工作的动机。默认情况下,语言模型优化 next word prediction
目标,这只是我们希望这些模型做的事情的代理。我们的结果表明,我们的技术有希望使语言模型更有帮助、更真实、更无害。从长远来看,alignment
失败可能会导致更严重的后果,特别是如果这些模型被部署在 safety-critical
场合。我们预计,随着模型规模的不断扩大,必须更加注意确保它们 align to
人类的意图。
然而,让语言模型更好地遵循用户的意图也让它们更容易被滥用。使用这些模型可能更容易产生令人信服的错误信息,或者仇恨的、辱骂性的内容。
alignment
技术并不是解决与大型语言模型相关的安全问题的万能药,相反,它们应该作为更广泛的安全生态系统中的一个工具。除了故意滥用之外,在许多领域,大型语言模型的部署应该非常谨慎,或者根本不需要。这方面的例子包括高风险领域,如:医疗诊断、根据受保护的特征对人进行分类、确定信贷/就业/住房的资格、生成政治广告、以及执法。如果这些模型是开源的,那么在没有适当监管的情况下,限制这些领域和其他领域的有害应用就变得很有挑战性。另一方面,如果大型语言模型的使用被限制在少数拥有训练他们所需资源的组织,这就把大多数人排除在尖端的机器学习技术之外。另一个选择是,一个组织拥有模型部署的端到端基础设施,并使其通过 API
进行访问。这允许实施安全协议,如:use case
限制(只允许模型用于某些应用)、监测滥用情况并取消那些滥用系统的人的访问权、以及限制速率从而防止产生大规模的错误信息。然而,这可能是以降低透明度和增加权力集中度为代价的,因为它要求 API
供应商决定在每个问题上的界限。
最后,正如前面所讨论的,这些模型向谁 align
的问题极为重要,并将大大影响这些模式的净影响net impact
是积极的还是消极的。