使用 lm-evaluation-harness 评估 TriviaQA:从 YAML 任务配置到 exact_match 评分的完整实战指南
大模型推理模型微调模型推理服务【免费下载链接】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),仅供参考

相关新闻

CAP 幂等性深入解析:At-Least-Once 投递保证与消费者幂等设计实践

CAP 幂等性深入解析:At-Least-Once 投递保证与消费者幂等设计实践

后端消息队列微服务 【免费下载链接】CAP 基于最终一致性的微服务分布式事务解决方案,也是一种采用 Outbox 模式的事件总线。 项目地址: https://gitcode.com/dotnetcore/CAP 点击查看 免费下载 CAP 是一款基于最终一致性理念的分布式事务解决方案与 Ou…

2026/10/9 10:13:33 阅读更多 →
EcoPaste 背后的 Trellis 多智能体协作运行时:`trellis channel` 命令权威参考与实战指南

EcoPaste 背后的 Trellis 多智能体协作运行时:`trellis channel` 命令权威参考与实战指南

桌面应用开发工具 【免费下载链接】EcoPaste 🎉跨平台的剪贴板管理工具 | Cross-platform clipboard management tool 项目地址: https://gitcode.com/gh_mirrors/ec/EcoPaste 点击查看 免费下载 导读 trellis channel 是 Trellis 工作流中负责多智能体…

2026/10/9 10:13:32 阅读更多 →
YOLO与OpenCV协同的工业缺陷检测实战

YOLO与OpenCV协同的工业缺陷检测实战

1. 项目概述:为什么一个工业缺陷检测项目值得写进简历“可写进简历的项目”——这句话不是营销话术,而是工业AI落地场景中真实存在的硬通货。我带过三十多个应届生做技术面试,每次看到简历里写着“基于YOLOv5的轴承表面划痕检测系统”&#x…

2026/10/9 10:13:32 阅读更多 →

最新新闻

基于JWT/JWE的跨系统安全数据透传方案详解

基于JWT/JWE的跨系统安全数据透传方案详解

先说结论:这套“基于JWT/JWE的跨系统安全数据透传方案”,解决的是两个不同域、不同技术栈、甚至不同运维体系的服务之间,如何安全地把一段结构化数据从A端交付到B端——既保证数据在“路上”不被看、不被改,又保证接收方能够验证数…

2026/10/9 10:57:43 阅读更多 →
MySQL慢查询优化实战:索引设计与执行计划调优全攻略

MySQL慢查询优化实战:索引设计与执行计划调优全攻略

接手线上MySQL慢查询优化这类活儿,看着是加几个索引的事,实际上是一整套“读表逻辑”的博弈。索引优化策略不只是“在WHERE条件字段上建索引”这么简单,它背后涉及索引结构、查询执行计划、数据分布、写入成本之间的复杂权衡。这篇就把我在实…

2026/10/9 10:57:43 阅读更多 →
撕开高性能芯片与电竞级体验的包装:实测数据还原真实性能

撕开高性能芯片与电竞级体验的包装:实测数据还原真实性能

上周帮朋友挑新机,宣传页上“高性能芯片”四个字印得比Logo还大,背面还配了一行小字“电竞级稳帧体验”。跑分一拉出来,确实漂亮,安兔兔九十几万,看着就热血。结果朋友拿回家打了两局游戏,第三把还没打完&a…

2026/10/9 10:57:43 阅读更多 →
光伏电站运维模式怎么选?自建、委托、混合与智能运维全解析

光伏电站运维模式怎么选?自建、委托、混合与智能运维全解析

光伏圈里有一句话我特别认同:"电站并网只是起点,运维才是长跑。"做光伏这么多年,见过太多项目,前期的设计、采购、施工都舍得花钱,一到运维环节就开始精打细算,结果呢?组件热斑、逆变…

2026/10/9 10:57:43 阅读更多 →
MySQL提交数归零与123个CVE背后:真相与运维应对

MySQL提交数归零与123个CVE背后:真相与运维应对

最近在数据库圈子里,一个话题被反复讨论,甚至有人说 MySQL 正在“自杀”:代码提交数为 0,123 个 CVE 安全漏洞悬而未决。乍一听确实吓人,但作为常年折腾数据库的人,我第一反应是:得把这些数字拆…

2026/10/9 10:57:43 阅读更多 →
数据产品思维:打破数据所有权困局,让数据真正资产化

数据产品思维:打破数据所有权困局,让数据真正资产化

1. 数据团队和业务团队,为什么总在“谁说了算”上打架先从我最近遇到的一个真实场景说起。某家做零售的公司,数据部门辛苦搭了一套用户画像体系,整合了线上线下十几个系统的会员数据,清洗、打标、建模,前前后后折腾了大…

2026/10/9 10:56:40 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 10:11:06 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 6:17:20 阅读更多 →