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

微调RoBERTa文本情感分类器单样本预测解包错误问题求助

问题修复方案

错误根因

报错出现在RoBERTa模型前向传播阶段:你传入的input_ids(代码中对应sequence_padded)是形状为[序列长度]的一维张量,而HuggingFace Transformers库的预训练模型默认要求输入张量的第一维为批量大小,输入形状应为[批量大小, 序列长度],缺少批量维度导致模型无法正常解包输入形状。

修复步骤

你需要修改预测函数的三处核心逻辑:

  1. 给输入张量增加批量维度
    对编码得到的id和attention_mask张量调用unsqueeze(0),在第0维新增批量维度:
encoded = tokenizer.encode(text)
# 新增unsqueeze(0)增加batch维度
sequence_padded = torch.tensor(encoded.ids).unsqueeze(0)
attention_mask_padded = torch.tensor(encoded.attention_mask).unsqueeze(0)
# 如果模型加载在GPU上,需要补充设备移动逻辑,示例:
# sequence_padded = torch.tensor(encoded.ids).unsqueeze(0).to('cuda')
# attention_mask_padded = torch.tensor(encoded.attention_mask).unsqueeze(0).to('cuda')
  1. 修正输出处理逻辑
    你自定义的分类模型输出是对应类别的logits值,不是token id,不需要调用tokenizer解码,直接取概率最高的类别索引即可,同时预测阶段需要关闭梯度计算、切换模型为评估模式:
model.eval()
with torch.no_grad():
    output = model((sequence_padded, attention_mask_padded))
# 取概率最高的类别索引
pred_label_id = torch.argmax(output, dim=-1).item()
# 可根据自己的标签映射把id转成实际语义标签,示例:
# label_map = {0:"负面", 1:"正面"}
# label = label_map[pred_label_id]
return pred_label_id
  1. 可选性能优化
    不要在get_label函数内部重复实例化tokenizer,把tokenizer的初始化逻辑移到函数外部,避免每次预测都重复加载词表浪费性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:36:03