微调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(自回归语言建模)的配置下,会执行以下操作:
- 将
input_ids复制作为labels - 把
labels中对应padding的位置设置为-100(损失计算时会忽略这些位置) - 训练时,Trainer会将这个
labels参数传递给模型的forward方法
内容的提问来源于stack exchange,提问作者elenata24
相关产品推荐
相关产品推荐

