一起读论文 | 为什么BERT会在许多NLP任务中表现得很好?

导读:今天给大家解读一篇关于BERT模型研究的综述类论文《A Primer in BERTology: What we know about how BERT works》。基于Transformer的模型已经被证实可以有效地处理从序列标记到问题解答等不同类型的NLP任务,其中一种称为BERT的衍生模型得到了广泛使用。但是,我们对其内部运作知之甚少。这篇论文把围绕BERT进行的相关研究工作定义为BERTology。在这个框架下,对BERT进行了较为详细的分析,旨在尝试回答一些有关BERT为什么在这么多NLP任务中表现良好的问题。论文的内容包括:BERT学习到的知识的类型、知识被表示在什么位置、BERT是如何学习知识的以及研究人员提出的改进BERT的方法等。

点评:这是一篇难得的关于BERT的研究综述论文,围绕以上内容概述了一些最新的BERT研究成果及结论,还讨论了截止目前研究的局限性及未来研究方向,推荐给大家。因此,这期《一起读论文》去粗取精,仅保留重要的结论信息,供大家参考学习。

文章目录

    • 研究背景及动机
    • 研究内容
      • BERT Embeddings
      • BERT学习到了哪些知识?
        • 1. 语法知识
        • 2. 语义知识
        • 3. 世界知识
      • 定位语言学知识
        • 1. 自注意力头 (Self-attention heads)
        • 2. BERT层
      • 训练BERT
        • 1. 预训练BERT
        • 2. 模型结构选择
        • 3. 微调BERT
      • BERT应该要多大?
        • 1. 过度参数化 Overparameterization
        • 2. BERT 压缩
      • 多语言BERT
      • 讨论
        • 1. 局限性
        • 2. 未来研究的方向

研究背景及动机

自2017年被提出以来,Transformer模型因其出色的并行化及长范围依赖的建模能力,已经暴风雨般地席卷了NLP领域。其中,最知名的衍生模型就是BERT。在许多基准任务中,BERT取得了当前最优的结果。但是,关于BERT,研究人员清楚的是它表现非常地好,却不清楚为什么它能表示得那么好。

因此,本文概述了截至目前BERT学习到了什么,重点关注尚未解决的问题。论文的主要内容包括:BERT学习到的知识的类型、知识被表示在什么位置、BERT是如何学习知识的以及研究人员提出的改进BERT的方法等。本文也是根据这些内容来组织的。

研究内容

BERT Embeddings

相比较word2vec、GloVe等传统的静态嵌入 (embeddings),BERT的表征 (representations) 是根据上下文而随时变化的,即每个输入的字符被表示成一个依赖于在该字符出现位置的特定的上下文的向量。

  1. BERT的语境化嵌入 (contextualized embeddings) 能够形成与词义相对应的清晰明了的聚类,证实了分布式假设对这些表征是成立的。但是,对于同样的词,其表征也会有所不同,这取决于该词在句中出现的位置。
  2. 越靠后的BERT层能够输出更多的特定上下文的表征。

BERT学习到了哪些知识?

1. 语法知识

  1. BERT表示是分层的,而不是线性的,即除了单词顺序信息之外,还有类似于语法树的结构;
  2. BERT嵌入能对有关词性标注、句法块和角色等信息进行编码。 但是,BERT的语法知识是不完整的;
  3. 语法结构不是直接在自注意力权重中进行编码,但是可以对这些权重进行转换以反映语法结构;
  4. 在做完形填空任务时,BERT会考虑到主谓一致问题。BERT比scope violations更擅长检测出如ever等负极词(NPIs, Negative Polarity Items)以及与它们一起连用的那些词(如whether);
  5. BERT不理解否定,也对格式错误的输入不敏感;
  6. BERT的句法结构编码并不表示它实际上依赖于该知识。

2. 语义知识

  1. BERT能对语义角色有一定的了解;
  2. BERT能对有关实体类型,关系,语义角色和proto-roles的信息进行编码;
  3. BERT不擅长表征数字,造成这个问题的部分原因在于BERT的wordpiece分词法,因为相似值的数字会被切分成显著不同的词块 (word chunks)。

