十八、SpanBERT [2019]

  1. 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 任务上的性能得到了大幅提高。具体而言, SpanBERTSQuAD 1.1SQuAD 2.0 上分别达到了 94.6% F188.7% F1 ,与论文精心调优的BERT 副本相比,误差减少了 27% 。作者还在另外五个抽取式问答 benchmarkNewsQA, TriviaQA, SearchQA, HotpotQA, Natural Questions)上观察到类似的收益。

    对于 document-level 共指消解,SpanBERT 还在具有挑战性的 CoNLL-2012 ("OntoNotes") 共享任务上达到了新的 SOTA ,其中 SpanBERT 达到了 79.6% F1 ,比之前的 top model 高出 6.6% (绝对提升,而不是相对提升)。最后,论文证明 SpanBERT 对没有显式涉及 span selection 的任务也有帮助,并表明 SpanBERT 甚至提高了 TACREDGLUE 的性能。

    虽然其它工作展示了添加更多数据(《XLNet: Generalized autoregressive pretraining for language understanding》)和增加模型规模(《Cross-lingual language model pretraining》)的好处,但这项工作表明了设计良好的预训练任务和目标的重要性,其中预训练任务和目标也会产生显著的影响。

  2. 相关工作:无标签文本中训练的 pre-trained contextualized word representation 最近对 NLP 产生了巨大的影响,特别是作为一种方法,用于针对特定任务在微调大模型之前先初始化该大模型。除了模型超参数和语料库的差异外,这些方法主要在其预训练任务和损失函数方面有所不同,相当多的当前文献提出了对 BERTMLM 目标进行增强。

    • 虽然以前的、以及同时进行的工作已经研究了 maskingERNIE )或 droppingMASSKERMIT)输入中的多个单词,尤其是作为语言生成任务的预训练。但 SpanBERT 预训练 span representation《Learning recurrent span representations for extractive question answering》),这被广泛用于问答、共指消解、以及各种其他任务。

      • ERNIE 显示了使用 phrase maskingnamed 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 typingrelation classification 等知识驱动的任务。
      • UNILM 使用多个语言建模目标:单向(包括 left-to-rightright-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 在预训练期间也掩码了 span1-5token ),但对它们进行了自回归式的预测。我们的模型侧重于纳入 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"spanstart tokenend tokenrepresentation,在预训练和微调期间更充分地编码上下文,因此更合适被视为span representation

      • 《Blockwise parallel decoding for deep autoregressive models》 专注于使用 block-wise parallel decoding scheme 提高语言生成速度。他们并行地对多个时间步进行预测,然后退到由一个 scoring model 验证的最长前缀。

      • 与此相关的还有 sentence representation 方法,这些方法侧重于从 sentence embedding 中预测周围上下文。

18.1 模型

18.1.1 BERT 简介

  1. BERT 是一种自监督的方法,用于预训练一个深层的 transformer encoder ,然后再针对特定的下游任务来进行微调。BERT 优化了两个训练目标:掩码语言模型 masked language model: MLM 和下一句预测next sentence prediction: NSP 。这两个训练目标只需要大量的无标记的文本集合。

  2. 给定单词或子词 subword 的一个序列 X=(x1,x2,,xn)BERT 训练一个编码器,该编码器为每个 token 产生一个 contextualized vector representation

    (1)enc(x1,x2,,xn)=x1,x2,,xn
  3. MLMMLM 也被称为 cloze test ,它的任务是预测序列中的占位符 placeholder 所对应的 missing token 。具体而言, token 的一个子集 YX 被采样,并被不同的 token 集合所取代。在 BERT 的实现中,YXtoken 的比例为的 15% 。在 Y 中,80%token 被替换为[MASK]10%token 被替换为 random token (根据 unigram 分布)、10%token 保持不变。任务是根据 modified input 来预测 Y 中的 original token

    BERT 通过随机选择一个子集来独立地选择 Y 中的每个 token 。在 SpanBERT 中,我们通过随机选择 contiguous span 来定义 Y

  4. NSPNSP 任务将两个序列 (XA,XB) 作为输入,并预测 XB 是否是 XA 的直接延续。在 BERT 中是这样实现的:首先从语料库中读取序列 XA ,然后从序列 XA 结束的地方继续读取序列 XB (正样本)、或者从语料库中的一个随机的起点从而随机抽取序列 XB (负样本)。

    这两个序列由一个特殊的 [SEP] token 分开。此外,一个特殊的 [CLS] token 被添加到拼接序列(XAXB 拼接)的开头从而形成 input ,其中 [CLS]target 是:XB 在语料库中是否确实紧跟在 XA 之后。

  5. 总之,BERT 通过在双序列 bi-sequence 采样程序产生的数据中均匀地随机掩码 word piece ,同时优化了 MLMNSP 目标。接下来,我们将介绍我们对 data pipeline、掩码、以及预训练目标的修改。

18.1.2 SpanBERT

  1. 我们提出了 SpanBERT,这是一种自监督的预训练方法,旨在更好地表达和预测文本的span 。我们的方法受到 BERT 的启发,但在三个方面偏离了BERTbi-text classification framework

    • 首先,我们使用不同的随机程序来掩码 span of tokens ,而不是掩码单个 token
    • 其次,我们还引入了一个新颖的辅助目标(即,span-boundary objective: SBO),该目标试图仅使用 span’s boundarytokenrepresentation 来预测整个 masked span
    • 最后,SpanBERT 对每个训练实例采样单个 contiguous segment (而不是两个),因此没有使用 BERTnext sentence prediction 目标。
  2. Span Masking:给定一个 token 序列 X=(x1,x2,,xn),我们通过迭代地采样文本的span 从而选择 token 的一个子集 YX,直到 masking budget (例如,X15% )耗尽。在每轮迭代中:

    • 首先,我们从一个几何分布 lGeo(p) 中采样一个 span lengthtoken 数量),该分布偏向于较短的 span
    • 然后,我们随机地(均匀地)选择 masked span 的起点。我们总是采样完整单词(而不是 subword token )的序列,而且起点必须是一个完整单词的开头。

    根据初步试验,我们设定 p=0.2 ,并且在 lmax=10 的地方截断 l 。这产生了一个平均 span lengthmean(l)=3.8。下图显示了 span mask length 的分布。

    几何分布 Geo(p) 定义为:在 n 次伯努利试验中,单次成功的概率为 p ,那么前 k1 次都失败、第 k 次成功的概率为几何分布:f(k)=(1p)k1p

    这里的 3.8 的计算过程为:l=110l×f(l)l=110f(l)

    BERT 一样,我们也掩码了总共 15%token ,其中:80%masked token[MASK] 替换、10%masked tokenrandom token 替换、10%masked token 保持 original token 不变。然而,我们是在 span-level 进行这种替换,而不是对每个 token 独立地进行替换。也就是说,一个 span 中的所有 token 都被替换成 [MASK]random token、或者保持不变。

    平均序列长度为 3.8/0.15=25.3

  3. Span Boundary Objectivespan selection model 通常使用span boundary tokens (开始和结束)创建一个固定长度的 representation 。为了支持这样的模型,我们希望 end of spanrepresentation 能够尽可能多地总结 internal span content 。我们通过引入一个 span boundary objective 来做到这一点,该目标涉及仅仅使用span 边界上所观察到的 tokenrepresentation 来预测 masked span 的每个 token

    正式地,我们用 x1,x2,,xn 表示序列中每个 tokentransformer encoder 的输出。给定一个由 token (xs,,xe)Y组成的 masked span ,其中 (s,e) 表示masked span 的开始位置和结束位置(即,两个端点),我们使用外部的 boundary token xs1xe+1 、以及 target tokenposition embedding pis+1 ,来表达 span 中的每个 token xi

    (2)yi=f(xs1,xe+1,pis+1)

    注意,在 BERTMLM 目标中,隐式地用到了 target tokenposition 信息(通过在 [MASK] tokentoken embedding 上添加 positional embedding)。

    其中:

    • position embedding p1,p2, 标志着 masked token 相对于 left boundary token xs1 的相对位置。

      注意,BERT 采用了 absolute positional embedding,而这里是 relative positional embedding ,因此 SpanBERT 需要两套 positional embedding

    • 我们将 representation function f() 实现为一个具有 GeLU 激活函数 和 layer normalization 的两层前馈神经网络:

      (3)h0=[xs1;xe+1;pis+1]h1=LayerNorm(GeLU(W1h0))yi=LayerNorm(GeLU(W2h1))

      其中: [;] 表示向量拼接,W1,W2 为待学习的参数。

    然后我们使用 vector representation yi 来预测 token xi ,并计算交叉熵损失,这完全与 MLM 目标一样。

    SpanBERTmasked span (xs,,xe) 中的每个 token xiSBO 损失函数和常规的 MLM 损失函数进行求和,同时对 MLMSBOtarget token 复用 input embedding

    (4)L(xi)=LMLM(xi)+LSBO(xi)=logP(xixi)logP(xiyi)

    MLM 目标利用了所有 unmasked token 作为上下文,而 SBO 仅使用 boundary token 作为上下文,因此理论上 MLM 的信息更丰富。SBO 迫使模型更关注 boundary token ,是 MLM 的一种特殊的 case ,所以是否可以泛化 MLM 从而支持 SBO

  4. Single-Sequence Training:如前所述,BERT 的样本包含两个文本序列 (XA,XB),以及一个 next sentence prediciton: NSP 目标。我们发现,这种 setting 几乎总是比简单地使用没有 NSP 目标的单一序列要差。我们猜想,单序列训练 single-sequence training 优于带有NSP 的双序列训练 bi-sequence training ,有两个原因:

    • 在单序列训练中,模型从较长的 full-length 上下文中获益。
    • 在双序列上下文中,以另一个文档中的、通常不相关的上下文为条件,会给 MLM 增加噪音。

    因此,在我们的方法中,我们取消了 NSP 目标和 two-segment 采样程序,而只是简单地采样单个 contiguous segment 直到 n=512token ,而不是两个 half-segment 加起来 ntoken

  5. 总之,SpanBERT 通过以下方式预训练 span representation

    • 使用基于几何分布的掩码方案来掩蔽 full wordspan
    • 除了使用单序列 data pipelineMLM 之外,还优化了一个辅助的 span-boundary objective: SBO

    预训练程序如下:

    • 将语料库划分为单个的、长度为 512 tokencontiguous block

    • 在预训练的每个 step

      • 均匀随机地采样 block 的一个 batch
      • 基于 span masking 方案对每个 block 掩码 15%word piece
      • 对每个 masked token xi ,优化 L(xi)=LMLM(xi)+LSBO(xi)

