
lm-evaluation-harness 中的 AfroBench openai_mmlu 任务多语言 MMLU 在三种非洲语言上的评测实现【免费下载链接】lm-evaluation-harnessA framework for few-shot evaluation of language models.项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harness本篇技术指南围绕 lm-evaluation-harness 仓库中lm_eval/tasks/afrobench/openai_mmlu/目录下的任务实现展开系统讲解该任务如何基于 OpenAI MMMLU 数据集将大规模多任务语言理解MMLU评测迁移到阿拉伯语Arabic、斯瓦希里语Swahili与约鲁巴语Yoruba三种语言并给出五种提示模板prompt的完整定义、YAML 配置生成流程、评测指标与聚合逻辑以及如何通过 AfroBench 顶层组运行该任务。读完本文你将掌握如何在 lm-evaluation-harness 中按语言、按提示模板执行多语言 MMLU 评测并能自行扩展新的语言与提示模板。1. 关联文档与背景从 MMLU 到多语言 MMMLUlm_eval/tasks/afrobench/openai_mmlu/README.md是一份简短的基准卡片核心信息指向 OpenAI 的 MMMLUMultilingual Massive Multitask Language Understanding数据集论文标题Multilingual Massive Multitask Language Understanding (MMMLU)论文链接https://arxiv.org/abs/2009.03300即 Hendrycks 等人的 MMLU 论文MMMLU 为该工作发布的多语言扩展数据数据集主页https://huggingface.co/datasets/openai/MMMLU引用信息附带了标准的 BibTeX 引用hendrycks2021measuringmassivemultitasklanguage。该 README 同时是 AfroBench 基准的一部分。AfroBench 是面向非洲语言的大规模多任务评测基准覆盖 64 种非洲语言、15 个任务与 22 个数据集详见 afrobench/README.md其中openai_mmlu正是该基准中承接 MMLU 任务afrobench_mmlu_tasks的组成部分。openai_mmlu目录从 MMMLU 数据集中抽取了三种语言子集将其接入 lm-evaluation-harness 的任务框架用于评估模型在非洲及周边语言上的世界知识与推理能力。注意本 README 中的 HomePage 与 Paper Link 属于外部资源引用本文后续的工程细节全部来自仓库内实际存在的源码与 YAML 配置。2. 目录结构与任务组织openai_mmlu/目录采用基础任务 按语言/提示模板展开的结构lm_eval/tasks/afrobench/openai_mmlu/ ├── README.md # 本文对应的基准卡片 ├── openai_mmlu.yaml # 组group定义聚合 5 个 prompt 子任务 ├── utils.py # 生成语言级 YAML 的脚本 ├── prompt_1/ # 提示模板 1每种语言一个 YAML │ ├── openai_mmlu # 基础任务模板无扩展名 │ ├── openai_mmlu_ara.yaml │ ├── openai_mmlu_swa.yaml │ └── openai_mmlu_yor.yaml ├── prompt_2/ … prompt_5/ # 其余 4 种提示模板结构与 prompt_1 相同层级关系为AfroBench 顶层组afrobench→ openai_mmlu 组 → 每种 prompt 一个子组目录 → 每种语言一个 task。这种组—子组—任务的三级结构在 lm-evaluation-harness 中非常典型便于按任意粒度全基准、某数据集、某提示模板、某语言运行评测。3. 基础任务模板openai_mmluprompt_1/openai_mmlu无扩展名的模板文件定义了该任务在数据集层面的核心配置tag: - openai_mmlu_tasks - openai_mmlu_prompt_1 - afrobench_mmlu_tasks dataset_path: openai/MMMLU output_type: multiple_choice test_split: test fewshot_config: sampler: first_n doc_to_target: {{[A, B, C, D].index(Answer.strip())}} should_decontaminate: true doc_to_decontamination_query: {{Question}} doc_to_choice: [A, B, C, D] metric_list: - metric: acc aggregation: mean weight_by_size: true - metric: acc_norm aggregation: mean weight_by_size: true metadata: version: 1.0各字段说明如下配置项值作用dataset_pathopenai/MMMLU指定 Hugging Face 数据集标识符评测时由 lm-evaluation-harness 自动加载output_typemultiple_choice声明为多选题任务框架按选项计算对数似然并选最高者test_splittest使用数据集的 test 划分作为评测集doc_to_target{{[A,B,C,D].index(Answer.strip())}}将数据集中正确答案Answer映射为选项下标0–3用于计算指标doc_to_choice[A, B, C, D]定义四个候选选项标签供doc_to_text中的模板变量展开fewshot_config.samplerfirst_nfew-shot 示例按数据集顺序取前 N 条should_decontaminatetrue启用去污染decontamination流程配套doc_to_decontamination_querymetric_listacc与acc_norm同时报告准确率与长度归一化准确率均按样本数加权求均值从源码结构看对照 lm_eval/tasks/afrobench/openai_mmlu/prompt_1/openai_mmlu 与 lm_eval/tasks/afrobench/openai_mmlu/prompt_1/openai_mmlu_ara.yamlopenai_mmlu模板自身不指定doc_to_text——它由各语言 YAML 通过include继承后覆盖从而实现同一数据集、同一答案映射、不同提示措辞的灵活组合。4. 语言级 YAML三种语言 × 五种提示模板每种语言ara/swa/yor在 5 个prompt_N目录下各有一个 YAML共 15 个任务文件。以prompt_1/openai_mmlu_ara.yaml为例# Generated by utils.py dataset_name: AR_XY doc_to_text: Q: {{Question.strip()}} A: {{A}} B: {{B}} C: {{C}} D: {{D}} Please choose the correct answer from the options above: include: openai_mmlu task: openai_mmlu_ara_prompt_1语言与数据集子集代码的对应关系见 utils.py语言数据集子集名dataset_name任务名阿拉伯语 ArabicAR_XYopenai_mmlu_ara_prompt_N斯瓦希里语 SwahiliSW_KEopenai_mmlu_swa_prompt_N约鲁巴语 YorubaYO_NGopenai_mmlu_yor_prompt_N其中include: openai_mmlu让该任务继承基础模板的全部字段数据集、选项、指标、去污染设置等仅通过dataset_name选择多语言数据集的具体子集并通过doc_to_text覆盖提示文本。Question、A–D、Answer等花括号变量来自 MMMLU 数据集的字段。4.1 五种提示模板的定义五种提示模板统一定义在 utils.py 的prompt_func中覆盖了从朴素问答到批判性分析的不同提示风格prompt_1Q: {{Question.strip()}}\nA: {{A}}\nB: {{B}}\nC: {{C}}\nD: {{D}}\nPlease choose the correct answer from the options above:prompt_2Question: {{Question.strip()}}\n1: {{A}}\n2: {{B}}\n3: {{C}}\n4: {{D}}\nPlease select the correct answer from the given choices:选项改用数字编号prompt_3Input Question: {{Question.strip()}}\nOption A: …\nOption D: …\nPlease indicate the correct option from the list above:选项带 Option 前缀prompt_4Critically analyze the question and select the most probable answer from the list:\n{{Question.strip()}}\nChoices:\nA) …\nD) …加入批判性分析指令prompt_5Answer the question and pick the correct answer from the options: {{Question.strip()}}\nOptions:\nA. …\nD. …\nPlease choose the correct option from the above list:选项使用 A. 样式这些模板展示了多语言多选题评测中提示工程的常见做法同一任务以不同措辞、不同选项编号方式字母/数字、不同指令强度来测量模型的提示鲁棒性prompt robustness这正是 AfroBench 报告结果中提示方式影响显著的关键变量。5. 组定义与指标聚合5.1 openai_mmlu 组openai_mmlu.yaml 定义了该数据集的组group: openai_mmlu task: - openai_mmlu_prompt_1 - openai_mmlu_prompt_2 - openai_mmlu_prompt_3 - openai_mmlu_prompt_4 - openai_mmlu_prompt_5 aggregate_metric_list: - metric: acc aggregation: mean weight_by_size: true metadata: version: 1group: openai_mmlu将 5 个 prompt 子组openai_mmlu_prompt_1…openai_mmlu_prompt_5聚合成一个可运行单元aggregate_metric_list对acc按样本数加权求均值得到跨提示模板的汇总准确率每个prompt_N子组由对应目录内 3 个语言任务组成如prompt_1目录下openai_mmlu_ara_prompt_1、openai_mmlu_swa_prompt_1、openai_mmlu_yor_prompt_1内部同样存在隐式的任务级聚合。5.2 在 AfroBench 中的位置顶层组 afrobench.yaml 通过- afrobench_MT_tasks等标签引用各任务族其中afrobench_mmlu_tasks标签即指向openai_mmlu系列见基础模板中的tag字段。AfroBench 的 README 也明确指出afrobench组运行基准内全部任务与提示而afrobench_liteafrobench-lite.yaml仅运行轻量版子集。因此运行openai_mmlu组可单独评测该数据集运行afrobench或带afrobench_mmlu_tasks标签的任务则可将其纳入更大规模评测。6. 生成语言 YAMLutils.py 的用法utils.py 是一个可独立运行的生成器脚本用于为指定语言和提示模板生成 YAML 文件。命令行参数python utils.py --output-dir ./ --mode prompt_1 --overwrite参数默认值说明--output-dir./YAML 输出目录脚本会在其下创建prompt_N子目录--modeprompt_1提示模板编号可选prompt_1~prompt_5--overwriteTruestore_true覆盖已存在的文件若不加该参数且文件已存在脚本会抛出FileExistsError并列出冲突文件名脚本核心逻辑gen_lang_yamls会遍历ara、swa、yor三种语言用lang2_code映射出对应的数据集子集名AR_XY/SW_KE/YO_NG从prompt_func(mode, lang)取对应提示模板文本写入{output_dir}/{mode}/openai_mmlu_{lang}.yaml内容包含include: openai_mmlu、task、dataset_name与doc_to_text四个字段。仓库中 prompt_1~prompt_5 目录下的 15 个 YAML 均标注了# Generated by utils.py即由该脚本生成。若需新增语言或提示模板修改languages/lang2_code/prompt_map后重新运行脚本即可这保证了任务配置与脚本逻辑的一致性。7. 运行评测命令与批量脚本7.1 直接运行 openai_mmlu 组使用 lm-evaluation-harness 的标准 CLI 运行整个openai_mmlu组lm_eval --model hf \ --model_args pretrainedyour_model_name \ --tasks openai_mmlu \ --batch_size 5 \ --num_fewshot 0 \ --verbosity DEBUG \ --output_path results/ \ --log_samples--tasks openai_mmlu会依次运行 5 个提示模板下的 3 种语言共 15 个任务并按组定义输出加权平均的acc若只想评测某个子集可改为openai_mmlu_prompt_13 个语言任务或openai_mmlu_ara_prompt_1单个任务--num_fewshot 0为 0-shot由于基础模板配置了fewshot_config.sampler: first_n也可增大 few-shot 数量多选题任务output_type: multiple_choice默认采用 loglikelihood 方式评分即对四个选项计算条件概率选概率最高者为模型答案。7.2 AfroBench 官方示例脚本仓库提供了可直接参考的批量运行脚本 run_afrobench.sh以及轻量版 run_afrobench_lite.sh。脚本要点设置batch_size5、num_fewshot0通过CUDA_VISIBLE_DEVICES0,1指定 GPU遍历model_names数组如meta-llama/Llama-3.1-8B-Instruct、google/gemma-2-27b-it、Jacaranda/AfroLlama_V1等逐个运行lm_eval --model hf \ --model_args pretrained${model_names},parallelizetrue \ --tasks afrobench \ --batch_size ${batch_size} \ --num_fewshot ${num_fewshot} \ --verbosity DEBUG \ --output_path path_to_results/ \ --log_samples将--tasks afrobench换成--tasks openai_mmlu即只跑本文所述数据集。运行接口的更多细节可参考 docs/interface.md模型加载参数说明见 docs/model_guide.md。8. 评测口径与去污染openai_mmlu基础模板在实现上体现了两个重要的评测严谨性设计双指标报告metric_list同时包含acc与acc_norm长度归一化准确率并在组级聚合中按样本数加权weight_by_size: true避免样本量不一致的语言/提示子集被简单平均扭曲去污染支持should_decontaminate: true配合doc_to_decontamination_query: {{Question}}在评测前可对预训练语料进行污染检测decontamination降低模型曾见过测试题对结果的干扰。该机制与仓库中 docs/decontamination.md 描述的流程一致也对应 tests/test_janitor.py 等测试所覆盖的去污染工具链。9. 小结openai_mmlu是 AfroBench 在 lm-evaluation-harness 中落地多语言 MMLU 评测的完整样例以openai/MMMLU数据集为基础模板通过include机制按语言生成任务、按提示模板分组并在afrobench顶层组中通过标签被统一调度。其数据模板 语言覆盖 提示变体 组级聚合的组织方式为在 lm-evaluation-harness 中扩展任意多语言多选题基准提供了可直接复用的工程范式——只需修改 utils.py 中的语言表与提示映射即可快速生成新的评测任务族。【免费下载链接】lm-evaluation-harnessA framework for few-shot evaluation of language models.项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harness创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考