3. 世界知识

  1. 对于某些关系类型,vanilla BERT在依赖知识库 (knowledge bases) 的方法方面非常具有竞争力,因为它能够很好地泛化到未知的数据。但是,需要好的模板语句才能抽取BERT的知识。
  2. BERT无法根据学习到的世界知识进行推理。

定位语言学知识

1. 自注意力头 (Self-attention heads)

  1. 注意力机制对于理解Transformer模型很有用,而且一些研究建议对注意力头类型进行分类:
    • 关注这个单词本身;
    • 关注位于这个单词前面或后面的单词;
    • 关注所在的句子的结尾;
    • 关注位于这个单词前面或后面的词项(tokens)、[CLS]、[SEP]、标点;
    • 全局关注整个句子
  2. 注意力权重的明确意义在于:在计算当前单词的下一个表征时,一个特定的单词将会被赋予多少权重。但是,大多数自注意力头并不直接对任何重要的语言学信息进行编码,因为不到一半的自注意力头具有"异构"模式;
  3. 一些BERT的注意力头似乎专注于某些类型的句法关系
  4. 没有任何一个注意力头会有完整的句法树信息
  5. 注意力权重是主语一致性和反语性的弱指标。
  6. 即使注意头专门跟踪语义关系,也不一定有助于BERT在相关任务上的表现。

2. BERT层

  1. BERT的第一层接收字符、分段及位置编码等信息的组合作为其输入表征,所以较低的层自然而然地具有最多的线性的词序信息。
  2. 语法信息是在中间的BERT层中是最突出的,因为Transformers的中间层总体上表现是最好的,也是最容易在多个任务间进行迁移的。
  3. BERT的最后一层是跟特定任务最相关的:在预训练阶段,意味着跟MLM任务最相关,这也解释了为什么中间的层是最容易进行迁移的;而在微调阶段,这也解释了为什么最后一层变化最明显。如果微调好的BERT模型的较低层的权重能够恢复到初始值,对模型性能的损害不会特别显著。
  4. 尽管大多数语义信息能够在一些层中找到,但是语义信息仍然是在整个模型中传播的。

训练BERT

旨在优化原始BERT的训练及结构。

1. 预训练BERT

原始的BERT是一个双向的Transformer,在两个任务上进行预训练:下一个句子预测(NSP)和遮蔽语言模型(MLM)。 一种优化BERT的方式就是替代训练目标 (alternative training objective)。

  • Removing NSP: (1) 用预测前后句子取代预测下一个句子;(2) 用从正例样本交换而来的句子而不是来自不同文档的句子来替代负例的NSP样本。这样做并不会损害性能,反而能稍微提升任务性能,尤其在多语言环境中。
  • Dynamic masking: 使用不同的masks在一个epoch中训练样本;
  • Beyond-sentence MLM: 用任意的文本流来代替句子对,采样频繁的输出
  • Permutation language modeling: 在输入序列中词序的不同排列组合上进行训练,最大化原始词序的概率,以取代MLM
  • Span boundary objective: 仅使用在这个跨度span内的词的表征来预测被遮蔽的跨度,而不是独立的单词;
  • Phrase masking and named entity masking: 通过遮蔽实体而不是单个单词来改善结构化知识的表征;
  • Continual learning: 对大量的任务按顺序地进行预训练,每个任务都有它们自己的损失,这些损失然后合起来持续地更新模型
  • Conditional MLM: 用标签嵌入 (label embeddings) 来取代分割嵌入 (segmentation embeddings),标签嵌入还包括来自带注释的任务数据集(例如情感分析)中给定句子的标签。
  • 用[UNK]符号取代MASK符号,因为这可能会帮助模型学习可被神经机器翻译模型使用的某种未知信息的表征

另一种对BERT改进的方式是预训练数据 (pre-training data):

  1. 增大语料库大小及更长的训练
  2. 训练数据不必是非结构化的文本,也可以是结构化数据
  3. 使用如实体嵌入 (entity embedding)、语义角色信息 (semantic role information)等作为输入

2. 模型结构选择

  • 注意力头的数量跟层的数量一样并不是至关重要的参数,位于中间的层才是最可迁移的。当然,更大的隐藏层表征大小一直都是更好的,但性能增益却因任务具体设置不同而有所不同。
  • 更大的批训练能提升语言模型的困惑度和下游任务的性能。
  • 由于较高层的自注意力模式与较低层的相似,因此模型训练可以递归方式进行,先训练较浅的模型,然后将训练后的参数复制到较深的层。在能达到原始的BERT在GLUE任务上相似的准确率的同时,这样的”warm-start“能提升25%的训练速度。

