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

微调TransformerXL进行语言建模时遇forward()参数'labels'错误求助

解决TransformerXL微调语言建模时forward() got an unexpected keyword argument 'labels'错误

错误原因

你加载的TransfoXLModel是TransformerXL的基础编码器模型,它仅负责输出隐藏层特征,没有内置语言建模的预测头,因此其forward方法不接受labels参数。而你使用的DataCollatorForLanguageModeling在自回归语言建模模式(mlm=False)下,会自动生成与input_ids对应的labels(对padding位置标记为-100以跳过损失计算),并在训练时传递给模型,导致参数不匹配。

修复步骤

  • 替换为带语言建模头的模型类
    使用TransfoXLLMHeadModel替代TransfoXLModel,这个类内置了自回归语言建模的预测头,支持labels参数并自动计算损失:

    from transformers import TransfoXLTokenizer, TransfoXLLMHeadModel
    
    tokenizer = TransfoXLTokenizer.from_pretrained("transfo-xl-wt103")
    model = TransfoXLLMHeadModel.from_pretrained("transfo-xl-wt103")
    
  • 补充编码时的必要字段
    编码时返回attention_mask,确保模型能正确识别有效输入:

    encoded_dataset = dataset.map(
        lambda t: tokenizer(t['text'], truncation=True, padding='max_length', return_attention_mask=True),
        batched=True,
        load_from_cache_file=False
    )
    
  • 设置数据集的PyTorch格式
    指定数据集输出PyTorch张量格式,并明确输入字段:

    encoded_dataset.set_format(
        type="torch",
        columns=["input_ids", "attention_mask"]
    )
    

关于labels的来源说明

DataCollatorForLanguageModeling在mlm=False(自回归语言建模)的配置下,会执行以下操作:

  1. 将input_ids复制作为labels
  2. 把labels中对应padding的位置设置为-100(损失计算时会忽略这些位置)
  3. 训练时,Trainer会将这个labels参数传递给模型的forward方法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:57:38