使用 lm-evaluation-harness 的 arc_mt 任务族评估多语言机器翻译版 ARC Challenge
2026/9/14 19:42:42 网站建设 项目流程

使用 lm-evaluation-harness 的 arc_mt 任务族评估多语言机器翻译版 ARC Challenge

【免费下载链接】lm-evaluation-harnessA framework for few-shot evaluation of language models.项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harness

本指南完整讲解 lm-evaluation-harness 仓库中arc_mt任务族的实现原理与使用方法。arc_mt是 ARC Challenge(AI2 Reasoning Challenge)机器翻译版本的多语言评测任务集合,通过 LumiOpen/arc_challenge_mt 等数据集,将英文科学推理题机器翻译为多种欧洲语言,用于评估语言模型在非英语环境下的科学推理能力。阅读本文后,你将掌握该任务族 12 个语言子任务的组织结构、YAML 配置字段的语义、去污染(decontamination)机制,以及如何用lm-evalCLI 一键运行与验证这些任务。

一、arc_mt 是什么:机器翻译版 ARC Challenge

arc_mt(Machine-Translated ARC Challenge)是 lm-evaluation-harness 中用于支持机器翻译版 ARC Challenge 评测的任务族。ARC(AI2 Reasoning Challenge)原本是面向英文科学考试题的多选题数据集,其 Challenge 子集以高难度著称,要求模型具备科学常识推理能力。arc_mt的目标是把这类评测推广到更多语言,以便衡量模型在非英文语种上的推理表现。

从该任务族的说明文档看,其初始数据集覆盖了一系列欧洲语言,并计划在未来继续扩充语种。因此,arc_mt并不是单一任务,而是一组按语言划分、共享同一套评测模板的子任务集合。

二、任务族结构与 12 个语言子任务

arc_mt任务族位于仓库的 lm_eval/tasks/arc_mt/ 目录下,共包含 13 个文件:1 份 README 说明文档与 12 个语言配置文件。每个文件对应一种语言:

配置文件语言数据集
arc_challenge_mt_da.yaml丹麦语(Danish)LumiOpen/arc_challenge_mt(da)
arc_challenge_mt_de.yaml德语(German)LumiOpen/arc_challenge_mt(de)
arc_challenge_mt_el.yaml希腊语(Greek)LumiOpen/arc_challenge_mt(el)
arc_challenge_mt_es.yaml西班牙语(Spanish)LumiOpen/arc_challenge_mt(es)
arc_challenge_mt_fi.yaml芬兰语(Finnish)LumiOpen/arc_challenge_mt(fi)
arc_challenge_mt_hu.yaml匈牙利语(Hungarian)LumiOpen/arc_challenge_mt(hu)
arc_challenge_mt_is.yaml冰岛语(Icelandic)mideind/icelandic-arc-challenge
arc_challenge_mt_it.yaml意大利语(Italian)LumiOpen/arc_challenge_mt(it)
arc_challenge_mt_nb.yaml挪威博克马尔语(Norwegian Bokmål)LumiOpen/arc_challenge_mt(nb)
arc_challenge_mt_pl.yaml波兰语(Polish)LumiOpen/arc_challenge_mt(pl)
arc_challenge_mt_pt.yaml葡萄牙语(Portuguese)LumiOpen/arc_challenge_mt(pt)
arc_challenge_mt_sv.yaml瑞典语(Swedish)LumiOpen/arc_challenge_mt(sv)

2.1 主配置与“继承”模式

这 12 个文件并非各自重复完整的任务定义,而是采用 lm-evaluation-harness 常见的 YAML 继承机制,以一个“主模板”加多个“薄壳子任务”的形式组织。

其中 arc_challenge_mt_fi.yaml 是完整的主配置,承担了任务的全部定义。其余 11 个语言文件则只做三件事:继承主配置、声明自己的任务名、覆盖数据集的语言标识。例如 arc_challenge_mt_da.yaml 的完整内容只有 3 行:

include: arc_challenge_mt_fi.yaml task: arc_challenge_mt_da dataset_name: da
  • include:指示配置加载器先引入arc_challenge_mt_fi.yaml中定义的全部字段;
  • task:覆盖为本语言的任务标识符(如arc_challenge_mt_da);
  • dataset_name:覆盖 Hugging Face 数据集的语言子集名(如da)。

这种“一主多从”的结构让新增语言子任务只需几行配置,而无需复制整套模板,既降低了维护成本,也保证了所有语言使用完全一致的提示词模板与指标口径,使跨语言分数具有可比性。

2.2 一个特例:冰岛语

arc_challenge_mt_is.yaml 是唯一的例外——它没有使用include继承,而是完整写入了全部配置,并且数据集源不同:

