论文-BERT

BERT:用于语言理解的深层双向转换器的预训练

BERT:转换器的双向编码器表示
设计目的:通过在所有层中的左、右上下文上联合调节,从未标记的文本中预处理深层的双向表示
通过对句子的整体分析来预测句子之间的关系

优势:可以通过一个额外的输出层进行微调,从而为广泛的任务创建最新的模型,无需对特定于任务的体系结构进行大量修改

1.介绍

将预先训练的语言表示应用于下游任务有两种现有策略:基于特征的和微调的
基于特征的方法:例如ELMo,使用特定于任务的体系结构,其中包括作为附加特征的预先训练的表示
微调方法:如生成预训练变压器(OpenAI GPT),引入最小任务特定参数,并通过简单微调所有预训练参数来训练下游任务。对于微调方法,主要的限制是标准语言模型是单向的,这限制了可以在预培训期间使用的体系结构的选择
BERT改进了基于微调的方法
BERT在完形填空任务的启发下,使用了一个“伪装语言模型”(MLM)的预训练目标,从而减轻了前面提到的单向性约束
屏蔽语言模型随机屏蔽输入中的一些标记,其目标是仅基于上下文预测屏蔽词的原始词汇id
本论文的贡献
(1)我们证明了双向预训练对于语言表达的重要性。与Radford等人不同。使用单向语言模型进行预训练,BERT使用屏蔽语言模型实现预训练的深度双向表示。这也与Peters等人的研究结果相反。它使用了从左到右和从右到左的独立训练LMs的浅串联。
(2)我们表明,预先训练的表示减少了对许多高度工程化的特定任务体系结构的需求。BERT是第一个基于精细调整的表示模型,它在一组大型句子级和令牌级任务上实现了最新的性能,其性能优于许多特定于任务的体系结构。

2.相关工作

2.1 基于特征的无监督方法
2.2 无监督微调方法
2.3 有监督数据的传递学习

3.BERT的具体实现

两个步骤:预培训和微调。在训练前,该模型在不同的任务上对未标记的数据进行训练
对于微调,首先用预先训练好的参数初始化BERT模型,然后使用来自下游任务的标记数据微调所有参数。每个下游任务都有单独的微调模型,即使它们是用相同的预训练参数初始化的。
模型体系:BERT的模型体系结构是原始实现的多层双向变压器编码器
在这项工作中,我们把层的数量(即,变压器块)表示为L,把隐藏的大小表示为H,把自我注意头的数量表示为A
BERT BASE(L=12,H=768,A=12,总参数=110M)和Bert large(L=24,H=1024,A=16,总参数=340M)
输入/输出表示:为了使BERT处理各种下游任务,我们的输入表示能够在一个标记序列中明确地表示一个句子和一对句子。
在这项工作中,“句子”可以是连续文本的任意跨度,而不是实际的语言句子
“序列”是指输入到BERT的令牌序列,它可以是一个句子,也可以是打包在一起的两个句子。
[CLS]:每个序列的第一个标记
与此标记对应的最终隐藏状态用作分类任务的聚合序列表示。句子对被打包成一个序列。我们用两种方法来区分句子。
首先用
[SEP]:分开标记。第二,我们在每一个标记中加入一个习得的嵌入,表示它是属于a句还是B句。
在这里插入图片描述
输入嵌入表示为
E
C用于下一句预测 C ∈ RH,Ti∈ RH

3-1.BERT的预训练

我们使用两个无监督任务来预先训练BERT
任务一:屏蔽语言模型
深度双向模型比从左到右模型或从左到右模型和从左到右模型的浅连接更强大。
不幸的是,标准的条件语言模型只能从左到右或从右到左进行训练,因为双向条件反射允许每个词间接地“看到自己”,而且模型可以在多层上下文中很容易地预测目标词。
为了训练深层的双向表示,我们只需随机屏蔽一些百分比的输入令牌,然后预测这些屏蔽令牌。
任务二:下一句预测(NSP)
语言建模并不能直接捕捉到这两个句子之间的关系。为了训练一个理解句子关系的模型,我们预先训练一个二值化的下一个句子预测任务

3-2.微调BERT

微调很简单,因为Transformer中的自注意力机制允许BERT通过交换适当的输入和输出来对许多下游任务建模,无论它们是涉及单个文本还是文本对。
对于每个任务,我们只需将特定于任务的输入和输出插入到BERT中,并端到端地微调所有参数
与预训练相比,微调相对便宜。

4.消融研究

5.BERT的其他细节

5-1.预训练前的任务说明

MLM(屏蔽):

80%:my dog is hairy →my dog is [MASK]
10%: my dog is hairy → my dog is apple
10%:my dog is hairy →my dog is hairy 

下一句预测:

Input = [CLS] the man went to [MASK] store [SEP]
he bought a gallon [MASK] milk [SEP]
Label = IsNext

Input = [CLS] the man [MASK] to the store [SEP]
penguin [MASK] are flight ##less birds [SEP]
Label = NotNext

5-2.预训练步骤

为了生成每个训练输入序列,我们从语料库中抽取两段文本,我们称之为“句子”,尽管它们通常比单个句子长得多(但也可以更短)。第一句接受A嵌入,第二句接受B嵌入。50%的概率B是A后面的实际下一个句子,50%的概率B是一个随机句子,这是为“下一个句子预测”任务完成的。对它们进行采样,使得组合长度小于等于512个词语。LM掩蔽是在词块标记化之后应用的,掩蔽率为15%,并且没有特别考虑部分词块。
我们使用Adam,学习率为1e-4,β1=0.9,β2=0.999,L2体重衰减为0.01,前10000步的学习率预热,学习率线性衰减。

5-3.微调程序

最佳超参数值是特定于任务的,但我们发现以下可能值的范围可以在所有任务中正常工作:

批量:16、32
学习率(Adam):5e-5、3e-5、2e-5
历代数:2、3、4

我们还观察到,与小数据集相比,大数据集(如100k+标记训练示例)对超参数选择的敏感性要低得多。微调通常非常快,因此只需对上述参数进行详尽的搜索并选择在开发集上性能最佳的模型是合理的。

6.消融研究

6-1.训练步数的影响

在这里插入图片描述

BERT:需要很大训练量
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值