The Logic Layer

BERT:用于语言理解的深度双向Transformer预训练

作者:Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina Toutanova

发表年份:2019

摘要

本文提出了一种名为BERT(Bidirectional Encoder Representations from Transformers)的预训练语言表示模型,该模型通过双向Transformer编码器来捕获文本的上下文信息。与传统的单向语言模型(如GPT)不同,BERT可以同时考虑左侧和右侧的上下文信息,从而获得更丰富的语言表示。我们通过两个预训练任务(掩码语言模型和下一句预测)来训练BERT,然后在下游任务上进行微调。实验结果表明,BERT在11个自然语言处理任务上取得了最先进的性能,包括GLUE基准测试、SQuAD问答任务和SWAG自然语言推理任务。BERT的成功展示了预训练和微调范式在自然语言处理领域的巨大潜力,为后续的研究奠定了基础。

1. 引言

自然语言处理(NLP)是人工智能的一个重要分支,其目标是使计算机能够理解和处理人类语言。近年来,预训练语言模型在NLP领域取得了显著的进展,这些模型通过在大规模文本语料库上进行预训练,然后在下游任务上进行微调,从而获得了强大的语言理解能力。

传统的预训练语言模型(如ELMo和GPT)存在一个局限性:它们只能捕获单向的上下文信息。例如,ELMo使用双向LSTM,但在预训练时仍然是单向的;GPT使用单向Transformer,只能考虑左侧的上下文信息。这种单向性限制了模型对文本的理解能力,因为许多语言现象需要同时考虑左侧和右侧的上下文。

为了解决这个问题,本文提出了BERT模型,它通过掩码语言模型(Masked Language Model,MLM)预训练任务来捕获双向上下文信息。掩码语言模型随机掩码输入序列中的一些token,然后让模型预测这些被掩码的token,这样模型就需要同时考虑左侧和右侧的上下文信息。此外,BERT还引入了下一句预测(Next Sentence Prediction,NSP)任务,以捕获句子之间的关系。

我们在大规模文本语料库(BookCorpus和English Wikipedia)上预训练了BERT模型,然后在11个下游NLP任务上进行微调。实验结果表明,BERT在所有任务上都取得了最先进的性能,大幅超越了之前的模型。

2. BERT模型

2.1 模型架构

BERT的核心是一个多层双向Transformer编码器。Transformer是一种基于自注意力机制的模型,它能够有效地捕获长距离依赖关系。BERT的模型架构定义为:

BERT(Encoder) = LayerNorm(x + MultiHeadAttention(LayerNorm(x)))
                + LayerNorm(x + FeedForward(LayerNorm(x)))

我们提供了两个版本的BERT模型:

  • BERT-Base:12层Transformer编码器,768维隐藏状态,12个注意力头,总参数约110M
  • BERT-Large:24层Transformer编码器,1024维隐藏状态,16个注意力头,总参数约340M

2.2 输入表示

BERT的输入表示能够处理单个句子和句子对。输入表示由三部分组成:

  1. Token Embeddings:词元的嵌入表示,使用WordPiece分词
  2. Segment Embeddings:用于区分句子A和句子B的嵌入表示
  3. Position Embeddings:位置编码,用于捕获词元的位置信息

对于单个句子输入,我们使用[CLS]标记作为句子的起始标记,使用[SEP]标记作为句子的结束标记。对于句子对输入,我们在两个句子之间插入[SEP]标记,并使用不同的Segment Embeddings来区分它们。

2.3 预训练任务

2.3.1 掩码语言模型(MLM)

掩码语言模型是BERT的核心预训练任务,它的工作原理是:

  1. 随机掩码输入序列中的15%的词元
  2. 对于被掩码的词元,80%的概率替换为[MASK]标记
  3. 10%的概率替换为随机词元
  4. 10%的概率保持不变
  5. 让模型预测被掩码的词元

这种设计使得模型能够同时考虑左侧和右侧的上下文信息,从而获得更丰富的语言表示。

2.3.2 下一句预测(NSP)

下一句预测任务用于捕获句子之间的关系,它的工作原理是:

  1. 对于每个训练样本,从语料库中选择一个句子对(A, B)
  2. 50%的概率,B是A的实际下一句(标签为IsNext)
  3. 50%的概率,B是语料库中的随机句子(标签为NotNext)
  4. 让模型预测B是否是A的下一句

这个任务有助于模型学习句子之间的语义关系,对于问答、自然语言推理等任务非常重要。

3. 预训练细节

3.1 数据集

我们使用了两个大规模文本语料库进行预训练:

  • BookCorpus:包含约800M词元的书籍语料库
  • English Wikipedia:包含约2500M词元的维基百科语料库

3.2 训练参数

预训练的参数设置如下:

  • 批次大小:256个序列(每个序列包含512个词元)
  • 训练步数:1,000,000步
  • 学习率:初始值为1e-4,采用线性衰减
  • 激活函数:GELU
  • dropout概率:0.1

3.3 硬件需求

BERT的预训练需要大量的计算资源:

  • BERT-Base:使用16个TPU训练4天
  • BERT-Large:使用16个TPU训练4天

4. 微调

对于下游任务,我们通过简单的架构修改来微调BERT模型:

4.1 分类任务

对于分类任务(如情感分析、自然语言推理),我们使用[CLS]标记的隐藏状态作为句子的表示,然后添加一个分类层进行预测。

