- 大模型
- 推理模型
- 微调
- 模型推理服务
【免费下载链接】s1
s1: Simple test-time scaling
MC-TACO(Multiple-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默认值为False,doc_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超出候选范围(例如-100),harness 会打印警告日志(task.py#L1460-L1479)。
理解这一点后就能明白:评测结果等价于“模型逐候选判断合理性的二元分类准确率”,而不是对完整多选题五选一的端到端回答,这也是阅读 MC-TACO 分数时必须注意的评测口径。
指标实现:acc 与 F1
metric_list中的f1指标由 harness 内置的 F1 聚合函数实现,位于 metrics.py#L57-L66:
@register_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计算 F1(np.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},说明该任务的历史实现曾使用em(exact match)与f1双指标;而当前 default.yaml(version 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.yaml),harness 会自动发现该 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处理链路,是准确复现分数、避免“假高/假低”结果的前提。
- 大模型
- 推理模型
- 微调
- 模型推理服务
【免费下载链接】s1
s1: Simple test-time scaling
相关推荐
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 COPA(copa_ar)常识因果推理任务在 lm-evaluation-harness 中的配置与实现
s1 项目评估体系解析:Arabic COPA(copa_ar)常识因果推理任务在 lm evaluation harness 中的配置与实现 导读 本文以 s
大模型推理模型微调模型推理服务
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考