BERT:最先进的自然语言处理预训练

自然语言处理 (NLP) 的最大挑战之一是训练数据的短缺。由于 NLP 是一个具有许多不同任务的多元化领域,因此大多数特定于任务的数据集仅包含几千或几十万个人工标记的训练示例。然而,现代基于深度学习的 NLP 模型从大量数据中获益,在对数百万或数十亿带注释的训练示例进行训练时会有所改善。为了帮助弥合这一数据差距,研究人员开发了多种技术来使用网络上的大量未注释文本来训练通用语言表示模型(称为预训练)。然后可以在诸如问答和情感分析等小数据 NLP 任务上对预训练的模型进行微调,与从头开始训练这些数据集相比,可以显着提高准确性。

本周,我们开源了一种用于 NLP 预训练的新技术,称为来自 Transformers 的双向编码器表示,或 BERT。有了这个版本,世界上的任何人都可以在大约 30 分钟内在单个 Cloud TPU 上或使用单个 GPU 在几个小时内训练他们自己最先进的问答系统(或各种其他模型)。该版本包括构建在 TensorFlow 之上的源代码和许多预训练的语言表示模型。在我们的相关论文中,我们展示了 11 个 NLP 任务的最新结果,包括极具竞争力的斯坦福问答数据集 (SQuAD v1.1)。

是什么让 BERT 与众不同?
BERT 建立在预训练上下文表征方面的最新工作之上——包括半监督序列学习、生成预训练、ELMo 和 ULMFit。然而,与之前的这些模型不同,BERT 是第一个深度双向、无监督的语言表示,仅使用纯文本语料库(在本例中为维基百科)进行预训练。

为什么这很重要?预训练的表示可以是上下文无关的或上下文的,上下文表示还可以是单向的或双向的。 word2vec 或 GloVe 等上下文无关模型为词汇表中的每个词生成单个词嵌入表示。例如,“bank”一词在“bank account”和“bank of the river”中将具有相同的上下文无关表示。相反,上下文模型基于句子中的其他单词生成每个单词的表示。例如,在句子“我访问了银行账户”中,单向上下文模型将基于“我访问了”而不是“账户”来表示“银行”。然而,BERT 使用其上一个和下一个上下文来表示“银行”——“我访问了......账户”——从深度神经网络的最底层开始,使其具有深度双向性。

BERT 的神经网络架构与之前最先进的上下文预训练方法相比的可视化如下所示。箭头表示从一层到下一层的信息流。顶部的绿色框表示每个输入词的最终上下文化表示:

BERT 是深度双向的,OpenAI GPT 是单向的,ELMo 是浅双向的。

双向性的力量
如果双向性如此强大,为什么以前没有做过呢?要理解其中的原因,请考虑通过预测以句子中前一个词为条件的每个词来有效地训练单向模型。然而,不可能通过简单地将每个词的前一个下一个词作为条件来训练双向模型,因为这将允许被预测的词在多层模型中间接“看到自己”。

为了解决这个问题,我们使用简单的技术屏蔽掉输入中的一些词,然后双向调节每个词来预测被屏蔽的词。例如:

虽然这个想法已经存在很长时间了,但 BERT 还是第一次成功地用于预训练深度神经网络。

BERT 还通过对可以从任何文本语料库生成的非常简单的任务进行预训练来学习对句子之间的关系建模:给定两个句子A和B,B是语料库中A之后的实际下一个句子,还是只是一个随意的句子?例如:

使用 Cloud TPU 进行训练
到目前为止,我们所描述的所有内容似乎都相当简单,那么让它如此出色地运行的缺失部分是什么?云 TPU。Cloud TPU 使我们能够自由地快速试验、调试和调整我们的模型,这对于我们超越现有的预训练技术至关重要。谷歌研究人员于 2017 年开发的Transformer 模型架构也为我们提供了使 BERT 成功所需的基础。Transformer 在我们的开源版本以及tensor2tensor 库中实现。

BERT 的结果
为了评估性能,我们将 BERT 与其他最先进的 NLP 系统进行了比较。重要的是,BERT 实现了所有结果,几乎没有对神经网络架构进行特定于任务的更改。在SQuAD v1.1 上,BERT 达到了 93.2% 的 F1 分数(准确性的衡量标准),超过了之前 91.6% 的最先进分数和 91.2% 的人类水平分数:

BERT 还在极具挑战性的GLUE 基准测试(一组 9 个不同的自然语言理解 (NLU) 任务)上将最先进技术提高了 7.6% 。这些任务中人工标记的训练数据量从 2,500 个示例到 400,000 个示例不等,并且 BERT 大大提高了所有这些任务的最先进准确性:

让 BERT 为你工作
我们发布的模型可以在几个小时或更短的时间内针对各种 NLP 任务进行微调。开源版本还包括运行预训练的代码,尽管我们相信大多数使用 BERT 的 NLP 研究人员永远不需要从头开始预训练他们自己的模型。我们今天发布的 BERT 模型仅支持英语,但我们希望在不久的将来发布已在多种语言上进行预训练的模型。

可以在http://goo.gl/language/bert找到开源 TensorFlow 实现和指向预训练 BERT 模型的指针。或者,您可以使用笔记本“ BERT FineTuning with Cloud TPUs ”通过Colab开始使用 BERT 。 您也可以阅读我们的论文“