tag: - arc_challenge_mt task: arc_challenge_mt_is dataset_path: mideind/icelandic-arc-challenge output_type: multiple_choice training_split: train validation_split: validation test_split: test doc_to_text: "Question: {{question}}\nAnswer:" doc_to_target: "{{choices.label.index(answerKey)}}" doc_to_choice: "{{choices.text}}" should_decontaminate: true doc_to_decontamination_query: "Question: {{question}}\nAnswer:" metric_list: - metric: acc aggregation: mean higher_is_better: true - metric: acc_norm aggregation: mean higher_is_better: true metadata: version: 1.0

冰岛语子任务的数据来自冰岛语社区维护的mideind/icelandic-arc-challenge数据集,而非统一机器翻译管道产出的LumiOpen/arc_challenge_mt。这说明arc_mt任务族对“机器翻译”持开放定义——只要数据是 ARC Challenge 的非英文版本即可纳入,无论其来源是机翻流水线还是社区人工整理。

三、主配置逐字段解析:从数据集到提示词与指标

主配置 arc_challenge_mt_fi.yaml 完整定义了一个标准的多项选择(multiple choice)评测任务。逐字段说明如下:

3.1 标签与数据集来源

tag: - arc_challenge_mt task: arc_challenge_mt_fi dataset_path: LumiOpen/arc_challenge_mt dataset_name: fi
  • tag:为任务打上arc_challenge_mt标签。在 lm-evaluation-harness 中,标签允许用lm-eval run --tasks arc_challenge_mt一次性运行整族任务(详见下文第五节),无需逐个列举语言名。
  • dataset_path:Hugging Face 数据集标识符LumiOpen/arc_challenge_mt
  • dataset_name:数据集的语言子集,fi即芬兰语子集。

3.2 评测类型与数据切分

output_type: multiple_choice training_split: train validation_split: validation test_split: test
  • output_type: multiple_choice:告诉评测框架按“多项选择”方式计算 loglikelihood,即分别计算每个候选选项作为续写的概率,取概率最高者为模型答案。
  • 三个*_split字段分别指定训练、验证与测试切分。arc_mt 任务族保留了完整的train切分(尽管推理评测通常只使用test),这为需要 few-shot 示例或需要微调/校准的场景留出了空间。

3.3 提示词模板与答案提取

doc_to_text: "Question: {{question}}\nAnswer:" doc_to_target: "{{choices.label.index(answerKey)}}" doc_to_choice: "{{choices.text}}"

这三行是该任务提示词构造的核心,采用 Jinja2 模板语法:

  • doc_to_text:构造发给模型的提示词,形如Question: <问题文本>\nAnswer:{{question}}来自数据集中每条样本的question字段。
  • doc_to_choice:定义选项列表。{{choices.text}}从数据集的choices字段取出全部候选文本,作为多项选择评测时的候选续写串。
  • doc_to_target:将正确答案映射为选项索引。数据集通常以answerKey(如"B")标记正确答案,{{choices.label.index(answerKey)}}先取出choices.label这一组选项字母,再用.index(answerKey)求出正确答案字母对应的整数下标,供评测框架与模型预测结果比对。

3.4 去污染(Decontamination)支持

should_decontaminate: true doc_to_decontamination_query: "Question: {{question}}\nAnswer:"
  • should_decontaminate: true:开启训练数据污染检测,防止评测样本出现在模型预训练语料中导致分数虚高。
  • doc_to_decontamination_query:指定用于去污染比对的核心文本。这里复用了问题文本,配合仓库 decontamination 相关的工具链(参见 decontamination 文档)执行 n-gram 匹配检查。

3.5 指标定义

metric_list: - metric: acc aggregation: mean higher_is_better: true - metric: acc_norm aggregation: mean higher_is_better: true
  • acc:标准准确率,直接比较模型最高概率选项与正确答案。
  • acc_norm:归一化准确率,用各选项续写概率除以选项的 token 长度后再比较。这一指标对选项长度不均衡的多选题更公平,也是 ARC 类任务上普遍报告的主指标。
  • 两者都以mean聚合、higher_is_better: true,最终输出所有样本的平均值。

3.6 版本元数据

metadata: version: 1.0

metadata.version是任务的配置版本号,用于结果缓存与复现追踪——修改任务定义时应递增版本号,避免使用旧缓存得出错误结果。

四、提示词与评测流程的底层原理

arc_mt的评测链路与仓库中其他multiple_choice任务(如原版 arc 任务)完全一致。从源码结构看,评测请求由模型后端(如 huggingface.py)以loglikelihood请求执行:对每个样本,框架将doc_to_text生成的提示词分别与doc_to_choice中的每个选项拼接,计算拼接串的条件概率,acc取概率最高的选项,acc_norm则先按选项 token 数归一化再取最高。

