自然语言处理 (NLP) 面临的最大挑战之一是训练数据的短缺。由于 NLP 是一个具有许多不同任务的多元化领域,因此大多数特定于任务的数据集仅包含几千或几十万个人工标记的训练样本。然而,基于深度学习的现代 NLP 模型可以从大量数据中获益,当在数百万或数十亿个带注释的训练样本上进行训练时,这些模型会有所改善。为了帮助缩小这一数据差距,研究人员开发了多种技术,用于使用网络上大量未注释的文本(称为预训练)来训练通用语言表示模型。然后,可以对小数据 NLP 任务(如问答和情感分析)对预训练模型进行微调,与从头开始训练这些数据集相比,准确性有了实质性的提高。
本周,我们开源了一种用于 NLP 预训练的新技术,称为 Bidirectional Encoder Representations from 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 使用其前一个和下一个上下文来表示“银行”——“我访问了…account“——从深度神经网络的最底层开始,使其深度双向。
BERT的神经网络架构与以前最先进的上下文预训练方法相比的可视化如下所示。箭头表示从一层到下一层的信息流。顶部的绿色框表示每个输入词的最终上下文表示: