八、BERT[2018]

  1. 语言模型预训练已被证明对改善许多自然语言处理任务是有效的。这些任务包括:

    • sentence-level 的任务,如自然语言推理 natural language inference 和转述paraphrasing ,其目的是通过整体分析来预测句子之间的关系。
    • token-level 的任务,如命名实体识别 named entity recognition: NERSQuAD 问答 question answering: QA ,其中模型需要在 token-level 产生细粒度的输出。

    目前有两种策略将预训练的 language representation 应用于下游任务: feature-basedfine-tuning

    • feature-based方法(如 ELMo)使用 tasks-specific 架构,其中使用预训练的 representation作为额外的特征。
    • fine-tuning方法(如 GPT ),引入了最小的 task-specific 参数,并通过简单地微调 pretrained parameter 从而对下游任务进行训练。

    在之前的工作中,这两种方法在pre-training 期间共享相同的目标函数,其中它们使用单向语言模型来学习通用的 language representation

    即,feature-based方法和fine-tuning方法采用相同的预训练方式,但是在应用到下游任务阶段才有所差异。

    论文 《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》 认为:目前的技术严重限制了 pre-trained representation 的能力,特别是对于微调 fine-tuning 方法。主要的限制是:标准的语言模型是单向的,这就限制了在预训练中可以使用的架构。例如,在 GPT 中,作者使用了一个从左到右的架构,其中在 Transformerself-attention layer 中每个 token 只能关注前面的 token

    • 对于sentence-level 的任务,这样的限制是次优的。
    • 对于 token-level 的任务(如 SQuAD 问答任务),当应用基于微调的方法时,这样的限制可能是毁灭性的。因为在这种情况下,从两个方向融合上下文是至关重要的(因为可能需要关注后面的 token 而不是前面的,从而找到问题的答案)。

    在论文 《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》 中,作者通过从 Transfromer 中提出 Bidirectional Encoder Representation: BERT 来改善基于微调的方法。BERT 通过提出一个新的预训练目标来解决前面提到的单向约束:masked language model: MLM 任务,其灵感来自 Cloze 任务(即,完形填空任务)。 MLM 从输入中随机掩码一些 token ,任务的目标是仅根据上下文来预测被掩码单词的原始 vocabulary id 。与从左到右的语言模型预训练不同的是,MLM 目标允许representation 同时融合左侧和右侧的上下文,这使得我们可以预训练一个深度的双向 Transformer 。除了MLM ,论文还引入了一个 next sentence prediction: NSP 任务来联合预训练 text-pair representation

    论文贡献如下:

    • 作者证明了双向预训练对 language representation 的重要性。与 《Improving language understanding with unsupervised learning》使用单向语言模型进行预训练不同,BERT 使用 MLM 来实现 pre-trained deep bidirectional representation 。这也与 ELMo相反,后者使用独立训练的从左到右和从右到左的语言模型的浅层拼接 shallow concatenation
    • 作者表明,预训练的 representation 消除了许多严重工程化的 task-specific 架构的需要。BERT 是第一个基于微调的 representation model ,它在大量的 sentence-leveltoken-level 任务上取得了SOTA 的性能,超过了许多具有 task-specific 架构的系统。
    • BERT 推动了 11NLP 任务的 state-of-the-art 。作者还报告了BERT 的大量消融实验,表明 BERT 模型的双向特性是唯一最重要的新贡献。
  2. 相关工作:

    • feature-based 方法:几十年来,学习广泛适用的 word representation 一直是一个活跃的研究领域,包括非神经方法和神经方法。预训练的 word embeddin 被认为是现代 NLP 系统的一个组成部分,与从头开始学习的 embedding 相比,有很大的改进。

      这些方法已被推广到更粗的粒度,如 sentence embeddingparagraph embedding 。与传统的 word embedding 一样,这些学到的 representation 通常也被用作下游模型的特征。

      ELMo 沿着不同的维度推广了传统的 word embedding 研究。他们提出从语言模型中提取 context-sensitive 的特征。当将contextual word embedding 与现有的 task-specific 架构相结合时,ELMo 推进了几个主要 NLP benchmarkSOTA ,包括 SQuAD 上的问答、情感分析 sentiment analysis 和命名实体识别 named entity recognition

    • fine-tuning 方法:最近从语言模型中进行迁移学习的一个趋势是,在为下游监督任务微调同一模型之前,在语言模型目标上预训练该模型架构。这些方法的优点是,只需要从头开始学习非常少的参数。至少部分由于这一优势,GPTGLUE benchmark 的许多 sentence-level 任务上取得了当时 SOTA 的结果。

    • 从监督数据 supervised data 迁移学习:虽然无监督预训练的优势在于几乎有不限量的数据可用,但也有工作表明,可以从具有大型数据集的监督任务中有效地迁移学习,如自然语言推理和机器翻译 machine translation 。在 NLP 之外,计算机视觉领域的研究也证明了从大型预训练模型进行迁移学习的重要性,其中一个有效的秘方是:对基于 ImageNet 预训练的模型进行微调。

8.1 模型

8.1.1 模型架构

  1. BERT 的模型架构是一个多层的、双向的 Transformer encoder ,基于 《Attention is allyou need》描述的原始实现。由于最近 Transformer 的使用已经变得无处不在,而且我们的实现实际上与原版相同,因此我们将省略对模型架构的详细描述,请读者参考 《Attention is allyou need》 以及 《The Annotated Transformer》 等优秀出版物。

    在这项工作中,我们将层数(即 Transformer block)记做 Lhidden size 记做 Hself-attention head 数记做 A 。 在所有情况下,我们将 feed-forward/filter size 设为 4H ,即,H=768 时设为的 3072H=1024 时设为 4096 。我们主要报告两种模型尺寸的结果:

    • BERT_BASEL=12H=768A=12,总的参数规模 110M
    • BERT_LARGEL=24H=1024A=16,总的参数规模 340M

    前馈神经网络是一个双层的全连接网络,输入维度为 H、中间层的维度为 4H 、输出层的维度为 H

    BERT_BASE 被选择为具有与 GPT 相同的模型大小,以便于比较。然而,关键的是,BERT Transformer 使用的是双向自注意力,而GPT Transformer 使用的是受约束的自注意力(每个token 只能关注其左侧的上下文)。我们注意到,在文献中,双向 Transformer 通常被称为 Transformer encoder ,而只关注左侧上下文的 Transformer 被称为 Transformer decoder (因为它可以用于文本生成)。

    BERTGPTELMo 之间的比较如下图所示。

