基于 Transformer (变换器)的双向编码器表示 (BERT) 技术由 Google 开发,通过在所有层中共同调整左右情境,利用无标记文本预先训练深度双向表示。该技术于 2018 年以开源许可的形式发布。Google 称 BERT 为“第一个深度双向、无监督式语言表示,仅使用纯文本语料库预先进行了训练”(Devlin et al. 2018)。
双向模型在自然语言处理 (NLP) 领域早已有应用。这些模型涉及从左到右以及从右到左两种文本查看顺序。BERT 的创新之处在于借助 Transformer 学习双向表示,Transformer 是一种深度学习组件,不同于递归神经网络 (RNN) 对顺序的依赖性,它能够并行处理整个序列。因此可以分析规模更大的数据集,并加快模型训练速度。Transformer 能够使用注意力机制收集词语相关情境的信息,并以表示该情境的丰富向量进行编码,从而同时处理(而非单独处理)与句中所有其他词语相关的词语。该模型能够学习如何从句段中的每个其他词语衍生出给定词语的含义。
之前的词嵌入技术(如 GloVe 和 Word2vec)在没有情境的情况下运行,生成序列中各个词语的表示。例如,无论是指运动装备还是夜行动物,“bat”一词都会以同样的方式表示。ELMo 通过双向长短期记忆模型 (LSTM),对句中的每个词语引入了基于句中其他词语的深度情景化表示。但 ELMo 与 BERT 不同,它单独考虑从左到右和从右到左的路径,而不是将其视为整个情境的单一统一视图。
由于绝大多数 BERT 参数专门用于创建高质量情境化词嵌入,因此该框架非常适用于迁移学习。通过使用语言建模等自我监督任务(不需要人工标注的任务)训练 BERT,可以利用 WikiText 和 BookCorpus 等大型无标记数据集,这些数据集包含超过 33 亿个词语。要学习其他任务(如问答),可以使用适合相应任务的内容替换并微调最后一层。
下图中的箭头表示三个不同 NLP 模型中从一层到下一层的信息流。
BERT 模型能够更精细地理解表达的细微差别。例如,处理序列“Bob 需要一些药。他的胃不舒服,可以给他拿一些抗酸药吗?” BERT 能更好地理解 “Bob”、“他的”和“他”都是指同一个人。以前,在“如何填写 Bob 的处方”这一查询中,模型可能无法理解第二句话引用的人是 Bob。应用 BERT 模型后,该模型能够理解所有这些关联点之间的关系。
双向训练很难实现,因为默认情况下,在前一个词语和下一个词语的基础上调节每个词都包括多层模型中预测的词语。BERT 的开发者通过遮蔽语料库中的预测词语和其他随机词语解决了这个问题。BERT 还使用一种简单的训练技术,尝试预测给定的两个句子 A 和 B:B 和 A 是先后还是随机关系。