评估文档

创建评估套件

Hugging Face's logo
加入 Hugging Face 社区

并获得增强型文档体验

开始使用

创建评估套件

评估模型在各种不同任务上的表现以了解其下游性能可能很有用。在几种类型的任务上评估模型可以揭示某些轴线上性能的差距。例如,在训练语言模型时,通常需要测量域内语料库上的困惑度,但也需要同时评估测试一般语言能力(如自然语言推理或问答)的任务,或者旨在探究模型公平性和偏差维度的任务。

EvaluationSuite 提供了一种方法,可以将任意数量的(评估器、数据集、指标)元组作为子任务组合在一起,以在多个评估任务的集合上评估模型。有关当前支持的任务列表,请参阅评估器文档

新的 EvaluationSuite 由一系列 SubTask 类组成,每个类定义一个评估任务。包含定义的 Python 文件可以上传到 Hugging Face Hub 上的空间,以便与社区共享或作为 Python 脚本本地保存/加载。

某些数据集在传递给 Evaluator 之前需要额外的预处理。您可以为每个 SubTask 设置一个 data_preprocessor,该预处理器通过使用 datasets 库的 map 操作应用。Evaluator 的关键字参数可以通过 args_for_task 属性传递。

要创建一个新的 EvaluationSuite,请创建一个带有 .py 文件的新空间(该文件与空间的名称匹配),将以下模板添加到 Python 文件中,并填写新任务的属性。

SubTask 的必填属性为 task_typedata

  1. task_type 映射到评估器当前支持的任务。
  2. data 可以是实例化的 Hugging Face 数据集对象或数据集的名称。
  3. subsetsplit 可用于定义应使用数据集的哪个名称和拆分进行评估。
  4. args_for_task 应为一个字典,其中包含要传递给评估器的 kwargs。
import evaluate
from evaluate.evaluation_suite import SubTask

class Suite(evaluate.EvaluationSuite):

    def __init__(self, name):
        super().__init__(name)
        self.preprocessor = lambda x: {"text": x["text"].lower()}
        self.suite = [
            SubTask(
                task_type="text-classification",
                data="glue",
                subset="sst2",
                split="validation[:10]",
                args_for_task={
                    "metric": "accuracy",
                    "input_column": "sentence",
                    "label_column": "label",
                    "label_mapping": {
                        "LABEL_0": 0.0,
                        "LABEL_1": 1.0
                    }
                }
            ),
            SubTask(
                task_type="text-classification",
                data="glue",
                subset="rte",
                split="validation[:10]",
                args_for_task={
                    "metric": "accuracy",
                    "input_column": "sentence1",
                    "second_input_column": "sentence2",
                    "label_column": "label",
                    "label_mapping": {
                        "LABEL_0": 0,
                        "LABEL_1": 1
                    }
                }
            )
        ]

可以通过名称从 Hugging Face Hub 加载 EvaluationSuite,或者通过提供路径本地加载,并使用 run(model_or_pipeline) 方法运行。评估结果将与它们的 task 名称以及通过管道获取预测所需的时间信息一起返回。这些可以使用 pandas.DataFrame 轻松显示。

>>> from evaluate import EvaluationSuite
>>> suite = EvaluationSuite.load('mathemakitten/glue-evaluation-suite')
>>> results = suite.run("gpt2")
准确率 总时间(秒) 每秒样本数 延迟(秒) 任务名称
0.5 0.740811 13.4987 0.0740811 glue/sst2
0.4 1.67552 5.9683 0.167552 glue/rte