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

基于JSON数据集微调BERT做NER时遇AttributeError错误求助

问题解决:AttributeError: 'TokenClassifierOutput' object has no attribute 'detach'

问题原因

Hugging Face的BERT模型(尤其是AutoModelForTokenClassification)返回的TokenClassifierOutput是一个数据类对象,它包含logits、loss等属性,你不能直接对整个对象调用detach()方法,必须先提取其中的logits张量再进行后续操作。

修正步骤

  1. 提取TokenClassifierOutput中的logits属性再执行detach():
    把原来的
logits = token_classifier_output2.detach().cpu().numpy()

修改为

logits = token_classifier_output2.logits.detach().cpu().numpy()
  1. 修复未定义的tmp_eval_loss变量:
    代码中eval_loss += tmp_eval_loss.mean().item()里的tmp_eval_loss未定义,需要替换为带labels参数的输出对象的loss属性:
eval_loss += token_classifier_output1.loss.mean().item()

完整修正后的代码片段

with torch.no_grad():
     token_classifier_output1 = model(b_input_ids,
                        token_type_ids=None,
                        attention_mask=b_input_mask,
                        labels=b_labels)
     token_classifier_output2 = model(b_input_ids, token_type_ids=None,
                   attention_mask=b_input_mask)
logits = token_classifier_output2.logits.detach().cpu().numpy()
label_ids = b_labels.to('cpu').numpy()
predictions.extend([list(p) for p in np.argmax(logits, axis=2)])
true_labels.append(label_ids)

tmp_eval_accuracy = flat_accuracy(logits, label_ids)

eval_loss += token_classifier_output1.loss.mean().item()
eval_accuracy += tmp_eval_accuracy

nb_eval_examples += b_input_ids.size(0)
nb_eval_steps += 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 15:25:21