BERT Mask 方法
从Bert 论文中,我们可以知道BERT在pretrain的时候 会对训练集进行MASK 操作, 其中mask的方法是:
- 15%的原始数据被mask, 85% 没有被mask.
- 对于被mask的15% 分3种处理方式: 1) 其中80%是赋值为MASK. 2) 10%进行random 赋值,3)剩下10%保留原来值.
伯努利函数
在 hunggingface transformer 中, Bert 的mask的方法实现主要是靠torch.bernoulli()函数来完成.
首先, 介绍一下torch.bernoulli() 函数:
- torch.bernoulli 函数 是从伯努利分布中根据input的概率抽取二元随机数(0或者1),输出与input相同大小的张量, 输出的张量的值只有0和1.
torch.bernoulli(input, out=None): input(Tensor) - 输入为伯努利分布的概率值 out(Tensor, optional)
- input 输入中所有值必须在[0, 1]区间(即概率值),输出张量的第i个元素值,将以输入张量的第i个概率值等于1.
- 返回值将会是与输入相同大小的张量,每个值为0或1
Mask 代码注释
在run_lm_finetuning.py中, 有函数 mask_tokens()