这意味着arc_mt各语言子任务的评测行为与英文 ARC 完全同构,唯一的差异是问题与选项文本被翻译成了目标语言。因此,任何在英文 ARC 上可用的技巧(few-shot 示例、提示词改写、答案抽取过滤等)都可直接迁移到arc_mt

五、运行与验证:lm-eval CLI 实战

arc_mt任务族可直接通过 lm-evaluation-harness 的 CLI 运行。该仓库采用lm-eval命令 + 子命令的入口设计(见 harness.py),核心子命令为runlsvalidate

5.1 列出任务(ls)

运行单个语言子任务前,可先用ls确认任务名与标签已正确注册:

lm-eval ls tasks | grep arc_challenge_mt

预期输出应包含arc_challenge_mt_daarc_challenge_mt_fiarc_challenge_mt_is等 12 个子任务名。

5.2 运行单个语言子任务(run)

以芬兰语为例,用 Hugging Face 模型评测:

lm-eval run \ --model hf \ --model_args pretrained=EleutherAI/pythia-14m \ --tasks arc_challenge_mt_fi \ --num_fewshot 0 \ --device cpu

参数说明:

  • --model hf:使用 Hugging Face Transformers 后端,更多后端(vLLM、SGLang、GGUF、API 模型等)可参考 model_guide.md。
  • --model_args pretrained=...:指定模型权重,仓库测试用例(如 test_huggingface.py)中常用pythia-14m这类小模型做功能验证。
  • --tasks arc_challenge_mt_fi:任务标识符,可直接换成任一语言子任务名。
  • --num_fewshot 0:0-shot 评测;ARC 相关评测也可配合train切分构造 few-shot 示例。
  • --device cpu:无 GPU 环境时指定 CPU,评测速度较慢但可验证全流程。

5.3 按标签一次运行全部语言(run + tag)

利用tag: [arc_challenge_mt],可以一条命令评测全部 12 种语言,得到完整的跨语言对比结果:

lm-eval run \ --model hf \ --model_args pretrained=EleutherAI/pythia-14m \ --tasks arc_challenge_mt \ --num_fewshot 0 \ --device cpu

此时评测框架会展开标签arc_challenge_mt下所有子任务,分别输出各语言的accacc_norm,方便直接比较模型在不同欧洲语言上的推理能力差异。

5.4 校验配置(validate)

修改或新增语言子任务后,可用validate子命令检查 YAML 配置的合法性:

lm-eval validate --tasks arc_challenge_mt

该命令会校验include引用是否有效、字段拼写、doc_to_*模板能否在数据上求值等,是新增语言前必做的检查。任务定义的完整字段说明可参考 task_guide.md 与 new_task_guide.md。

六、扩展新语言与注意事项

arc_mt的设计目标是在未来不断扩充语种。基于上述结构,新增一种语言的成本极低,可参照以下模式:

  1. 确认目标语言的 ARC Challenge 数据已发布到 Hugging Face(如加入LumiOpen/arc_challenge_mt的新语言子集);
  2. 在 lm_eval/tasks/arc_mt/ 下新建arc_challenge_mt_<语言码>.yaml,内容仅三行:include: arc_challenge_mt_fi.yamltask: arc_challenge_mt_<语言码>dataset_name: <语言码>
  3. 运行lm-eval validate --tasks arc_challenge_mt_<语言码>校验;
  4. 若数据来自独立数据集(而非统一机翻管道),则仿照冰岛语子任务完整重写配置并替换dataset_path

需要注意的实践要点:

  • 指标解读:优先参考acc_norm,它对选项长度差异更稳健;两种指标均可在各语言之间横向对比。
  • few-shot 一致性:由于所有语言共享同一模板与指标配置,跨语言对比的结果差异主要反映模型的多语言能力,而非评测口径差异。
  • 去污染开关should_decontaminate: true默认开启,若需关闭可比对其他任务的配置方式进行覆盖,但在报告结果时建议保留,以保证分数的可信度。

七、小结

arc_mt是 lm-evaluation-harness 中一个组织精巧、易于扩展的多语言评测任务族:以 arc_challenge_mt_fi.yaml 为主模板,通过 YAMLinclude继承机制派生出丹麦语、德语、希腊语、西班牙语、芬兰语、匈牙利语、冰岛语、意大利语、挪威语、波兰语、葡萄牙语、瑞典语共 12 个语言子任务;全部任务采用统一的multiple_choice评测类型、acc/acc_norm双指标与内置去污染机制。借助lm-eval run --tasks arc_challenge_mt一行命令即可获得模型在十余种欧洲语言上的 ARC Challenge 推理表现对比,是研究多语言模型科学推理能力的直接入口。

【免费下载链接】lm-evaluation-harnessA framework for few-shot evaluation of language models.项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harness

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询