BERT:一种预训练Transformer‘s encoder的方法

1. Bidirectional Encoder Representations from Transformers (BERT)

BERT aims to pretrain the transformer’s encoder network.
How to pretrain?(预训练后的encoder能达成怎样的效果/预训练的目标)
task 1:随机遮挡一个或多个单词,让encoder根据上下文来预测被遮挡的单词。
task 2:把两句话放在一起,让encoder判断这两句话是不是在原文中相邻。

BERT的embedding layer和随机遮挡单词都有一些技巧,详情见论文和源代码。

2. Task1: predict one or several masked word(s)

aims:给定一句话,随机抹去这句话中的一个或几个词,要求根据剩余词汇预测被抹去的几个词分别是什么。

BERT会随机遮挡单词,把被遮挡的单词的one-hot vector作为标签label/target/ground truth。BERT不需要人工标注的数据集,可以用任何书籍或维基百科作为训练数据,可以自动生成dictionary:vocabulary and 标签,足以生成一个非常大的模型。

u_M不仅依赖于x_M, 且依赖于所有x向量。第M个word被mask掉了,但是u_M知道整句话的信息。u_M包含上下文信息,因此可以用u_M来预测被遮挡的单词。u_M被作为特征向量输入softmax classifier,输出p:probability distribution of the predicted word, 第i维对应着预测结果是字典里第i个单词的可能性。我们希望p接近于ground truth e:被遮住单词cat的one-hot vector。Loss=CrossEntropy(e, p)。用反向传播计算loss对模型参数的梯度,然后做梯度下降来更新模型参数。
在这里插入图片描述
文章作者在一句话中随机选择 15% 的词汇用于预测。对于在原句中被抹去的词汇, 80% 情况下采用一个特殊符号 [MASK] 替换, 10% 情况下采用一个任意词替换,剩余 10% 情况下保持原词汇不变。这么做的主要原因是:在后续微调任务中语句中并不会出现 [MASK] 标记,而且这么做的另一个好处是:预测一个词汇时,模型并不知道输入对应位置的词汇是否为正确的词汇( 10% 概率),这就迫使模型更多地依赖于上下文信息去预测词汇,并且赋予了模型一定的纠错能力。

3. Task2: predict the next sentence

aims:给定一篇文章中的两句话,判断第二句话在文本中是否紧跟在第一句话之后。
在这里插入图片描述

Binaray classifier:
target/label/ground truth:
1: 两句话是文章中相邻的句子
0: 两句话不相关

predicted result:f between 0 and 1
可以用corss entropy loss function衡量f和真实标签间的区别。计算loss对模型参数的梯度,用gradient descent更新模型参数。

[CLS]对应位置的向量是c,但c不仅取决于[CLS],而是所有input。

这样做的意义?
相邻两句话通常有关联,这样做二分类可以强化这种关联:1. 让embedding layer’s weights和word embeddings包含这种关联。比如第一句话包含牛顿,第二句话包含微积分,那么他们之间应该被强化出某种关联。2. encoder network中有self-attention layer,目的是为了找语句中的相关性,这种训练方式可以找到相邻语句间的相关性。

在实际预训练过程中,文章作者从文本语料库中随机选择 50% 正确语句对和 50% 错误语句对进行训练,与 Masked LM 任务相结合,让模型能够更准确地刻画语句乃至篇章层面的语义信息。

4. Combining the two methods

BERT 模型通过对 Masked LM 任务和 Next Sentence Prediction 任务进行联合训练,使模型输出的每个字 / 词的向量表示都能尽可能全面、准确地刻画输入文本(单句或语句对)的整体信息,为后续的微调任务提供更好的模型参数初始值。

(1)input representation
example 1:
在这里插入图片描述
这个数据有3个任务,两个预测masked words任务(multi-class classification),一个判断两句是否相邻任务(binary classification)。loss = loss1+loss2+loss3

example 2:
在这里插入图片描述
(2)Training
For data example 1:
在这里插入图片描述
(3)Data source
在这里插入图片描述
(4)Cost of computation
在这里插入图片描述
(5)其他技巧
<1> embedding layer

<2> mask words
在一句话中随机选择 15% 的词汇用于预测。这样做有一个缺点,就是每批次数据中只有 15% 的标记被预测,这意味着模型可能需要更多的预训练步骤来收敛。

对于在原句中被抹去的词汇,(1) 80% 情况下采用一个特殊符号 [MASK] 替换,(2) 10% 情况下采用一个任意词替换,(3) 剩余 10% 情况下保持原词汇不变。

这么做的主要原因是:在后续微调任务中语句中并不会出现 [MASK] 标记,而且这么做的另一个好处是:预测一个词汇时,模型并不知道输入对应位置的词汇是否为正确的词汇( 10% 概率),这就迫使模型更多地依赖于上下文信息去预测词汇,并且赋予了模型一定的纠错能力。

在这里插入图片描述
Reference:
[1] https://www.bilibili.com/video/BV1ra4y1Y7nu
[2] https://zhuanlan.zhihu.com/p/95594311
[3] https://arxiv.org/abs/1810.04805

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值