创建评估套件
评估模型在各种不同任务上的表现以了解其下游性能可能很有用。在几种类型的任务上评估模型可以揭示某些轴线上性能的差距。例如,在训练语言模型时,通常需要测量域内语料库上的困惑度,但也需要同时评估测试一般语言能力(如自然语言推理或问答)的任务,或者旨在探究模型公平性和偏差维度的任务。
EvaluationSuite
提供了一种方法,可以将任意数量的(评估器、数据集、指标)元组作为子任务组合在一起,以在多个评估任务的集合上评估模型。有关当前支持的任务列表,请参阅评估器文档。
新的 EvaluationSuite
由一系列 SubTask
类组成,每个类定义一个评估任务。包含定义的 Python 文件可以上传到 Hugging Face Hub 上的空间,以便与社区共享或作为 Python 脚本本地保存/加载。
某些数据集在传递给 Evaluator
之前需要额外的预处理。您可以为每个 SubTask
设置一个 data_preprocessor
,该预处理器通过使用 datasets
库的 map
操作应用。Evaluator
的关键字参数可以通过 args_for_task
属性传递。
要创建一个新的 EvaluationSuite
,请创建一个带有 .py 文件的新空间(该文件与空间的名称匹配),将以下模板添加到 Python 文件中,并填写新任务的属性。
新 SubTask
的必填属性为 task_type
和 data
。
task_type
映射到评估器当前支持的任务。data
可以是实例化的 Hugging Face 数据集对象或数据集的名称。subset
和split
可用于定义应使用数据集的哪个名称和拆分进行评估。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 |