Transformers DataCollatorForLanguageModeling 的 mlm 与 labels 构造方法
用 Hugging Face Transformers 训练语言模型时,DataCollatorForLanguageModeling 负责把不同长度的样本整理成批次,并按任务构造 labels。最容易出错的地方不是调用语法,而是把 mlm 选反:掩码语言模型需要只监督被选中的 token,因果语言模型则通常让标签复制输入,由模型内部完成错位预测。
官方文档:https://huggingface.co/docs/transformers/v4.57.1/en/main_classes/data_collator
mlm=True用于掩码语言建模,未被选中的位置通常标为-100。mlm=False时标签基本复制input_ids,padding 位置改为-100。- 动态 padding、
pad_token和special_tokens_mask必须与 tokenizer 配合检查。
mlm 开关决定 labels 的监督位置
mlm=True 的典型场景是 BERT 一类的掩码语言模型。collator 按 mlm_probability 选出候选 token,再按掩码替换比例生成输入;labels 只在这些被选位置保留原 token,其余位置使用 -100。PyTorch 的交叉熵会忽略 -100,所以 loss 只关注被遮住的词。
如果是 GPT 类的因果语言模型,应设置 mlm=False。此时 collator 不负责手工把标签左移,而是让标签与输入对齐;模型的 forward 通常在计算 loss 时完成 shift。手动再左移一次,反而会造成目标错位。

用 tokenizer 输出创建训练批次
下面示例使用掩码语言建模配置。输入样本应是 tokenizer 产生的字典列表,而不是已经堆叠好的单个张量;这样 collator 才能按当前批次最长长度动态补齐。
from transformers import AutoTokenizer, DataCollatorForLanguageModeling
# 选择带 pad_token 的 tokenizer,避免批处理时无法补齐序列
tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese")
texts = ["数据整理器负责组成训练批次", "mlm 参数决定是否随机遮盖词元"]
# 返回特殊 token 标记,方便 collator 避开 [CLS]、[SEP] 等位置
features = [
tokenizer(text, truncation=True, return_special_tokens_mask=True)
for text in texts
]
# BERT 类任务使用掩码语言建模;0.15 是官方接口的默认掩码概率
collator = DataCollatorForLanguageModeling(
tokenizer=tokenizer,
mlm=True,
mlm_probability=0.15,
return_tensors="pt",
)
# collator 会动态 padding,并返回 input_ids、attention_mask 与 labels
batch = collator(features)
print(batch["input_ids"].shape, batch["labels"].shape)
改做因果语言模型时,只需把 mlm=False,并确认 tokenizer 已配置可用的 padding token。不要同时保留 mlm_probability 作为“强制遮盖”开关;它只有在 mlm=True 时才参与掩码采样。
padding 与 special_tokens_mask 要一起检查
collator 会按批次最长样本动态补齐。对掩码语言建模来说,special_tokens_mask 能让特殊 token 不被随机替换;tokenizer 生成它时要显式传入 return_special_tokens_mask=True。如果输入是手工拼出的字典,缺少这项并不一定立即报错,却可能让掩码范围与预期不同。
| 配置 | labels 主要内容 | 适用任务 |
|---|---|---|
mlm=True | 被选中的 token 保留原值,其余多为 -100 | BERT、掩码语言模型 |
mlm=False | 复制输入 token,padding 位置为 -100 | GPT、因果语言模型 |
pad_to_multiple_of 可以把长度补到指定倍数,适合需要 Tensor Core 对齐的硬件,但它改变的是批次形状,不改变监督目标。排查 loss 异常时,先打印 labels.eq(-100).sum(),再确认 tokenizer 的 pad_token_id 是否真实存在。

训练前的四项检查清单
- 先根据模型目标确认
mlm,不要只照搬别人的 Trainer 配置。 - 确认每个样本包含
input_ids,并让 tokenizer 负责生成 attention mask。 - 检查 padding 位是否进入
-100,避免无意义 token 参与 loss。 - 抽一个批次同时查看形状、有效标签数量和特殊 token 位置,再开始长时间训练。
常见问题
mlm=False 时为什么 labels 看起来和 input_ids 一样?
这是预期行为。因果模型通常由模型内部完成标签错位,collator 只负责对齐输入并屏蔽 padding。
mlm_probability 调大是不是一定更好?
不是。它改变每批被监督的 token 数量,过大可能让输入上下文被破坏,应结合语料和模型任务观察 loss。
special_tokens_mask 缺失会导致什么?
collator 可能无法准确避开特殊 token。使用 tokenizer 编码样本时显式返回该字段,最容易保持行为稳定。
OpenAI API 怎样配置提示词缓存降低重复输入成本
- 上一篇
- OpenAI API 怎样配置提示词缓存降低重复输入成本
- 下一篇
- OpenAI Realtime API 怎样处理断线后的会话恢复
-
- 科技周边 · 人工智能 | 59分钟前 | token · ai ·
- AI 应用怎样记录 token 用量和请求追踪信息
- 323浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 | python · 工具调用 · LangChain Command AIMessage ToolMessage tool_call_id 消息历史
- LangChain 怎样把工具调用结果映射到消息历史
- 250浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 |
- Safetensors 怎么只读取指定权重并查看文件元数据
- 256浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 |
- ONNX Runtime 怎样为不同硬件选择执行提供者
- 371浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 | 性能排查 · PyTorch 性能排查 torch.compile TorchDynamo 图断裂 fullgraph
- PyTorch torch.compile 怎样定位图断裂原因
- 475浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 | 内存优化 · PyTorch DataLoader IterableDataset num_workers prefetch_factor pin_memory persistent_workers
- PyTorch DataLoader 怎样控制多进程预取内存
- 319浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 | 人工智能 · websocket WebRTC 断线重连 会话恢复 OpenAI Realtime API conversation.item.create
- OpenAI Realtime API 怎样处理断线后的会话恢复
- 356浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 |
- OpenAI API 怎样配置提示词缓存降低重复输入成本
- 317浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 |
- PyTorch torch.utils.checkpoint 怎样用重计算换显存
- 370浏览 收藏
-
- 科技周边 · 人工智能 | 1小时前 | 异步任务 · 人工智能 · openai · 批处理文件 OpenAI Batch API output_file_id error_file_id output_expires_after
- OpenAI Batch API 怎样设置 output_expires_after 管理输出文件
- 460浏览 收藏
-
- 科技周边 · 人工智能 | 1天前 |
- PyTorch autograd anomaly detection 怎样定位 NaN 梯度
- 248浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 842次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 842次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 921次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 897次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 725次使用
-
- 量化模型本地推理的显存估算方法
- 2026-10-17 501浏览
-
- 本地大模型反复输出同一句话怎么调整生成参数
- 2026-09-06 501浏览
-
- Python 调用大模型时如何用结构化输出校验 JSON:从解析失败到可重试
- 2026-08-29 501浏览
-
- AI写作工具免费版安装教程(含豆包Clawdbot)
- 2026-05-30 501浏览
-
- WPS AI能自动生成PPT吗?输入主题一键制作演示文稿
- 2026-05-27 501浏览

