LMMS-EVAL项目任务配置完全指南
概述
LMMS-EVAL是一个灵活可扩展的多模态语言模型评估框架,它采用YAML配置文件来定义各类评估任务。这种设计使得研究人员能够精确复现他人的评估设置,确保实验结果的可靠性和可比性。
核心概念
任务配置结构
每个评估任务都围绕TaskConfig
对象构建,主要包含以下几个关键部分:
- 任务基本信息:包括任务名称、分组和别名
- 数据集配置:定义数据来源和处理方式
- 提示模板:控制模型输入格式
- 运行时参数:设置评估过程的具体参数
- 评分机制:定义评估指标和计算方法
详细配置解析
基础配置参数
-
任务标识
task
: 必填,任务唯一标识名group
: 可选,任务分组(未来将被弃用)tag
: 推荐使用,任务标签分类task_alias
: 结果表中显示的别名
-
数据集配置
dataset_path
: 数据集路径(必填)dataset_name
: 数据集子集/配置名dataset_kwargs
: 数据集加载额外参数- 各种split定义(test/train/validation/fewshot)
-
文档处理函数
process_docs
: 预处理整个数据集doc_to_visual
: 生成视觉输入doc_to_text
: 生成文本输入doc_to_target
: 生成目标输出doc_to_choice
: 多选任务选项生成
运行时配置
-
few-shot设置
num_fewshot
: few-shot示例数量(默认为0)- 注意:当前few-shot功能尚未充分测试
-
批处理设置
batch_size
: 批处理大小(默认为1)- 重要提示:某些模型(Qwen等)不支持批处理>1,部分模型(LLaVA等)在不同批处理大小时会产生不同分数,建议最终测试时设为1
评分机制
-
输出类型
output_type
: 支持三种类型generate_until
: 生成式任务loglikelihood
: 对数似然计算multiple_choice
: 多选任务
-
生成参数
generation_kwargs
: 生成参数配置max_new_tokens
: 最大新token数temperature
: 温度参数top_p
: 核心采样参数num_beams
: beam search数量do_sample
: 是否采样
-
评估指标
metric_list
: 评估指标列表- 每个指标可配置:
metric
: 指标名称aggregation
: 聚合方法higher_is_better
: 指标方向
高级功能
嵌入式Python代码
通过!function
操作符可以在YAML中直接引用Python函数,支持以下参数:
doc_to_text
doc_to_target
doc_to_choice
- 指标中的
aggregation
示例:
doc_to_text: !function utils.mme_doc_to_text
配置继承
可以使用include
继承其他YAML配置,只需指定基础模板文件名即可实现配置复用。
多轮生成任务
通过设置output_type: generate_until_multi_round
支持多轮对话评估,需要特别注意:
doc_to_text
函数需要处理轮次信息- 需要返回是否终止的标志
- 需要维护历史对话信息
内置评估指标
常用指标
-
准确率类
acc
: 标准准确率acc_norm
: 长度归一化准确率acc_all
: 全对准确率
-
文本相似度
anls
: 归一化Levenshtein相似度exact_match
: 精确匹配bleu
: BLEU分数chrf
: CHRF分数
-
概率评估
perplexity
: 困惑度bits_per_byte
: 每字节比特数brier_score
: Brier分数
-
分类评估
f1
: F1分数matthews_corrcoef
: Matthews相关系数
聚合方法
mean
: 平均值median
: 中位数weighted_perplexity
: 加权困惑度
最佳实践示例
生成式任务(MME示例)
dataset_path: lmms-lab/MME
task: mme
output_type: generate_until
doc_to_visual: !function utils.mme_doc_to_visual
doc_to_text: !function utils.mme_doc_to_text
generation_kwargs:
max_new_tokens: 16
temperature: 0
metric_list:
- metric: mme_perception_score
aggregation: !function utils.mme_aggregate_results
higher_is_better: true
多选任务(SEED-Bench示例)
dataset_path: lmms-lab/SEED-Bench
task: seedbench_ppl
output_type: multiple_choice
doc_to_choice: !function utils.seed_doc_to_choice
metric_list:
- metric: acc
多轮生成任务(MMSearch示例)
task: mmsearch_end2end
output_type: generate_until_multi_round
doc_to_text: !function utils.mmsearch_end2end_doc_to_text
generation_kwargs:
max_new_tokens: 512
until: ["ASSISTANT:"]
metric_list:
- metric: end2end_f1_score
aggregation: !function utils.mmsearch_aggregate_results_f1_score
开发建议
-
任务设计
- 优先参考现有任务实现
- 保持配置简洁明了
- 合理使用Python函数封装复杂逻辑
-
评估流程
process_results
: 用于并行处理模型输出aggregate_results
: 用于主进程计算最终分数
-
模型适配
- 使用
lmms_eval_specific_kwargs
处理模型特定提示 - 默认配置应适配LLaVA风格
- 使用
-
外部评估
- 可在
process_results
中集成GPT-4等外部评估器 - 复杂评分逻辑应放在
aggregate_results
中
- 可在
通过遵循这些指南,您可以高效地为LMMS-EVAL框架开发新的评估任务,确保评估过程的标准化和可复现性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考