You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

微调GPT2时Tokenizer可正常padding,Data Collator报错求助

问题原因及解决方案

为什么DataCollatorWithPadding无法解决问题?

DataCollatorWithPadding是为分类、序列标注等非自回归语言任务设计的,它仅负责对input_ids、attention_mask这类输入字段做padding,但不会同步处理CLM任务必需的labels字段。当你用它时,只有输入序列被padding到1024长度,而labels还是原样本的长度,导致batch内张量形状不匹配,触发ValueError。

正确的解决方案:使用DataCollatorForLanguageModeling

CLM(因果语言建模)任务需要专门的Data Collator来处理,DataCollatorForLanguageModeling是HuggingFace专为语言建模任务设计的工具,它会自动同步处理input_ids、attention_mask和labels的padding,保证三者长度一致。

具体修改步骤

  1. 导入正确的Data Collator
    在run_clm.py中导入对应工具:
from transformers import DataCollatorForLanguageModeling
  1. 替换Data Collator的定义
    把原来的DataCollatorWithPadding替换成以下代码:
data_collator = DataCollatorForLanguageModeling(
    tokenizer=tokenizer,
    mlm=False,  # CLM是自回归任务,不需要掩码语言建模
    padding="max_length",
    max_length=1024,
)
  1. 调整预处理函数
    确保预处理函数只做tokenization和截断,不添加padding:
def preprocess_function(examples):
    return tokenizer(examples["text"], truncation=True, max_length=1024)

额外注意点

  • GPT2是自回归模型,tokenizer默认的padding_side="right"是正确的,padding在序列右侧不会影响模型的自回归生成逻辑。
  • 如果你之前修改了脚本的文本拼接逻辑,现在用这个Data Collator后,会自动保证每个样本独立且padding到指定长度,无需额外处理labels的复制(DataCollatorForLanguageModeling会自动把input_ids赋值给labels,符合CLM任务的要求)。

内容的提问来源于stack exchange,提问作者corazza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 17:25:25