在 lm-evaluation-harness 中使用 NTREX-128 基准评估多语言翻译模型:AfroBench ntrex 任务组实战指南
【免费下载链接】lm-evaluation-harnessA framework for few-shot evaluation of language models.项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harness
本指南以 lm_eval/tasks/afrobench/ntrex/README.md 为核心,结合 ntrex.yaml 聚合配置、gen_utils.py 生成脚本以及 prompt_1/2/3 目录下的 192 个语言级 YAML 任务文件,系统讲解 NTREX-128 新闻翻译测试集如何被接入 lm-evaluation-harness,涵盖数据集背景、翻译方向性结论、三类提示词模板、语言对任务命名规范、聚合指标配置与实测运行命令。读者读完将能够在本地一键运行面向非洲语言及英语的多语言机器翻译评估,并理解其背后"英语为源语言方向"这一关键设计约束。
一、NTREX-128 基准:面向 128 语言的大规模新闻翻译评测集
NTREX-128(News Test References for MT Evaluation of 128 Languages)是微软团队于 2022 年发布的机器翻译(MT)评测数据集,论文题为NTREX-128 – News Test References for MT Evaluation of 128 Languages(Federmann, Kocmi & Xin, 2022)。该数据集提供从英语到共计 128 种目标语言的测试参考译文,是当时覆盖语言最广的新闻领域翻译评测集之一,用于支撑大规模多语言机器翻译研究。
根据该 README 中记录的论文摘要,NTREX-128 的核心贡献有三点:
- 数据构建:描述了测试集的构建过程;
- 质量过滤:提出了一种基于人工评估的质量过滤方法;
- 方向性结论:通过实验确认了"测试集翻译方向"对评测指标有效性的重要影响——该数据集适用于评估英语源(English-sourced)的翻译模型,不建议用于反向(即其他语言→英语之外的逆向评估)。
这一方向性结论直接决定了本仓库中 ntrex 任务组的组织方式:所有语言对均以英语为源语言或英语为目标语言成对出现,且官方引用建议严格遵循英语源方向使用。仓库中同时保留了反向方向(非洲语言→英语)的配置,便于研究者对照验证,但官方推荐以英语源(English→African)方向为准。
二、仓库内 ntrex 任务组的目录结构与任务清单
NTREX 在 lm-evaluation-harness 中被封装为一个独立任务组(group),位于 lm_eval/tasks/afrobench/ntrex/,其整体结构如下:
lm_eval/tasks/afrobench/ntrex/ ├── README.md # 论文信息、摘要与引用(本文依据) ├── ntrex.yaml # 任务组聚合配置(group: african_ntrex) ├── gen_utils.py # 语言级 YAML 批量生成脚本 ├── prompt_1/ # 第一套提示词模板 │ ├── african-english/ # 非洲语言 → 英语(反向方向) │ └── english-african/ # 英语 → 非洲语言(推荐方向) ├── prompt_2/ # 第二套提示词模板 └── prompt_3/ # 第三套提示词模板每一套 prompt 下都包含31 个非洲/相关语言(afr、amh、arb、bem、ewe、fra、hau、ibo、kin、mey、mlg、msa、nde、nso、nya、orm、shi、sna、som、ssw、swa、tam、tel、tir、ton、tsn、urd、ven、wol、xho、yor、zul),分别生成两个方向的配置文件:
african-english/ntrex_<lang>-eng_Latn.yaml:如ntrex_swa_Latn-eng_Latn.yaml,任务名ntrex_swa_Latn-eng_Latn_prompt_1;english-african/ntrex_eng_Latn-<lang>.yaml:如ntrex_eng_Latn-swa_Latn.yaml,任务名ntrex_eng_Latn-swa_Latn_prompt_1。
语言代码遵循 ISO 639-3 加书写系统(拉丁Latn、埃塞俄比亚音节文字Ethi、阿拉伯文Arab、泰米尔文Taml、泰卢固文Telu)的格式,例如 Swahili 记为swa_Latn,Amharic 记为amh_Ethi。
三、任务组聚合配置:ntrex.yaml 逐字段解析
任务组的入口文件 ntrex.yaml 内容如下:
group: african_ntrex task: - ntrex_eng-afr_prompt_1 - ntrex_eng-afr_prompt_2 - ntrex_eng-afr_prompt_3 - ntrex_afr-eng_prompt_1 - ntrex_afr-eng_prompt_2 - ntrex_afr-eng_prompt_3 aggregate_metric_list: - metric: acc aggregation: mean weight_by_size: true metadata: version: 1各字段含义:
| 字段 | 值 | 说明 |
|---|---|---|
group | african_ntrex | 任务组名,可在 CLI 中作为--tasks值整体调用 |
task | 6 个方向×模板组合 | 英语→非洲(eng-afr)与非洲→英语(afr-eng)各 3 套提示词;每个组合内部再展开为 31 个语言任务 |
aggregate_metric_list.metric | acc | 聚合上报的指标名(各语言任务自身实际输出 bleu/chrf,见下文) |
aggregate_metric_list.aggregation | mean | 对子任务指标取平均 |
aggregate_metric_list.weight_by_size | true | 按每个语言子任务样本量加权平均,避免小语种被大语种稀释 |
metadata.version | 1 | 任务版本号,供结果缓存与溯源使用 |
weight_by_size: true是值得注意的配置:由于不同语言子任务的测试样本数不同,按样本量加权能让聚合结果更接近"总测试集上的总体表现",这也是多语言评测中常用的聚合策略。
四、语言级任务配置:prompt_1 模板与翻译评测定义
每个语言任务的 YAML 由gen_utils.py生成,以 Swahili 为例,英语→非洲方向 ntrex_eng_Latn-swa_Latn.yaml:
# Generated by utils.py dataset_name: swa_Latn doc_to_target: sentence_swa_Latn doc_to_text: "English: {{sentence_eng_Latn}} \nSwahili: " include: ntrex task: ntrex_eng_Latn-swa_Latn_prompt_1对应非洲→英语方向 ntrex_swa_Latn-eng_Latn.yaml:
# Generated by utils.py dataset_name: swa_Latn doc_to_target: sentence_eng_Latn doc_to_text: "Swahili: {{sentence_swa_Latn}} \nEnglish: " include: ntrex task: ntrex_swa_Latn-eng_Latn_prompt_1字段语义:
include: ntrex:继承公共模板(即 english-african 或 african-english 目录下的无扩展名文件ntrex),复用数据集路径、输出类型、指标与生成参数;dataset_name:Hugging Face 数据集masakhane/ntrex_african的子集名称(即语言代码),说明本仓库使用的是其非洲子集版本;doc_to_text:提示词模板,通过{{...}}引用 HF 数据集中的字段sentence_eng_Latn(英语句子)与sentence_<lang>(目标语言句子);doc_to_target:模型需生成的目标字段——英语→非洲方向为sentence_swa_Latn,反向则为sentence_eng_Latn。
公共模板 ntrex(无扩展名文件)
两套 prompt 目录下各有一个同名无扩展名文件作为公共模板,例如 prompt_1/english-african/ntrex:
tag: - ntrex_tasks - ntrex_eng-afr - ntrex_eng-afr_prompt_1 - afrobench_MT_tasks dataset_path: masakhane/ntrex_african output_type: generate_until validation_split: test fewshot_split: test test_split: test metric_list: - metric: bleu aggregation: bleu higher_is_better: true - metric: chrf aggregation: chrf higher_is_better: true generation_kwargs: until: - "\n" do_sample: false temperature: 0.0 repeats: 1 metadata: version: 1.0关键设计点:
- 输出类型为
generate_until:翻译任务不是分类(loglikelihood)而是自由生成,模型持续生成直至遇到换行符"\n"为止; - 解码策略为贪心:
do_sample: false且temperature: 0.0,保证评测可复现; - 评测指标为 BLEU 与 chrF:二者均为机器翻译标准指标,
higher_is_better: true表示越高越好;aggregation: bleu/chrf表示对句级分数做句子级聚合后整体上报; - 所有 split 均指向
test:测试集既作验证集也作少样本集(fewshot_split: test),即默认在测试集上做 zero-shot 生成评测; - tag 打标:
ntrex_tasks、ntrex_eng-afr、ntrex_eng-afr_prompt_1、afrobench_MT_tasks等标签用于按 tag 批量筛选任务(afrobench_MT_tasks说明它是 AfroBench 机器翻译任务家族的一员)。
五、三种提示词模板:从朴素翻译到专家角色设定
gen_utils.py 中的prompt_func定义了 6 种提示词变体(3 套模板 × 正反向)。以 Swahili 为例,完整对照如下:
| 模板 | 方向 | 提示词(doc_to_text) |
|---|---|---|
| prompt_1 | afr→eng | Swahili: {{sentence_swa_Latn}} \nEnglish: |
| prompt_1_reverse | eng→afr | English: {{sentence_eng_Latn}} \nSwahili: |
| prompt_2 | afr→eng | You are a translation expert. Translate the following Swahili sentences to English \nSwahili: {{sentence_swa_Latn}}\nEnglish: |
| prompt_2_reverse | eng→afr | You are a translation expert. Translate the following English sentences to Swahili \nEnglish: {{sentence_eng_Latn}} \nSwahili: |
| prompt_3 | afr→eng | As a Swahili and English linguist, translate the following Swahili sentences to English \nSwahili: {{sentence_swa_Latn}}\nEnglish: |
| prompt_3_reverse | eng→afr | As a Swahili and English linguist, translate the following English sentences to Swahili \nEnglish: {{sentence_eng_Latn}} \nSwahili: |
设计逻辑一目了然:
- prompt_1:最朴素的
语言: 句子 \nEnglish:形式,用于测量模型在无角色引导下的原生翻译能力; - prompt_2:加入
You are a translation expert角色设定与显式指令 "Translate the following ... sentences to ...",更贴近翻译任务的指令形式; - prompt_3:加入双语语言学家身份 "As a Swahili and English linguist",进一步强化对语言对的认知。
三套模板配合两个方向共产生 6 组任务,用于系统性地评估提示词敏感性(prompt sensitivity):同一模型在同一测试集上的翻译质量是否会因提示词表述方式不同而显著波动。这在 ntrex.yaml 中通过同时挂载 6 个任务得到体现。
六、语言列表与批量生成脚本 gen_utils.py
gen_utils.py 内置 31 个语言代码→语言名的映射表(如swa_Latn: Swahili、amh_Ethi: Amharic、yor_Latn: Yoruba等),并提供了命令行批量生成能力:
# 在 lm_eval/tasks/afrobench/ntrex 目录下执行 python gen_utils.py --mode prompt_1 --output-dir ./ --reverse False python gen_utils.py --mode prompt_2 --output-dir ./ --reverse TrueCLI 参数说明:
| 参数 | 默认值 | 可选值 | 说明 |
|---|---|---|---|
--overwrite | True(store_true) | — | 文件已存在时是否覆盖;不覆盖时若文件已存在会抛出FileExistsError并列出冲突文件名 |
--output-dir | ./ | 任意目录 | YAML 输出根目录 |
--mode | prompt_1 | prompt_1/prompt_2/prompt_3 | 选择生成哪套提示词 |
--reverse | False | True/False | False生成非洲→英语(写入african-english/),True生成英语→非洲(写入english-african/) |
生成规则(对应 gen_utils.py):
- 反向=False:文件名
ntrex_<lang>-eng_Latn.yaml,doc_to_target恒为sentence_eng_Latn; - 反向=True:文件名
ntrex_eng_Latn-<lang>.yaml,doc_to_target为sentence_<lang>; - 所有文件首行写入
# Generated by utils.py,并统一include: ntrex复用公共模板; - 若目标文件已存在且未开启
--overwrite,会在所有文件生成完毕后统一抛出FileExistsError。
七、在本地运行 ntrex 评测
完成上述配置后,即可通过 lm-evaluation-harness 的标准 CLI 运行评测。单语言单模板任务示例:
# 英语 → 斯瓦希里语(官方推荐的英语源方向,prompt_1) lm_eval --model hf \ --model_args pretrained=EleutherAI/pythia-1b \ --tasks ntrex_eng_Latn-swa_Latn_prompt_1 \ --device cuda # 斯瓦希里语 → 英语(反向对照) lm_eval --model hf \ --model_args pretrained=EleutherAI/pythia-1b \ --tasks ntrex_swa_Latn-eng_Latn_prompt_1 \ --device cuda整组运行(6 个方向×模板组合的全部语言任务):
lm_eval --model hf \ --model_args pretrained=EleutherAI/pythia-1b \ --tasks african_ntrex \ --batch_size auto \ --device cuda运行说明与注意事项:
- 需要先安装 lm-evaluation-harness(参见 README.md)并保证
datasets可访问 Hugging Face 上的masakhane/ntrex_african数据集; - 任务组
african_ntrex下每个语言子任务都会上报bleu与chrf两个指标,组级聚合另输出按样本量加权的acc聚合值; - 由于翻译任务为
generate_until自由生成,评估耗时取决于生成长度与模型解码速度,建议使用--batch_size auto并优先使用 GPU; - 可根据 README 中论文的方向性建议,将英语源方向(
ntrex_eng_Latn-*)作为主评测、反向作为辅助对照。
八、引用信息
在论文或技术报告中引用 NTREX-128 时,可直接复用 README 中提供的 BibTeX 条目(Federmann, Kocmi & Xin, 2022,发表于 Proceedings of the First Workshop on Scaling Up Multilingual Evaluation):
@inproceedings{federmann-etal-2022-ntrex, title = "{NTREX}-128 {--} News Test References for {MT} Evaluation of 128 Languages", author = "Federmann, Christian and Kocmi, Tom and Xin, Ying", editor = "Ahuja, Kabir and Anastasopoulos, Antonios and Patra, Barun and Neubig, Graham and Choudhury, Monojit and Dandapat, Sandipan and Sitaram, Sunayana and Chaudhary, Vishrav", booktitle = "Proceedings of the First Workshop on Scaling Up Multilingual Evaluation", month = nov, year = "2022", address = "Online", publisher = "Association for Computational Linguistics", doi = "10.18653/v1/2022.sumeval-1.4", pages = "21--24" }九、总结:从基准到可复现评测的完整链路
NTREX-128 任务组展示了 lm-evaluation-harness 中"数据基准 → 任务组 → 语言子任务"的三层封装模式:
- 基准层:NTREX-128 提供 128 语言的新闻翻译测试参考,本仓库选取其非洲子集(
masakhane/ntrex_african,31 语言); - 任务组层:ntrex.yaml 通过
group: african_ntrex聚合 6 组方向×模板任务,并配置按样本量加权的均值聚合; - 子任务层:gen_utils.py 自动生成 192 个语言级 YAML,每个 YAML 通过
include复用统一模板,明确定义提示词、目标字段、生成参数与 BLEU/chrF 指标。
对于希望评测自家多语言模型翻译能力的研究者,直接运行--tasks african_ntrex即可获得横跨 31 个非洲语言、3 套提示词、2 个方向的系统化翻译质量报告;同时务必遵循论文的方向性建议,以英语源方向为主进行解读。
【免费下载链接】lm-evaluation-harnessA framework for few-shot evaluation of language models.项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harness
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考