Belebele 多语言阅读理解基准评测指南:在 lm-evaluation-harness 中运行 122 语言变体的少样本评估
【免费下载链接】lm-evaluation-harnessA framework for few-shot evaluation of language models.项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harness
Belebele 是一个覆盖 122 种语言变体的大规模多语言机器阅读理解(MRC)数据集,每条问题都基于 FLORES-200 平行语料中的短文片段,并配备四个选项。本文基于 lm-evaluation-harness 仓库中 lm_eval/tasks/belebele/README.md 及其完整任务配置,系统讲解该基准在框架中的任务/组结构、YAML 配置原理、配置生成脚本与具体运行方法,帮助你用 loglikelihood 多选评分方式,对单语与多语模型在高、中、低资源语言上的阅读理解能力进行统一评测与跨语言对比。
一、Belebele 基准简介
Belebele(论文《The Belebele Benchmark for Massively Multilingual NLU Evaluation》,arXiv:2308.16884)是一个覆盖122 种语言变体的多选题机器阅读理解(MRC)数据集,其主要设计目标包括:
- 大规模多语言覆盖:同时涵盖高资源(high-resource)、中资源(medium-resource)与低资源(low-resource)语言,可用于评测单语与多语模型。
- 四选一阅读理解:每个问题包含四个选项,且都关联到FLORES-200数据集中的一段短文。
- 严格的人工标注与质检:标注流程经过精心设计,以构造能够区分不同层次通用语言理解能力的问题,并辅以大量质量检查。
- 完全平行(fully parallel):同一问题在所有语言上平行存在,可直接对不同语言间的模型表现进行对比。
- 有区分度:即使是纯英文数据集本身,也足以对当前最先进的(state-of-the-art)语言模型构成挑战。
该基准为评估与分析语言模型及 NLP 系统的多语言能力提供了新的途径。仓库 README 中还给出了标准的 BibTeX 引用条目(见 lm_eval/tasks/belebele/README.md),在论文或技术报告中引用该基准时可直接使用。
二、任务与组结构(Groups and Tasks)
在 lm-evaluation-harness 中,Belebele 被组织为一个组(group)与 122 个语言子任务(tasks),全部采用loglikelihood-based multiple-choice scoring(基于对数似然的多选题打分)进行评测。
2.1 组:belebele
组名belebele包含 Belebele 数据集全部 122 种语言的任务,评测方法遵循MMLU 原始实现的方法论(即通过每组语言的平均准确率聚合得到整体结果)。
该组的定义位于 lm_eval/tasks/belebele/_belebele.yaml,其结构要点如下:
group: belebele:声明组名;task:下列出全部 122 个语言子任务(如belebele_acm_Arab、belebele_eng_Latn、belebele_zho_Hans等);aggregate_metric_list:定义了组的聚合指标,对acc与acc_norm两个指标分别按mean(均值)聚合,并设置weight_by_size: true,即按各语言子任务的样本规模加权平均;metadata: version: 0.1:组配置的版本号。
2.2 子任务:belebele_{language}
每个语言变体对应一个独立任务,命名遵循belebele_{language}约定,其中{language}采用 FLORES-200 的语言-文字代码(ISO 639-3 语言码 + 文字码),例如:
belebele_eng_Latn:英语(拉丁文字);belebele_zho_Hans:简体中文;belebele_arb_Arab:阿拉伯语(阿拉伯文字);belebele_hin_Deva:印地语(天城文字)。
每个语言任务对应目录下独立的一个 YAML 文件,例如 belebele_eng_Latn.yaml、belebele_zho_Hans.yaml、belebele_arb_Arab.yaml。
仓库中评测的变体为0-shot 或 few-shot(少样本)评测,并使用英文指令(English Instructions)。
三、任务配置深度解析:_default_template_yaml
所有 122 个语言任务的公共配置都集中在一个共享模板文件 lm_eval/tasks/belebele/_default_template_yaml 中,各语言 YAML 仅通过include: _default_template_yaml继承它,并覆盖语言相关的少量字段。该模板是整个 Belebele 评测的"灵魂",逐项解析如下:
dataset_path: facebook/belebele fewshot_config: sampler: first_n output_type: multiple_choice should_decontaminate: true doc_to_decontamination_query: "{{question}}" doc_to_text: "P: {{flores_passage}}\nQ: {{question.strip()}}\nA: {{mc_answer1}}\nB: {{mc_answer2}}\nC: {{mc_answer3}}\nD: {{mc_answer4}}\nAnswer:" doc_to_choice: ["A", "B", "C", "D"] doc_to_target: "{{['1', '2', '3', '4'].index(correct_answer_num)}}" metric_list: - metric: acc aggregation: mean higher_is_better: true - metric: acc_norm aggregation: mean higher_is_better: true metadata: version: 0.0| 配置项 | 取值 | 含义与影响 |
|---|---|---|
dataset_path | facebook/belebele | 数据集在 Hugging Face Hub 上的仓库 ID,评测时按需自动下载加载。 |
fewshot_config.sampler | first_n | 少样本示例采样器采用"取前 N 条"策略,从fewshot_split中按顺序选取示例,保证可复现。 |
output_type | multiple_choice | 输出类型为多选题,框架将按选择题方式计算各选项的 loglikelihood 并取最高者作为预测。 |
should_decontaminate | true | 开启数据去污染(decontamination)流程,用于检查评测数据是否与模型训练数据重叠。 |
doc_to_decontamination_query | "{{question}}" | 去污染查询使用问题文本本身。 |
doc_to_text | 见上 | 把样本渲染成模型输入 prompt:依次呈现 FLORES 短文(P:)、问题(Q:)与 A/B/C/D 四个选项,最后以Answer:引导模型作答。 |
doc_to_choice | ["A", "B", "C", "D"] | 四个选项的标签,框架将对每个选项计算条件 loglikelihood。 |
doc_to_target | "{{['1', '2', '3', '4'].index(correct_answer_num)}}" | 将数据集中的正确答案编号('1'/'2'/'3'/'4')映射为选项索引(0/1/2/3),与doc_to_choice对应。 |
metric_list | acc、acc_norm | 评测指标为原始准确率与归一化准确率(详见第五节),均按均值聚合、越大越好。 |
各语言子任务(如 belebele_eng_Latn.yaml)只需四个字段即可复用模板:
dataset_name: eng_Latn # 指定语言-文字子集 fewshot_split: test # 少样本示例取自 test 划分 include: _default_template_yaml # 继承公共模板 task: belebele_eng_Latn # 任务名 test_split: test # 评测划分四、配置生成脚本:_generate_configs.py
由于需要为 122 种语言分别维护任务,仓库提供了自动化生成脚本 lm_eval/tasks/belebele/_generate_configs.py,用于从一份基础 YAML 批量产出全部语言子任务与组配置。其工作流程为:
- 获取语言列表:调用 Hugging Face Datasets Server 的 splits API(
https://datasets-server.huggingface.co/splits?dataset=facebook/belebele)查询facebook/belebele数据集包含的所有 split; - 过滤默认划分:跳过名中包含
"default"的 split,其余每个 split(即每种语言-文字变体)生成一个子任务 YAML; - 批量生成子任务:每个子任务 YAML 包含
include(指向基础模板文件名)、task(belebele_{lang})、test_split与fewshot_split(均设为该语言); - 生成组配置:汇总全部语言任务到
_belebele.yaml,并写入aggregate_metric_list(acc、acc_norm的均值聚合)与版本号。
脚本还支持两个可选参数:
--task_prefix:为任务名添加前缀(如用于区分不同 prompt 变体,见下文第六节的 afrobench 用法);--cot_prompt_path:指定 CoT(思维链)prompt JSON 文件路径(当前默认模板未使用)。
例如,基于当前模板重新生成全部配置的命令形态为:
python lm_eval/tasks/belebele/_generate_configs.py \ --base_yaml_path lm_eval/tasks/belebele/_default_template_yaml \ --save_prefix_path lm_eval/tasks/belebele/belebele仓库中 122 个belebele_{lang}.yaml与_belebele.yaml即由此类脚本流程产出并提交,保证了各语言配置的高度一致性与可维护性。
五、指标含义:acc 与 acc_norm
Belebele 任务(与 MMLU 方法论一致)使用两个指标:
acc(原始准确率):模型预测选项与正确答案一致的比例。预测基于各选项的 loglikelihood 比较得出。acc_norm(长度归一化准确率):将各选项的条件 loglikelihood 按其 token 长度归一化后再比较,用于缓解模型对较短选项的系统性偏好,在多选题评测中通常更为稳健。
两个指标均以mean聚合、higher_is_better: true。在组级别(belebele),_belebele.yaml中两个指标均设置weight_by_size: true,按子任务规模加权后再求平均,从而得到全局的加权多语言平均分。
六、运行评测:命令行实操
6.1 运行单个语言任务
使用lm_evalCLI 评测英语任务,例如:
lm_eval --model hf \ --model_args pretrained=meta-llama/Llama-3.2-1B \ --tasks belebele_eng_Latn \ --device cuda \ --batch_size auto6.2 运行整个组(全部 122 语言)
lm_eval --model hf \ --model_args pretrained=meta-llama/Llama-3.2-1B \ --tasks belebele \ --device cuda \ --batch_size auto--tasks belebele会加载_belebele.yaml中列出的全部 122 个语言子任务,并在评测结束后输出每个子任务的acc/acc_norm以及组级加权聚合结果,便于直接观察模型在不同资源语言上的表现差异。
6.3 使用本地模型目录与量化参数
--model_args支持所有 Hugging Face 加载参数,例如指定本地路径与低精度:
lm_eval --model hf \ --model_args pretrained=./models/your-model,trust_remote_code=True,dtype=bfloat16 \ --tasks belebele \ --device cuda \ --batch_size auto七、仓库内的衍生变体
除独立目录外,Belebele 任务配置还被其他任务族复用。例如 lm_eval/tasks/afrobench/belebele/ 下就包含了面向非洲语言的 Belebele 子集(afrobench组),其中通过_generate_configs.py的--task_prefix机制派生了prompt_1、prompt_2等多 prompt 变体(如 belebele_afr.yaml、belebele_eng.yaml 等),用于评估不同 prompt 设计对多语言理解的影响。这说明了本任务目录的配置模板与生成脚本具备良好的可复用性。
八、自定义与扩展建议
若要在现有基础上扩展(例如新增 CoT 评测变体或调整 prompt),可以遵循仓库既有的"模板 + 继承"模式:
- 复制
_default_template_yaml或直接修改doc_to_text中P: ... / Q: ... / Answer:的渲染格式; - 用
_generate_configs.py的--save_prefix_path与--task_prefix生成一套新的语言任务与组配置; - 用
lm_eval --tasks <新组名>验证配置可正常加载并输出指标。
在修改前,可通过lm_eval --tasks belebele --limit 10之类的小规模限流参数先行验证,确认 prompt 渲染与评分逻辑符合预期后再进行全量评测。
参考与延伸阅读
- Belebele 任务 README:lm_eval/tasks/belebele/README.md
- 公共任务模板:lm_eval/tasks/belebele/_default_template_yaml
- 组配置:lm_eval/tasks/belebele/_belebele.yaml
- 语言子任务示例:belebele_eng_Latn.yaml、belebele_zho_Hans.yaml、belebele_arb_Arab.yaml
- 配置生成脚本:lm_eval/tasks/belebele/_generate_configs.py
- 衍生变体:lm_eval/tasks/afrobench/belebele/
【免费下载链接】lm-evaluation-harnessA framework for few-shot evaluation of language models.项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harness
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考