8.1.2 Input Representation

  1. 我们的 input representation 能够在一个token 序列中明确地表示单个文本句子或一对文本句子(如,[Question, Answer] )。对于一个给定的token ,它的 input representation 是由相应的token embeddingsegment emebddingposition embedding 相加而成的。下图给出了我们的 input representation 的直观表示。

    具体而言:

    • 我们使用具有 30ktokenvocabularyWordPiece embedding《Google’s neural machine translation system: Bridging the gap between human and machine translation》)。我们用 ## 指示被拆分的 word piece

    • 我们使用学到的 positional embedding ,最大可以支持长度为 512token 的序列。

    • 每个序列的第一个 token 总是特殊的 classification embedding ,即 [CLS]。与这个 token 相对应的 final hidden state (即 Transformer 的输出)被用作分类任务的 aggregate sequence representation。对于非分类任务,这个向量被忽略。

    • sentence pair 被打包成一个单一的序列。我们以两种方式区分这些句子。

      • 首先,我们用一个特殊的 token(即,[SEP])将这两个句子分开。(注意,每个句子的结尾都有一个 [SEP]

      • 其次,我们在第一句的每个 token 上添加一个学到的 segment A Embedding ,在第二句的每个 token 上添加一个学到的 segment B Embedding

        假设 segment 编号为 12,那么segment A embedding 就是 segment=1 对应的 embeddingsegment B embedding 就是 segment=2 对应的 embedding

      对于单个句子的输入,我们只使用 segment A Embedding 。注意,segment A 也称作 sentence A,因为这里一个句子就是一个 segment

      进一步地,我们是否可以对句子内部的子句、或者短语也作为更细粒度的 segment 来提供 embedding

8.1.3 预训练任务

  1. ELMoGPT 不同,我们没有使用传统的从左到右、或从右到左的语言模型来预训练 BERT 。相反,我们使用两个新颖的无监督预训练任务对 BERT 进行预训练。
a. Task1: Maksed LM
  1. 直观而言,我们有理由相信:深度双向模型严格来说比 left-to-right 的模型、或浅层拼接了 left-to-right and right-to-left 的模型更强大。不幸的是,标准的 conditional language model 只能从左到右或从右到左进行训练,因为双向条件会让每个词在multi-layered context 中间接地 "看到自己" 。

    为了训练深度双向 representation ,我们采取了一种直接的方法,即随机掩码一定比例的 input token ,然后只预测那些被掩码的 token。我们把这个过程称为 "masked LM"(MLM),尽管它在文献中经常被称为 Cloze task 。在这种情况下,对应于 mask tokenfinal hidden vector 被馈入 output softmax (输出空间为整个 vocabulary),就像在标准语言模型中一样。在我们所有的实验中,对于每个序列我们随机掩码 15%WordPiece token

    与降噪自编码器不同的是,我们只预测被掩码的单词,而不是重建整个输入。

    被掩码的 token 填充以 [MASK]

  2. 尽管这确实允许我们获得一个双向的预训练模型,但这种方法有两个缺点:

    • 首先,我们在预训练和微调之间产生了不匹配 mismatch,因为在微调过程中从来没有看到 [MASK] 这个 token

      为了缓解这一问题,我们并不总是用实际的 [MASK] token 来替换被掩码的 token。相反,训练数据生成器随机选择 15%token (例如,在句子 "my dog is hairy" 中它选择了hairy ),然后它将执行以下程序:

      • 80% 的情况下用 [MASK] token 替换该词,例如,"my dog is hairy" --> "my dog is [MASK]"
      • 10% 的情况下用一个随机的词来替换这个词,例如,"my dog is hairy" --> "my dog is apple"
      • 10% 的情况下保持该词不变,例如,"my dog is hairy" --> "my dog is hairy"。这样做的目的是为了使 representation 偏向于实际观察到的单词。

      Transformer encoder 不知道哪些单词会被要求预测、哪些单词已经被随机词所取代,所以它被迫保持每个 input tokendistributional contextual representation 。此外,由于随机替换只发生在所有 token1.5%(即 15%10%),这似乎并不损害模型的语言理解能力。

      似乎论文并没有实验来验证这一点。

    • 其次,每个 batch 中只有 15%token 被预测,这表明可能需要更多的 pre-training step 来使模型收敛。在实验部分,我们证明了 MLM 的收敛速度确实比left-to-right 的模型(预测每个 token )稍慢,但是 MLM 模型的经验改进 empirical improvement 远远超过了增加的训练成本。

b. Task2: Next Sentence Prediction
  1. 许多重要的下游任务,如 Question Answering: QANatural Language Inference: NLI ,都是基于对两个文本句子之间关系的理解,而语言建模并没有直接捕获到这一点。为了训练一个能够理解句子关系的模型,我们预训练了一个二元化的 next sentence prediction task ,该任务可以从任何单语种的语料库中简单地生成。

    具体而言,在为每个预训练样本选择句子 A 和句子 B 时:

    • 50% 的情况下句子 B 是紧随句子 A 的实际的下一句。
    • 50% 的情况下句子 B 是语料库中的一个随机句子。

    例如:

    我们完全随机地选择 NotNext 句子,最终的预训练模型在这个任务中达到了 97% ~ 98% 的准确率。尽管该任务很简单,但我们在实验中证明,针对这个任务的预训练对 QANLI 都非常有利。

    实际上后续的论文表明:NSP 预训练任务是没什么作用甚至是有害的。

8.1.4 预训练程序

  1. 预训练程序主要遵循现有的关于语言模型预训练的文献。对于预训练语料库,我们使用 BooksCorpus800M 单词)和 English Wikipedia2500M 单词)的组合。对于 Wikipedia ,我们只提取文本段落,忽略了 listtable 、和 header 。至关重要的是,我们使用document-level 语料库而不是混洗过的 sentence-level 语料库(如 Billion Word Benchmark )从而提取长的连续文本序列。

    为了生成每个训练输入序列,我们从语料库中采样两个区间 span 的文本,我们称之为 "句子",尽管它们通常比单个句长得多(但也可能更短)。

    • 第一个句子接受 Segment A Embedding ,第二个句子接受 Segment B Embedding
    • 50% 的情况下句子 B 是紧随句子 A 之后的实际的下一句,50% 的情况下句子 B 是一个随机的句子。这是用于 next sentence prediction 任务。
    • 这两个句子被采样,使得合并后的长度小于等于 512token

    语言模型的 masking 是在 WordPiece tokenization 之后进行的,其中使用 15% 的均匀的掩码率 masking rate ,并没有对部分 word piece 给予特殊考虑。

  2. 我们用 batch size = 256 来训练一百万个 step ,每个 mini-batch256 * 512 = 128000token (这里是近似值,精确值为 131072 ),因此相当于在 0.33B 单词的语料库上训练 40epoch

    • 我们使用 Adam 优化器,学习率为104β1=0.9,β2=0.999L2 权重衰减为 0.01 。学习率在前 10000 步进行 warmup ,学习率线性衰减。
    • 我们在所有 layer 上使用 0.1dropout rate
    • 遵循 GPT ,我们使用 gelu 激活函数不是标准的 relu
    • training lossmean masked LM likelihoodmean next sentence prediction likelihood 之和。
  3. BERT_BASE 的训练在 Pod configuration4 Cloud TPUs 上进行(共 16TPU 芯片)。BERT_LARGE 的训练在 16 Cloud TPUs 上进行(共 64TPU芯片)。BERT_BASEBERT_LARGE 的预训练都需要 4 天的时间来完成。

