MLM 任务中,随机选择 15% 的标记,其中 80% 替换为 [MASK],10% 保持不变,10% 随机替换为其他单词,原因是什么
1️⃣ 考察意图
这道题考察的是对 BERT 预训练核心机制——Masked Language Model (MLM) 设计动机的深度理解。面试官想看的不是“背数字”,而是你是否理解这背后“预训练-微调不一致”的工程取舍(trade-off)。刁钻点在于:为什么是 15% 而不是 10% 或 20%?为什么 80% 换 [MASK] 而留 10% 不变和 10% 随机替换?答好了能展示你对预训练目标设计的系统思考、对噪声注入与泛化能力的平衡能力,以及从论文到落地的实战洞察。
2️⃣ 标准答
这个策略来自 BERT 论文(Devlin et al., 2019),核心动机是解决 预训练与微调阶段输入分布不一致 的问题。具体设计如下:
- 80% 替换为 [MASK]:这是 MLM 的主干任务。模型必须利用双向上下文(左侧和右侧 token)来预测被遮住的词。例如“I [MASK] to school” -> 预测“go”。这迫使模型学习深层语义依赖,而非简单记忆 token 本身。为什么是 80%? 这是一个经验值:太高(如 90%)会让模型过度依赖 [MASK] 标记,微调时遇到无 [MASK] 的句子会“懵”;太低(如 50%)则任务太简单,模型学不到足够强的上下文表征。
- 10% 保持不变:这是关键的设计“保险”。如果所有被选中的 token 都变成 [MASK],模型在微调阶段(无 [MASK])会完全失去对原始 token 的感知。保留 10% 不变,模型必须学会“有时 token 就是它自己”,从而在预训练时保留每个 token 的原始语义表示。实际落地的坑:如果这个比例过高(如 20%),模型会倾向于“偷懒”——直接复制输入 token 而不去预测,导致 MLM 任务退化。10% 是平衡点:既防止模型完全依赖 [MASK],又不让它过度依赖“复制”。
- 10% 随机替换:这是噪声注入策略。随机替换为词汇表中的任意词(如“I [MASK] to school” -> “I cat to school”),模型必须判断“cat”是错误输入,并预测正确词“go”。这增强了鲁棒性,让模型不单纯依赖 token 本身,而是学会纠正错误。工程取舍:随机替换引入了“错误监督”,但代价是增加了训练难度——模型需要区分“噪声”和“真实语义”。如果比例过高(如 20%),模型会过度怀疑所有 token,导致收敛变慢;10% 是经验最优值,来自 BERT 论文的消融实验。
- 整体效果:这个 80/10/10 比例(加上 15% 的选中率)形成了一个 “任务难度-泛化能力”的平衡。15% 的选中率确保每个句子有足够多的 token 被预测(约 3-4 个),又不至于让模型只关注 [MASK] 而忽略其他 token。最终,模型在微调时能无缝迁移,因为输入分布(大部分 token 是原始词)与预训练时(80% [MASK] + 10% 不变 + 10% 随机)的“不变”部分对齐。
为什么不是其他比例? 论文中做了消融实验:如果全用 [MASK](100%),微调时性能下降约 1-2 个点(GLUE 基准);如果去掉随机替换(0%),模型对拼写错误或噪声的鲁棒性下降。这个设计是经过严格验证的。
3️⃣ 答题模板(30 秒电梯版)
“这个问题我从三个层面回答:第一,核心动机是解决预训练与微调阶段 [MASK] 标记的不一致问题。第二,80% 换 [MASK] 让模型学上下文预测;10% 不变保留原始语义;10% 随机替换引入噪声增强鲁棒性。第三,这个 80/10/10 比例是经验最优值,来自 BERT 论文的消融实验,平衡了任务难度与泛化能力。总结一句:这个策略本质上是‘分布对齐 + 噪声注入’的工程取舍。”
4️⃣ 高频追问 & 应对
追问 1:如果我把 15% 改成 30%,会有什么影响?
增加选中率会提高 MLM 任务难度,因为每个句子有更多 token 需要预测。但代价是:① 模型会过度关注 [MASK] 标记,微调时对无 [MASK] 的句子表征能力下降(预训练-微调不一致加剧);② 训练速度变慢,因为每个 batch 需要计算更多预测损失。实际经验:在 RoBERTa 论文中,他们尝试过 15% 和 20%,发现 15% 在 GLUE 上最优。如果数据量极大(如 1T tokens),可以尝试 20%,但需要更长的训练步数。
追问 2:为什么不用全 [MASK](100% 替换)?这样不是更简单吗?
全 [MASK] 会导致预训练和微调阶段输入分布完全不一致。微调时句子中没有任何 [MASK],模型从未见过“正常”的 token 序列,会失去对原始 token 的语义理解。BERT 论文的消融实验显示,全 [MASK] 在 NER 任务上性能下降约 3-5 个点。10% 不变的设计就是防止这个“灾难性遗忘”。
追问 3:随机替换的 10% 是否可以用其他噪声(如拼写错误)替代?
可以,但需要权衡。随机替换是“全局噪声”,覆盖所有词汇,能增强模型对任意错误输入的鲁棒性。拼写错误(如“go”->“g0”)更接近真实场景,但噪声分布有偏(只影响常见词),模型可能学不到对罕见词的鲁棒性。实际落地中,如果做拼写纠错任务,可以混合使用:70% 随机替换 + 30% 拼写错误。但 BERT 论文选择随机替换是因为它简单且通用,不需要额外数据。
5️⃣ 避坑 · 常见错误答法
- ❌ 回答“80% 换 [MASK] 是为了让模型预测,10% 不变是为了防止过拟合,10% 随机替换是为了增加难度” → ✅ 正确切入:必须点出“预训练-微调不一致”这个核心动机,并解释每个比例的具体作用(如 10% 不变是为了保留原始语义,不是防过拟合)。
- ❌ 回答“这个比例是拍脑袋定的,没有为什么” → ✅ 正确切入:引用 BERT 论文的消融实验,说明 80/10/10 是经验最优值,并给出具体 trade-off(如全 [MASK] 导致微调性能下降 1-2 个点)。
- ❌ 回答“15% 的选中率是为了让每个句子有足够多的 [MASK]” → ✅ 正确切入:15% 是平衡点,确保每个句子约 3-4 个 token 被预测,又不让模型只关注 [MASK] 而忽略其他 token。
6️⃣ 简历呼应
- 如果你有预训练模型项目:从“我在训练小型 BERT 时调整了 MLM 比例,发现 80/10/10 在特定领域(如医疗文本)上不是最优,改为 70/15/15 后 F1 提升 0.5%”切入,展示实战调优能力。
- 如果你只做过传统 NLP:用“类比”迁移:MLM 的噪声注入类似于数据增强(如回译),80/10/10 是平衡任务难度和泛化能力的经典案例,可以联系到你在文本分类中使用的 dropout 策略。
- 如果你是校招无项目:聚焦论文复现:在 Colab 上用 Hugging Face 的 BertForMaskedLM 修改 masking 策略,对比不同比例在 SST-2 上的 loss 曲线,展示对预训练目标的理解。
- BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (Devlin et al., 2019)
- RoBERTa: A Robustly Optimized BERT Pretraining Approach (Liu et al., 2019) - 探讨 MLM 比例和动态 masking
- XLNet: Generalized Autoregressive Pretraining for Language Understanding (Yang et al., 2019) - 对比 MLM 与 PLM 的差异
- Hugging Face 官方教程: “How to train a masked language model from scratch” - 实战代码
- 《The Annotated Transformer》by Harvard NLP - 理解 Transformer 架构基础