18.2 实验

18.2.1 任务

  1. 我们对一组任务进行了评估,包括问答任务(七个)、共指消解任务、 GLUE benchmark 中的任务(九个)、以及关系抽取任务。我们预期,span selection 任务、问答、以及共指消解,将特别受益于我们的 span-based 预训练。

  2. 抽取式问答 Extractive Question Answering:给定一个短的文本段落和一个问题作为输入,抽取式问答任务是选择文本段落中连续的一个 text span 作为答案。

    我们首先在 SQuAD 1.1SQuQD 2.0 上进行评估,它们一直是主要的问答任务 benchmark ,尤其是对于预训练模型。

    我们另外还在 MRQA 共享任务的五个数据集上进行评估:NewsQASearchQATriviaQAHotpotQANatural Questions。由于 MRQA 共享任务没有公开的测试集,我们将验证集一分为二,构建为新的验证集和测试集。这些数据集在领域 domain 和收集方法上都有所不同,这使得这些数据集成为一个很好的测试平台,用于评估我们的预训练模型是否能在不同的数据分布中很好地进行泛化。

    遵从 BERT ,我们对所有的数据集使用相同的 QA 模型架构:

    • 首先,我们将段落 P=(p1,p2,,plp) 和问题 Q=(q1,q2,,qlq) 转换为单个序列 X=[CLS]p1p2plp[SEP]q1q2qlq[SEP]

    • 然后,我们将序列 X 馈入 pre-trained transformer encoder ,并在其之上独立训练两个线性分类器,用于预测 answer span boundary(开始点和结束点)。

      对于 SQuAD 2.0 中的不可回答的问题,我们只需将 answer span 设置为 [CLS] 这个 special token (即,开始点和结束点都是 0 )。

  3. 共指消解 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 x ,该模型在可能的 antecedent span 集合 Y 上学习一个分布 P()

    (5)P(y)=exp(s(x,y))yYexp(s(x,y))

    span pair 评分函数 s(x,y) 是一个前馈神经网络,它作用在固定长度的 span representation 、以及 x,y 的人工设计的特征之上:

    (6)s(x,y)=sm(x)+sm(y)+sc(x,y)Rsm(x)=FFNNm(gx)Rsc(x,y)=FFNNc(gx,gy,ϕ(x,y))R

    其中:

    • x 为一个 span,它包含多个连续的 tokeny 也为一个 span,它也包含多个连续的 token
    • gx,gy 分别表示 span representation。一个 span representationspan 两个端点所对应的两个 transformer output state 、以及一个 attention vector (它在当前 span 种所有 tokenoutput representation 上计算而来)的拼接。
    • FFNNm()FFNNc 分别代表两个具有单隐层的前馈神经网络。
    • ϕ(x,y) 代表人工设计的特征(如,speaker 和题材的信息)。

    sc(,) 可以理解为两个 span 的交互,sm() 可以理解为 spanbias

  4. 关系抽取 Relation ExtractionTACRED 是一个具有挑战性的关系抽取数据集。给定一个句子和其中的两个 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 之上添加一个线性分类器来预测关系类型。

  5. GLUEGeneral 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 之上添加了一个线性分类器。

18.2.2 实现

  1. 我们在 fairseq 中重新实现了 BERT 的模型和预训练方法。我们使用了 BERT_large的模型配置,也在相同的语料库上(即,BooksCorpusEnglish Wikipedia,使用带大小写的 Wordpiece token )预训练了我们所有的模型。

    与原始的 BERT 实现相比,我们的实现的主要区别包括:

    • 我们在每个 epoch 中使用不同的掩码(即,动态掩码),而 BERT 在数据处理期间为每个序列采样 10 个不同的掩码。

    • 我们删除了之前使用的所有短序列策略,这些短序列策略包括(被 BERT 所采用):

      • 0.1 的小概率采样较短的序列。
      • 首先在前 90% 的训练步中以 128 的较短序列进行预训练,然后在剩下的 10% 的训练步中以正常序列长度进行预训练。

      取而代之的是,我们总是采用高达 512 token 的序列,直到序列到达一个文档边界。

    关于这些修改及其影响,我们请读者参考 RoBERTa 原始论文的进一步讨论。

  2. BERT 一样,学习率在前 10K 步中被预热到 1e-4 的峰值,然后线性衰减。我们采用了 β 超参数(β1=0.9,β2=0.999)和 0.1decoupled weight decay《Decoupled weight decay regularization》)。我们还在所有层和注意力权重上采用 0.1dropout ,以及 GeLU 激活函数。我们采用 AdamW 优化器,其中 epsilon = 1e-8 ,迭代 2.4M 步。我们的实现使用 batch size = 256,序列最大长度为 512 token

    传统的 weight decay

    (7)θt+1=(1λ)θtηL(θt)

    λweight decay 系数。在常规 SGD 的情况下,weight decay 等价于 L2 正则化。

    但是,在 Adam 等方法中,L2 正则化与 weight decay 并不等价。因此人们提出 decoupled weight decay 从而用于 Adam 等方法。

    预训练是在 32Volta 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} ;微调 20epoch

      我们使用 batch size = 1 (每次一篇文档)。

    • TACRED/GLUE:对于所有数据集,我们使用 max_seq_length = 128,调优的学习率范围是:{5e-6, 1e-5, 2e-5, 3e-5, 5e-5} ;调优的 batch size 范围是:{16, 32} ;微调 10epoch

      唯一的例外是 CoLA 数据集,我们为它微调 4epoch,因为 10epoch 会导致严重的过拟合。

18.2.3 Baseline

  1. 我们将 SpanBERT 和如下三个 baseline 进行比较:

    • Google BERT:由 《BERT: Pre-training of deep bidirectional transformers for language understanding》 发布的预训练模型。
    • Our BERT:我们重新实现的 BERT,其中改进了数据预处理和优化过程(如,动态掩码,废除短序列策略)。
    • OurBERT-1seq:我们重新实现的另一个版本的 BERT,其中在单个 full-length 序列上训练而没有NSP 任务。

18.2.4 实验结果

  1. Extractive Question Answering:下表展示了在 SQuAD 1.1SQuAD 2.0 上的实验结果。SpanBERT 分别比 Our BERT 高出 2.0% F12.8% F1 ,比 Google BERT 高出 3.3% F15.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 maskingspan boundary objective+1.8%)。
    • 此外,SpanBERTTriviaQAHotpotQA 上相对于 Our Bert-1seq 有特别大的改进,分别高达 +3.2%+2.7% 。这意味着 span maskingspan boundary objective 起到了重要作用。

  2. Coreference Resolution: 下表显示了 OntoNotes 共指消解 benchmark 上的实验结果。可以看到:

    • 平均而言, Our BERT 相比 Google BERT 提高了 1.2% F1,而 single-sequence training (即,Our BERT-1seq)相比于 Our BERT 又带来了 0.5% 的收益。
    • SpanBERTOur BERT-1seq 的基础上又有了很大的提高,达到了一个新的 SOTA 结果 79.6% F1 (之前的 SOTA 结果是 73.0% )。

  3. Relation Extraction:下表显示了 TACRED 上的实验结果。可以看到:

    • SpanBERTOur BERT 高出 3.3% F1 ,并接近目前的 SOTASpanBERT 比他们的 BERT_EM 表现更好,但比 BERT_EM + MTB0.7 分,后者使用 entity-linked text 进行额外的预训练。

    • SpanBERT 超出 Our BERT 的增益的大部分(+2.6% F1 )来自于 single-sequence training ,尽管 span maskingspan boundary objective 的贡献也是可观的 (0.7% F1)。而 span maskingspan boundary objective 的贡献主要来自于更高的召回率(即 R 列)。

      single-sequence training 的贡献主要来自于更高的 precision

  4. GLUE:下表展示了 GLUE 上的实验结果。可以看到:

    • 对于大多数任务,不同的模型似乎表现相似。
    • 没有 NSP 目标的 single-sequence training 大大改善了 CoLA ,并在 MRPCMNLI 上产生了较小(但是仍然可观)的改善。
    • SpanBERT 的主要收益是在 QNLI 数据集( +1.3% ,它基于 SQuAD )、以及 RTE 数据集(+6.9%),后者是 SpanBERTGLUE 平均分上升的主要原因。

  5. 总体趋势:我们在 17benchmark 上将我们的方法与三个 BERT 版本进行了比较,发现 SpanBERT 在几乎每个任务上都优于BERT

    • 14 项任务中,SpanBERT 的表现优于所有 baseline
    • 在两项任务(MRPCQQP )中,SpanBERT 的准确率与 single-sequence 训练的 BERT 相当,但仍优于其他 baseline
    • 在一项任务(SST-2 )中, Google BERTSpanBERT 的准确率高 0.4%

    当考虑到增益的大小时,似乎 SpanBERT 在抽取式问答方面特别好。例如:

    • SQuAD 1.1 中,我们观察到 2.0% F1 的增益,尽管 baseline 已经远远高于人类的表现。
    • MRQA 中,SpanBERTOur BERT 的基础上提高了从 2.0% F1Natural Questions )到 4.6% F1TriviaQA)。

    最后,我们观察到,在各种任务中,single-sequence training 比带有 NSPbi-sequence training ,在效果上要好得多。这是令人惊讶的,因为 BERT 的消融研究显示了来自 NSP 目标的收益。然而,消融研究仍然涉及 bi-sequence 的数据处理(即,预训练阶段只控制 NSP 目标,同时仍然采样两个 half-length 的序列)。我们猜测:bi-sequence training,正如它在BERT 中实现的那样,阻碍了模型学习较长距离的特征,并因此损害了许多下游任务的性能。