8.1.5 微调程序

  1. 对于 sequence-level 分类任务,BERT 的微调是直接的。为了获得输入序列的固定维度的、被池化的 representation ,我们采用输入的第一个 tokenfinal hidden state ,这对应于特殊的[CLS] 对应的 word embedding 。我们把这个向量表示为 cRH 。在微调过程中,唯一新增的参数是分类层 WRK×H,其中 K 是类别标签的数量。标签概率 pRK 是用标准的 softmax 计算的,即 p=softmax(cW)BERTW 的所有参数都是联合微调的,以使ground-truth 标签的对数概率最大化。

    对于 span-leveltoken-level 的预测任务,上述过程必须以 task-specific 的方式稍作修改。细节在实验部分给出。

  2. 对于微调,模型的大部分超参数与预训练时相同,除了 batch sizelearning rate 和训练 epoch 的数量。 dropout rate 始终保持在 0.1。最佳的超参数值是 task-specific的,但我们发现以下数值范围在所有任务中都能很好地发挥作用:Batch size16 、32Learning rate (Adam)5e-5、3e-5、2e-5epoch 数量为3、4

    微调采用更小的 batch size、更小的学习率、更少的 epoch

    我们还观察到:大数据集(例如,100k+ 带标记的训练样本)对超参数选择的敏感性远低于小数据集。

    微调通常是非常快的,所以简单地对上述超参数进行暴力搜索并选择在验证集上表现最好的模型是合理的。

8.1.6 BERT 和 GPT 的对比

  1. BERT 最具可比性的、现有的预训练方法是OpenAI GPT,它在一个大型文本语料库上训练了一个 left-to-rightTransformer 语言模型。事实上,BERT 中的许多设计决定都是有意选择的,以尽可能地接近 GPT,从而使这两种方法能够得到最低限度的比较。我们工作的核心论点是:我们提出的两个新颖的预训练任务占了经验改进的大部分,但我们确实注意到 BERTGPT的训练方式还有几个不同之处:

    • GPT 是在 BooksCorpus800M 单词)上训练的,而 BERT 是在 BooksCorpusWikipedia2500M 单词)上训练的。

      通常而言,更大的预训练语料库会带来更好的微调效果。

    • GPT 使用句子分隔符sentence separator[SEP])和 classifier token[CLS]),它们仅在微调期间引入;而 BERT 在预训练期间学习 [SEP][CLS]segment A/B embedding

    • GPT 被训练了 1Mstepbatch size32000 个单词;BERT 被训练了 1Mstepbatch size128000 个词。

    • GPT 在所有微调实验中使用相同的学习率 5e-5BERT 选择了 task-specific 的、用于微调的学习率,这个学习率在验证集上表现最好。

    为了隔绝 isolate 这些差异的影响,我们在实验部分进行了大量消融实验,证明大部分的改进实际上来自新颖的预训练任务。

8.2 实验

