Bert(三)

3 BERT
在本节中,我们将介绍BERT及其详细实现。
我们的框架有两个步骤:预训练和微调。 在预训练期间,通过不同的预训练任务对未标记的数据进行模型训练。 为了进行微调,首先使用预训练的参数初始化BERT模型,然后使用来自下游任务的标记数据对所有参数进行微调。每个下游任务都有单独的微调模型,即使它们已使用相同的预训练参数初始化。 图1中的问答系统示例将作为本节的运行示例。

图1:BERT的总体预训练和微调程序。 除输出层外,相同的体系结构还用于预训练和微调。 相同的预训练模型参数用于初始化不同下游任务的模型。 在微调期间,所有参数都将进行微调。 [CLS]是在每个输入示例前面添加的特殊符号,[SEP]是特殊的分隔符标记(例如,分隔问题/答案)。

BERT的一个显着特征是其跨不同任务的统一架构。预训练的体系结构与最终的下游体系结构之间的差异很小。
Model Architecture
BERT的模型架构是一种基于Vaswani等人(2017)描述的多层双向Transformer编码器的原始实现 ,并在tensor2tensor库中发布.因为使用Transformer已经很普遍,并且我们的实现几乎与原始实现相同,所以我们将省略对模型架构的详尽背景说明,并向读者推荐Vaswani等 (2017)等文章以及出色的指南,例如“The Annotated Transformer”。

在这项工作中,我们将网络层(即Transformer块)的数量表示为L,将隐藏层数量表示为H,并将自注意力头的数量表示为A.我们主要报告两种模型的结果:BERT-BASE(L = 12,H = 768,A = 12,总参数= 110M)和BERT-LARGE(L = 24,H = 1024,A = 16,总参数= 340M)。
为了进行比较,BERT-BASE选择与OpenAI GPT相同的模型大小。但是,至关重要的是,BERT Transformer使用双向自注意力,而GPT Transformer则使用受限的自注意力,其中每个令牌只能关注其左侧的上下文。

Input/Output Representations
为了使BERT可以处理各种下游任务,我们的输入表征能够明确地在一个令牌序列中表示单个句子和一对句子(例如< Question, Answer>)。 在整个任务中,“句子”可以是连续文本的任意跨度,而不是实际的语言句子。 “序列”是指BERT的投入令牌序列,它可以是一个句子或两个句子打包在一起。
我们使用WordPiece嵌入(Wu 等,2016)和30,000个令牌词汇表。 每个序列的第一个标记始终是特殊的分类标记([CLS])。 与此标记对应的最终隐藏状态用作分类任务的聚合序列表示。句子对打包在一起形成单个序列。 我们通过两种方式区分句子。 首先,我们使用特殊令牌([SEP])将它们分开。 其次,我们向每个标记添加学习的嵌入,以指示它是属于句子A还是句子B。如图1所示,我们将输入嵌入表示为E,将特殊[CLS]令牌的最终隐藏向量表示为C∈R H,将第i个输入令牌的最终隐藏向量表示为Ti∈RH。对于给定的令牌,其输入表征是通过将相应的令牌,段和位置嵌入相加而构造的。 在图2中可以看到这种结构的说明。
图2:BERT输入表示。 输入的嵌入是令牌嵌入,分段嵌入和位置嵌入的总和。
图2:BERT输入表示。 输入的嵌入是令牌嵌入,分段嵌入和位置嵌入的总和。
3.1 Pre-training BERT
与Peters等人(2018a)和Radford等人不同。 (2018),我们没有使用传统的从左到右或从右到左的语言模型来预训练BERT。 相反,我们使用本节中描述的两个非监督任务对BERT进行预训练。 此步骤在图1的左侧展示。
Task #1: Masked LM
凭直觉,我们有理由相信,深层双向模型比左向右模型或从左至右和从右至左模型的浅层连接绝对更强大。遗憾的是,标准条件语言模型只能从左到右或从右到左进行训练,因为双向状态条件将允许每个单词直接“看到自己”,并且该模型可以在多层上下文中轻松预测目标词。为了训练深度双向表示,我们简单地随机屏蔽一定百分比的输入令牌,然后预测这些屏蔽的令牌。我们将此程序称为“masked
LM”(MLM),尽管在文献中通常将其称为“CLoze”任务(Taylor,1953)。在这种情况下,如在标准LM中一样,与掩码令牌相对应的最终隐藏向量被馈送到词汇表上的输出softmax中。 在我们所有的实验中,我们将每个序列中的WordPiece的15%随机屏蔽为kens。 与去噪自动编码器相反(Vincent等,2008),我们仅预测被屏蔽的单词,而不重构整个输入。
尽管这可以使我们获得双向的预训练模型,但缺点是我们在预训练和微调之间造成了不匹配,因为[MASK]令牌在微调过程中不会出现。为了减轻这种情况,我们并不总是用实际的[MASK]令牌替换“被屏蔽”的单词。 训练数据生成器随机选择15%令牌位置进行预测。 如果选择了第i个令牌,我们将(1)80%的时间[MASK]令牌替换为第i个令牌,(2)10%的时间替换为随机令牌(3)10%的时间为不变的第i个令牌 。 然后,将使用Ti来预测具有交叉熵损失的原始令牌。 我们在附录C.2中比较了此过程的变体。
Task #2: Next Sentence Prediction (NSP)
许多重要的下游任务,例如问题解答(QA)和自然语言推论(NLI)都是基于对两个句子之间关系的理解,而语言建模并不能直接捕获这些关系。为了训练能够理解句子关系的模型,我们预训练了可以从任何一种单语语料库简单生成的二值化的NSP任务。具体来说,当为每个预训练示例选择句子A和B时,B的时间的50%是跟随A的实际下一个句子(标记为IsNext),而50%的时间是来自语料库的随机句子 (标记为NotNext)。如图1所示,C用于下一句预测(NSP)。尽管它很简单,但我们在5.1节中证明了针对此任务的预训练对QA和NLI都非常有益。