18.2.5 消融研究

  1. 我们将我们的 random span masking 方案与 linguistically-informed masking 方案进行比较,发现 masking random span 是一种有竞争力的、并且通常是更好的方法。然后,我们研究了SBO 的影响,并将其与 BERTNSP 目标进行对比。

  2. 掩码方案:以前的工作 ERNIE 表明,在中文数据的预训练中,通过掩码 linguistically informed span ,改善了下游任务的表现。我们将我们的 random span masking 方案与linguistically informed span 掩码进行比较。具体而言,我们训练了以下五种 baseline 模型,它们的区别仅仅在于 token 的掩码方式:

    • Subword Tokens:我们采样随机的 Wordpiece token ,就像在 original BERT 中一样。

    • Whole Words:我们采样随机的单词,然后掩码这些单词中的所有 subword tokenmasked subword token 总共占所有 token15%

    • Named Entities:在 50% 的时间里,我们从文本中采样命名实体,而在剩下 50% 的时间里随机采样全词 whole wordmasked subword token 总共占所有 token15%

      具体而言,我们在语料库上运行 spaCynamed 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 设置(即带 NSPbi-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 maskingspan boundary objective 相结合可以大大改善这一结果。

    总体而言,这些掩码方案的差距不大。

  3. 辅助目标:如前所述,与 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 的性能提升较大。这意味着数据预处理和优化过程(如,动态掩码,废除短序列策略)的影响也较大。

十九、ALBERT [2019]

  1. 全网络预训练 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-largeALBERT 的参数数量减少了 18 倍,训练速度可以提高约 1.7 倍。参数缩减技术也作为一种正则化的形式,稳定了训练并有助于泛化。

    为了进一步提高 ALBERT 的性能,作者引入了一个自监督的损失用于 sentence-order prediction: SOPSOP 主要关注句子间的连贯性,旨在解决 original BERT 中提出的 next sentence prediction: NSP 损失的无效性。

    由于这些设计决策,论文能够扩展到更大的 ALBERT 配置,这些配置的参数仍然比 BERT-large 更少,但是性能更好。论文在著名的 GLUESQuADRACE 等自然语言理解 benchmark 上建立了新的 SOTA 结果。具体而言, ALBERTRACE 的准确率提高到89.4%、将 GLUE benchmark 提高到 89.4%、将 SQuAD 2.0F1 得分提高到 92.2

    虽然准确率更高,但是训练时间要长三倍。

  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 的论文实验表明:跨层参数共享会损害模型性能。

        此外,UTencoder-decoder 架构,它分别在 encoderdecoder 上进行参数共享。而 ALBERT 只有 encoder,因此只有 encoder 的参数共享。

      • 最近,《Deep equilibrium models》 针对 transformer 网络提出了 Deep Equilibrium Model: DQE ,并表明 DQE 可以达到一个平衡点,即某一层的 input embeddingoutput embedding 保持一致(即,到达不动点)。

        我们的观察表明,我们的 embedding 是振荡的,而不是收敛的。

      • 《Modeling recurrence for transformer》将参数共享的 transformer 与标准的 transformer 相结合,这进一步增加了标准 transformer 的参数数量。

    • Sentence Ordering ObjectivesALBERT 使用了一个预训练损失,该损失基于预测两个连续的文本片段 text segment 的顺序。一些研究者已经尝试了与篇章连贯性 discourse coherence 类似的预训练目标。篇章中的连贯性 coherence 和凝聚力 cohesion 已被广泛研究,许多现象已被确定为连接相邻的文本片段。在实践中发现的大多数有效目标都很简单。

      • SkipthoughtFastSentsentence 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 结合起来从而得到一个三分类任务,而不是二分类任务(比较两个连续的文本片段的顺序)。

19.1 模型

19.1.1 模型架构选择

  1. ALBERT 架构的 backboneBERT 类似,它使用了一个具有 GELU 非线性激活函数的 transformer encoder 。我们遵从 BERT 的惯例,将 vocabulary embedding size 记做 E,将 encoder layer 数量记做 L ,将 hidden size 记做 H,将 feed-forward/filter size 设定为 4H ,将注意力头的数量设定为 H/64

    BERT 的设计选择相比,ALBERT 有三个主要贡献:因子分解的 embedding 参数化 factorized embedding parameterization、跨层参数共享cross-layer parameter sharing 、句子间的一致性损失 Inter-sentence coherence loss

  2. Factorized embedding parameterization:在 BERT ,以及 XLNetRoBERTa 等后续建模改进中,WordPiece embedding size E 与隐层维度 H 绑定,即 E=H 。这个决定无论从建模的角度还是从实践的角度来看,都是不理想的,原因如下:

    • 从建模的角度来看,WordPiece embedding 是为了学习 context-independent representation ,而 hidden-layer embedding 则是为了学习 context-dependent representation 。正如关于上下文长度的实验所示(见 RoBERTa 原始论文),BERT-like representation 的力量来自于上下文的使用,从而提供用于学习这种 context-dependent representation 的信号。因此,将 WordPiece embedding size Ehidden layer size H 解绑,使我们能够更有效地利用总的模型参数,即 HE
    • 从实践的角度来看,自然语言处理通常需要很大的词表大小 V 。如果 E=H ,那么增加 H 就会增加 embedding matrix 的大小,其中 embedding matrix 的大小为 V×E 。这很容易导致一个具有数十亿个参数的模型,其中大部分在训练期间只被非常少地地更新。

    因此,对于 ALBERT ,我们使用 embedding 参数的因子分解,将它们分解成两个较小的矩阵。我们不是直接将 one-hot 向量投影到维度为 H 的隐空间,而是先将它们投影到维度为 E 的低维 embedding 空间,然后再投影到隐空间。通过使用这种分解,我们将 embedding 参数的规模从 O(V×H) 降低到 O(V×E+E×H)。当 HE 时,这种参数的减少是显著的。

    我们选择对所有的 word piece 使用相同的 E ,因为与 whole-word 相比, word piece 在文档中的分布更加均匀。在 whole-word embedding 中,对不同的词有不同的 embedding size 是很重要的。

  3. Cross-layer parameter sharing:跨层参数共享是提高参数效率的另一种方式。有多种共享参数的方式,例如,仅共享跨层的 feed-forward network: FFN 参数、或者仅共享注意力参数。ALBERT 的默认决定是跨层共享所有参数。除非另有说明,我们所有的实验都使用这个默认决定。我们在实验中把这个设计决定与其他共享参数策略进行了比较。

    虽然参数共享降低了参数规模,但是并没有降低计算量。

    Universal Transformer: UTDeep Equilibrium Models: DQETransformer 网络也进行了类似的探索。

    • 与我们的观察不同,《Universal Transformer》 表明:UT 优于普通的 Transformer
    • 《Deep equilibrium models》 表明,他们的 DQE 达到了一个平衡点,对于这个平衡点,某一层的 input embeddingoutput embedding 保持不变。我们对 L2 距离和余弦相似度的测量表明,我们的 embedding 是振荡的而不是收敛的。

    下图显示了每一层的 input embeddingoutput embeddingL2 距离和余弦相似度,使用 BERT-largeALBERT-large 配置(如下表所示)。我们观察到:ALBERT 的层与层之间的转移 transitionBERT 的平滑得多。这些结果表明,权重共享对稳定网络参数有一定的影响。

    尽管与 BERT 相比,两个指标(即, L2 距离和余弦相似度)都有下降,但即使在 24 层之后,它们也没有收敛到 0 。这表明:ALBERT 参数的解空间与 DQE 所发现的解空间非常不同。

  4. Inter-sentence coherence loss:除了 masked language modeling: MLM 损失,BERT 还使用了一个额外的损失,称为 next-sentence prediction: NSPNSP 是一种二元分类损失,用于预测两个 segment 是否在原始文本中连续出现,具体如下:通过从训练语料库中抽取连续的 segment 来创建正样本,通过将不同文档中的 segment 配对来创建负样本,正样本和负样本是以相同的概率进行采样。NSP 的目的是为了提高下游任务(如自然语言推理)的性能,这些任务需要推理 sentence pair 之间的关系。然而,随后的研究(XLNetRoBERTa)发现 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 任务一致性地改善了的下游任务表现。

19.1.2 模型配置

  1. 我们在下表中列出了 BERT 模型和 ALBERT 模型在可比的超参数设置下的差异。由于上面讨论的设计选择,ALBERT 模型与相应的BERT 模型相比,其参数规模要小得多。

    例如:

    • BERT-large 相比,ALBERT-large 的参数少了大约 18 倍,即 18M334M

      参数少了 18 倍,但是模型的效果也有所降低。

    • H=2048ALBERT-xlarge 只有60M 的参数,H=4096ALBERT-xxlarge 只有 235M 的参数(约为 BERT-large 参数规模的 70% )。

    请注意,对于 ALBERT-xxlarge ,我们主要报告 12 层网络的结果,因为 24 层网络(具有相同的配置)获得了类似的结果,但计算成本更高。

    这种参数效率的提高是 ALBERT 的设计选择的最重要的优势。

19.2 实验

  1. 为了使对比尽可能的有意义,我们遵从 BERT 的设置,使用 BOOKCORPUSEnglish Wikipedia 用于预训练 baseline 模型。这两个语料库包括大约 16GB 的未压缩文本。

    我们将输入格式化为 [CLS]X1[SEP]X2[SEP] ,其中 X1=x1,1,x1,2, 以及 X2=x2,1,x2,2, 是两个 segment 。我们总是将最大输入长度(即,拼接之后的序列的最大长度)限制为 512token ,并以 10% 的概率随机生成短于 512 的输入序列。

    BERT 一样,我们使用大小为 30K 的词表 vocabulary ,使用 SentencePiece 进行 tokenization (如同 XLNet )。

    我们使用 n-gram maskingMLM 目标生成 masked input (如同 SpanBERT),每个 n-gram masking 的长度 n 是随机选择的,由如下的概率给出(Nn-gram masking 的最大长度):

    (8)p(n)=1/nk=1N1/k

    这个概率倾向于更短的 n-gram masking 。例如,当 N=10 时,n=1,2,,10 的概率分别为: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.00176LAMB 优化器。除非另有说明,我们对所有模型进行了125Kstep 的训练。训练是在 Cloud TPU V3 上进行的。用于训练的 TPU 数量从 64512 不等,取决于模型大小。

    LAMB 优化器是针对大 batch size 的训练。首先我们看下 Adam 优化器:

    (9)mt=β1×mt1+(1β1)×gtvt=β2×vt1+(1β2)×gt2m^t=11β1tmt,v^t=11β2tvtθt=θt1η×m^tv^t+ϵ

    其中:mt 为动量,vt 为速度,gt 为梯度,gt2 为梯度的逐元素平方,η 为学习率,ϵ 为一个很小的正数用于防止除零的错误,β1,β2 为超参数,θt 为待优化的参数。

    AdamW 是为了适配 weight decay(权重衰减相当于参数的 L2 正则化),在 Adam 的基础上进行修改:

    (10)θt=θt1η×(m^tv^t+ϵ+λ×θt1)

    其中:λ 为权重衰减系数,通常设置为 0.005/0.01

    LAMBAdamW 的基础上继续修改:

    (11)rt=m^tv^t+ϵθt=θt1η×ϕ(||θt1||)×rt+λθt1rt+λθt1

    其中:ϕ() 为一个映射函数,可以选择为 ϕ(z)=z 、或者 ϕ(z)=min(max(z,γl),γu)γl,γu 为预定义的超参数分别代表 z 的下界和上界。

    除非另有说明,本节中描述的实验设置用于我们自己的所有版本的 BERT 以及 ALBERT 模型。

  2. 评估 benchmark

    • 固有评估 Intrinsic Evaluation:为了监控训练进度,我们使用前面相同的程序和配置,在 SQuADRACE 的验证集基础上创建了一个验证集。我们同时报告了 MLM 和句子分类任务的准确率。

      注意,我们只用这个创建的验证集来检查模型是如何收敛的,它的使用方式不会影响任何下游评估的性能(例如,该验证集不是用于模型选择)。

    • 下游评估 Downstream Evaluation:遵从 XLNetRoBERTa ,我们在三个流行的 benchmark 上评估我们的模型:General Language Understanding Evaluation: GLUE 基准、两个版本的 Stanford Question Answering Dataset: SQuAD、以及 ReAding Comprehension from Examinations: RACE 数据集。与 RoBERTa 一样,我们对验证集进行了早停 early stopping ,在此基础上我们报告了所有的比较,除了基于任务排行榜的最终比较(在最终比较,我们也报告了测试集的结果)。对于在验证集上有较大方差的 GLUE 数据集,我们报告了 5 次运行的中位数。

      • GLUEGLUE9 个任务组成,即 :

        GLUE 聚焦于评估模型的自然语言理解能力。当报告 MNLI 结果时,我们只报告 "match" 条件(即,MNLI-m )。我们遵循先前工作中的微调程序( BERTRoBERTaXLNet),并报告 GLUE sbumissionheld-out test set 性能。对于测试集的 submission,我们遵从 RoBERTaXLNet 的描述,对 WNLIQLNLI 进行了 task-specific 修改。

      • SQuADSQuAD 是一个从 Wikipedia 建立的提取式问答数据集 extractive question answering dataset 。答案是来自上下文段落的 segment ,任务是预测 answer span 。我们在两个版本的 SQuAD 上评估我们的模型:v1.1v2.0SQuAD v1.1100K个人类标注的 question/answer pairSQuAD v2.0 还额外引入 了 50K 个无法回答的问题。

        对于 SQuAD v1.1 ,我们使用与 BERT 相同的训练程序;而对于 SQuAD v2.0 ,模型是用 span extraction loss 和额外的 predicting answerability 分类器联合训练的(RoBERTaXLNet)。我们同时报告了验证集和测试集的性能。

      • RACERACE 是一个大规模的多选阅读理解数据集,收集自中国的英语考试,有近 100K 个问题。RACE 中的每个实例有 4 个候选答案。遵从之前的工作(RoBERTaXLNet),我们使用段落、问题、以及每个候选答案的拼接作为模型的输入。然后,我们使用来自 "[CLS]" tokenrepresentation 来预测每个答案的概率。

        该数据集包括两个 domain:初中和高中。我们同时在这两个 domain 上训练我们的模型,并同时报告验证集和测试集的准确率。

  3. 下游任务的超参数配置如下表所示。

19.2.1 BERT 和 ALBERT 的整体比较

  1. 我们现在准备量化 ALBERT 模型架构设计选择的影响,特别是围绕参数效率 parameter efficiency 的选择。如下表所示,参数效率的提高展示了 ALBERT 设计选择的最重要的优势:ALBERT-xxlarge 只用了 BERT-large70% 左右的参数,就比 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 的每个设计选择的单独贡献。

19.2.2 因子分解的 Embedding Parameterization

  1. 下表显示了使用 ALBERT-base 配置(见 Table 1)时改变 vocabulary embedding 维度 E 的效果,其中使用相同的一组代表性的下游任务。可以看到:

    • 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 维度 E=128 ,作为进一步 scaling 的必要步骤。

    下表还说明:相同 embedding size 下,ALBERTBERT 的效果更差。

19.2.3 跨层参数共享

  1. 下表 列出了各种跨层参数共享策略的实验,其中使用 ALBERT-base 配置(见 Table 1)和两种 embedding 维度( E=768E=128 )。我们比较了 all-shared 策略(ALBERT-style )、not-shared 策略(BERT-style )、以及中间策略(只有注意力参数被共享、或只有 FFN 参数被共享)。可以看到:

    • 相比较于 not-sharedall-shared 在两种 embedding 维度下都会损害性能,但与 E=768 (平均准确率 -2.5% )相比,E=128 (平均准确率 -1.5% )的情况稍微好一点。

      这和 《Universal Transformer》 的实验结论相反。

    • 此外,相比较于 not-shared,大部分的性能下降似乎来自于共享 FFN 参数,而共享注意力参数在 E=128 时没有下降(平均准确率 +0.1% )、在E=768 时有轻微下降(平均准确率 -0.7%)。

    • 还有其他跨层共享参数的策略。例如,我们可以把 L 层分成 N 个大小为 M 层的组,每个组(包含 M 层)共享参数。总的来说,我们的实验结果表明,组的大小 M 越小,我们得到的性能就越好。然而,减少组的大小 M 也会极大地增加整体参数的数量。我们选择 all-shared 作为我们的默认选择。

19.2.4 Sentence Order Prediction

  1. 我们使用 ALBERT-base 配置,对额外的句间损失 inter-sentence loss 进行了三个实验:noneXLNet-styleRoBERTa-style )、NSPBERT-style )、以及 SOPALBERT-style )。结果如下表所示,包括固有任务(MLMNSP 、以及 SOP 任务的准确率)和下游任务。可以看到:

    • 固有任务的结果显示:

      • NSP loss 没有给 SOP 任务带来判别能力(52.0% 的准确率,类似于 None 条件下的随机猜测性能)。这使我们可以得出结论:NSP 最终仅建模话题漂移 topic shift
      • 相比之下,SOP loss 确实能比较好地解决 NSP 任务(准确率 78.9% ),解决 SOP 任务甚至更好(准确率 86.5% )。

      这三种方式对 MLM 任务都没有帮助。

    • 更重要的是,相比 NoneSOP loss似乎一致地改善下游 multi-sentence encoding 任务的表现(SQuAD1.1 约提升 +1%SQuAD 2.0 约提升 +2%RACE 约提升 +1.7% ),平均得分提高了约 +1%

