当前位置:首页 > 文章列表 > 科技周边 > 人工智能 > Transformers DataCollatorForLanguageModeling 的 mlm 与 labels 构造方法

Transformers DataCollatorForLanguageModeling 的 mlm 与 labels 构造方法

来源:17golang原创 2026-11-02 09:54:12 0浏览 收藏

用 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。手动再左移一次,反而会造成目标错位。

Transformers DataCollatorForLanguageModeling 的 mlm 开关与 input_ids、labels 监督位置关系说明图
图1:mlm 与 labels 监督位置的静态说明图,不是运行截图。

用 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 保留原值,其余多为 -100BERT、掩码语言模型
mlm=False复制输入 token,padding 位置为 -100GPT、因果语言模型

pad_to_multiple_of 可以把长度补到指定倍数,适合需要 Tensor Core 对齐的硬件,但它改变的是批次形状,不改变监督目标。排查 loss 异常时,先打印 labels.eq(-100).sum(),再确认 tokenizer 的 pad_token_id 是否真实存在。

Transformers collator 动态 padding、特殊 token 与 labels=-100 边界关系说明图
图2:动态 padding 和特殊 token 边界的结构说明图,不是运行截图。

训练前的四项检查清单

  1. 先根据模型目标确认 mlm,不要只照搬别人的 Trainer 配置。
  2. 确认每个样本包含 input_ids,并让 tokenizer 负责生成 attention mask。
  3. 检查 padding 位是否进入 -100,避免无意义 token 参与 loss。
  4. 抽一个批次同时查看形状、有效标签数量和特殊 token 位置,再开始长时间训练。

常见问题

mlm=False 时为什么 labels 看起来和 input_ids 一样?

这是预期行为。因果模型通常由模型内部完成标签错位,collator 只负责对齐输入并屏蔽 padding。

mlm_probability 调大是不是一定更好?

不是。它改变每批被监督的 token 数量,过大可能让输入上下文被破坏,应结合语料和模型任务观察 loss。

special_tokens_mask 缺失会导致什么?

collator 可能无法准确避开特殊 token。使用 tokenizer 编码样本时显式返回该字段,最容易保持行为稳定。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
OpenAI API 怎样配置提示词缓存降低重复输入成本OpenAI API 怎样配置提示词缓存降低重复输入成本
上一篇
OpenAI API 怎样配置提示词缓存降低重复输入成本
OpenAI Realtime API 怎样处理断线后的会话恢复
下一篇
OpenAI Realtime API 怎样处理断线后的会话恢复
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    842次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    842次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    921次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    897次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    725次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码