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

使用Hugging Face evaluate加载accuracy指标时触发TypeError求助

问题:加载Hugging Face evaluate库accuracy指标时触发TypeError: 'NoneType' object is not callable

我在基于Bert及其他编码器模型做文本分类任务,调用evaluate.load("accuracy")加载准确率指标时,出现以下错误:

─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ /home/ubuntu/Bill_PyCharm/absa-three/yasi_encoder/yasi_roberta.py:94 in <module>                 │
│                                                                                                  │
│    91 test_dataset = datasets.Dataset.from_dict(train_ds.get_dataset())                          │
│    92                                                                                            │
│    93 """## Train Loop"""                                                                        │
│ ❱  94 accuracy = evaluate.load("accuracy")                                                       │
│    95 # accuracy = evaluate.load("../evaluate/accuracy.py")                                      │
│    96 # recall = evaluate.load("recall")                                                         │
│    97 # precision = evaluate.load("precision")                                                   │
│                                                                                                  │
│ /home/ubuntu/anaconda3/lib/python3.9/site-packages/evaluate/loading.py:778 in load               │
│                                                                                                  │
│   775 │   │   path, module_type=module_type, revision=revision, download_config=download_confi   │
│   776 │   ).module_path                                                                          │
│   777 │   evaluation_cls = import_main_class(evaluation_module)                                  │
│ ❱ 778 │   evaluation_instance = evaluation_cls(                                                  │
│   779 │   │   config_name=config_name,                                                           │
│   780 │   │   process_id=process_id,                                                             │
│   781 │   │   num_process=num_process,                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
TypeError: 'NoneType' object is not callable

相关源代码

"""# Loading the Libraries & Models"""
import pandas as pd
import numpy as np
import evaluate
import torch
from datasets import Dataset
import datasets
from torch.utils.data import Dataset
from transformers import (AutoTokenizer,
                          AutoModelForSequenceClassification,
                          TrainingArguments,
                          Trainer)

device = 'cuda' if torch.cuda.is_available() else 'cpu'
print(f"Device: {device}")

check_point = "xlm-roberta-base"
# check_point = "hfl/chinese-roberta-wwm-ext"
output_dir = "./models/yasi/" + check_point
tokenizer = AutoTokenizer.from_pretrained(check_point)
model = AutoModelForSequenceClassification.from_pretrained(check_point, num_labels=2).to(device)

import pandas as pd
from datasets import Dataset
from sklearn.model_selection import train_test_split

import json

# 读取配置文件
config_file = '../HyperParameter/config.json'
with open(config_file, 'r') as f:
    config = json.load(f)
# 从配置中获取需要的值
batch_size = config['batch_size']
dataset = config['dataset']
epoch = config['epoch']

# 读取数据集
data = pd.read_csv(dataset, sep='\t')

# 随机划分数据集
train_data, remaining_data = train_test_split(data, test_size=0.2, random_state=42)
dev_data, test_data = train_test_split(remaining_data, test_size=0.5, random_state=42)

# 将划分后的数据集转换为Dataset对象
train_df = Dataset.from_pandas(train_data)
dev_df = Dataset.from_pandas(dev_data)
test_df = Dataset.from_pandas(test_data)


class YasiDataset(Dataset):
    def __init__(self, df, tokenizer: AutoTokenizer):
        super(YasiDataset).__init__()

        self.sentence = []
        self.labels = []

        # 读取每一行内容
        for row in df:
            content = row["sentence"]
            labels = row["label"]
            self.sentence.append(content)
            self.labels.append(labels)

        self.labels = torch.tensor(self.labels)
        self.tokenizer_output = tokenizer(self.sentence,
                                          padding=True,
                                          truncation=True,
                                          max_length=512,
                                          return_tensors='pt',
                                          return_token_type_ids=True,
                                          return_attention_mask=True,
                                          )
        self.tokenizer_output['labels'] = self.labels

    def __len__(self):
        return len(self.tokenizer_output['input_ids'])

    def get_dataset(self):
        return self.tokenizer_output


train_ds = YasiDataset(train_df, tokenizer)
dev_ds = YasiDataset(dev_df, tokenizer)
test_ds = YasiDataset(test_df, tokenizer)

train_dataset = datasets.Dataset.from_dict(train_ds.get_dataset())
dev_dataset = datasets.Dataset.from_dict(dev_ds.get_dataset())
test_dataset = datasets.Dataset.from_dict(test_ds.get_dataset())

"""## Train Loop"""
accuracy = evaluate.load("accuracy")

解决思路

  • 升级evaluate库到最新版本:该错误多由版本兼容性问题导致,执行命令:
    pip install --upgrade evaluate
    
  • 修复命名冲突:代码中同时导入了datasets.Dataset和torch.utils.data.Dataset,存在命名空间冲突,会干扰第三方库的内部逻辑。修改导入方式:
    from datasets import Dataset as HFDataset
    from torch.utils.data import Dataset
    
    后续所有使用Hugging Face Dataset的地方替换为HFDataset,避免混淆。
  • 直接指定指标完整标识符:尝试通过完整路径加载指标:
    accuracy = evaluate.load("evaluate-metric/accuracy")
    
  • 清理evaluate缓存:缓存损坏可能导致模块加载失败,执行以下代码后重新加载:
    import evaluate
    evaluate.clear_cache()
    accuracy = evaluate.load("accuracy")
    
  • 同步依赖库版本:确保transformers、datasets与evaluate版本兼容,执行命令统一升级:
    pip install --upgrade transformers datasets evaluate
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 08:37:06