19.2.5 相同训练时间

  1. Table 2 中的加速结果表明,与 ALBERT-xxlarge 相比,BERT-large 的数据吞吐量高出约 3.17 倍。由于更长的训练时间通常会导致更好的性能,我们进行了一个比较,其中,我们不控制数据吞吐量(即,训练步数),而是控制实际训练时间(即,让不同的模型训练相同的小时数)。在下表中,我们比较了一个 BERT-large 模型在 400K 个训练 step (经过 34 小时的训练)后的性能,大致相当于训练一个 ALBERT-xxlarge 模型所需的125K 个训练 step32 小时的训练)的时间。

    在训练了大致相同的时间后,ALBERT-xxlarge 显著优于 BERT-large :平均值提高了 +1.5% ,在 RACE 上的性能提升高达+5.2%

19.2.6 额外的训练数据和 Dropout 效果

  1. 到目前为止所做的实验只使用了 WikipediaBOOKCORPUS 数据集,就如 BERT 所使用的。在本节中,我们报告了 XLNetRoBERTa 所使用的额外数据的影响。下图 (a) 显示了在没有额外数据、以及有额外数据两种条件下的验证集 MLM 准确率,可以看到有额外数据条件下有显著的提升。从下表中我们还观察到,除了 SQuAD benchmarkWikipedia-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 normalizationdropout 组合可能会产生有害的结果。据我们所知,我们是第一个表明 dropout 会损害大型 Transformer-based 模型的性能。然而,ALBERT 的底层网络结构是 transformer 的一个特例,需要进一步的实验来观察这种现象是否出现在其他 transformer-based 的架构中。

    注意,下图 (b) 是从 1M 步之后再移除 dropout 的,而不是一开始就移除 dropout 。所以前面 1M 步,二者的曲线是重合的。

    另外,论文的结论有点问题。这里仅仅说明,前 2/3 的时间使用 dropout 然后剩余时间移除 dropout,要比全部时间使用 dropout 的效果更好。而无法说明移除 dropout 比带 dropout 更好。

    另外,论文的 Table 8 仅仅说是在大约 1M 步时的评估结果,但是没有说具体在什么时候。是 110 万步?还是 120 万步?

19.2.7 NLU 任务上的当前 SOTA

  1. 我们在本节报告的结果利用了 BERT 使用的训练数据,以及 RoBERTaXLNet 使用的额外数据。我们报告了两种 setting 下的微调的 SOTA 结果:单模型single-model 和集成 ensemble 。在这两种 setting 中,我们只做单任务微调。遵从 RoBERTa 的做法,在验证集上,我们报告了五次运行的中位数。

    • 单模型的 ALBERT 配置包含了所讨论的最佳性能的settingALBERT-xxlarge 配置(参考 Table 1 ),组合 MLM lossSOP loss,以及 no dropout

    • ensembleALBERT 是从多个 checkpoint 来获取的,这些 checkpoint 根据验证集的性能来选择,被选中的 checkpoint 的数量从 619 不等。

      对于GLUETable 9 )和 RACETable 10 ),我们对集成模型 ensemble models 的预测值取平均,其中候选模型是微调了不同的预训练模型(这些预训练模型使用 12 架构层和 24 层架构,并预训练了不同的步数)。

      对于 SQuADTable 10 ),我们对那些有多个概率的 span 的预测分数进行了平均。我们还对 "unanswerable" 的决定的分数进行了平均。

    单模型结果和集成模型结果都表明:

    • ALBERT 在所有三个 benchmark 上都大大改善了 SOTA 的水平,实现了89.4GLUE 得分、92.2SQuAD 2.0 测试F1 得分、以及 89.4RACE 测试准确率。

      这些都是集成模型的效果。

    • RACE 上似乎是一个特别强大的改进:

      • 我们的集成模型比 BERT 的绝对分值跃升 +17.4%、比 XLNet 提升 +7.6% 、比 RoBERTa 提升 +6.2% 、比 DCMI+ 提升 5.3%

        这里只有 DCMI+ 是集成模型的效果,其它的 BERT/XLNET/RoBERTa 都是单模型的效果(不公平的比较)。

      • 我们的单模型达到了 86.5% 的测试准确率,比 SOTA 的集成模型仍好 2.4%

