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

按HuggingFace教程微调RoBERTa遇ValueError问题求助

问题原因

你遇到的ValueError: You have to specify either input_ids or inputs_embeds错误确实是因为数据集未经过分词处理,RoBERTa模型需要input_ids、attention_mask等分词后的张量作为输入,而你的原始数据集仅包含文本和标签,缺少这些模型必需的输入特征。

解决步骤

直接对数据集应用tokenizer处理,生成模型所需的输入特征,具体修改如下:

  1. 定义分词函数
    这个函数会对数据集里的文本字段进行分词、截断和填充,生成模型要求的输入张量:

    def tokenize_function(examples):
        # 替换"text"为你数据集中实际的文本字段名(比如"sentence"、"content"等)
        return tokenizer(examples["text"], padding="max_length", truncation=True, max_length=512)
    
  2. 批量处理数据集
    用map方法对训练和验证集批量应用分词函数(批量处理效率更高):

    # 对训练集和验证集做分词处理
    tokenized_train_dataset = train_dataset.map(tokenize_function, batched=True)
    tokenized_validation_dataset = validation_dataset.map(tokenize_function, batched=True)
    
  3. 更新Trainer的数据集参数
    将Trainer中的原始数据集替换成分词后的数据集:

    trainer = Trainer(
        model=model,
        args=training_args,
        train_dataset=tokenized_train_dataset,
        eval_dataset=tokenized_validation_dataset,
        compute_metrics=compute_metrics,
    )
    

额外注意(多标签分类适配)

你的模型设置了problem_type="multi_label_classification",但当前compute_metrics函数用了np.argmax(单标签分类逻辑),这会导致指标计算错误。建议修改为多标签的预测逻辑:

import torch

def compute_metrics(eval_pred):
    logits, labels = eval_pred
    # 多标签分类需要用sigmoid把logits转为概率,再用阈值(比如0.5)判断是否预测该标签
    predictions = (torch.sigmoid(torch.tensor(logits)) > 0.5).int().numpy()
    return metric.compute(predictions=predictions, references=labels)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:50:20