news 2026/9/15 16:37:15

使用 lm-evaluation-harness 评测 MELA 多语言语言可接受性基准

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用 lm-evaluation-harness 评测 MELA 多语言语言可接受性基准

使用 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_enEnglish(英语)
mela_zhChinese(中文)
mela_itItalian(意大利语)
mela_ruRussian(俄语)
mela_deGermany(德语)
mela_frFrench(法语)
mela_esSpanish(西班牙语)
mela_jaJapanese(日语)
mela_arArabic(阿拉伯语)
mela_isIcelandic(冰岛语)

注意: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(不可接受)→ 选项Blabel=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:声明任务级指标mcchigher_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不同(itfresru)。

而阿拉伯语、冰岛语、日语、德语任务额外将training_split置为null,例如 mela_ar.yaml:

include: mela_en.yaml task: mela_ar dataset_name: ar training_split: null

training_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

结合注册装饰器可以确认三个关键事实:

  1. mcc仅对multiple_choice输出类型有效:注册时声明output_type="multiple_choice",与 MELA 任务的输出类型严格匹配。若将mcc用在generate_until等任务上,会触发指标与输出类型不匹配的错误;
  2. higher_is_better=True:与各语言 YAML 中metric_list的声明一致;
  3. 聚合方式为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_textdoc_to_choice等模板对所有语言完全一致(通过 include 继承),各语言结果具有直接可比性。

六、延伸:在现有评测中复用 MELA 配置

MELA 的 YAML 组织方式是 lm-evaluation-harness 任务开发的典型范式,值得复用:

  1. 基座 + 变体模式:把公共字段(数据集路径、prompt、指标)放在基座文件,语言变体用include继承并只覆盖dataset_name等少量字段,既避免重复又保证模板一致;
  2. training_split: null按语言裁剪:对缺失训练划分的语言单独覆盖,不影响 few-shot 与评测流程;
  3. 组级聚合:用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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 16:34:41

l0phtcrack 7实战:Windows管理员密码审计与弱口令检测

说实话,刚看到“l0phtcrack 7 爆破管理员密码”这个关键词的时候,我第一反应是:这位朋友多半是想用工具把Windows管理员密码“怼”出来。这个工具在安全圈确实有名,但它真正靠谱的用法,不是拿去搞破坏,而是…

作者头像 李华
网站建设 2026/9/15 16:33:51

光伏板Simulink仿真:从等效电路建模到MPPT算法实现

简介:一套基于Matlab与Simulink搭建的光伏板仿真资源,包含完整源码与配套数据,适合电子信息工程、计算机、数学等专业学生在课程设计、期末大作业或毕业设计中作为参考资料。资源按章节组织,覆盖光伏板建模、系统辨识、模型线性化…

作者头像 李华