[普通]BERT: 用于语言理解的深度双向 Transformer 预训练模型

作者(passion) 阅读(1093次) 评论(0) 分类( 软件)

原文:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

动机

语言预训练模型已经在很多 NLP 任务上展现出效果,包括句子级的自然语言推断、释义,其意图在通过整体地分析文本预测句子之间的关系。它同样用于记号级的任务,例如命名实体识别和问答系统,其中模型被要求产生细粒度的记号级的输出。

将预训练语言表示应用到下游任务的两种策略是:基于特征微调

  • 基于特征的方法,例如 ELMo 使用任务特定的架构,其中包含预训练表示作为额外特征。

  • 微调方法,例如生成式预训练 Transformer (OpenAI GPT),引入最少的任务特定的参数,通过简单微调所有预训练参数在下游任务上训练。

这两种方法在预训练过程中共享同一个目标函数,其中它们使用单向语言模型学习通用的语言表示。

作者表示当前的技术限制了预训练表示的能力,特别是微调方法。标准语言模型的主要缺陷是单向,这限制了预训练过程中架构的选择。例如,在 OpenAI GPT 中,作者使用从左到右的架构,其中每个记号只能使用 Transformer 的自注意力层中之前的记号。这样的限制对于句子级任务不是最理想的(sub-optimal),并且在将基于微调的方法应用于记号级任务(例如问题回答)时非常有害,在这种情况下,必须从两个方向合并上下文。

在该文中,作者通过提出 BERT 来提升基于微调的方法。BERT 通过使用掩盖语言模型(masked language model, MLM) 预训练目标来减轻之前提到的单向限制,这受启发于完形填空任务。MLM 随机掩盖输入中的一些记号,目标是基于上下文预测被掩盖单词的原始词典编号。不同于从左到右的预训练语言模型,MLM 的目标使得表示融合左边和右边的上下文环境,这允许我们预训练一个深度的双向 Transformer. 在 MLM 之外,作者还是用“下一句预测”任务来联合训练文本对表示(text-pair representation)。文章的贡献包括:

  • 作者证明语言模型双向预训练的重要性。不同于之前单向预训练语言模型的工作,BERT 使用 MLM 预训练深度双向表示。这也不同于独立训练从左到右和从右到左语言模型,并使用浅层拼接的方法。

  • 作者证明预训练表示减少了许多大工程量的任务特定的架构的需求。BERT是第一个基于微调的表示模型,可在一系列句子级和记号级任务上实现最先进的性能,其性能优于许多任务特定的体系结构。

  • BERT 在 11 个 NLP 任务上取得最先进的表现。代码和预训练模型在 github.com/google-resea

BERT 模型

BERT 框架中有两个步骤:预训练和微调。

  • 在预训练中,模型通过在不同预训练任务上无标签的数据进行训练。

  • 对于微调,BERT 通过预训练参数初始化,所有参数通过下游任务的有标签的数据进行微调。

每个下游任务有分离的微调模型,即使它们通过相同的预训练参数初始化。

BERT 的总体预训练和微调过程。以问答任务为例。

BERT 的一个显著特征是其跨不同任务的统一体系结构。预训练架构和最终下游架构中的差异是最小化的。

模型架构 BERT 的模型架构是一个多层双向 Transformer 编码器。因为 Transformer 的使用已经变得常见,作者使用的实现与原实现是几乎等同的。

输入输出表示 为了使 BERT 处理各种下游任务,输出表示需要能够非歧义地表示一个简单的句子和一个记号序列中的一对句子(例如<问题,答案>)。在该工作中,“句子”可以指连续文本的任意范围,而不是实际的语言句子。 “序列”是指 BERT 的输入记号序列,它可以是一个句子或两个句子包装在一起。

每个句子的首个记号是特殊分类符([CLS])。与此标记对应的最终隐藏状态用作分类任务的聚合序列表示。句子对打包在一起形成单个序列。作者通过两种方式区分句子。首先,使用特殊令牌([SEP])将它们分开。其次,作者向每个标记添加学习所得的嵌入,以指示它是属于句子 A 还是句子 B。

对于一个给定的记号,它的输入表示是通过将加和对应记号、分段和位置嵌入来构建的。

预训练 BERT