8.2.1 GLUE 数据集

  1. General Language Understanding Evaluation: GLUE基准是各种自然语言理解 natural language understanding 任务的集合。大多数 GLUE 数据集已经存在多年,但 GLUE的目的是:

    • 首先,对这些数据集进行规范的 Train/Dev/Test 的拆分。
    • 其次,建立一个 evaluation server 从而缓解评估不一致和测试集过拟合的问题。GLUE 并未提供测试集的标签,用户必须将他们的预测上传到 GLUE server 进行评估,并对提交的次数有所限制。
  2. GLUE benchmark 包括以下数据集:

    • Multi-Genre Natural Language Inference: MNLI:是一个大规模、众包式的蕴含分类 entailment classification任务。给定一对句子,任务的目标是:预测第二个句子相对于第一个句子是蕴含关系entailment 、矛盾关系contradiction 还是中性关系 neutral

    • Quora Question Pairs: QQP:是一个二元分类任务,任务的目标是确定在 Quora 上提出的两个问题是否在语义上等价 semantically equivalent

    • Question Natural Language Inference: QNLI:是 Stanford Question Answering Dataset 的一个版本,它被转换为一个二元分类任务。正样本是 sentence 确实包含正确答案的 (question, sentence) pair ,负样本是 sentence 中不包含答案的 (question, sentence) pair

    • Stanford Sentiment Treebank: SST-2 :是一个二元单句分类任务,由从电影评论中提取的句子组成,并具有人类对这些评论的情感的注释 annotation

    • Corpus of Linguistic Acceptability: CoLA:是一个二元单句分类任务,任务的目标是预测一个英语句子是否在语言上 "acceptable "。

    • Semantic Textual Similarity Benchmark: STS-B:是一个从新闻 headlines 和其他来源抽取的 sentence pair 的集合。它们被标记为 1 ~ 5 分,表示这两个句子在语义上的相似程度。

    • Microsoft Research Paraphrase Corpus: MRPC:从在线新闻来源中自动提取的 sentence pair 组成,并由人类注释该 sentence pair 是否具有语义上的等价性。

    • Recognizing Textual Entailment: RTE:是一个类似于 MNLI 的二元蕴含任务,但训练数据少得多。

    • Winograd NLI: WNLI:是一个小型自然语言推理 natural language inference 数据集,源于 《The winograd schema challenge》GLUE的网页指出:这个数据集的构建存在问题,而且每一个提交给 GLUE 的训练好的系统的表现都比一个简单的 baseline 更差。这个简单的 baseline 直接预测 majority class,并达到 65.1 的准确率。因此,出于对 OpenAI GPT 的公平比较,我们排除了这个数据集。对于我们的 GLUE submission ,我们总是预测 majority class

      即,对于每一个测试样本,预测它的类别为训练集中出现概率最高的那个类别(即 majority class )。

  3. 为了在 GLUE上进行微调,我们根据前文所述来表示输入序列或 sequence pair ,并使用对应于第一个输入 token[CLS])的final hidden vector cRH 作为 aggregate representation 。这在下图 (a)(b) 中得到了直观的证明。在微调过程中引入的唯一新参数是一个分类层 WRK×H ,其中 K 是类别标签的数量。我们用 cW 计算一个标准的分类损失,即log(softmax(cW))

    因为 GLUE 数据集都是文本分类任务。

    • 对于所有的 GLUE 任务,我们使用 batch size = 32 以及 3epoch

    • 对于每个任务,我们用 5e-5、4e-5、3e-5、2e-5的学习率进行微调,并选择在验证集上表现最好的一个。

    • 此外,对于 BERT_LARGE ,我们发现微调在小数据集上有时是不稳定的(也就是说,一些 runs 会产生退化degenerate 的结果),所以我们运行了几个随机重启 random restart ,并选择了在验证集上表现最好的模型。

      通过随机重启,我们使用相同的 pre-trained checkpoint ,但在微调期间进行不同的数据混洗和 classifier layer 初始化 。

    • 我们注意到,GLUE 数据集不包括测试集的标签,我们只为每个 BERT_BASEBERT_LARGE 做一次 evaluation server submission

    从图 (a) 中看到,在微调期间只有一个 [SEP] 符号,这与预训练阶段不一致。在预训练阶段每个句子的末尾都添加一个 [SEP] 。这种不一致是否影响效果?可以通过实验来评估。

  4. 实验结果如下表所示:

    • BERT_BASEBERT_LARGE 在所有任务上的表现都大大超过了现有的系统,分别比 SOTA 的系统获得了 4.4%6.7% 的平均精确度提升。请注意,BERT_BASEOpenAI GPTattention masking 之外的模型架构方面几乎是相同的。

    • 对于最大和最广泛报道的GLUE 任务 MNLIBERT (这里是 BERT_LARGE )相比 SOTA 获得了 4.7% 的绝对提升。

    • GLUE 的官方排行榜上,BERT_LARGE 获得了80.4分;相比之下,排在榜首的系统(即 OpenAI GPT)截至本文撰写之日获得了 72.8 分。

      下图中的 Average 稍有差异,因为这里我们排除了有问题的 WNLI 数据集。

    • 值得注意的是,BERT_LARGE 在所有任务中都显著优于 BERT_BASE,即使是那些训练数据非常少的任务。BERT 模型大小的影响将在下面的实验中进行更深入的探讨。

8.2.2 SQuAD v1.1

  1. Standford Question Answering Dataset: SQuAD 是一个由 10 万个众包的 (question, answer) pair 组成的集合。给定一个问题和来自维基百科中包含答案的段落,任务的目标是预测该段落中的答案文本的区间 answer text span 。例如:

    这种类型的区间预测任务 span prediction taskGLUE 的序列分类任务截然不同,但我们能够以一种直接的方式使 BERTSQuAD上运行。

    就像 GLUE 一样,我们将输入的问题和段落表示为一个 single packed sequence ,其中 question 使用 segment A embedding ,段落使用 segment B embedding 。在微调过程中学习到的唯一的新参数是一个 start vector sRH 和一个 end vector eRH 。令第 iinput tokenBERT 中的的 final hidden vector 表示为 tiRH。如 Figure 3(c) 所示。然后,单词 ianswer span 的起点start 的概率被计算为 tis 的内积,然后在当前段落中所有单词之上取 softmax

    (1)pi=exp(tis)jexp(tjs)

    其中 j 取值为从段落开始到段落结束。

    同样的公式用于 answer span 的终点end ,最大得分的 span 被用作预测。训练目标是正确的起点位置和终点位置的对数可能性。

    这里假设起点和终点之间是相互独立的。实际上这种假设通常不成立,终点和起点之间存在关联,如终点的位置大于等于起点。

  2. 我们用 5e-5 的学习率和 batch size = 32 训练了 3epoch 。在推理时,由于终点预测并没有考虑以起点为条件,我们增加了终点必须在起点之后的约束条件,但没有使用其他启发式方法。tokenized labeled span 被调整回原始的 untokenized input 以进行评估。

    因为经过了 tonenization 之后,原始的单词被拆分为 word piece,这将影响 span 的位置。

  3. 结果如下表所示。SQuAD采用了高度严格的测试程序,提交者必须手动联系 SQuAD 的组织者,在一个隐藏的测试集上运行他们的系统,所以我们只提交了我们最好的系统进行测试。下表中显示的结果是我们第一次也是唯一一次向 SQuAD 提交的测试结果。

    我们注意到:SQuAD 排行榜上的榜首结果没有最新的公开的系统描述,而且在训练他们的系统时允许使用任何公共数据。因此,我们在提交的系统中使用了非常适度的数据增强:在 SQuADTriviaQA 上联合训练。

    我们表现最好的系统相比排行榜上榜首的系统高出 +1.5 F1 (以 ensembling 系统的方式 )和 +1.7 F1 (以 single 系统的方式)。事实上,我们的单一 BERT 模型在F1 得分方面优于 top ensemble system 。如果我们只对 SQuAD 进行微调(不包括TriviaQA),我们会损失0.1-0.4 F1 ,但仍然以很大的优势胜过所有现有系统。

    BERT ensemble 使用了 7 个模型,它们分别使用不同的预训练 checkpointfine-tuning seed

8.2.3 Named Entity Recognition

  1. 为了评估 token tagging 任务的性能,我们在 CoNLL 2003 命名实体识别(NER)数据集上对 BERT 进行了微调。这个数据集由 20 万个训练单词组成,这些单词被标注为人物 Person 、组织Organization、位置Location、杂项Miscellaneous 、或其他Other(非命名实体)。

    • 为了进行微调,我们将每个token ifinal hidden representation tiRH 馈入分类层。预测不以周围的预测为条件(即,non-autoregressiveno CRF )。

    • 为了与 WordPiece tokenization兼容,我们将每个 CoNLL-tokenized input word 馈入我们的 WordPiece tokenizer ,并使用与第一个 sub-token 对应的 hidden state 作为分类器的输入。例如:

      其中 X 没有预测。Figure 3(d)中也给出了一个直观的表示。在NER 中使用了 cased WordPiece model(即,保留字母的大小写) ,而在所有其他任务中则使用了 uncased model (即,所有字母转化为小写)。

    结果如下表所示。BERT_LARGECoNLL-2003 NER Test 中优于现有的 SOTACross-View Training with multi-task learning)达到 +0.2 的改进。

    如果在 BERTfinal hidden representation 之上再接入自回归或 CRF,预期将得到更好的效果。