4.2 序列标注任务

对于序列标注任务(如命名实体识别、词性标注),我们使用每个词元的隐藏状态作为其表示,然后为每个词元添加一个分类层进行预测。

4.3 问答任务

对于问答任务(如SQuAD),我们添加两个特殊标记层来预测答案的开始和结束位置。

4.4 微调参数

微调的参数设置如下:

  • 批次大小:16或32
  • 训练步数:2-4个epoch
  • 学习率:2e-5、3e-5或5e-5

5. 实验结果

5.1 GLUE基准测试

GLUE(General Language Understanding Evaluation)是一个自然语言理解基准测试集合,包含9个不同的NLP任务。表1显示了BERT在GLUE基准测试上的性能:

任务 之前的最佳性能 BERT-Base BERT-Large
CoLA 58.9 60.5 63.6
SST-2 93.2 93.5 94.9
MRPC 88.6 89.3 90.2
STS-B 86.5 87.6 88.8
QQP 89.2 89.5 90.7
MNLI 86.7 87.6 89.4
QNLI 88.4 90.1 92.7
RTE 70.4 74.3 78.7
WNLI 54.7 56.3 57.7

5.2 SQuAD问答任务

SQuAD(Stanford Question Answering Dataset)是一个问答基准测试,要求模型根据给定的上下文回答问题。表2显示了BERT在SQuAD上的性能:

模型 SQuAD 1.1 F1 SQuAD 1.1 EM SQuAD 2.0 F1 SQuAD 2.0 EM
之前的最佳模型 86.0 77.3 75.1 72.5
BERT-Base 88.5 80.8 78.9 75.1
BERT-Large 91.8 86.1 83.1 79.7

5.3 SWAG自然语言推理任务

SWAG(Situations With Adversarial Generations)是一个自然语言推理任务,要求模型从四个选项中选择最合理的后续事件。表3显示了BERT在SWAG上的性能:

模型 准确率
之前的最佳模型 71.6
BERT-Base 78.8
BERT-Large 86.3

5.4 实验结论

实验结果表明:

  • BERT在所有下游任务上都取得了最先进的性能,大幅超越了之前的模型
  • BERT-Large的性能优于BERT-Base,表明更大的模型容量有助于提高性能
  • 双向上下文信息对于语言理解任务非常重要
  • 预训练+微调的范式是有效的,可以快速适应各种下游任务

6. Ablation研究

我们进行了ablation研究,以分析BERT各个组件的贡献:

6.1 双向性的影响

我们比较了BERT(双向)、Left-only BERT(只考虑左侧上下文)和Shuffled BERT(随机打乱词元顺序)的性能。结果表明,双向性对于语言理解任务非常重要,BERT的性能显著优于Left-only BERT和Shuffled BERT。

6.2 预训练任务的影响

我们比较了使用不同预训练任务的BERT变体的性能:

  • BERT(MLM + NSP):原始BERT,同时使用掩码语言模型和下一句预测任务
  • BERT(No NSP):不使用下一句预测任务
  • BERT(LTR):使用左到右语言模型替代掩码语言模型

结果表明,掩码语言模型是BERT性能的关键,下一句预测任务对于句子级任务也有一定的贡献。

6.3 模型大小的影响

我们比较了不同大小的BERT模型的性能,结果表明,更大的模型容量有助于提高性能,但也会增加计算成本。

7. 结论

本文提出了BERT模型,这是一种基于双向Transformer编码器的预训练语言表示模型。通过掩码语言模型和下一句预测任务,BERT能够捕获双向上下文信息,从而获得更丰富的语言表示。

实验结果表明,BERT在11个自然语言处理任务上都取得了最先进的性能,大幅超越了之前的模型。这证明了预训练+微调范式在自然语言处理领域的巨大潜力,也表明双向上下文信息对于语言理解任务的重要性。

BERT的成功推动了自然语言处理领域的快速发展,为后续的研究(如GPT-2、GPT-3、RoBERTa等)奠定了基础。我们相信,预训练语言模型将在未来的自然语言处理任务中继续发挥重要作用,为解决更复杂的语言理解问题提供强大的工具。

未来的研究方向包括:进一步提高模型的效率,扩展模型的语言覆盖范围,以及探索预训练语言模型在更多任务和领域中的应用。

参考文献

  1. Devlin, J., Chang, M. W., Lee, K., & Toutanova, K. (2019). BERT: Pre-training of deep bidirectional transformers for language understanding. Proceedings of the 2019 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, Volume 1 (Long and Short Papers), 4171-4186.
  2. Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., ... & Polosukhin, I. (2017). Attention is all you need. Advances in neural information processing systems, 30.
  3. Peters, M. E., Neumann, M., Iyyer, M., Gardner, M., Clark, C., Lee, K., & Zettlemoyer, L. (2018). Deep contextualized word representations. Proceedings of the 2018 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, Volume 1 (Long Papers), 2227-2237.
  4. Radford, A., Narasimhan, K., Salimans, T., & Sutskever, I. (2018). Improving language understanding by generative pre-training. OpenAI Blog.
  5. Raffel, C., Shazeer, N., Roberts, A., Lee, K., Narang, S., Matena, M., ... & Liu, P. J. (2019). Exploring the limits of transfer learning with a unified text-to-text transformer. Journal of Machine Learning Research, 21(140), 1-67.