BERT 不是如同传统方法,即通过从左到右或从右到左的语言模型预训练的。BERT 预训练是通过两个无监督任务实现的。

任务1:Masked LM 直觉上,我们有理由相信一个深度双向模型比从左到右模型或从左到右和从右到左拼接的模型更加有效。不幸的是,标准的条件语言模型只能通过从左到右或从右到左的方式进行训练,而双向条件会使得每个单词间接地“看到自身”,该模型可以在多层上下文中轻松预测目标单词。

为了训练一个深度双向表示,作者简单地将输入记号中的一部分掩盖,然后预测这些被掩盖的记号。作者将这个过程称为“掩盖的语言模型”(MLM),虽然在文献中通常被称为完形。在这种情况下,如在标准 LM 中一样,与掩盖记号相对应的最终隐藏向量被馈送到词汇表上的输出 softmax 中。在所有实验中,作者随机屏蔽每个序列中所有 WordPiece 嵌入数据的15%。 这里仅预测被掩盖的单词,而不重构整个输入。

即使这允许我们获得一个双向预训练模型,缺陷在于这里创造了预训练和微调之间的不匹配。因为 [MASK] 记号只在预训练过程中出现,而不出现在微调中。为了弥补这一点,作者并不总是使用真正的 [MASK] 记号来替换被掩盖的单词。训练数据生成器随机选择记号位置的 15% 来用于预测。如果第 i 个位置的记号被选择,作者将第 i 个位置的记号替换为:

  • 80% 的情况是 [MASK] 记号

  • 10% 的情况是随机记号

  • 10% 的情况是不变的第 i 个位置的记号

这样,输出序列中的第 i 个元素 Ti 将通过交叉熵被用于预测原始记号。

任务2:下一句预测 NSP 许多重要的下游任务,例如问答系统(QA)和自然语言推断(NLI)是基于两个句子的相关性,这不是通过语言模型直接捕获的。为了训练能够理解句子关系的模型,作者预训练了可以从任何单语语料库直接生成的二元下一句预测任务。具体而言,当我们选择句子 A 和句子 B 作为训练样本,50% 的情况 B 是 A 实际上的下一句(记为 IsNext),50% 的情况 B 是语料库中随机的一个句子(记为 NotNext)。

BERT 输入表示。输入嵌入由记号嵌入、分隔符嵌入和位置嵌入组成。

微调 BERT

使用微调是相当直观的。Transformer 中的自注意力机制允许 BERT 对许多下游任务进行建模:通过交换适当的输入和输出,无论是单个文本还是文本对。对于涉及文本对的应用,常见的模式是在应用双向交叉注意之前独立编码文本对。 BERT 则是使用自注意机制来统一这两个阶段,因为使用自注意对连接的文本对进行编码实际上包括两个句子之间的双向交叉注意。

对于每个任务,我们只需将特定于任务的输入和输出插入BERT,并端到端微调所有参数。 在输入处,来自预训练的句子A和句子B类似于(1)释义中的句子对,(2)假设中的假设-前提对,(3)问答中的问题-文章对,(4)文本分类或序列标记的退化文本-空集对。在输出中,将记号表示形式送入到输出层中,以进行记号级任务,例如序列标记或问题回答;将 [CLS] 表示送入到输出层中,以进行分类,例如需求或情感分析 。

与预训练相比,微调相对成本较低。从完全相同的预训练模型开始,论文中的所有结果最多可以在单个 Cloud TPU 上 1 个小时内浮现,或者在 GPU 上几个小时内复现。

结论

由于使用语言模型进行了迁移学习,最近的经验改进表明,丰富的、无监督的预训练是许多语言理解系统不可或缺的一部分。尤其是,这些结果使得即使是资源匮乏的任务也可以从深度单向体系结构中受益。

作者的主要贡献是将这些发现进一步推广到深层次的双向体系结构,从而使相同的经过预训练的模型能够成功解决各种 NLP 任务。


« 上一篇:fastlabel 最强版标注神器,想你所想,做你想做
« 下一篇:解释BERT为什么是双向表示
在这里写下您精彩的评论
  • 微信

  • QQ

  • 支付宝

返回首页
返回首页 img
返回顶部~
返回顶部 img