8.2.4 SWAG

  1. Situations With Adversarial Generations: SWAG 数据集包含11.3 万个 sentence-pair completion 的样本,评估了 grounded commonsense inference

    给定视频字幕数据集中的一个句子,任务是在四个选项中决定最合理的延续concatenation。例如:

    BERT 应用于 SWAG 数据集类似于 GLUE 。对于每个样本,我们构建四个输入序列,每个序列都包含给定句子(句子 A )和一个可能的延续(句子B )的拼接。我们引入的唯一 task-specific 参数是一个向量 vRH,它与 final aggregate representation ciRH 的内积表示每个选项 i 的得分。我们计算在四个选项上的 softmax

    (2)pi=exp(vci)j=14exp(vcj)

    我们用 2e-5 的学习率和 batch size = 16 对模型进行了 3epoch 的微调。结果如下表所示。BERT_LARGE 比作者的 baseline (即,ESIM+ELMo系统)要提高 27.1%

8.2.5 消融研究

  1. 尽管我们已经展示了极其强大的经验结果,但迄今为止所提出的结果并没有将 BERT 框架的每个方面 aspect 的具体贡献分离出来。这里我们对 BERT 的一些方面进行了消融实验,以便更好地了解其相对重要性。
a. 预训练任务的效果
  1. 我们的核心主张claim 之一是 BERT 的深度双向性deep bidirectionality ,这是由 masked LM pre-training 实现的并且是BERT与以前的工作相比最重要的一个改进。为了证明这一主张,我们评估了两个新模型,它们使用了与 BERT_BASE 完全相同的预训练数据、微调方案、以及 Transformer超参数。

    • No NSP:该模型使用 MLM 任务预训练,但是没有 NSP 任务。

    • LTR & No NSP:该模型使用 Left-to-Right: LTR 的语言模型来训练,而不是使用MLM 来训练 。在这种情况下,我们预测每一个input word ,不应用任何 masking 。在微调时也应用了 left-only 约束,因为我们发现:用 left-only-context 进行预训练然后用 bidirectional context 进行微调总是更糟糕。此外,这个模型没有使用 NSP 任务进行预训练。

      这与OpenAI GPT有直接的可比性,但使用了我们更大的训练数据集、我们的input representation 、以及我们的微调方案。

      BERT 在预训练期间学习 [SEP][CLS]segment A/B embedding,而 GPT 仅在微调期间学习这些 input representation

  2. 结果如下表所示。

    • 我们首先检查了NSP任务带来的影响。可以看到:去掉NSPQNLIMNLISQuAD的性能有很大的伤害。这些结果表明,我们的预训练方法对于获得前面介绍的强大的经验结果至关重要。

      后续的 XLNetRoBERTa 都表明:NSP 任务不重要。而且 RoBERTa 的作者认为:BERT 得出 NSP 任务重要的原因是,BERT 的输入是两个句子的拼接,因此如果此时没有 NSP 任务则效果较差。在 RoBERTa 中,由于没有 NSP 任务,因此预训练样本就是一个完整的、来自单个文件的文档块。

    • 接下来,我们通过比较 "No NSP "和 "LTR & No NSP "来评估训练 bidirectional representation 的影响。LTR 模型在所有任务上的表现都比MLM模型更差,在 MRPCSQuAD上的下降幅度非常大。

      • 对于SQuAD,直观而言,LTR 模型在span 预测和 token 预测方面的表现非常差,因为 token-level hidden state 没有右侧的上下文。
      • 对于 MRPC 而言,不清楚这种糟糕的表现是由于数据量小还是由于任务的性质,但是我们发现这种糟糕的表现在多次随机重启的full 超参数扫描中是一致的。
    • 为了加强 LTR 系统,我们尝试在它上面添加一个随机初始化的 BiLSTM 进行微调。这确实大大改善了 SQuAD 的结果,但结果仍然比预训练的双向模型差得多。它还损害了其它所有四个 GLUE 任务的性能。

    • 我们认识到:也可以像 ELMo 那样,单独训练LTRRTL模型,并将每个 token 表示为两个模型的拼接。然而:

      • 首先,这种方法比单一的双向模型要贵两倍。
      • 其次,这种方法对像 QA 这样的任务来说是不直观的,因为 RTL 模型不能以答案作为条件来回答问题(即,条件概率 P(questionanswer)
      • 最后,这种方法严格来说不如深度双向模型 deep bidirectional model 强大,因为深度双向模型可以选择使用 left contextright context

b. Model Size 的效果
  1. 这里我们探讨了模型大小对微调任务准确性的影响。我们训练了一些具有不同层数、隐单元、以及注意力头的 BERT 模型。除此之外,我们还使用了与前面所述相同的超参数和训练程序。

    选定的 GLUE 任务的结果如下表所示。在这个表中,我们报告了 5 次随机重启微调的平均验证准确率。可以看到:

    • 更大的模型在所有四个数据集上都导致了一致的准确性提高,即使是只有 3600 个标记的训练样本的 MRPC

    • 同样令人惊讶的是,我们能够在相对于现有文献已经相当大的模型之上实现如此显著的改进。例如:

      • 《Attention is all you need》探索的最大的 Transformer(L=6,H=1024,A=16),编码器的参数为100M
      • 而我们在文献中发现的最大的Transformer(L=64,H=512,A=2),参数为 235M《Character-level language modeling with deeper self-attention》)。
      • 相比之下,BERT_BASE 包含 110M 参数,BERT_LARGE 包含 340M 参数。

      多年以来人们都知道,增加模型规模将导致大型任务(如机器翻译、语言建模)的持续改进,这可以通过下表所示的 held-out 训练数据的 LM perplexity 来证明。然而,我们认为这是第一项工作,证明了扩展到极端的 model size 也会导致在非常小型的任务上有很大的改进,只要模型已经被充分地预训练过。

      即,增加模型规模不仅对大型任务有效,对小型任务也有效(模型需要被预训练)。

