config.md
March 12, 2024 · View on GitHub
config文件概述
UltraEval选择具体任务(task)作为最小粒度进行评测,用户可以同时选择不同的任务评测。我们通过配置文件(config)来规定每个任务是如何进行评测的,例如fewshot、metric、超参数等等。这些参数配置是通过指定路径下的配置文件来实现,配置文件以json格式组织,路径格式为 datasets/dataset_name/config/{task_name}_{gen/ppl}.json 。这里,每个配置文件都针对一个特定任务定义了完整的参数配置。这种方式确保了配置文件与模型之间的完全解耦。
以tydiqa任务的配置文件为例,我们详细介绍每个属性(以下涉及到路径的value均在UltraEval目录下):
{
"task_name": "tydiqa",
"path": "datasets/tydiqa/data/tydiqa.jsonl",
"description": "",
"transform": "datasets/tydiqa/transform_gen_v0.py",
"fewshot": 0,
"generate": {
"method": "generate",
"params": ""
},
"postprocess": "exact_match_post",
"metric": {
"f1_score": {
"evaluation": {
"type": "f1_score"
}
},
"accuracy": {
"evaluation": {
"type": "exact_match"
}
}
}
}
- task_name: 任务名称。此名称需与对应路径
datasets/dataset_name/config/{task_name}_{gen/ppl}.json中的task_name一致。这里的task_name指的是dataset_name下的特定任务的名称;如果dataset_name下仅有一个任务,则task_name应与dataset_name设置为相同。 - path: 数据路径,与任务严格对应。评测任务的数据是通过make_dataset.py生成的UltraEval格式数据,详情参见【make_dataset介绍】。
- description: 任务所需的前置字符串类型提示(prompt),可为空。例如,对于
gaokaobench数据集中的Biology-MCQs任务,其官方提供了以下描述:
请你做一道生物选择题\n请你一步一步思考并将思考过程写在【解析】和<eoe>之间。你将从A,B,C,D中选出正确的答案,并写在【答案】和<eoa>之间。\n例如:【答案】: A <eoa>\n完整的题目回答的格式如下:\n【解析】 ... <eoe>\n【答案】 ... <eoa>\n请你严格按照上述格式作答。\n题目如下:
- transform: 数据格式转换文件路径。从
path读取任务数据后,通过此路径下的transform.py文件将每一条数据转换为输入到模型的prompt格式。详情参见【transform介绍】。 - fewshot: Few-shot数量,0表示zero-shot,5表示five-shot。表示将多个经过transform处理后的数据(问题+答案)拼接后,放在最终问题前。
- generate: 模型评测的方式。
method字段可选generate和loglikelihood,即gen和ppl两种方式。gen方式要求模型输出生成的内容,而ppl方式将prompt和每一个选项进行拼接,分别计算模型对选项的负对数概率。params字段允许传入特定于任务的模型推理参数,如models/model_params/vllm_beamsearch.json。详情参见【model_params介绍】。
- postprocess: 生成内容的后处理方式。需要在
tasks/postprocess.py中注册并实现。详情参见【postprocess介绍】。 - metric: 计算指标。遵循以下字典格式,其中
user_designed_name可根据需要自定义。该字典包含两个主要字段:- 评估(evaluation):对每个instance的模型输出进行评估。模型输出的数量是由
generate字段中的params控制,具体为每个参数文件中的sampling_num字段,一般设置为 1,表示每个instance仅生成一条。但例如HumanEval任务计算pass@k,当k大于1时,sampling_num则随之改变。metric_name需要在metric/__init__.py中进行注册,并在相应的{metric_name}.py文件中实现具体的评估逻辑。具体细节可参考【metric介绍】。
- 聚合(aggregation):对每个instance的所有评估结果进行聚合,默认操作是取平均值。在某些特殊情况下(例如
humaneval,mbpp),可能会选择pass_k作为聚合方式。
- 评估(evaluation):对每个instance的模型输出进行评估。模型输出的数量是由
"user_designed_name": {
"evaluation": {
"type": "metric_name"
},
"aggregation": {
"type": "aggregation_name"
}
}