19.2.8 附录:网络的深度和宽度

  1. 在本节中,我们检查了网络深度(层数)和宽度(隐层维度)对 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 配置相比,它们的训练损失和验证损失都比较高。

  2. 是否更宽的模型需要更深?在前面我们表明:对于隐层维度 H=1024ALBERT-large12 层和 24 层模型 之间的差异很小。对于更宽的 ALBERT ,如 ALBERT-xxlargeH=4096),这一结果是否仍然成立?

    答案如下表所示。12 层和 24 层的 ALBERT-xxlarge 配置在下游任务准确率方面的差异可以忽略不计,Avg 得分相同。我们的结论是:当共享所有跨层参数(ALBERT-style )时,没有必要建立比 12 层更深的模型。

二十、UniLM [2019]

  1. 语言模型的预训练在各种自然语言处理任务中大大推进了 SOTA。预训练的语言模型通过使用大量的文本数据根据单词的上下文来预测该单词来学习 contextualized text representation ,并且可以进行微调从而适应下游的任务。

    不同的预测任务和训练目标已经被用于预训练不同类型的语言模型,如下表所示:

    • ELMo 学习两个单向的语言模型:一个正向语言模型从左到右编码文本,一个反向的语言模型从右到左编码文本。
    • GPT 使用一个从左到右的 transformerword-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.0CoQA )上与 BERT 相比更有优势。此外,论文还证明了 UNILM 在五个自然语言生成数据集上的有效性,其中UNILM 作为一个 sequence-to-sequence 的语言模型来使用, 在 CNN/DailyMailGigaword 的抽象式摘要、SQuAD 问题生成、CoQA 生成式问答 enerative question answering 、以及 DSTC7 对话式响应生成dialog response generation 上创造了新的 SOTA

20.1 模型

  1. 给定一个输入序列 X=x1,x|X|UNILM 为每个 token 获得了一个 contextualized vector representation 。如下图所示, 预训练通过几个无监督的语言建模目标来优化共享的 Transformer 网络,即单向语言模型、双向语言模型、以及 sequence-to-sequence 语言模型。为了控制对将要预测的 word token 的上下文的访问,我们采用了不同的自注意力掩码。换句话说,我们使用掩码来控制 token 在计算其 contextualized representation 时应该注意多少上下文。一旦 UNILM 得到预训练,我们就可以利用下游任务的 task-specific 数据对其进行微调。

  2. Input Representation:输入 X 是一个单词序列:

    • 对于单向语言模型而言, X 是一个 text segment
    • 对于双向语言模型和 sequence-to-sequence 语言模型而言, X 是打包在一起 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 embeddingposition embedding 、以及 segment embedding 相加而计算出来的。

    由于 UNILM 是使用多个语言模型任务进行训练的,segment embedding 也起到了语言模型 id 的作用,因为我们为不同的语言模型目标使用不同的 segment embedding

    对于单向语言模型,只有一个 segment,因此 segment id 都是 1;对于双向语言模型和 sequence-to-sequence 语言模型,有两个 segment,因此 segment id12 。因此,根据 segment id 是几个,可以粗略地(而无法精确地)区分不同的语言模型。

  3. Backbone Network: Multi-Layer Transformerinput 向量 {xi}i=1|X| 被打包为 H(0)=[x1,,x|X|]Rd×|X| ,其中 dtoken embedding 维度(也是 position embeddingsegment embedding 的维度)。然后 H(0) 通过一个 L 层的 Transformer 被编码到不同 levelcontextual representation

    (12)H(l)=[h1(l),,h|X|(l)]=Transformerl(H(l1)),l{1,2,,L}

    其中 H(l) 为第 l 个层 Transformer 的输出。

    在每个 Transformer Block 中,多个 self-attention head 被用于聚合前一层的输出向量。对于第 lTransformer 层,单个 self-attention head A(l) 是通过如下的公式来计算的:

    (13)Q=WQ(l)H(l1)Rdh×|X|K=WK(l)H(l1)Rdh×|X|V=WV(l)H(l1)Rdh×|X|A(l)=softmax(QKd+M)V(l)

    其中:

    • WQ(l),WK(l),WV(l)Rdh×d 为三个投影函数,分别将 H(l1)Rdh×|X| 投影到 query 空间、key 空间、value 空间。dhself-attention head 的维度。
    • MR|X|×|X|mask matrix (也叫做 self-attention mask matrix),用于决定一对 token 之间是否可以相互关注 attend

    我们使用不同的 mask matrix M 来控制一个 token 可以关注的上下文从而计算该 tokencontextualized representation ,如 Figure 1 所示。以双向的语言模型为例: mask matrix的元素都是 0 ,表明所有的token 都可以相互访问。

  4. 预训练目标:我们使用四个完形填空任务来预训练 UNILM,这些完形填空任务为了不同语言建模目标而设计的。在完形填空任务中,我们在输入中随机选择一些 WordPiece token ,并用 special token (即,[MASK])替换它们。然后,我们将 Transformer 网络计算出的、这些 special token 对应的输出向量馈入一个 softmax 分类器,以预测 masked tokenUNILM 的参数被学习为:使 predicted tokenoriginal token 计算的交叉熵损失最小。值得注意的是,使用完形填空任务使得所有的语言模型都可以使用相同的训练程序,单向和双向的都一样。

    • 单向语言模型:我们同时使用 left-to-right 语言模型目标、以及 right-to-left 语言模型目标。

      left-to-right 语言模型为例。每个 tokenrepresentation 只编码左侧的 context token 和它自身。例如,为了预测 " x1x2[MASK]x4 " 的 masked token ,只能使用token x1,x2 及其自身(即 [MASK])。这是通过使用三角矩阵的 self-attention mask M 来实现的,其中self-attention mask 的上三角部分被设置为 ,其他不分被设置为 0 ,如图 Figure 1 所示。

      类似地, right-to-left 语言模型以 token 的右侧上下文为条件来预测该 token

    • 双向语言模型:遵从 BERT,双向语言模型允许所有 token 在预测中相互关注。双向语言模型对来自两个方向的上下文信息进行编码,并能产生比单向语言模型更好的 contextual representation 。在双向语言模型中,self-attention mask M 是一个全零矩阵,因此在输入序列的所有位置上可以关注每个 token

    • Sequence-to-Sequence 语言模型: 如图 Figure 1 所示,对于预测来说:

      • 第一个 segment (即,source segment)的 token 可以从 source segment 内的两个方向相互关注。
      • 而第二个 segment (即,target segment )的 token 只能关注 target segment 内的左侧上下文及其自身,以及 source segment 内的所有 token

      例如,给定 source segment t1t2 及其 target segment t3t4t5 ,我们将 input "[SOS]t1t2[EOS]t3t4t5[EOS]" 馈入模型。t1t2 都可以访问前面四个 token (即,"[SOS]t1t2[EOS]"),但 t4 只能访问前面六个 token (即,"[SOS]t1t2[EOS]t3t4 ")。

      Figure 1 显示了用于Sequence-to-Sequence 语言模型目标的self-attention mask M

      • M 的左边部分被设置为全 0 ,这样所有的 token 都能访问到第一个 segment
      • M 的右上部分被设置为 ,从而阻止 source segment 关注到 target segment
      • 此外,对于M 的右下部分,我们把它的上三角部分设置为 、其他位置设置为 0 ,这样可以防止target segment 中的 token 关注到它们未来的位置(即,右侧)。

      在训练过程中,我们同时在两个 segment 中随机选择 token ,并用 special token (即,[MASK] )来替换它们。该模型被学习从而恢复 masked token 。由于 source texttarget textpair 对在训练中被打包成一个连续的输入文本序列,我们隐式地鼓励模型学习这两个 segment 之间的关系。为了更好地预测 target segment 中的 tokenUNILM 学习有效地编码 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 任务。

  5. 预训练配置:整体预训练目标是上述不同类型的语言模型的目标之和。具体而言,在一个 training batch 中,包含: 1/3 的双向语言模型目标、1/3Sequence-to-Sequence 语言模型目标、1/6left-to-right 语言模型目标、1/6right-to-left 语言模型目标。

    UNILM 的模型结构遵循 BERT_LARGE 的结构,以便进行公平的比较。遵从 GPTUNILM 采用 gelu 激活函数。具体而言,我们使用一个 24 层的 Transformer ,隐层维度 1024、注意力头 16 个,共包含大约 340M 的参数。softmax 分类器的权重矩阵与 token embedding 绑定(即,二者共享相同的参数矩阵)。

    UNILMBERT_LARGE 初始化,然后使用 English WikipediaBookCorpus 进行预训练,这两个数据集的处理方式与 BERT 相同。词表vocabulary 规模为 28996 。输入序列的最大长度为 512token masking 的概率为 15% 。在 masked position 中,80% 的时间我们用 [MASK] 来替代被选中的 token10% 的时间用 random token 来替代,其余的 10% 时间保持 original token 。此外,80% 的时间我们每次随机掩码一个 token20% 的时间我们随机掩码一个 bigram 或一个 trigram

    我们使用 β1=0.9,β2=0.999Adam 优化器。学习率为 3e-5 ,其中在最初的 40K 步中进行线性预热然后进行线性衰减。 dropout-rate = 0.1weight-decay = 0.01batch-size = 330 。预训练程序运行了大约 770K 步。使用 8Nvidia Telsa V100 32GB GPU card 进行混合精度训练,每 10K 步需要约 7 小时。

    BERT_LARGE 初始化之后还预训练了 770K 步,那初始化的意义和影响是什么?通常,用预训练好的模型作为初始化之后,只需要训练少量的 step 就能达到比较好的效果。

    从工程落地上来讲,用 BERT_LARGE 来初始化有利于更快地收敛从而降低训练成本;从实验上来讲,最好是从头开始训练从而进行公平地比较。

  6. 下游自然语言理解任务和自然语言生成任务的微调:

    • 对于自然语言理解任务,我们将 UNILM 作为一个双向 Transformer encoder 来微调,就像 BERT

      以文本分类任务为例。我们使用 [SOS]encoding vector 作为 input representation ,记做 h1(L) ,并将其馈入随机初始化的 softmax 分类器(即 task-specific 输出层),其中类别概率计算为:softmax(h1(L)WC),其中 WCRd×C 是一个参数矩阵,C 是类别数量。我们通过更新预训练的语言模型以及被添加的 softmax 分类器的参数,从而最大化 labeled training data 的似然 likelihood

    • 对于自然语言生成任务,我们以 sequence-to-sequence 任务为例。微调过程类似于使用 self-attention mask 的预训练。令 S1S2 分别表示 source sequencetarget sequence 。我们通过 special token 将它们打包在一起,形成输入 "[SOS] S1 [EOS] S2 [EOS]" 。该模型通过随机掩码 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 的部分)。

