ms-swift评测结果怎么分析?CSV报告解读一看就懂
在用ms-swift完成模型评测后,你是否也遇到过这样的困惑:终端里刷出一长串日志,最后生成一个summary_20250115_100243.csv文件,点开却满屏是英文字段、嵌套路径和数字——这到底哪一行代表模型的真实水平?accuracy后面那个0.682是好还是差?为什么同一个模型在gsm8k和mmlu上分数差了30个百分点?别急,这篇指南不讲原理、不堆参数,只聚焦一件事:拿到CSV评测报告后,三分钟看懂核心结论,五分钟定位关键问题,十分钟写出靠谱的评测小结。
我们不预设你熟悉OpenCompass或EvalScope架构,也不要求你翻源码查字段定义。整篇内容基于真实评测输出结构,用最直白的语言+具体字段截图式描述+可立即套用的判断口诀,帮你把那份冷冰冰的CSV变成有温度的决策依据。
1. 评测报告从哪来?先搞清生成逻辑
ms-swift本身不直接生成最终CSV,而是调用EvalScope作为评测后端,再由EvalScope统一汇总输出。因此,你看到的CSV本质是EvalScope的标准化摘要文件,路径通常形如:
eval_output/opencompass/YYYYMMDD_HHMMSS/summary/summary_YYYYMMDD_HHMMSS.csv这个文件不是原始日志,也不是逐样本记录,而是按评测集维度聚合后的最终得分快照。它不包含中间过程(比如某道题答对/答错),只保留每个评测子集的综合指标结果。
注意:如果你运行的是多数据集评测(如
--eval_dataset gsm8k mmlu bbh),CSV里会为每个数据集单独生成一行;如果只测一个数据集,则只有一行结果。
理解这一点很重要——这意味着你不需要逐行分析几千条样本,只需盯住几十行聚合结果,就能把握全局。
2. CSV核心字段逐个拆解:哪些必须看,哪些可跳过
打开CSV文件,第一眼看到的是表头(header)。下面这张表,列出了你在实际工作中真正需要关注的7个字段,其余字段(如config,model_hash,timestamp等)属于元信息,调试时参考即可,日常分析中可忽略。
| 字段名 | 含义说明 | 小白速记口诀 | 是否必看 |
|---|---|---|---|
dataset | 评测数据集名称,如gsm8k、mmlu、mmbench_dev_en | “这是考哪门课?” | 必看 |
subset | 数据集子集标识,常见值:default(主评测集)、en/zh(语言)、dev/test(开发/测试集) | “是期中卷还是期末卷?” | 必看(尤其对比时) |
metric | 核心评测指标,纯文本常用accuracy、pass@1;多模态常用score、acc | “老师打的总分是哪个数?” | 必看 |
value | 该指标的具体数值,范围通常是0~1或0~100(注意单位!) | “68.2分?还是0.682?” | 必看(重点!) |
num_fewshot | 少样本(few-shot)设置数量,0=zero-shot,1/2/3=对应shot数 | “开卷考几页小抄?” | 对比时必看,单次分析可略 |
mode | 评测模式,all(全量)、random(随机采样)、limit(限制条数) | “是全班统考,还是抽10人摸底?” | 查异常时看,正常分析略 |
error | 执行错误信息,非空表示该子集评测失败(如数据加载失败、格式错误) | “这科没考成,为啥?” | 出现异常时必看 |
举个真实例子(简化后):
dataset,subset,metric,value,num_fewshot,mode,error gsm8k,default,accuracy,0.682,0,limit, mmlu,default,accuracy,0.521,5,limit, mmbench_dev_en,default,score,0.493,0,limit,→ 这说明:
- 模型在数学推理(gsm8k)上零样本准确率68.2%;
- 在知识广度(mmlu)上用了5-shot,得分52.1%;
- 在多模态理解(mmbench)上得分为49.3(满分100);
- 三者均无报错,评测完整执行。
关键提醒:value字段没有固定单位!有些评测框架输出0~100,有些输出0~1。务必结合metric字段判断——如果metric是accuracy且数值在0.3~0.9之间,基本是小数格式;如果是score且数值在30~80之间,大概率是百分制。不确定时,打开同目录下的details/子文件夹,找对应数据集的JSONL结果文件,看其中score或accuracy字段的原始值。
3. 单模型分析:三步锁定能力短板
拿到一份CSV,不要急于下结论。按以下三步走,能快速识别模型真实瓶颈:
3.1 第一步:横向扫一眼,看“分布形状”
把value列所有数值提出来,画个简易脑内柱状图:
- 如果全部集中在0.6~0.7区间 → 模型能力均衡,但整体中等偏上;
- 如果gsm8k=0.85、mmlu=0.42、bbh=0.79 →数学强、知识弱、推理稳,提示可能缺乏百科类微调;
- 如果所有值都<0.4 → 不是模型问题,极可能是评测配置错误(如
--infer_backend未匹配模型类型,或--max_new_tokens太小导致截断); - 如果某个值异常高(如
arc_c=0.99但其他全<0.5) → 检查该数据集是否被意外污染(如训练时混入了评测数据)。
实操技巧:用Excel或VS Code的“列编辑”功能,快速提取
value列,粘贴到计算器网站(如desmos.com)生成简易分布图,30秒完成。
3.2 第二步:纵向比一比,看“few-shot敏感度”
找到同一数据集不同num_fewshot的行,例如:
dataset,subset,metric,value,num_fewshot mmlu,default,accuracy,0.412,0 mmlu,default,accuracy,0.521,5 mmlu,default,accuracy,0.587,10- 若0-shot到5-shot提升>10个百分点 → 模型依赖示例引导,提示其zero-shot泛化能力弱,需加强指令微调;
- 若5-shot到10-shot提升<2个百分点 → 5-shot已接近性能上限,再多示例收益递减;
- 若0-shot=0.55,5-shot=0.53 →few-shot反而拉低表现,典型过拟合信号,检查prompt模板是否与few-shot示例冲突。
3.3 第三步:交叉验一验,看“任务一致性”
挑2~3个语义相近但形式不同的评测集对比:
| 评测集 | 任务类型 | 典型题目 | 理想关系 |
|---|---|---|---|
gsm8k | 数学推理 | “买3个苹果花了12元,问单价?” | 三者应同向变化 |
math | 数学推理 | “求解方程x²+2x−3=0” | |
svamp | 数学推理 | “Tom有5个球,给了Mary2个,还剩几个?” |
- 如果
gsm8k=0.68、math=0.32、svamp=0.75→ 模型擅长应用题,但不擅纯符号计算,可能训练数据中应用题占比过高; - 如果三者均低于0.4 → 模型数学能力确实薄弱,需针对性加入数学数据微调;
- 如果
gsm8k高但svamp低 → 注意svamp含大量中文语义歧义,检查tokenizer是否对中文分词异常。
经验口诀:“同任务,分数差>15%;要查数据分布;同数据,few-shot涨<5%;要调prompt。”
4. 多模型对比:一张表看清优劣差异
当你同时评测多个模型(如Qwen2.5-7B vs InternLM3-7B vs GLM4.5-7B),CSV会按dataset+subset组合展开多行。此时,绝不要逐行读,而是用“矩阵思维”重构数据。
4.1 重建对比矩阵(手把手)
假设你评测了3个模型在4个数据集上的表现,原始CSV有12行。你需要手动(或用pandas pivot)整理成如下表格:
| 数据集 | Qwen2.5-7B | InternLM3-7B | GLM4.5-7B | 差距最大项 |
|---|---|---|---|---|
gsm8k | 0.682 | 0.715 | 0.653 | InternLM3领先3.3% |
mmlu | 0.521 | 0.498 | 0.547 | GLM4.5领先2.6% |
bbh | 0.793 | 0.762 | 0.778 | Qwen2.5领先3.1% |
cmnli | 0.634 | 0.651 | 0.622 | InternLM3领先1.7% |
→ 瞬间看出:
- InternLM3在知识类(mmlu)稍弱,但在逻辑和语言理解上更稳;
- GLM4.5知识最强,但数学和推理略逊;
- Qwen2.5综合均衡,数学单项突出。
4.2 关键洞察法:找“胜负手数据集”
观察上表最后一列“差距最大项”,找出那个单一数据集上拉开最大分差的项目:
- 如果
gsm8k差距达8%,而其他均<3% → 说明数学能力是当前模型选型的决定性因素; - 如果所有差距都集中在
mmbench_dev_en(多模态)→ 提示你该场景下模型架构差异(如VL对齐方式)影响远超参数量; - 如果差距最大项是
chid(中文成语)→ 直接指向中文语料覆盖度问题,与模型无关,需检查评测数据清洗逻辑。
高效工具推荐:用VS Code安装“Paste CSV as Markdown Table”插件,复制CSV内容一键转表格;或用Google Sheets导入CSV,用
Pivot table自动生成对比矩阵。
5. 常见陷阱与避坑指南:那些让你误判的“假信号”
CSV很客观,但解读容易踩坑。以下是实战中最高频的5类误判,附带验证方法:
5.1 陷阱一:“accuracy高=模型强”?
真相:accuracy仅反映分类正确率,对生成类任务(如代码、长文本)完全失真。
验证:打开details/目录下对应数据集的JSONL文件,随机抽3条,看模型输出是否合理。例如gsm8k中答案虽对,但推理步骤全是乱码,这种accuracy毫无意义。
5.2 陷阱二:“score低=模型差”?
真相:多模态score常含人工校验权重(如MMBench),0.493可能是模型答对70%但扣分严苛。
验证:查同目录report/下的HTML报告,看各题型得分分布图,确认是普遍偏低还是某类题(如图表理解)拖累。
5.3 陷阱三:“0-shot不如5-shot=模型不行”?
真相:可能只是prompt模板未适配zero-shot。ms-swift默认template对instruction-tuned模型友好,但对base模型可能需加<|start_header_id|>system<|end_header_id|>前缀。
验证:用swift infer命令手动测试1条gsm8k题目,对比zero-shot和5-shot prompt输出,看差异是否源于格式而非能力。
5.4 陷阱四:“所有值都0.0=模型崩了”?
真相:更可能是--eval_limit设太小(如=1),而该数据集首条样本格式异常(如缺失answer字段),导致整个评测流程中断。
验证:删掉--eval_limit参数重跑,或改用--eval_limit 10,看是否恢复正常。
5.5 陷阱五:“中文数据集分数低=中文能力差”?
真相:CEval类中文评测集(如ceval-computer_network)题目高度专业化,0.35分可能只是领域覆盖不足,不代表通用中文理解差。
验证:单独测cluewsc(中文指代消解)或ocnli(中文自然语言推理),这两个更反映基础语言能力。
6. 行动建议:从报告到优化的闭环路径
一份好的评测报告,终点不是“知道了分数”,而是“明确下一步做什么”。根据你的CSV结论,对应行动建议如下:
| CSV呈现现象 | 根本原因推测 | 推荐优化动作 | 预期效果周期 |
|---|---|---|---|
gsm8k显著低于同类模型 | 数学推理数据不足 | 加入NuminaMath-TIR或math-shepherd数据集微调 | 1~2天 |
mmlu各学科分数两极分化(如physics高、law低) | 领域数据分布不均 | 按学科抽样,对低分领域数据加权训练 | 0.5天 |
mmbench中图文匹配题全错,但纯文本题正常 | 多模态对齐模块失效 | 检查--vl_aligner参数,或换用Qwen3-VL原生对齐器 | 2小时 |
所有数据集value在0.4~0.5间波动,无明显优势项 | 模型未充分收敛 | 延长--num_train_epochs,或调大--learning_rate至2e-4 | 1天 |
custom_ceval分数远高于官方ceval | 自定义数据集难度过低 | 用ceval官方dev集做few-shot,验证泛化性 | 30分钟 |
最后叮嘱:永远用“最小改动验证”原则。比如怀疑是few-shot问题,不要立刻重训模型,先用
swift infer手动构造1个few-shot prompt测试;怀疑是tokenizer问题,先用tokenizer.decode(tokenizer.encode("你好"))确认中文编码是否正常。80%的“模型问题”,其实出在评测配置或数据预处理环节。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。