c. 训练步数的效果
  1. 下图展示了从一个已经预训练了 kstepcheckpoint 进行微调后的 MNLI 验证准确性。这使我们能够回答以下问题。

    • 问题:BERT 是否真的需要如此大量的预训练(128,000 words/batch * 1,000,000 steps)来实现高的微调准确率?

      答案:是的。BERT_BASE 预训练一百万步时,与五十万步相比,在 MNLI 上实现了接近 1.0% 的微调准确率提升。

    • 问题:MLM 预训练的收敛速度是否比 LTR 预训练慢,因为每个 batch 中只有 15% (而不是 100% )的单词被预测?

      答案:是的,MLM模型的收敛速度比LTR 稍慢。然而,就绝对准确率而言,MLM 模型几乎从一开始就超过了 LTR 模型。

d. Feature-based Approach with BERT
  1. 迄今为止,所有的 BERT 结果都采用了微调方法,即在预训练的模型中加入一个简单的分类层,并在下游任务中联合微调所有的参数。然而,feature-based 的方法,即从预训练的模型中抽取固定的特征,具有一定的优势:

    • 首先,并不是所有的 NLP 任务都可以很容易地用 Transformer 编码器架构来表示,因此需要增加一个 task-specific 的模型架构。
    • 其次,如果能够一次性地预先计算好训练数据的 expensive representation ,然后在这个 representation 的基础上用不太昂贵的模型进行许多实验,这有很大的计算优势。

    这里我们通过在 CoNLL-2003 NER 任务上生成类似于 ELMopre-trained contextual representation 来评估 BERTfeature-based 的方法中的表现如何。为了做到这一点,我们使用与本文在 Named Entity Recognition 章节中相同的 input representation ,但是使用 BERT 的一个或多个层的激活值而没有微调任何参数。这些 contextual embedding 被用作一个双层 BiLSTM 的输入,这个双层 BiLSTM 具有 768 维并且是随机初始化的,并且这个双层 BiLSTM 位于最终的分类层之前。

    结果如下表所示。表现最好的方法是将预训练的 Transformer 的最后四个隐层的 token representation 拼接起来,这比微调整个模型仅相差 0.3 F1 。这表明:BERT 对微调方法和 feature-based 方法都是有效的。

九、XLNet[2019]

  1. 无监督表示学习 unsupervised representation learning 在自然语言处理领域取得了巨大的成功。通常情况下,这些方法首先在大规模的无标签文本语料库中预训练神经网络,然后在下游任务中对模型或 representation 进行微调。在这个共同的 high-level 思想下,人们在各种文献中探讨了不同的无监督预训练目标 unsupervised pretraining objective 。其中,自回归 autoregressive: AR 语言建模language modeling 和自编码 autoencoding: AE 是两个最成功的预训练目标。

    自回归语言建模旨在用自回归模型估计文本语料的概率分布。具体而言,给定一个文本序列 x=(x1,,xT) ,自回归语言建模将 likelihood 分解为前向乘积 forward product p(x)=t=1Tp(xtx<t) 或后向乘积 backward product p(x)=t=T1p(xtx>t)。一个参数化的模型(例如神经网络)被训练来建模每个条件分布。由于自回归语言模型只被训练来编码单向上下文(前向或后向),所以它不能有效地建模深度双向上下文 deep bidirectional context 。相反,下游的语言理解任务往往需要双向的上下文信息。这就造成了自回归语言建模和有效的预训练之间的 gap

    x<t 为文本序列 xt1 个位置的子序列,x>t 为文本序列 xTt 个位置的子序列。

    相比之下,基于自编码的预训练并不进行显式的密度估计 density estimationp(x) 就是文本序列 x 的概率密度),而是旨在从破坏的输入中重建原始数据。一个值得注意的例子是 BERT,它一直是 SOTA 的预训练方法。给定输入的 token 序列,其中输入的某一部分 token 被一个特殊的符号 [MASK] 所取代,模型被训练为从破坏的版本中恢复原始 token 。由于任务目标不包含密度估计,所以 BERT 可以利用双向上下文来重建原始数据。作为一个直接的好处,这弥补了上述自回归语言建模中的 bidirectional information gap ,导致了性能的提高。然而:

    • BERT 在预训练时使用的 [MASK] 等人造符号在微调时不存在于真实数据中,从而导致了 pretrain-finetune 的不一致。
    • 此外,由于 predicted token 在输入中被 masked 了,BERT 不能像自回归语言建模那样使用乘积规则 product rule 建立联合概率模型。换句话说,BERT 假设在给定 unmasked token 的条件下,predicted token 之间是相互独立的。这是过于简化的,因为在自然语言中普遍存在着高阶的、长程的依赖性。

    面对现有语言预训练目标的优点和缺点,在论文 《XLNet: Generalized Autoregressive Pretraining for Language Understanding》工作中,作者提出了一种广义的自回归方法,即 XLNetXLNet 同时利用了自回归语言建模和自编码的优点,并避免了它们的局限。

    • 首先,XLNet 不是像传统的自回归模型那样使用固定的前向分解顺序forward factorization order 或后向分解顺序 backword factorization order ,而是最大化关于分解顺序的所有可能的排列组合中,序列的期望对数似然 expected log likelihood 。由于排列操作permutation operation ,每个位置的上下文可以同时由左右两侧的 token 组成。在预期中,每个位置学会利用来自所有位置的上下文信息,即捕获双向的上下文。
    • 其次,作为一个广义的自回归语言模型,XLNet 不依赖于数据破坏 data corruption 。因此,XLNet 不会受到 BERT 所带来的pretrain-finetune discrepancy 的影响。同时,自回归目标还提供了一种自然的方法,可以使用乘积法则对 predicted token 的联合概率进行分解,消除了 BERT 中的独立性假设 independence assumption

    除了新颖的预训练目标外,XLNet 还改进了预训练的架构设计。

    • 受自回归语言建模最新进展的启发,XLNetTransformer-XLsegment 递归机制和相对编码方案 relative encoding scheme 融合到预训练中。根据经验,特别是在涉及较长文本序列的任务中,这会提高下游任务的性能。
    • 简单直接地将 Transformer(-XL) 架构应用于 permutation-based 的语言建模是行不通的,因为分解顺序是任意的、目标是模糊ambiguous 的。作为一个解决方案,作者建议重新参数化 reparameterize Transformer(-XL) 网络从而消除模糊性 ambiguity

    根据经验,XLNet18 个任务上取得了 SOTA 的结果,即: 7GLUE 语言理解任务,3个阅读理解任务(包括 SQuADRACE )、7 个文本分类任务(包括 YelpIMDB )、以及 ClueWeb09-B 文档排序任务。在一组公平的比较实验下,XLNet 在多个 benchmark 上一直优于 BERT

  2. 相关工作:permutation-based 的自回归建模的思想已经在 《Neural autoregressive distribution estimation》《Made: Masked autoencoder for distribution estimation》中进行了探讨,但有几个关键的区别。以前的模型是无序 orderless的,而 XLNet 基本上是顺序感知 order-aware 的(带 positional encoding)。这对语言理解 language understanding 很重要,因为无序模型会退化为 bag-of-word ,缺乏基本的表达能力。

    上述差异源于动机 motivation 的根本差异:以前的模型旨在通过在模型中加入 "无序" 的归纳偏置 inductive bias 来改善密度估计,而 XLNet 的动机是使自回归语言模型学习双向上下文。

