共计 1905 个字符,预计需要花费 5 分钟才能阅读完成。
背景:MLM 的核心价值
在 BERT 问世前,NLP 模型主要采用单向语言模型(如 GPT)或浅层双向表征。MLM 的创新在于通过随机掩盖输入文本中的部分词汇(通常为 15%),迫使模型基于上下文预测被掩盖的内容。这种设计带来两大优势:

- 真正的双向上下文理解:不同于传统语言模型只能从左到右或从右到左预测,MLM 允许模型同时利用被掩盖词前后的上下文信息
- 更丰富的表征学习:模型必须学习词汇间的深层语义关系,而不仅仅是表面共现模式
15% 掩码策略的技术实现
核心三分策略
BERT 对选中的 15% 词汇采用以下处理方式(假设原始句子为 ”The cat sat on the mat”):
- 80% 概率替换为[MASK]:
- 原始:The [MASK] sat on the mat
- 目标:预测 ”cat”
- 10% 概率随机替换为其他词:
- 原始:The dog sat on the mat
- 目标:识别 ”dog” 是错误的并预测 ”cat”
- 10% 概率保持不变:
- 原始:The cat sat on the mat
- 目标:强化对实际词汇分布的建模
数学原理
损失函数采用交叉熵损失,公式为:
$$
\mathcal{L}{MLM} = -\sum_i)
$$} \log P(w_i | \mathbf{h
其中 $M$ 是被掩盖的 token 集合,$\mathbf{h}_i$ 是第 i 个 token 的隐藏层输出。
代码实现(PyTorch)
import torch
import torch.nn as nn
import random
class MLMProcessor:
def __init__(self, vocab_size, mask_token_id, mask_prob=0.15):
self.vocab_size = vocab_size
self.mask_token_id = mask_token_id
self.mask_prob = mask_prob
def process_batch(self, input_ids):
"""
处理输入 batch,返回掩码后的输入和对应的标签
参数:
input_ids: [batch_size, seq_len]
返回:
masked_input: 掩码后的输入
mlm_labels: 被掩盖位置的标签(未被掩盖位置为 -100)"""
labels = input_ids.clone()
# 创建概率矩阵(0.85 概率不被选中)prob_matrix = torch.full(labels.shape, 1 - self.mask_prob)
# 确定被掩盖的 token 位置
masked_indices = torch.bernoulli(prob_matrix).bool()
labels[~masked_indices] = -100 # 忽略未被掩盖的位置
# 对被选中的 15% 进行三种处理
replace_prob = torch.rand(labels.shape)
# 80% 替换为[MASK]
mask_token_mask = (replace_prob < 0.8) & ~masked_indices
input_ids[mask_token_mask] = self.mask_token_id
# 10% 随机替换为其他词
random_token_mask = (replace_prob >= 0.9) & ~masked_indices
random_tokens = torch.randint(0, self.vocab_size, labels.shape)
input_ids[random_token_mask] = random_tokens[random_token_mask]
# 剩余 10% 保持不变
return input_ids, labels
优化建议
领域适配调整
- 专业领域文本(如医学、法律):
- 降低掩码比例(如 10%),因专业术语密度高
- 增加保持原词比例(15%-20%),保护关键术语
- 口语化文本:
- 可适当提高掩码比例(18%-20%)
- 增加随机替换比例(15%),增强鲁棒性
避坑指南
- 常见错误 1 :忘记设置 ignore_index=-100
- 后果:模型会尝试预测所有 token 而不仅是掩码位置
- 修正:确保 loss 计算时指定 ignore_index 参数
- 常见错误 2 :随机替换时未排除原词
- 后果:降低了学习难度
- 修正:确保随机替换的词不等于原词
思考题:中文 MLM 优化方向
- 如何处理中文分词与字符级掩码的平衡?
- 是否需要对成语、专有名词采用不同的掩码策略?
- 如何利用汉字偏旁部首信息增强掩码预测效果?
总结
BERT 的 MLM 策略通过精心设计的 15% 掩码比例和三分处理机制,在语言模型预训练中实现了突破。实际应用中需要根据具体任务特点调整参数,并注意实现细节以避免常见陷阱。对于中文等特殊语言,可能需要进一步定制化掩码策略以获得最佳效果。
正文完
发表至: 未分类
近两天内
