这是掩码语言模型 (MLM) 的 PyTorch 实现,用于预训白文《BERT:预训练深度双向转换器以促进语言理解》中介绍的 BER T 模型。
BERT 模型是变压器模型。本文使用 MLM 和下一句预测对模型进行了预训练。我们只在这里实施了传销。
在下一个句子预测中,给出两个句子,A
B
然后模型对实际文本A
中后面的句子是否B
是后面的句子进行二进制预测。该模型有 50% 的时间为实际句子对,50% 的时间为随机句对。这种分类是在应用传销时完成的。我们还没有在这里实现这一点。
这会随机掩盖一定比例的代币,并训练模型预测被掩码的代币。他们通过用特殊代币替换15%的代[MASK]
币来掩盖它们。
损失仅通过预测被掩码的代币来计算。这在微调和实际使用过程中会导致问题,因为当时没有[MASK]
令牌。因此,我们可能得不到任何有意义的陈述。
为了克服这个问题,10%的蒙面代币被替换为原始代币,另外 10%的蒙面代币被随机代币所取代。无论该位置的输入代币是否为,这都会训练模型给出有关实际代币的表现形式[MASK]
。用随机代币替换会使它给出的表现形式也包含来自上下文的信息;因为它必须使用上下文来修复随机替换的标记。
MLM 比自回归模型更难训练,因为它们的训练信号较小。也就是说,每个样本只训练了一小部分的预测。
另一个问题是,由于该模型是双向的,因此任何代币都可以看到任何其他代币。这使得 “信用分配” 变得更加困难。假设你有角色等级模型想要预测home *s where i want to be
。至少在训练的早期阶段,很难弄清楚为什么要用*
它来代替i
,可能是整句话中的任何东西。而在自回归环境中,模型只h
需要用于预测o
e
和hom
预测等等。因此,该模型最初将首先在较短的上下文中开始预测,然后学会使用较长的上下文进行预测。由于 MLM 有这个问题,如果你一开始使用较小的序列长度,然后再使用更长的序列长度,那么训练速度会快得多。
这是简单 MLM 模型的训练代码。