9.1 模型

9.1.1 背景

  1. 这里我们首先针对语言预训练language pretraining 来回顾并比较传统的自回归语言建模和 BERT

  2. 给定一个文本序列 x=[x1,,xT],自回归语言模型通过最大化前向自回归分解 forward autoregressive factorization 下的对数似然 likelihood 来进行预训练:

    (3)maxθlogpθ(x)=t=1Tlogpθ(xtx<t)=t=1Tlogexp(hθ(x1:t1)e(xt))xVexp(hθ(x1:t1)e(x))

    其中:

    • x<t=x1:t1=[x1,,xt1]x 的前 t1 个位置的子序列,作为上下文。
    • hθ(x1:t1) 为通过神经网络模型(如 RNNTransformer )产生的 context representationθ 为模型的参数。
    • e(x)xembeddingVvocabulary
  3. 相比之下,BERT 是基于降噪自编码 denoising auto-encoding 的。具体来说,对于一个文本序列 x=[x1,,xT]BERT 首先通过随机设置 x 中的一部分(例如 15% )的 token 为特殊符号 [MASK] 从而构建一个破坏的版本 x^ 。令这些 masked token 记做 x¯,训练目标是根据 x^ 重建 x¯

    (4)maxθlogpθ(x¯x^)t=1Tmtlogpθ(xtx^)=t=1Tmtlogexp(ht,θ(x^)e(xt))xVexp(ht,θ(x^)e(x))

    其中:

    • mt{0,1} 表示 xt 是否被 masked
    • Hθ 是一个 Transformer ,它将一个长度为 T 的文本序列 x^ 映射到一个 hidden vector 序列:Hθ(x)=[h1,θ(x),,hT,θ(x)]θTransformer 的参数,ht,θ(x) 为位置 thidden vector

    可以看到:在自回归语言建模中,context representationhθ(x1:t1) ,即模型在位置 t 仅能看到前面 t1 个位置的 token(即,x1:t1);在 BERT 中,context representationht,θ(x) ,即模型在位置 t 能够看到所有的 token (即,x)。

  4. 两种预训练目标的优点和缺点比较如下:

    • 独立性假设 Independence Assumption:正如 符号所强调的那样,BERT 基于独立性假设来分解联合条件概率 pθ(x¯x^) ,即,所有 mask token x¯ 都是独立重建的。

      相比之下,自回归语言建模目标使用普遍适用的乘积规则对 pθ(x) 进行分解,而没有这种独立性假设。

    • 输入噪声 Input NoiseBERT 的输入包含像 [MASK] 这样的人工符号,而这些符号在下游任务中从未出现过,这就造成了 pretrain-finetune discrepancy。像 BERT 论文中那样用原始 token 替换 [MASK] 并不能解决问题,因为原始 token 只能以很小的概率被使用,否则 maxθlogpθ(x¯x^) 是没有意义的优化(因为要预测的标签就在输入中)。

      相比之下,自回归语言建模并不依赖于任何输入破坏 input corruption ,因此不会受到这个问题的影响。

    • 上下文不一致 Context Dependency:自回归 representation hθ(x1:t1) 仅以位置 t 之前的 token 作为条件(即,左侧的 token )。

      相比之下, BERT representation ht,θ(x) 可以同时获得两侧的上下文信息。因此,BERT 目标允许对模型进行预训练以更好地捕捉双向的上下文。

9.1.2 目标:排列语言建模

  1. 根据上面的比较,自回归语言模型和 BERT 拥有各自独特的优势。一个自然的问题是:是否存在一种预训练目标,既能带来两者的优点又能避免它们的缺点?

    借用 orderless NADE《Neural autoregressive distribution estimation》)的思路,我们提出了排列语言建模 permutation language modeling 目标,它不仅保留了自回归模型的优点,而且还允许模型捕获双向上下文。

    具体而言,对于一个长度为 T 的文本序列 x,有 T! 种不同的顺序来进行有效的自回归分解 autoregressive factorization 。直观地说,如果模型参数在所有分解顺序中都是共享的,那么在预期中,模型将学会从两侧的所有位置收集信息。

    为了形式化这个思想,令 ZT 是长度为 T 的索引序列 [1,2,,T] 的所有可能的排列的集合。我们用 ztz<t 来表示一个排列 zZT 的第 t 个元素和前 t1 个元素。那么,我们提出的排列语言建模目标可以表示为:

    (5)maxθEzZT[t=1Tlogpθ(xztxz<t)]

    基本上,对于一个文本序列 x ,我们一次采样一个分解顺序 z ,并根据分解顺序对 likelihood pθ(x) 进行分解。由于相同的模型参数在训练期间在所有的分解顺序之间都是共享的,在预期中,xt 已经看到了序列中每一个可能的元素 xixt,因此能够捕获到双向上下文。此外,由于这个目标适合于自回归框架,它自然避免了前面讨论的独立假设和 pretrain-finetune discrepancy

    前向自回归分解和后向自回归分解分别采用了两种特殊的分解顺序:z=[1,2,,T],z=[T,T1,,1]

  2. Permutation 的备注:所提出的目标只是排列分解顺序 factorization order ,而不是序列顺序 sequence order 。换句话说,我们保持原始的序列顺序,使用对应于原始序列的positional encoding ,并依靠 Transformer 中恰当的 attention mask 来实现分解顺序的排列。请注意,这种选择是必要的,因为模型在微调期间只会遇到具有自然顺序的文本序列。

    XLNet 在实现过程中并未采样 z ,而是通过生成合适的 attention mask 来达到采样 z 的效果。

    为了提供一个总体概览,我们在下图中展示了一个例子:给定相同的输入序列 x ,但是以不同的分解顺序来预测 token x3mem 表示 Transformer-XLmemory 机制。