20.2 实验

  1. 我们对自然语言理解任务(即 GLUE benchmark ,以及抽取式问答 extractive question answering )和自然语言生成任务(即抽象式摘要 abstractive summarization 、问题生成、生成式问答、以及对话响应生成 dialog response generation )都进行了实验。

20.2.1 抽象式摘要

  1. 自动文本摘要 automatic text summarization 能产生一个简明流畅的 summary ,传达 input(如,一篇新闻文章)的关键信息。我们聚焦于抽象式摘要,这是一项生成任务,其中 summary 不必使用输入文本中的短语或句子。我们使用 CNN/DailyMail 数据集的非匿名版本、以及 Gigaword 来用于模型微调和评估。我们按照前面描述的程序将 UNILM 作为一个 sequence-to-sequence 模型进行微调,将文档(第一个 segment )和 summary (第二个 segment )拼接起来作为输入,并根据预定义的最大序列长度进行截断。

    我们在训练集上对我们的模型微调了 30epoch 。我们复用预训练中的大多数超参数。掩码概率为 0.7 。我们还使用平滑率为 0.1 的标签平滑 label smoothing

    • 对于 CNN/DailyMail ,我们设置 batch size = 32 ,最大序列长度为 768
    • 对于 Gigaword ,我们设置 batch size = 64 ,最大序列长度为 256

    在解码过程中,我们使用 beam size = 5beam search 。对于 CNN/DailyMailGigaword 来说,input document 被截断为前 640token 和后 192token 。我们在 beam search 中删除了重复的 trigram ,并在验证集上调整了 maximum summary length

  2. 我们使用 F1 版本的 ROUGE 作为两个数据集的评估指标。在下表中,在 CNN/DailyMail 数据集上,我们将 UNILMbaseline 以及几个 SOTA 模型进行比较:

    • LEAD-3 是一个 baseline 模型,它抽取文档中的前三句话作为其摘要。
    • PGNet 是一个基于 pointer-generator networksequence-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 分。

  3. 在下表中,我们对模型在不同规模(10K3.8M )的 Gigaword 上进行了评估。

    • TransformeOpenNMT 都实现了标准的 attentional sequence-to-sequence 模型。
    • Re3Sum 检索摘要作为候选模板,然后使用一个扩展的 sequence-to-sequence 模型来生成摘要。
    • MASS 是一个基于 Transformer 网络的预训练的 sequence-to-sequence 模型。

    实验结果表明:UNILM 取得了比以往工作更好的性能。此外,在低资源环境下(即只使用 10K 个样本作为训练数据),我们的模型在 ROUGE-L 中比 MASS 高出 7.08 分。

20.2.2 问答

  1. Question Answering: QA 任务是在给定一个段落的条件下回答一个问题。有两种 setting

    • 第一种被称为抽取式问答 extractive QA ,答案被假定为段落中的一个 text span
    • 另一种被称为生成式问答 generative QA ,答案需要即时生成。
  2. 抽取式问答:这项任务可以被表述为自然语言理解任务,我们需要预测答案在段落中的开始位置和结束位置。我们对预训练的 UNILM 进行微调,将UNILM 作为双向编码器从而用于抽取式问答。我们在 Stanford Question Answering Dataset: SQuAD2.0 版本、以及 Conversational Question Answering: CoQA 数据集上进行了实验。

    • SQuAD 2.0 上的结果如下表所示,我们比较了两个模型的精确匹配 Exact Match: EM 分和 F1 分。

      • RMR+ELMo 是一个基于 LSTM 的问答模型,用预训练好的 language representation 来增强。
      • BERT_LARGE 是一个 cased 模型(即,字母保持大小写),在 SQuAD 训练数据上微调了 3epochbatch 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] tokenfinal hidden vector 来预测 input question 是否是一个"yes/no" 问题,以及答案为 "yes/no"

        对于非"yes/no" 问题 ,我们选择一个 F1 分数最高的 passage subspan 用于训练。

      CoQA 的实验结果如下表所示。我们比较了两个模型的 F1 分:

      • DrQA+ELMo 是一个基于 LSTM 的问答模型,用预训练好的 ELMo representation 来增强。
      • BERT_LARGE 是一个 cased 模型(即,字母保持大小写),在 CoQA 训练数据上微调了 2epochbatch size = 16 ,最大序列长度为 512
      • UNILM 以与 BERT_LARGE 相同的方式进行微调。

      我们看到 UNILM 的表现优于 BERT_LARGE

  3. 生成式问答:生成式问答为 input question 和段落生成自由形式的答案,这是一个自然语言生成任务。相比之下,抽取式问答只能预测 input passagesubspan 作为答案。在 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 微调了 10epoch 。我们设置 batch size = 32 ,掩码率为 0.5 ,最大序列长度为 512 。我们还使用平滑率为 0.1 的标签平滑。其他超参数与预训练保持一致。

    在解码过程中,我们使用 beam size = 3beam searchinput question 和段落的最大长度为 470 。对于超过最大长度的段落,我们用滑动窗口的方法将段落分成若干块,并选择一个与question 具有最高 word overlap 的块。

    我们将我们的方法与生成式问答模型 Seq2SeqPGNet 进行了比较:

    • Seq2Seq baseline 是一个带有注意力机制的 sequence-to-sequence 模型。
    • PGNet 模型用一个 copy 机制增强了 Seq2Seq

    如下表所示,我们的生成式问答模型在大大超过了以前的生成式方法,这极大地缩小了生成式方法和抽取式方法之间的差距。

