EleutherAI语言模型评估框架任务配置详解
前言
EleutherAI语言模型评估框架是一个高度可扩展的评估系统,它通过YAML配置文件定义各类评估任务。本文将深入解析该框架的任务配置机制,帮助开发者快速掌握如何创建自定义评估任务。
核心概念
YAML配置文件
该框架采用YAML作为任务定义的主要方式,这种设计具有以下优势:
- 可复现性:配置文件与代码库提交哈希结合,确保评估设置可精确复现
- 灵活性:支持从简单数据集替换到复杂评估逻辑的各种场景
- 可读性:结构化配置便于理解和修改
任务配置详解
基础配置参数
任务标识部分:
task
:任务唯一名称(必填)task_alias
:结果表中显示的别名tag
:任务标签,用于批量执行同类任务
数据集配置:
dataset_path
:Hugging Face数据集路径dataset_name
:数据集子任务名称dataset_kwargs
:数据集加载额外参数custom_dataset
:自定义数据集加载函数- 各类split配置:训练/验证/测试/少样本划分
提示工程配置
use_prompt
:使用预定义提示模板description
:任务描述模板doc_to_text
:样本转输入文本的模板/函数doc_to_target
:样本转目标输出的模板/函数doc_to_choice
:多选题选项处理- 各类分隔符配置:样本间/输入输出间分隔符
运行时配置
num_fewshot
:少样本示例数量batch_size
:批处理大小output_type
:输出类型(生成/似然/多选题等)generation_kwargs
:生成参数repeats
:重复运行次数(用于自洽性评估等)
评估指标配置
metric_list
:评估指标列表should_decontaminate
:是否去污染doc_to_decontamination_query
:去污染查询
高级功能解析
过滤器系统
过滤器是框架的核心组件,用于对模型输出进行后处理。其工作流程如下:
- 模型生成原始响应(存储在Instance.resps中)
- 过滤器接收List[List[响应]]结构
- 处理后返回List[处理后响应]
- 结果存入Instance.filtered_resps
典型过滤器类型:
- 正则提取(regex)
- 取首个结果(take_first)
- 多数投票(majority_vote)
- 取前K个(take_first_k)
多过滤器管道
框架支持为同一任务配置多个独立的过滤器管道,例如在GSM8K数学题评估中:
-
score-first管道:
- 正则提取答案数字
- 取第一个结果
-
maj@N管道:
- 正则提取所有N个答案
- 多数投票
- 取最终结果
-
maj@M管道:
- 取前M个结果
- 正则提取
- 多数投票
自定义过滤器开发
开发者可以通过装饰器注册自定义过滤器:
from lm_eval.api.filter import Filter
from lm_eval.api.registry import register_filter
@register_filter("new_filter")
class NewFilter(Filter):
# 实现过滤逻辑
评估指标系统
内置指标
框架提供丰富的内置评估指标:
基础指标:
- 准确率(acc/acc_norm)
- 困惑度(perplexity)
- F1分数
- BLEU等文本匹配指标
聚合方式:
- 平均值(mean)
- 中位数(median)
- 加权困惑度等
自定义指标开发
添加新指标需要三个步骤:
- 注册指标函数
@register_metric(metric="mcc", higher_is_better=True)
def mcc_fn(items): return items
- 注册聚合函数
@register_aggregation("matthews_corrcoef")
def matthews_corrcoef(items):
golds, preds = zip(*items)
return sklearn.metrics.matthews_corrcoef(golds, preds)
- 更新Task定义
最佳实践
YAML模板继承
可以通过include
指令复用基础配置:
include: base_template.yaml
# 覆盖特定配置
doc_to_text: "修改后的模板"
参考实现
- 多选题:SciQ任务
- 生成任务:GSM8K数学题
- 复杂过滤:GSM8K思维链自洽评估
结语
EleutherAI评估框架通过灵活的YAML配置和强大的过滤器系统,支持从简单到复杂的各类语言模型评估需求。掌握本文介绍的核心概念和高级功能后,开发者可以高效地创建自定义评估任务,推动语言模型研究的可复现性和可比性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考