Evaluate 文档

创建评估套件 (EvaluationSuite)

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

创建评估套件 (EvaluationSuite)

对模型在各种不同任务上进行评估,以了解其下游性能,这是很有用的。在多种类型的任务上评估模型,可以揭示在某些维度上的性能差距。例如,在训练语言模型时,测量其在特定领域语料库上的困惑度通常很有用,但同时在测试通用语言能力的任务(如自然语言蕴含或问答)上进行评估,或在旨在探测模型公平性和偏见维度的任务上进行评估也同样重要。

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

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

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

要创建一个新的 EvaluationSuite,请创建一个新的 Space,其中包含一个与 Space 名称匹配的 .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
                    }
                }
            )
        ]

一个 EvaluationSuite 可以通过名称从 Hugging Face Hub 加载,也可以通过提供路径在本地加载,并使用 run(model_or_pipeline) 方法运行。评估结果会连同其任务名称以及通过管道获取预测所需时间的信息一起返回。这些结果可以很容易地用 pandas.DataFrame 展示出来。

>>> from evaluate import EvaluationSuite
>>> suite = EvaluationSuite.load('mathemakitten/glue-evaluation-suite')
>>> results = suite.run("gpt2")
准确率 total_time_in_seconds samples_per_second latency_in_seconds task_name
0.5 0.740811 13.4987 0.0740811 glue/sst2
0.4 1.67552 5.9683 0.167552 glue/rte
< > 在 GitHub 上更新