20.2.3 问题生成

  1. 我们对 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 问题。第一个 segmentinput passage 和答案的拼接,而第二个segment 是被生成的问题。

    我们在训练集上对 UNILM 微调了 10epoch 。我们设置 batch size = 32,掩码率为 0.7 ,学习率为 2e-5 。我们采用平滑率为 0.1 的标签平滑。其他超参数与预训练相同。

    在解码过程中,我们将输入截断为 464token 并选择包含答案的 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

  2. 生成的问题来改善 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 的绝对改进并没有在下表中展示。

20.2.4 响应生成

  1. 我们在以文档为基础的 dialog response generation 任务上评估 UNILM 。给定一个多轮对话历史、以及一个网络文档 web document 作为知识源,系统需要生成一个既适合对话、又反映网络文档内容的自然语言响应。我们微调 UNILM 来完成这个任务,其中 UNILM 作为一个 sequence-to-sequence 模型。第一个 segmentinput sequence )是 web document 和对话历史的拼接。第二个 segmentoutput sequence )是响应。

    我们在 DSTC7 的训练数据上对 UNILM 微调了 20epochbatch size = 64 。掩码率为 0.5 。最大序列长度为 512 。在解码过程中,我们使用 beam size = 10beam search 。产生的响应的最大序列长度被设置为 40

    如下表所示,在 DSTC7 共享任务中,UNILM 在所有评估指标上都超过了最好的系统。

20.2.5 GLUE Benchmark

  1. 我们在 GLUE benchmark 上评估 UNILMGLUE 是九个语言理解任务的集合,包括问答、语言可接受性linguistic acceptability 、情感分析、文本相似性、转述检测paraphrase detection 、以及自然语言推理natural language inference : NLI

    我们的模型作为一个双向语言模型被微调。我们使用 Adamax 优化器,学习率为 5e-5batch size = 32 。最大 epoch 数被设为 5 。使用一个带预热(预热比例 0.1 )的线性学习率衰减的学习率调度。每个任务的 last linear projectiondropout-rate = 0.1,除了 MNLI0.3CoLA/SST-20.05 。为了避免梯度爆炸问题,梯度范数被剪裁在 1.0 以内。我们截断 token 使得输入序列长度不超过 512

    下表列出了从 benchmark evaluation server 获得的 GLUE 测试结果。结果显示,在 GLUE 任务中,UNILMBERT_LARGE 相比获得了相差无几的性能。

20.2.6 未来工作

  1. UNILM 可以从以下几个方面继续改善:

    • 我们将通过在 web-scale的文本语料库上训练更多的 epoch 和更大的模型来推动当前方法的极限。同时,我们还将在下游应用上进行更多的实验以及消融实验,从而研究模型能力以及采用相同网络来预训练多种语言建模任务的好处。
    • 在我们目前的实验中,我们聚焦于单语 NLP 任务。我们还对扩展 UNILM 从而支持跨语言的任务感兴趣。
    • 我们将对自然语言理解和自然语言生成任务进行多任务微调,这是 Multi-Task Deep Neural Network: MT-DNN 的自然延伸。

二十一、MASS [2019]

  1. 预训练和微调被广泛使用,当目标任务的训练数据资源较少或为零而预训练有大量的数据时。例如,在计算机视觉中,模型通常在大规模的 ImageNet 数据集上进行预训练,然后在下游任务(如目标检测任务、图像分割任务)上进行微调。最近,ELMoOpenAI GPT、以及 BERT 等预训练方法在自然语言处理中引起了很多关注,并在多种语言理解任务中取得了 SOTA 的准确性,如情感分类、自然语言推理、命名实体识别、以及 SQuAD 问答,这些任务通常只有有限的监督数据。在上述预训练方法中,BERT 是最卓越的一种,它通过 masked language modelingnext sentence prediction ,在大型单语语料库上预训练 bidirectional encoder representation

    与语言理解不同,语言生成的目的是在某些输入的条件下生成自然语言句子,包括神经机器翻译 neural machine translation : NMT、文本摘要text summarization 、以及对话式响应生成 conversational response generation 等任务。语言生成任务通常对数据要求很高,许多任务在训练数据方面是低资源 low-resource 甚至是零资源 zero-source 的。在这些自然语言生成任务上直接应用 BERT-like 的预训练方法是不可行的,因为 BERT 是为语言理解设计的,其中这些任务通常只由一个 encoderdecoder 处理。因此,如何为语言生成任务(通常采用基于 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 经过精心设计,分两步对encoderdecoder进行联合预训练:

    • 通过预测 encoder sidemasked fragmentMASS 可以迫使encoder理解 unmasked token 的含义,从而在 decoder side 预测 masked token
    • 通过掩码 decoderinput tokens ,其中这些 masked input tokensencoder side 没有被掩码,MASS 可以迫使decoder 更多地依赖于 source representation (即,encoder representation)而不是 decoder sideprevious tokens ,从而用于 next token prediction 。这可以更好地促进encoderdecoder的联合训练。

    MASS 只需要预训练一个模型,然后在各种下游任务中进行微调。论文使用 transformer 作为基础的 sequence to sequence 模型,并且在 WMT 单语语料库上进行预训练,然后在三种不同的语言生成任务上进行微调,包括神经机器翻译、文本摘要、以及对话式响应生成。考虑到下游任务涵盖了像神经机器翻译这样的跨语言任务,论文在多种语言上预训练一个模型。论文为所有三个任务探索了 low-resource setting ,也考虑了无监督的神经机器翻译(这是一个纯粹的 zero-resource setting)。

    • 对于神经机器翻译,论文在 WMT14 English-FrenchWMT16 English-German 、以及 WMT16 English-Romanian 数据集上进行了实验。
    • 对于无监督的神经机器翻译,论文直接在单语数据上用 back-translation loss 微调预训练的模型,而不是像 《Phrase-based & neural unsupervised machine translation》 那样使用额外的降噪自编码器损失。
    • 对于低资源的神经机器翻译,论文在有限的双语数据上微调预训练的模型。
    • 对于其他两项任务,论文的实验如下:Gigaword 语料库用于抽象式文本摘要,Cornell Movie Dialog 语料库用于对话式响应生成。

    论文的方法在所有这些任务以及 zero-resource settinglow-resource setting 中都取得了改进,表明论文的方法是有效的,适用于广泛的序列生成任务。

    论文的贡献如下:

    • 论文提出了 MASS ,一种用于语言生成的 masked sequence to sequence 预训练方法。

      MASS 主要用于自然语言生成任务,而无法用于自然语言理解任务。

    • 论文将 MASS 应用于各种语言生成任务,包括神经机器翻译、文本摘要、以及对话式响应生成,并取得了显著的改进,证明了 MASS 的有效性。

      具体而言, MASS 在两种 language pair (即,English-French, English-German )的无监督神经机器翻译上取得了 SOTABLEU 分,并且在 English-FrenchFrench-English 上分别超过了之前的无监督神经机器翻译方法 4 分以上和 1 分以上,甚至超过了早期的 attention-based 的监督模型。

  2. 相关工作:在自然语言处理领域,在 sequence to sequence learning 和预训练方面有很多工作。

    • Sequence to Sequence Learningsequence 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 representationfeature ,其中包括 word-level representationsentence-level representation 、以及来自神经机器翻译模型和 ELMocontext sensitive feature
      • fine-tuning 方法主要是在语言建模目标上预训练模型,然后在具有监督数据的下游任务上微调模型。具体来说, 《Bert: Pre-training of deep bidirectional transformers for language understanding》 提出了基于 masked language modelingnext sentence predictionBERT ,并在 GLUE benchmarkSQuAD 中的多个语言理解任务中取得了 SO