3. 微调BERT

截止目前,改进BERT的微调的方法有:

  1. 考虑更多的层:(1) 跟输出层结合;(2) 对除了最后一层输出之外的所有层的表征进行加权
  2. Two-stage fine-tuning在预训练与微调之间引入了中间的监督训练阶段
  3. Adversarial token perturbations可以提升模型的鲁棒性

BERT应该要多大?

1. 过度参数化 Overparameterization

基于Transformer的模型可以在尺寸上一直增长:如T5模型是基本BERT模型的30倍以上。这引起了对计算复杂度、计算环境问题、可复现性以及学界与工业界的研究资源等问题。

  1. 在没有显著损害模型性能的情况下,除了一些Transformer头之外,所有的都可以被去掉。
  2. 在某些任务上,一些BERT头或层不仅没有用,而且还对下游的任务性能有害
  3. BERT-large一般比BERT-base表现要好,但情况并不总是这样的,比如主谓一致 (subject-ver agreement) 与句子主语检测 (sentence subject detection) 任务中。
  4. 造成BERT会有许多冗余的头与层的一个可能的原因是使用了注意力dropout,这会导致一些注意力权重在训练期间被置为零 (zerod-out)

2. BERT 压缩

即使BERT被过度参数化,但BERT依然能够在很少的准确率损失的情况下被有效压缩。主要的方法有知识蒸馏 (knowledge distillation) 与 量化 (quantization)。

知识蒸馏主要训练一个更小的学生网络 (student-network) 来模仿一个更大的教师网络 (teacher-network) 的行为,实现方式有 损失函数、模仿教师网络的注意力模式以及在预训练或微调阶段的不同阶段的知识迁移。

量化方法主要通过降低权重的精度来减少BERT的内存。

其他的技巧则包括把BERT的嵌入矩阵 (embedding matrix) 分解成更小的矩阵以及渐进式的模型替换。

多语言BERT

截至目前,改善多语言BERT的方法主要有:

  1. 通过冻结底下的BERT层来改进在多语言数据集上的微调;
  2. 在微调阶段改进字对齐 (word alignment)
  3. 可替代的预训练目标——翻译语言建模,在平行句子对 (parallel sentence pairs) 中遮蔽一些词
  4. 组合5中预训练任务:单语和跨语言MLM,翻译语言建模,跨语言词恢复 (cross-lingual word recovery) 及释义分类 (paraphrase classification)

一个研究方向就是在跨语言的环境下直接使用单语言BERT。比如用单语言BERT权重直接初始化神经机器翻译的编码器部分;多语言BERT不必再多语言上进行预训练

讨论

1. 局限性

  1. 有很多研究表明BERT拥有惊人的语法、语义以及世界知识。然而,也有研究表明他们并没有观察到语言模式,但这个事实并不能保证它不存在,而且我们也不清楚如何使用。
  2. 模型复杂度与验证假设之间也存在权衡问题。
  3. 不同的方法可能揭示了互补的甚至相互矛盾的信息,在这种情况下,单向测试是不够的。
  4. 注意力头及BERT层的消融实验已经内在地假设某些知识是包含在头或层中的,但是也有证据表明更多的扩散的表征遍布在整个网络中的。如果同样的信息在网络的其他地方被重复使用,那么消融实验也是有问题的。
  5. 注意力可视化作为解释深度学习模型的一个工具的优点也是值得商榷的。而且,可视化对于定性分析也是非常有限的,不应该被解释成明确的证据。

2. 未来研究的方向

  1. 确定语言推理的基准数据集及方法
  2. 开发出能"教"BERT进行推理的方法
  3. 在推理阶段学习如何使用知识

想要了解更多的自然语言处理最新进展、技术干货及学习教程,欢迎关注微信公众号“语言智能技术笔记簿”或扫描二维码添加关注。
在这里插入图片描述

你可能感兴趣的:(一起读论文,BERT,BERTology,Transformer,综述,Survey)