问题描述:
为什么已经有85%不进行“mask策略”修改的token,还需要在15%进行“mask策略”的token中选取10%保持原词不变?
问题背景:
BERT预训练模型在训练阶段采用MLM任务,会给数据引入[mask]这种标记。但是在下游任务的数据中是没有这种标记的。因此BERT作者设计了“mask策略”的数据修改方式。(当然BERT原文不是这么说的,“mask策略”只是我这么叫它罢了)
BERT的输入数据
BERT预训练模型会对输入数据进行“mask策略”的修改。具体为:
保留85%的token不进行“mask策略”的修改(也就是单词还是其本身
对15%的token进行“mask策略”的修改
“mask策略”
对于被选中 需要进行“mask策略”的token:
以80%的概率替换为[MASK]标记;
以10%的概率替换为词表中的任意一个随机的词;
以10%的概率保持原词不变,即不替换。(也就是单词还是其本身
原因分析:
核心原因1:想让模型“明白” 输入的数据中包含真实的单词
核心原因2:85%的那部分token不参与梯度更新
虽然BERT模型会将全部输入的token最终转化为词向量,并预测出来对应的token,但是只有15%进行“mask策略”的token才会计算loss并进行反向传播,能够影响模型。因此,虽然数据中存在85%的token没做任何修改,但是并不能让模型“明白”输入的数据中包含真实的单词。恰恰需要15%能够影响模型的token中,10%不进行替换的单词才能让模型“明白”输入数据中也不全是有错误的。因此能够缓解预训练阶段有[mask],而下游任务没有[mask]这个不一致问题。