恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
使用 lm-evaluation-harness 评估 TriviaQA:从 YAML 任务配置到 exact_match 评分的完整实战指南
首页
资讯中心
/
使用 lm-evaluation-harness 评估 TriviaQA:从 YAML 任务配置到 exact_match 评分的完整实战指南
使用 lm-evaluation-harness 评估 TriviaQA:从 YAML 任务配置到 exact_match 评分的完整实战指南
发布时间:2026/10/9 10:13:35
大模型推理模型微调模型推理服务【免费下载链接】s1s1: Simple test-time scaling项目地址https://gitcode.com/gh_mirrors/s1/s1点击查看免费下载本文以 s1 仓库中 lm-evaluation-harness 评估套件内置的 TriviaQA 任务为主线完整讲解该开放问答阅读理解基准在评测框架中的注册方式、YAML 配置语义、生成式generate_until评测流程以及 exact_match 打分细节并给出可直接复用的运行命令与二次开发指引。读完本文你将能够独立运行triviaqa评测、逐字段理解其配置含义并在需要时基于该任务模板扩展出自己的开放问答评测任务。一、任务背景与数据集1.1 数据集简介TriviaQA 是一个大规模远程监督distantly supervised阅读理解数据集其官方信息如下论文标题TriviaQA: A Large Scale Distantly Supervised Challenge Dataset for Reading Comprehension论文摘要地址https://arxiv.org/abs/1705.03551数据集主页https://nlp.cs.washington.edu/triviaqa/根据仓库内 triviaqa 任务说明该数据集包含超过 65 万条 question-answer-evidence 三元组其中约9.5 万条 question-answer 对由问答爱好者撰写并配套独立收集的证据文档每道题平均 6 篇文档为回答问题提供高质量远程监督信号。这一特性使得 TriviaQA 既可用于开放领域问答open-domain QA评测也可用于带证据的阅读理解reading comprehension评测。1.2 论文引用在论文或技术报告中引用该数据集时可使用以下 BibTeX与任务 README 中提供的引用一致InProceedings{JoshiTriviaQA2017, author {Joshi, Mandar and Choi, Eunsol and Weld, Daniel S. and Zettlemoyer, Luke}, title {TriviaQA: A Large Scale Distantly Supervised Challenge Dataset for Reading Comprehension}, booktitle {Proceedings of the 55th Annual Meeting of the Association for Computational Linguistics}, month {July}, year {2017}, address {Vancouver, Canada}, publisher {Association for Computational Linguistics}, }二、任务注册与目录结构2.1 Groups 与 Tasks 归属在 lm-evaluation-harness 的任务体系中Groups任务组当前triviaqa任务尚未归属于任何任务组任务 README 明确标注 Not part of a group yet因此它不会被任何聚合榜单自动包含Tasks任务仓库注册的任务名为triviaqa其语义描述为Generate and answer based on the question.基于问题生成并作答。从源码结构看任务名与 YAML 文件中的task: triviaqa字段一一对应评测时通过--tasks triviaqa即可按名调用。2.2 文件清单triviaqa任务的完整定义只包含两个文件任务 README记录论文信息、引用格式、Groups/Tasks 归属以及新增基准时的自查清单default.yaml完整的任务配置TaskConfig是本次评测行为的真正驱动者。这种README 记录元信息 YAML 声明任务配置的组织方式也是该评测套件中大多数 YAML 型任务如 nq_open的通用模式。三、default.yaml 全字段逐项解析下面是triviaqa任务配置的完整内容随后逐字段说明其作用task: triviaqa dataset_path: trivia_qa dataset_name: rc.nocontext output_type: generate_until training_split: train validation_split: validation doc_to_text: Question: {{question}}?\nAnswer: doc_to_target: {{answer.aliases}} should_decontaminate: true doc_to_decontamination_query: question generation_kwargs: until: - \n - . - , do_sample: false temperature: 0.0 filter_list: - name: remove_whitespace filter: - function: remove_whitespace - function: take_first target_delimiter: metric_list: - metric: exact_match aggregation: mean higher_is_better: true ignore_case: true ignore_punctuation: true metadata: version: 3.03.1 任务身份与数据源字段取值含义tasktriviaqa任务注册名也是命令行--tasks使用的名称dataset_pathtrivia_qaHuggingFace datasets Hub 上的数据集名dataset_namerc.nocontext数据集子集配置rc表示阅读理解的 question-answer 格式nocontext表示评测时不携带证据文档上下文即纯开放问答形式training_splittrainfew-shot 示例从训练集抽取validation_splitvalidation评测使用验证集无独立测试集时验证集即主评测集关于数据子集的选取需要结合 HuggingFacetrivia_qa数据集的命名约定理解rc系列同时提供问题和答案别名aliases适合直接做问答匹配nocontext后缀意味着在构造 prompt 时只保留问题本身不拼接证据段落从而把任务收敛为对模型事实知识与推理能力的开放问答评测。3.2 prompt 构造doc_to_text 与 doc_to_targetdoc_to_text: Question: {{question}}?\nAnswer: doc_to_target: {{answer.aliases}}doc_to_text把每条数据渲染成模型输入前缀Question: {{question}}?\nAnswer:即问题后接换行与 Answer: 提示符doc_to_target从数据字段answer.aliases中取全部答案别名作为参考答案集合。TriviaQA 的答案别名通常包含多种合法写法如全名、简称、大小写变体评测时只要生成结果命中任一别名即视为正确。模板中的{{...}}双花括号语法由 lm-evaluation-harness 的文档渲染机制负责替换。从 TaskConfig 定义 可以看到doc_to_text、doc_to_target均可接受字符串模板或可调用对象评测框架在fewshot_context中通过self.doc_to_text(doc) self.doc_to_target(doc)拼接 few-shot 示例再为当前评测样本追加doc_to_text输出从而得到完整的上下文见 task.py 中的 fewshot_context 实现。3.3 生成参数generation_kwargsgeneration_kwargs: until: - \n - . - , do_sample: false temperature: 0.0until声明模型应停止生成的终止符列表分别是换行符、句点和逗号。由于 TriviaQA 的答案往往是短语或短句一旦模型生成完整句或出现逗号列表即可截断避免产生冗余输出do_sample: false与temperature: 0.0关闭采样、使用确定性贪心解码保证评测可复现。从 TaskConfig 的初始化逻辑 可以看到当output_type为generate_until且未显式提供generation_kwargs时框架会自动补全until默认取 few-shot 分隔符并强制do_sample: False若配置了temperature框架还会将其转换为浮点数并注入生成请求。这说明贪心解码是生成式任务的内置兜底策略显式写出参数只是为了语义更清晰。3.4 输出清洗filter_listfilter_list: - name: remove_whitespace filter: - function: remove_whitespace - function: take_first过滤器按声明顺序依次作用于每个样本的模型输出remove_whitespace去掉模型输出开头的空白字符lstrip。其实现位于 extraction.py对每个响应执行resp.lstrip()take_first从多条候选中只取第一条作为最终答案。其实现位于 selection.py即map(lambda r: r[0], resps)。在generate_until场景下模型对每个样本通常只生成一次take_first主要用于统一接口即使未来开启多轮生成如通过repeats参数做多次采样也只保留首个输出用于打分。需要说明的是remove_whitespace只处理行首空白不做大小写或标点归一化——这些归一化交给下一节的 exact_match 参数处理。3.5 评分metric_listtarget_delimiter: metric_list: - metric: exact_match aggregation: mean higher_is_better: true ignore_case: true ignore_punctuation: truetarget_delimiter: few-shot 示例中参考答案与下一示例之间的分隔符metric: exact_match核心指标为精确匹配aggregation: mean各样本得分按均值聚合为最终指标higher_is_better: true分数越高越好ignore_case: true/ignore_punctuation: true比较时忽略大小写与标点符号降低答案拼写变体的误伤。exact_match 的底层实现在 metrics.py先按regexes_to_ignore做正则替换本任务未配置该参数再依次执行ignore_case小写化、ignore_punctuation剔除string.punctuation中的标点、ignore_numbers剔除数字等归一化最终逐样本比较预测与参考并取均值。该指标通过register_metric(metricexact_match, higher_is_betterTrue, output_typegenerate_until, aggregationmean)注册见 metrics.py与 YAML 中声明的aggregation: mean、higher_is_better: true一一对应。TriviaQA 的答案别名机制正是 exact_match 评分的前提多别名覆盖了同一答案的不同合法表达。3.6 污染检测与版本元信息should_decontaminate: true doc_to_decontamination_query: question metadata: version: 3.0should_decontaminate: true开启数据污染检测能力。开启后评测框架会将doc_to_decontamination_query指定的字段这里是question作为查询串与本仓库自带的 n-gram 污染检测工具链见 decontamination 模块 及其 使用文档配合帮助判断预训练语料是否可能已包含评测题面从而甄别模型分数是否存在记忆泄露风险metadata.version: 3.0任务配置版本号。版本号用于追踪配置变更对分数的影响评测结果输出中会附带对应版本便于跨版本对比。四、运行评测命令行实操4.1 查看任务列表在仓库目录下eval/lm-evaluation-harness确认依赖已安装后可先确认任务已注册lm-eval --tasks list列表输出中应包含triviaqa条目若使用lm_eval与lm-eval二者等价见 README 用户指南。4.2 使用 HuggingFace 模型评测以 HuggingFace transformers 模型为例命令模板与 README Basic Usage 中的示例一致lm_eval --model hf \ --model_args pretrainedEleutherAI/pythia-160m,revisionstep100000,dtypefloat \ --tasks triviaqa \ --device cuda:0 \ --batch_size 8参数说明--model hf使用 HuggingFace transformers 加载模型--model_args传给模型构造器的额外参数如pretrained模型名或路径、revisionHub 上的 checkpoint 版本、dtype精度等--tasks triviaqa指定本次评测任务--device cuda:0指定计算设备--batch_size 8批大小也可设为auto自动探测最大可用批大小或auto:4表示每 4 次自动重算一次批大小以适配长文本差异较大的任务见 README 中 batch_size 说明。本评测任务默认使用validation作为主评测集框架在eval_docs中优先返回测试集、否则返回验证集见 task.py 中的 eval_docs 属性因此上述命令直接对 TriviaQA 验证集进行评测。4.3 多任务与并行评测triviaqa 也可以与其它任务一起提交评测套件会自动按任务定义完成各自的 prompt 构造与打分lm_eval --model hf \ --model_args pretrainedEleutherAI/pythia-160m \ --tasks triviaqa,nq_open \ --device cuda:0 \ --batch_size auto:4nq_open同为开放问答任务配置风格高度相似可参见 nq_open.yaml。对于更大规模的评测可使用accelerate启动多卡并行accelerate launch -m lm_eval --model hf \ --tasks triviaqa \ --batch_size 164.4 输出解读评测完成后结果 JSON 中包含按任务名组织的指标。仓库测试数据中保留了历史回归样本如 triviaqa-v0-res.json其结构为{results: {triviaqa: {...}}, versions: {triviaqa: version}}其中versions字段即对应 YAML 中的metadata.version。当前配置下预期输出指标键为exact_match并附标准误且版本号显示为3.0。此外开启should_decontaminate后结果中还会附带污染检测相关的统计信息供判断是否需要对分数打折或剔除。五、评测链路源码级梳理要理解triviaqa这一行 YAML 如何驱动整条评测流水线可以沿 ConfigurableTask 类 追溯关键环节配置装载YAML 被解析为TaskConfig字段定义见 task.py所有字段dataset_path、doc_to_text、metric_list等在此完成类型约束与默认值兜底数据下载download()调用datasets.load_dataset(pathdataset_path, namedataset_name, ...)从 HuggingFace Hub 拉取trivia_qa的rc.nocontext子集见 task.py 中的 download 方法上下文构造fewshot_context按doc_to_text/doc_to_target生成示例与当前样本的 prompt见 task.py并对每个样本生成请求实例生成推理output_type: generate_until使请求走生成式推理路径模型按until终止符、贪心解码输出答案过滤清洗apply_filters依次执行remove_whitespace与take_first见 task.py指标计算process_results对每个样本调用 exact_matchaggregation: mean将结果聚合成最终分数实现见 metrics.py。这套YAML 声明 框架执行的链路意味着只要替换doc_to_text、dataset_path与metric_list即可在极短时间内衍生出新的开放问答评测任务。六、从 triviaqa 任务模板扩展新任务若要在 s1 评测环境中新增一个开放问答任务可参照triviaqa的最小模板新建任务目录如lm_eval/tasks/my_qa/编写default.yaml保留以下骨架并替换数据与模板字段task: my_qa dataset_path: hf_dataset_name dataset_name: config_name output_type: generate_until training_split: train validation_split: validation doc_to_text: Question: {{question}}?\nAnswer: doc_to_target: {{answer}} generation_kwargs: until: - \n - . - , do_sample: false temperature: 0.0 filter_list: - name: remove_whitespace filter: - function: remove_whitespace - function: take_first target_delimiter: metric_list: - metric: exact_match aggregation: mean higher_is_better: true ignore_case: true ignore_punctuation: true metadata: version: 1.0配套编写 README记录论文、引用与变体说明可参照 triviaqa README 的结构通过lm-eval --tasks list确认注册成功后即可按名运行。七、注意事项评测集选择triviaqa以validation为主评测集提交结果时请注明评测集与配置版本metadata.version: 3.0保证可复现与可比对答案别名的意义doc_to_target: {{answer.aliases}}依赖数据集的别名机制若替换为不含别名的数据集需将目标字段改为实际答案字段否则打分可能全部失败污染检测should_decontaminate: true仅提供检测能力评测分数本身不会自动扣减解读结果时需结合污染检测输出谨慎判断可复现性do_sample: falsetemperature: 0.0保证同模型同配置下结果确定是公平对比的前提修改边界本仓库为只读镜像上述新增任务的说明仅用于展示扩展思路实际开发请在可写副本中进行。通过本文你可以完成从读懂triviaqa的 YAML 配置到命令行实际评测再到基于该模板扩展新任务的完整闭环让 TriviaQA 这一经典开放问答基准真正成为评估 s1 系列模型事实知识与作答能力的可靠标尺。赞分享大模型推理模型微调模型推理服务【免费下载链接】s1s1: Simple test-time scaling项目地址https://gitcode.com/gh_mirrors/s1/s1点击查看免费下载相关推荐lm-evaluation-harness 中的 HellaSwag 评测任务从 YAML 配置到源码实现的完整指南lm evaluation harness 中的 HellaSwag 评测任务从 YAML 配置到源码实现的完整指南 导读 HellaSwag 是常识推理领域大模型推理模型微调模型推理服务使用 lm-evaluation-harness 评估 MathQA 数据集从任务配置到源码原理的完整指南使用 lm evaluation harness 评估 MathQA 数据集从任务配置到源码原理的完整指南 导读 MathQAMathematics Que大模型推理模型微调模型推理服务lm-evaluation-harness 中 GPQA 基准的完整实现指南任务变体、YAML 配置与评分原理lm evaluation harness 中 GPQA 基准的完整实现指南任务变体、YAML 配置与评分原理 本文以 lm evaluation harne大模型推理模型微调模型推理服务上一篇用 /prp-mcp-create 为 MCP 服务器生成上下文工程 PRPcontext-engineering-intro 仓库实战指南下一篇用 Anthropic 驱动 PRP 解析与任务 CRUD在 Context-Engineering-Intro 中构建 Taskmaster 式 MCP 服务器创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考