深入解析BERT模型MLM训练中的15% Token处理策略

1次阅读
没有评论

共计 1957 个字符,预计需要花费 5 分钟才能阅读完成。

image.webp

1. BERT 预训练背景与 MLM 基本原理

BERT(Bidirectional Encoder Representations from Transformers)是 2018 年由 Google 提出的革命性预训练语言模型。其核心创新在于双向 Transformer 架构和两个预训练任务:

深入解析 BERT 模型 MLM 训练中的 15% Token 处理策略

  • 掩码语言模型(MLM):随机遮盖输入文本的部分 token,让模型预测被遮盖的内容
  • 下一句预测(NSP):判断两个句子是否连续出现

MLM 之所以关键,是因为它迫使模型通过上下文理解单词的深层语义。传统的语言模型(如 GPT)只能从左到右预测,而 BERT 的 MLM 允许同时利用左右上下文信息。

2. 15% Token 处理策略详解

2.1 基本策略分配

对于被选中的 15% token,BERT 采用如下分配方式:

  1. 80% 概率替换为[MASK]
  2. 10% 概率替换为随机 token
  3. 10% 概率保持原 token 不变

数学表达为:

P(处理方式 | 被选中) = {[MASK]: 0.8,
    random: 0.1,
    original: 0.1
}

2.2 设计原理

这种看似复杂的策略实际解决了几个关键问题:

  • 防止模型过度依赖 [MASK]:如果总是遮盖,模型可能只在见到[MASK] 时才学习
  • 增强鲁棒性:随机替换模拟真实场景中的拼写错误或同义词替换
  • 保留部分原始信息:帮助模型建立 token 与上下文的真实关联

3. PyTorch 实现示例

import torch
import random

def mlm_mask_tokens(inputs, tokenizer, mlm_prob=0.15):
    """
    inputs: 输入 token id 张量 [batch_size, seq_len]
    tokenizer: 用于获取 vocab_size 和特殊 token
    mlm_prob: 默认 15% 的 mask 概率
    """
    labels = inputs.clone()
    prob_matrix = torch.full(labels.shape, mlm_prob)
    masked_indices = torch.bernoulli(prob_matrix).bool()

    # 80% 替换为[MASK]
    mask_token = tokenizer.mask_token_id
    indices_replaced = torch.bernoulli(torch.full(labels.shape, 0.8)).bool() & masked_indices
    inputs[indices_replaced] = mask_token

    # 10% 随机替换
    vocab_size = len(tokenizer.vocab)
    indices_random = torch.bernoulli(torch.full(labels.shape, 0.5)).bool() & masked_indices & ~indices_replaced
    random_words = torch.randint(vocab_size, labels.shape, dtype=torch.long)
    inputs[indices_random] = random_words[indices_random]

    # 剩下 10% 保持原样
    return inputs, labels

4. 策略性能影响分析

优势

  • 在下游任务微调时表现更稳定(因为模型见过各种 token 变化)
  • 相比纯 [MASK] 策略,在 GLUE 基准上提升约 2 - 3 个点
  • 对 OOV(未登录词)处理更鲁棒

训练效率

  • 增加约 15% 的计算开销(需要处理三种情况)
  • 可能需要多训练 1 - 2 个 epoch 达到相同效果

5. 实践建议

  1. 领域适应调整
  2. 医疗文本可降低随机替换比例(专业术语不宜随意替换)
  3. 社交媒体文本可提高随机比例(模拟网络用语变化)

  4. batch size 权衡

  5. 小 batch(<32)时建议保持原策略
  6. 大 batch 时可尝试调整比例(如 70-15-15)

  7. 学习率配合

  8. 改变 mask 策略后建议用学习率 warmup
  9. AdamW 的 epsilon 可设为 1e-6(默认 1e- 8 可能太小)

6. 与其他模型的对比

策略 BERT RoBERTa ALBERT
Mask 比例 15% 动态调整(最高 20%) 同 BERT
随机替换 10% 取消 同 BERT
保持原样 10% 取消 同 BERT

RoBERTa 的改进表明:
– 更大 batch 和更多数据时,简单 [MASK] 可能足够
– 但小数据场景仍需要 BERT 的保守策略

开放思考题

  1. 如果对中文采用不同的比例(如 90-5-5),会有什么影响?
  2. 如何设计实验验证 10% 随机替换的最优性?
  3. 在低资源语言中,这种策略是否需要调整?如何调整?

结语

BERT 的 MLM 策略展现了巧妙的工程平衡——既不能让模型走捷径,又不能让它学习噪声。理解这些设计细节,能帮助我们在实际项目中更灵活地调整预训练策略。当你在自己的语料上微调 BERT 时,不妨尝试记录不同 mask 策略的效果差异,这往往能带来意想不到的发现。

正文完
 0
评论(没有评论)