
bert在训练阶段不是将15%的词汇MASK掉,从而采用自监督的方式训练模型,那我直接将这15%mask掉不就好了吗,为什么又要进行80% mask,10% 随机替换,10% 保持原词呢?起初我看到的时候也比较迷惑,下面是我的理解。
一、训练阶段与测试、微调阶段的不对等关系
在训练阶段mask掉词汇,输入是:“我”“喜欢”“吃”“鱼”“但是”“mask”“的”“刺”“很多”,对吧,这样通过自己监督训练,不断调整模型的权重,提高模型的性能。
但是在测试阶段,我们是怎么测试的,依旧是输入带mask的句子,通过预测mask的单词,来评判准确度吗,这不有点多此一举吗。。。测试阶段应该是直接输入完整的句子,分词后得到token,然后在得到token对应的词向量,然后在过一个多分类器(类别个数为词袋的大小),然后得到Y_hat_test,之后与Y_test求差值,评判模型。整个过程不涉及mask。
微调阶段也一样,我们也是输入一句话,然后得到对应的词向量,之后就拿着词向量去做别的事情了,输入中也没有mask。
这就会形成一种不对等关系,训练阶段和测试、微调阶段不对等,我们又没法完全消除这种不对等(①训练时不做mask:不行,②测试、微调也做上mask:也不行),我们就通过这种80% mask,10% 随机替换,10% 保持原词的方式减少不对等关系。
二、采用这种方式可以使bert更注重语义理解
此外呢,如果我们在训练时,不是用这种方式,而是全部mask掉的话,模型就会把虽有的注意力集中到“mask”这个词汇上了,模型就能知道不出现“mask”的地方我不用管,啥时候出现“mask”我在管,这对模型提取语义关系是不利的。
使用(80% mask,10% 随机替换,10% 保持原词)的方式之后呢,模型不只是需要在“mask”位置做工作,还要时刻预防着随机替换的情况呀,也就是检查这个句子对不对,这就大大提高了模型提取语义效果的能力。

在这里分享一位up主的讲解视频,描述的更加生动:04 BERT 之为什么要做语言掩码模型(MLM)?_哔哩哔哩_bilibili