使用 lm-evaluation-harness 评测 MELA 多语言语言可接受性基准
【免费下载链接】lm-evaluation-harnessA framework for few-shot evaluation of language models.项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harness
导读
MELA(Multilingual Evaluation of Linguistic Acceptability)是当前规模最大的多语言语言可接受性(linguistic acceptability)基准之一,涵盖 46K 样本、10 种语言。本文以 lm_eval/tasks/mela/README.md 为骨架,结合 lm_eval/tasks/mela 目录下的 YAML 配置与 lm_eval/api/metrics.py 中的指标注册实现,系统讲解该基准在 lm-evaluation-harness 中的任务组织方式、配置字段含义、评测指标原理,以及如何在本地实际运行 MELA 评测。读完本文,你将掌握mela组及其 10 个语言子任务的定义结构,理解multiple_choice输出类型与 MCC 指标的配合机制,并能直接复现该基准的评测命令。
一、MELA 基准背景与任务定位
1.1 什么是语言可接受性评测
语言可接受性(linguistic acceptability)任务要求模型判断给定句子是否违反某种语言学约束:若句子违反约束,则标记为 "unacceptable"(不可接受),否则标记为 "acceptable"(可接受)。这是语法能力评测中的经典范式,最著名的同类基准是英文的 BLiMP 与 SuperGLUE 中的 CoLA。
MELA 论文(arXiv:2311.09033,ACL 2024)将这一范式扩展到多语言场景,构建了包含约 46K 样本、覆盖 10 种语言(分属多个语系)的基准,是"迄今最大的多语言语言可接受性基准"。论文核心发现包括:
- GPT-4o 展现出强多语言能力,超过微调后的 XLM-R;
- 开源多语言模型与之相比存在明显差距;
- 可接受性判断的跨语言迁移并不平凡:仅 500 条冰岛语微调样本即可在完全无关的语言(中文)上带来 23 的 MCC 性能提升;
- 在 MELA 上训练能提升 XLM-R 在句法相关任务上的表现。
事实边界说明:以上结论来自 README.md 转述的论文摘要;本仓库并不包含 46K 样本数据本身,数据通过 Hugging Face 数据集远程加载(见下文
dataset_path配置)。
1.2 基准的引用信息
在论文或报告中引用该基准时,README 提供了官方 BibTeX 条目(作者 Ziyin Zhang 等,ACL 2024 长文)。完整条目见 lm_eval/tasks/mela/README.md 的 Citation 小节,此处摘录关键字段:zhang2023mela、title 为 "MELA: Multilingual Evaluation of Linguistic Acceptability"、发表于 ACL 2024(曼谷),DOI 指向 arXiv:2311.09033。
二、任务与分组结构:mela组下的 10 个语言子任务
2.1 分组清单
README 定义了 1 个组(group)和 10 个任务(task):
组(Group)
mela:multilingual evaluation of linguistic acceptability 的聚合组。
任务(Tasks)
| 任务名 | 语言 |
|---|---|
mela_en | English(英语) |
mela_zh | Chinese(中文) |
mela_it | Italian(意大利语) |
mela_ru | Russian(俄语) |
mela_de | Germany(德语) |
mela_fr | French(法语) |
mela_es | Spanish(西班牙语) |
mela_ja | Japanese(日语) |
mela_ar | Arabic(阿拉伯语) |
mela_is | Icelandic(冰岛语) |
注意:README 任务列表末尾将 Icelandic 误写为
mela_ar,而仓库目录中实际存在的冰岛语任务文件为 mela_is.yaml。同样地,分组文件 _mela.yaml 的task列表中mela_ar被重复列出两次。按当前仓库实际文件判断,应视为笔误,真实任务集合为上述 10 个语言文件。
2.2 分组聚合配置解析
组定义位于 _mela.yaml,内容如下:
group: mela task: - mela_en - mela_zh - mela_it - mela_ru - mela_de - mela_fr - mela_es - mela_ja - mela_ar - mela_ar aggregate_metric_list: - metric: mcc weight_by_size: False metadata: version: 1关键点:
aggregate_metric_list声明组级聚合指标为mcc,且weight_by_size: False—— 即组结果取各语言子任务 MCC 的简单平均,不按样本量加权;metadata.version: 1用于结果文件(results.json)的版本追踪与缓存 key 管理;- 组内任务顺序即结果中展示的顺序。
三、任务配置核心:以mela_en为基座模板
3.1 基座配置逐字段拆解
英语任务 mela_en.yaml 是其余 9 个语言任务的模板,完整配置如下:
task: mela_en dataset_path: Geralt-Targaryen/MELA dataset_name: en training_split: train validation_split: dev test_split: test output_type: multiple_choice doc_to_text: "Sentence: {{sentence}}\nDetermine whether this sentence is acceptable or unacceptable?\nA. Acceptable\nB. Unacceptable\nAnswer:" doc_to_choice: ["A", "B"] doc_to_target: "{{['B', 'A'][label]}}" description: "Determine whether the following sentence(s) violate certain linguistic constraints. If yes, then it is \"unacceptable\"; otherwise, \"acceptable\".\n\n" fewshot_split: dev fewshot_config: sampler: first_n metric_list: - metric: mcc higher_is_better: true逐字段解读:
dataset_path: Geralt-Targaryen/MELA:Hugging Face 数据集标识,评测时由datasets库在线加载,无需本地准备数据文件;dataset_name: en:数据集内的子集(configuration)名称,对应语言;training_split / validation_split / test_split:分别映射数据集的train/dev/test划分。test_split是实际评测时使用的划分;output_type: multiple_choice:任务输出类型为多选。这意味着评测时对每个候选选项分别计算对数似然,取概率最大者作为模型答案。该字段决定了指标注册表中可用的度量范围(mcc正是注册为output_type="multiple_choice",见下文第四节);doc_to_text:将样本转换为输入 prompt 的 Jinja2 模板,注入数据集字段sentence,固定使用 A/B 两个选项,要求模型判断句子可接受性。最终 prompt 为:"Sentence: {句子}\nDetermine whether this sentence is acceptable or unacceptable?\nA. Acceptable\nB. Unacceptable\nAnswer:";doc_to_choice: ["A", "B"]:两个候选答案文本,与doc_to_target的下标一一对应;doc_to_target: "{{['B', 'A'][label]}}":标签映射逻辑。数据集中label字段约定 0 表示不可接受、1 表示可接受,而选项顺序是 A=Acceptable、B=Unacceptable,因此这里用['B', 'A'][label]反转映射:label=0(不可接受)→ 选项B;label=1(可接受)→ 选项A;description:附加在 prompt 前的任务说明(few-shot 场景下会插入到示例之前);fewshot_split: dev:few-shot 示例从dev划分中采样;fewshot_config.sampler: first_n:采用顺序采样策略,即取 dev 集前 N 条作为示例(N 由 CLI 的--num_fewshot控制,默认 0);metric_list:声明任务级指标mcc,higher_is_better: true表示数值越大越好。
3.2 语言变体如何复用模板
除英语外,其余 9 个任务全部通过include机制继承 mela_en.yaml,只覆盖差异字段。例如中文任务 mela_zh.yaml:
include: mela_en.yaml task: mela_zh dataset_name: zh意大利语、法语、西班牙语、俄语任务与之相同,仅dataset_name不同(it、fr、es、ru)。
而阿拉伯语、冰岛语、日语、德语任务额外将training_split置为null,例如 mela_ar.yaml:
include: mela_en.yaml task: mela_ar dataset_name: ar training_split: nulltraining_split: null表明这些语言在数据集中没有对应的train划分(或无需使用)。由于fewshot_split指向dev,且评测走test划分,training_split置空不影响 few-shot 评测流程。从源码结构看(include合并逻辑位于 lm_eval/tasks/_yaml_loader.py),include 遵循"子配置覆盖父配置"的合并语义,因此这种写法能保持其余字段(prompt 模板、选项、指标)完全一致。
四、MCC 指标的底层实现
MELA 采用Matthews Correlation Coefficient(MCC,马修斯相关系数)作为核心指标。它在 lm-evaluation-harness 中的注册实现位于 lm_eval/api/metrics.py:
@register_metric( metric="mcc", higher_is_better=True, output_type="multiple_choice", aggregation="matthews_corrcoef", ) def mcc_fn(items): # This is a passthrough function return items结合注册装饰器可以确认三个关键事实:
mcc仅对multiple_choice输出类型有效:注册时声明output_type="multiple_choice",与 MELA 任务的输出类型严格匹配。若将mcc用在generate_until等任务上,会触发指标与输出类型不匹配的错误;higher_is_better=True:与各语言 YAML 中metric_list的声明一致;- 聚合方式为
matthews_corrcoef:任务级mcc_fn只是一个透传函数(passthrough),真正计算发生在聚合阶段,调用matthews_corrcoef将模型预测标签与真实标签比较得出 -1 到 1 之间的相关系数(1 为完全一致,0 为随机,-1 为完全相反)。由于任务输出是 A/B 二选一,MCC 适用于二分类评价,且对类别不平衡比准确率更稳健。
组级聚合时,_mela.yaml 通过aggregate_metric_list声明weight_by_size: False,因此mela组的整体分数是 10 个语言 MCC 的等权平均。
五、本地运行 MELA 评测
5.1 安装与加载
确保已安装 lm-evaluation-harness(例如pip install -e .,依赖见 pyproject.toml),评测时会自动通过datasets从 Hugging Face 加载Geralt-Targaryen/MELA数据集。
5.2 运行命令
评测整个mela组(全部 10 种语言):
lm_eval --model hf \ --model_args pretrained=MODEL_NAME \ --tasks mela \ --batch_size auto \ --output_path results/mela其中MODEL_NAME替换为 Hugging Face 模型标识(如Qwen/Qwen2.5-7B)。
只评测特定语言:
lm_eval --model hf \ --model_args pretrained=MODEL_NAME \ --tasks mela_en,mela_zh \ --batch_size auto \ --output_path results/mela使用 few-shot 评测(从dev划分取前 N 条作为示例):
lm_eval --model hf \ --model_args pretrained=MODEL_NAME \ --tasks mela \ --num_fewshot 5 \ --output_path results/mela_fs5--num_fewshot与 mela_en.yaml 中fewshot_config.sampler: first_n配合,决定从 dev 集顺序截取的示例条数。
5.3 结果解读
运行结束后,--output_path目录下会生成results.json(含逐任务明细)与按分组的汇总结果。关注点:
- 任务级:每个
mela_*子任务报告mcc及其标准误(stdderr); - 组级:
mela组报告聚合后的mcc(10 语言等权平均)。
若需对比不同语言之间的模型表现差异,可分别运行单语言命令并比对 MCC 数值。由于doc_to_text、doc_to_choice等模板对所有语言完全一致(通过 include 继承),各语言结果具有直接可比性。
六、延伸:在现有评测中复用 MELA 配置
MELA 的 YAML 组织方式是 lm-evaluation-harness 任务开发的典型范式,值得复用:
- 基座 + 变体模式:把公共字段(数据集路径、prompt、指标)放在基座文件,语言变体用
include继承并只覆盖dataset_name等少量字段,既避免重复又保证模板一致; training_split: null按语言裁剪:对缺失训练划分的语言单独覆盖,不影响 few-shot 与评测流程;- 组级聚合:用
aggregate_metric_list+weight_by_size: False实现等权聚合,适合"各语言样本量不均衡、但希望语言等权"的评测需求。
如需进一步了解任务 YAML 的完整字段语义,可参阅 docs/task_guide.md 与 docs/new_task_guide.md。
七、注意事项与已知问题
- README 笔误:lm_eval/tasks/mela/README.md 任务列表中 Icelandic 被误写为
mela_ar(实际为mela_is);_mela.yaml 的task列表存在mela_ar重复条目。运行--tasks mela时以实际存在的 YAML 文件为准(mela_is.yaml 存在而重复的mela_ar不会产生额外任务); - 数据为远程加载:评测需要联网访问 Hugging Face 数据集
Geralt-Targaryen/MELA; - 指标约束:
mcc仅适用于multiple_choice输出类型,MELA 的配置与之完全匹配,切勿将该指标直接套用到生成式任务上。
【免费下载链接】lm-evaluation-harnessA framework for few-shot evaluation of language models.项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harness
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考