多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

s1 项目实战指南:在 lm-evaluation-harness 中评测 MC-TACO 时序常识理解任务

s1 项目实战指南:在 lm-evaluation-harness 中评测 MC-TACO 时序常识理解任务 大模型推理模型微调模型推理服务【免费下载链接】s1s1: Simple test-time scaling项目地址https://gitcode.com/gh_mirrors/s1/s1点击查看免费下载MC-TACOMultiple-Choice Temporal Commonsense是一个聚焦时序常识temporal commonsense理解能力的英文问答评测数据集本仓库通过 lm-evaluation-harness 将其封装为mc_taco评测任务。本文以 mc_taco/README.md 为核心结合 default.yaml 配置与 task.py 源码完整讲解该任务的评测协议、YAML 配置、multiple_choice输出类型的底层原理、指标实现以及--limit参数带来的“假分数”陷阱帮助你正确地在自己的模型上复现与解读 MC-TACO 评测结果。MC-TACO 数据集模型需要掌握的“时间常识”MC-TACO 由论文Going on a vacation takes longer than Going for a walk: A Study of Temporal Commonsense Understanding提出arXiv 编号 1909.03065。数据集包含约1.3 万个问答对13k question-answer pairs全部用于检验模型对事件与时间之间关系的常识推理能力覆盖五类时间属性时间属性含义duration时长一个事件通常持续多久temporal ordering时序事件之间典型的发生先后顺序typical time典型时间事件通常在什么时间点发生frequency频率事件多久发生一次stationarity恒定性某个状态是长时间维持还是无限期持续读者可以在本仓库的任务索引表 tasks/README.md 中找到mc_taco条目其描述为“Question-answer pairs that require temporal commonsense comprehension.”语言为英语属于独立任务README 注明目前尚未归入任何任务组即Not part of a group yet。说明原 README 中的 Citation 区块目前只是占位符BibTeX-formatted citation goes here尚未填写正式引用条目。在论文、报告或基准对比中引用该任务时请直接引用上述原始论文并按需自行整理 BibTeX 条目。任务接入default.yaml 逐字段解析MC-TACO 的评测配置完整保存在 default.yaml 中全文如下task: mc_taco dataset_path: mc_taco output_type: multiple_choice validation_split: validation test_split: test doc_to_text: {{sentence}}\nQuestion: {{question}}\nAnswer: {{answer}}\nPlausible: doc_to_target: label doc_to_choice: [no, yes] should_decontaminate: true doc_to_decontamination_query: {{question}} {{sentence}} metric_list: - metric: acc - metric: f1 metadata: version: 1.0各字段的含义与设计意图如下字段语义可对照 task_guide.md 与 new_task_guide.md 中的通用约定task: mc_taco任务注册名命令行中通过--tasks mc_taco引用。dataset_path: mc_taco指向 Hugging Face Datasets 上的数据集标识符mc_taco。harness 运行时通过该路径加载原始数据集。output_type: multiple_choice声明本任务按“多选题”方式评测即对每个候选答案计算续写对数似然loglikelihood并取最大者作为模型预测。这是理解整个评测协议的关键详见下文源码解析。validation_split: validation/test_split: test分别指定验证集与测试集划分。MC-TACO 官方数据本身就包含这两个划分因此这里直接映射即可无需额外切分逻辑。doc_to_text: {{sentence}}\nQuestion: {{question}}\nAnswer: {{answer}}\nPlausible:提示模板Jinja2。它把数据集中三个字段拼装成输入上下文先给出包含事件的句子sentence再给出问题question与单个候选答案answer最后以Plausible:收尾要求模型判断该候选答案对当前问题是否“合理”。注意这里只放一个候选答案——这正是“每个候选答案被拆成独立文档”的直接体现详见“--limit陷阱”一节。doc_to_target: label正确标签直接取自数据特征label。在 MC-TACO 中label是 0/1 整数1 表示候选答案合理0 表示不合理而output_type为multiple_choice时doc_to_target返回的是答案选项列表的下标参见 new_task_guide.md。doc_to_choice: [no, yes]与label下标一一对应的候选词表即“不合理 no 0”、“合理 yes 1”。这组 verbalizer 的写法和superglue/boolq中的[no, yes]用法一致见 new_task_guide.md。should_decontaminate: true与doc_to_decontamination_query: {{question}} {{sentence}}开启评测去污。harness 会用该模板生成查询串与训练语料的 n-gram 做比对过滤掉可能与预训练语料重叠的样本从而避免“背题”带来的虚高分数。should_decontaminate默认值为Falsedoc_to_decontamination_query缺省时则回退到doc_to_text见 task_guide.md。metric_list报告acc准确率与f1两项指标其中 F1 的实现细节见下文“指标实现”一节。metadata: version: 1.0当前配置版本号。时序常识如何被建模为“多选题”multiple_choice 源码原理虽然 MC-TACO 官方以“问题 候选答案合理性”形式组织但 harness 把它统一建模为multiple_choice任务。其核心逻辑位于 task.py 的construct_requests与process_results两个方法中。请求构造阶段task.py#L1334-L1345对每个文档先通过self.doc_to_choice(doc)取出候选词表然后**把每个候选词作为续写continuation**分别构造loglikelihood请求elif self.OUTPUT_TYPE multiple_choice: choices self.doc_to_choice(doc) target_delimiter self.config.target_delimiter ... # Otherwise they are placed in the continuation arguments [(ctx, f{target_delimiter}{cont}) for cont in choices]也就是说模型对ctx no和ctx yes分别计算对数似然MC-TACO 的“合理性判断”由此被转译成“两个词谁更可能接在后面”。预测阶段task.py#L1433-L1453对所有候选的对数似然取argmax作为预测标签同时计算按候选长度归一化后的pred_norm长度较长的选项自动获得更高的负对数似然归一化可削弱 token 数偏差pred np.argmax(lls) pred_norm np.argmax(lls / completion_len)随后通过gold self.doc_to_target(doc)拿到正确标签下标与pred比对即可得到每个文档的命中情况如果gold超出候选范围例如-100harness 会打印警告日志task.py#L1460-L1479。理解这一点后就能明白评测结果等价于“模型逐候选判断合理性的二元分类准确率”而不是对完整多选题五选一的端到端回答这也是阅读 MC-TACO 分数时必须注意的评测口径。指标实现acc 与 F1metric_list中的f1指标由 harness 内置的 F1 聚合函数实现位于 metrics.py#L57-L66register_aggregation(f1) def f1_score(items): from sklearn.metrics import f1_score unzipped_list list(zip(*items)) golds unzipped_list[0] preds unzipped_list[1] fscore f1_score(golds, preds) return np.max(fscore)它把整个评测集上所有文档的 gold/pred 标签汇总后一次性调用sklearn.metrics.f1_score计算 F1np.max的处理在多分类场景下取各类别 F1 的最大值MC-TACO 是 no/yes 二分类返回即为二元 F1。因此该指标是“数据集级”聚合指标而不是逐样本指标的平均这也解释了 task_guide.md 中“aggregation与逐样本metric配对”的框架设计。作为旁证仓库测试数据目录下的 tests/testdata/mc_taco-v0-res.json 保留了该任务的早期版本输出version 0其结果为{em: 0.0773, f1: 0.4160}说明该任务的历史实现曾使用emexact match与f1双指标而当前 default.yamlversion 1.0已改为acc与f1。对比不同版本日志时需留意这一口径差异。重要警告为什么--limit会给出误导性结果原 README 专门用WARNING段落强调了一个容易踩坑的评测协议问题在本任务上使用--limit参数会得到误导性结果。原因在于 MC-TACO 的数据组织方式原作者收集的每道多选题一个 question 搭配多个 candidate answers会被拆分成若干“question-option”对每个配对被单独封装成一个文档document用于合理性检测。harness 在加载这些文档时会做打乱shuffle此时若设置--limit截取前 N 个文档很可能会“切断”某道题的部分候选答案——例如只保留了yes文档而丢掉了对应的no文档。由于该任务的指标要求穷尽评测一道题的所有候选README 建议参阅论文第 4 节的细节--limit造成的候选缺失会让 EM/acc/F1 全部失真分数既不能代表完整测试集也不能代表被截取的子集任何基于--limit的调试结论都不具备可比性。实操建议完整评测时不要加--limit直接对test划分全量评测若确需小规模冒烟测试smoke test验证 pipeline 是否跑通应清楚这只是“流程自检”其结果不能写入任何评测对比或论文表格排查问题时优先使用--limit之外的机制如先确认数据集加载、再跑小模型全量。去污配置与可复现性MC-TACO 任务默认开启去污should_decontaminate: true这是数据污染contamination风险较高的常识类基准的常见处理方式。去污查询串由{{question}} {{sentence}}拼装而成harness 的去污实现与用法可参见仓库 decontamination 相关文档 与 decontamination 模块should_decontaminate的通用语义在 task_guide.md 中亦有说明默认False开启后若未单独指定doc_to_decontamination_query则回退使用doc_to_text作为查询。运行评测命令与验证路径在当前仓库中任务的注册目录为lm_eval/tasks/mc_taco/含 README.md 与 default.yamlharness 会自动发现该 YAML 并注册mc_taco任务。你可以按以下方式查看与运行具体模型参数以你的环境为准# 查看 harness 支持的全部任务列表tasks/README.md 中即用该命令列出任务索引 lm-eval --tasks list # 用 Hugging Face 模型评测 MC-TACO注意不要加 --limit lm-eval --model hf \ --model_args pretrained你的模型名 \ --tasks mc_taco \ --num_fewshot 0运行结束后输出中会呈现mc_taco的acc与f1两项结果可直接用于不同模型之间的时序常识能力横向对比。若你希望核对 harness 自身对该任务的回归测试可参考仓库中 tests/testdata/mc_taco-v0-res.json 记录的历史基准输出测试用例的组织方式可进一步阅读 tests 目录下的测试套件。小结MC-TACO 在 lm-evaluation-harness 中是一个“小而关键”的任务配置上它浓缩了multiple_choice输出类型、去污开关、acc/F1 双指标等 harness 核心机制评测协议上它的“逐候选成文档”结构对--limit使用提出了严格限制。正确理解 default.yaml 的每个字段与 task.py 的multiple_choice处理链路是准确复现分数、避免“假高/假低”结果的前提。赞分享大模型推理模型微调模型推理服务【免费下载链接】s1s1: Simple test-time scaling项目地址https://gitcode.com/gh_mirrors/s1/s1点击查看免费下载相关推荐s1 项目中的 CommonsenseQA 评估任务lm-evaluation-harness 中的常识推理基准配置详解s1 项目中的 CommonsenseQA 评估任务lm evaluation harness 中的常识推理基准配置详解 本文以 s1 仓库Simple t大模型推理模型微调模型推理服务s1 项目中 ETHICS 伦理对齐评测指南lm-evaluation-harness 任务配置与实现解析s1 项目中 ETHICS 伦理对齐评测指南lm evaluation harness 任务配置与实现解析 导读 本文围绕当前仓库中 ETHICS 基准任务目大模型推理模型微调模型推理服务s1 项目评估体系解析Arabic COPAcopa_ar常识因果推理任务在 lm-evaluation-harness 中的配置与实现s1 项目评估体系解析Arabic COPAcopa_ar常识因果推理任务在 lm evaluation harness 中的配置与实现 导读 本文以 s大模型推理模型微调模型推理服务上一篇5分钟终极指南KMS_VL_ALL_AIO智能激活脚本完整教程下一篇如何在电脑上免费畅玩Switch游戏yuzu模拟器终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表