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的输入表示能够处理单个句子和句子对。输入表示由三部分组成:
- Token Embeddings:词元的嵌入表示,使用WordPiece分词
- Segment Embeddings:用于区分句子A和句子B的嵌入表示
- Position Embeddings:位置编码,用于捕获词元的位置信息
对于单个句子输入,我们使用[CLS]标记作为句子的起始标记,使用[SEP]标记作为句子的结束标记。对于句子对输入,我们在两个句子之间插入[SEP]标记,并使用不同的Segment Embeddings来区分它们。
2.3 预训练任务
2.3.1 掩码语言模型(MLM)
掩码语言模型是BERT的核心预训练任务,它的工作原理是:
- 随机掩码输入序列中的15%的词元
- 对于被掩码的词元,80%的概率替换为[MASK]标记
- 10%的概率替换为随机词元
- 10%的概率保持不变
- 让模型预测被掩码的词元
这种设计使得模型能够同时考虑左侧和右侧的上下文信息,从而获得更丰富的语言表示。
2.3.2 下一句预测(NSP)
下一句预测任务用于捕获句子之间的关系,它的工作原理是:
- 对于每个训练样本,从语料库中选择一个句子对(A, B)
- 50%的概率,B是A的实际下一句(标签为IsNext)
- 50%的概率,B是语料库中的随机句子(标签为NotNext)
- 让模型预测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等)奠定了基础。我们相信,预训练语言模型将在未来的自然语言处理任务中继续发挥重要作用,为解决更复杂的语言理解问题提供强大的工具。
未来的研究方向包括:进一步提高模型的效率,扩展模型的语言覆盖范围,以及探索预训练语言模型在更多任务和领域中的应用。
参考文献
- 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.
- 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.
- 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.
- Radford, A., Narasimhan, K., Salimans, T., & Sutskever, I. (2018). Improving language understanding by generative pre-training. OpenAI Blog.
- 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.