NSP任务与Jernite等人(2017)和Logeswaran and Lee(2018)提出的表征学习目标密切相关。 但是,在先前的工作中,只有句子嵌入被传输到下游任务,而BERT传输所有参数来初始化最终任务模型参数。

Pre-training data
预训练过程很大程度上遵循了有关语言模型预训练的现有文献。 对于预训练语料库,我们使用BooksCorpus(800M字)(Zhu等人,2015)和English Wikipedia(25亿字)。
对于Wikipedia,我们仅提取文本段落,而忽略列表,表和标题。 为了提取长的连续序列,使用文档级语料库而不是诸如“十亿字基准”(Chelba 等,2013)之类的经过改组的句子级语料库是至关重要的。

3.2 Fine-tuning BERT
由于Transformer中的自注意机制允许BERT通过交换适当的输入和输出来建模许多下游任务(无论是单个文本还是文本对),因此微调非常简单。对于涉及文本对的应用程序,常见的模式是在应用双向交叉注意之前对文本对进行独立编码,例如Parikh等(2016);Seo等(2017)。相反,BERT使用自我注意机制来统一这两个阶段,因为使用自我注意对连接的文本对进行编码实际上包括了两个句子之间的双向交叉注意。
对于每个任务,我们只需将任务特定的输入和输出插入BERT,并端到端微调所有参数。在输入端,经过预训练的句子A和句子B类比与(1)释义中的句子对,(2)假设中的假定-前提对,(3)问答中的疑问句对,以及 (4)文本分类或序列标记中的简并的text-∅对。 在输出中,令牌表示被反馈到输出层以进行令牌级别的任务,例如序列标记或问题回答,[CLS]表征被反馈到输出层以进行分类,例如终止或情感分析。
与预训练相比,微调相对成本低。 从完全相同的预训练模型开始,本文中的所有结果在单个Cloud TPU上最多1个小时可以复现,或者在GPU上几个小时可以复现。我们在第4节的相应小节中描述了该任务 特定细节。更多详细信息,请参见附录A.5。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值