9.1.3 架构:双流自注意力

  1. 虽然排列语言建模目标具有理想的属性,但是标准 Transformer 的朴素实现 naive implementation 可能无法工作。为了说明这个问题,假设我们使用标准的 softmax 公式对 next-token 分布 pθ(Xztxz<t) 进行参数化 parameterize ,即:

    (6)pθ(Xzt=xxz<t)=exp(hθ(xz<t)e(x))xVexp(hθ(xz<t)e(x))

    其中 hθ(xz<t) 表示由共享的 Transformer 网络生成的 xz<thidden representation (通过适当的掩码得到)。

    现在注意到:representation hθ(xz<t) 并不依赖于它将预测哪个位置,即 zt 的值。因此,无论目标位置如何,都会预测出相同的分布,这就无法学习到有用的 representation 。为了避免这个问题,我们建议重新参数化 next-token 分布,使其感知到目标位置:

    (7)pθ(Xzt=xxz<t)=exp(gθ(xz<t,zt)e(x))xVexp(gθ(xz<t,zt)e(x))

    其中 gθ(xz<t,zt) 表示一种新的 representation 类型,它还将目标位置 zt 作为输入。

    原始的 Transformer 没有这个问题,因为 Transformer 输入序列的分解顺序是固定的(z=[1,2,,T]),第 t 个要预测的 token 就是位于序列中的位置 t

    但是,在排列语言建模目标,由于分解顺序是随机的,因此第 t 个要预测的 token 的位置不确定(可能是原始序列中第一个位置、也可能是原始序列中最后一个位置)。

  2. 标准的语言模型参数化失败的例子:考虑两个不同的排列 z(1)z(2) ,并且它们之间满足:

    (8)z<t(1)=z<t(2),zt(1)=ij=zt(2)

    如果采用标准 Transformer 的朴素实现,则有:

    (9)pθ(Xi=xxz<t)zt(1)=i,z<t(1)=z<t=pθ(Xj=xxz<t)zt(2)=j,z<t(2)=z<t=exp(hθ(xz<t)e(x))xVexp(hθ(xz<t)e(x))

    从效果上看,两个不同的目标位置 ij 共享完全相同的模型预测。然而,这两个位置的 ground-truth 分布应当是不同的。

  3. 双流自注意力 Two-Stream Self-Attention:虽然 target-aware representation 的思想消除了 target prediction 中的模糊性 ambiguity ,但如何形式化 gθ(xz<t,zt) 仍然是一个困难的问题。我们提出 "站" 在目标位置 zt,并依赖位置 zt 通过注意力从上下文 xz<t 收集信息。

    目标位置 zt 代表了目标 token 位于原始序列中的位置(而不是排列之后的位置,排列之后的位置就是 t )。

    为了使这个参数化 parameterization 发挥作用,有两个要求在标准的 Transformer 架构中是矛盾的:

    • 为了预测 token xztgθ(xz<t,zt) 应该只使用位置 zt 而不是内容 xzt,否则任务目标就变得非常简单。
    • 为了预测 j>t 的其他token xzjgθ(xz<t,zt) 也应该编码内容 xzt 从而提供完整的上下文信息。

    为了解决这样的矛盾,我们建议使用两组 hidden representation 而不是一组:

    • content representation hθ(xzt),或缩写为 hzt,它的作用与 Transformer 中的标准 hidden state 类似。这个 representation 同时编码了上下文和 xzt 本身。

      注意,这里是小于等于号:zt

    • query representation gθ(xz<t,zt) ,或缩写为 gzt,它只能访问上下文信息 xz<t 和位置 zt ,但不能访问内容 xzt,如前所述。

    在计算上:

    • 第一层查询流 query streamtrainable vector 来初始化(即, gi(0)=w )。
    • 而第一层内容流 content stream 被设置为相应的 word embedding (即, hi(0)=e(xi) )。

    对于每个自注意力层 m=1,2,,M,两个表征流 representation stream 用一组共享的参数进行更新:

    (10)gzt(m)Attention(Q=gzt(m1),KV=hz<t(m1);θ),query stream: use zt but cannot see xzthzt(m)Attention(Q=hzt(m1),KV=hzt(m1);θ),content stream: use both zt and xzt

    其中:Q,K,V 分别表示注意力操作中的 query, key, value

    注意:query stream 中的 key, value 使用 z<t (小于号);content stream 中的 key, value 使用 zt (小于等于号)。

    content representation 的更新规则与标准的自注意力完全相同,因此在微调过程中,我们可以简单地放弃 query stream ,将 content stream 作为普通的 Transformer(-XL)

    最后,我们可以使用最后一层的 query representation gzt(M) 来计算:

    (11)pθ(Xzt=xxz<t)=exp(gθ(xz<t,zt)e(x))xVexp(gθ(xz<t,zt)e(x))

    因为 query representation 包含了位置 zt (而 content representation 不包含 zt ),因此使用 query representation 来计算 pθ(Xzt=xxz<t)

    query representation 会利用 content representation 来计算,而 content representation 就是传统的自注意力机制而不会用到 query representation

  4. 双流自注意力的示意图如下图所示,其中分解顺序为 3 -> 2 -> 4 -> 1 而当位置 t=4 ,即 zt=1

    • (a)content streamh1(0)query{h1(0),h2(0),h3(0),h4(0)}key/value

    • (b)query streamg1(0)query{g2(0),g3(0),g4(0)}key/value

    • (c):在 attention mask 中,第 i 行代表位置 i (原始序列的顺序)的 mask ,白色代表不可见(掩码)、红色代表可见。 query stream 无法看到当前位置的内容,因此相比 conent streamattention maskquery streamattention mask 掩码了对角线。

      这就是通过生成合适的 attention mask 来达到采样 z 的效果。

      例如,zt=1 (即 attention mask 的第一行):

      • 由于 content stream 中它可以看到所有位置(包括它自己),因此 attention mask 第一行全部是红色(可见)。
      • 由于 query stream 中它可以看到除了自己之外的所有其它位置,因此 attention mask 第一行除了第一个位置之外全部是红色。

  5. 部分预测 Partial Prediction :虽然排列语言建模目标有几个好处,但由于排列组合,它是一个更具挑战性的优化问题,并在实验中导致收敛缓慢。为了降低优化难度,我们选择仅预测分解顺序中的最后一批 token

    正式地,我们把 z 拆分成一个 non-target 子序列 zc 和一个 target 子序列 z>c,其中 c 是拆分点。我们的目标是:给定 non-target 子序列的条件下最大化 target 子序列的对数似然 log-likelihood ,即: