news 2026/9/15 8:15:09

在 lm-evaluation-harness 中评测 MasakhaPOS:非洲语言词性标注任务的配置、提示设计与指标实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在 lm-evaluation-harness 中评测 MasakhaPOS:非洲语言词性标注任务的配置、提示设计与指标实现

在 lm-evaluation-harness 中评测 MasakhaPOS:非洲语言词性标注任务的配置、提示设计与指标实现

【免费下载链接】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/masakhapos任务实现,完整解析 MasakhaPOS(AfricaPOS)词性标注评测的目录组织、YAML 配置、五种提示模板、标签映射与准确率聚合逻辑。读完本文,你将掌握如何在 AfroBench 基准框架下运行、复现并扩展这一覆盖 20 种非洲语言的 POS 标注评测。

MasakhaPOS 任务背景:AfricaPOS 数据集与论文

MasakhaPOS 是面向类型学上高度多样的非洲语言的词性标注(Part-of-Speech Tagging)任务,其论文发表于 ACL 2023(Long Papers),核心贡献是 AfricaPOS——当时规模最大的、覆盖 20 种非洲语言的 POS 标注数据集。根据本任务目录下 README.md 中收录的论文摘要:

  • 数据集遵循通用依存关系(Universal Dependencies, UD)标注指南构建,论文同时讨论了在多种非洲语言上应用 UD 指南进行标注时遇到的实际挑战;
  • 作者使用条件随机场(CRF)与多种多语言预训练语言模型开展了系统的基线实验;
  • 在单源(single-source)与多源(multi-source)两种设置下,选择最优迁移语言能够显著提升目标语言的 POS 标注性能,尤其是与参数微调方法结合时;
  • 关键结论是:与目标语言在语系和形态句法属性上匹配的迁移语言,对未见语言的 POS 标注更有效。

在 AfroBench 基准中,MasakhaPOS 被归入masakhapos_tasks标签,与masakhaner(命名实体识别)等任务并列,作为 15 个任务之一用于评测 LLM 在非洲语言上的表现(见 afrobench/README.md)。在仓库的评测体系里,afrobench组运行该基准的全部任务,而masakhapos组则只运行 POS 任务相关的全部提示变体,便于单独审查和调试。

任务目录结构:分组、语言与提示变体

lm_eval/tasks/afrobench/masakhapos/目录采用"分组配置 + 按提示变体分目录"的组织方式:

masakhapos/ ├── masakhapos.yaml # 顶层 group 定义,聚合 5 个提示变体 ├── utils.py # doc_to_text / doc_to_target 基础实现 ├── gen_utils.py # 批量生成各语言 YAML 的脚本(含全部提示模板) ├── prompt_1/ ~ prompt_5/ # 每种提示变体一个目录 │ ├── masakhapos_yaml # 共享任务模板(无扩展名) │ ├── masakhapos_{lang}.yaml # 20 种语言各自的任务配置 │ └── utils.py # 该变体下的标签映射与聚合函数 └── README.md # 论文与引用信息

其中prompt_1prompt_5五个目录结构完全对称,每个目录内都包含 20 个语言文件(如masakhapos_bam.yamlmasakhapos_yor.yamlmasakhapos_zul.yaml)以及一个无扩展名的共享模板文件masakhapos_yaml。这种设计让研究者既可以按语言、按提示逐一评测,也可以通过顶层 group 一次跑完全部组合。

顶层分组配置:masakhapos.yaml

masakhapos.yaml 定义了masakhapos组:

group: masakhapos task: - masakhapos_prompt_1 - masakhapos_prompt_2 - masakhapos_prompt_3 - masakhapos_prompt_4 - masakhapos_prompt_5 aggregate_metric_list: - metric: acc aggregation: mean weight_by_size: true metadata: version: 1

该配置的核心语义:

  • task列出五个子任务(每个提示变体本身也是由 20 种语言聚合而成的组),组名通过{dataset}_{lang}_{mode}规则生成;
  • aggregate_metric_list声明组的聚合指标为acc,使用mean聚合,并开启weight_by_size: true——意味着按各语言样本量加权平均,避免小语种主导整体分数;
  • 这种"组套组"的层级(group → prompt → language)是 lm-evaluation-harness 处理大规模多语言评测的典型结构。

共享任务模板解析:masakhapos_yaml

每个prompt_N/目录下的无扩展名模板masakhapos_yaml是任务的"骨架",全部 20 个语言文件都通过include: masakhapos_yaml继承它,再覆写dataset_namedoc_to_texttask三个字段。以 prompt_1/masakhapos_yaml 为例:

tag: - masakhapos_tasks - masakhapos_prompt_1 dataset_path: masakhane/masakhapos dataset_name: null dataset_kwargs: {trust_remote_code: True} output_type: generate_until generation_kwargs: do_sample: false until: - </s> - <|im_end|> validation_split: validation test_split: test fewshot_split: train doc_to_target: !function utils.doc_to_target should_decontaminate: true doc_to_decontamination_query: "Sentence: {{token}}\nOutput:" filter_list: - filter: - function: regex_pos name: flexible-extract metric_list: - metric: acc aggregation: !function utils.acc_score higher_is_better: true ignore_case: true ignore_punctuation: true regexes_to_ignore: - "," metadata: version: 1.0

各字段作用如下:

配置项说明
tagmasakhapos_tasksmasakhapos_prompt_N任务标签,masakhapos_tasks供 AfroBench 总标签体系索引
dataset_path/dataset_namemasakhane/masakhapos/null数据集来源为 Masakhane 社区发布的 AfricaPOS 数据集;具体语言由语言文件中的dataset_name(如bam)指定
dataset_kwargstrust_remote_code: True数据集需远程加载代码,需显式信任
output_typegenerate_until生成式任务:模型自由生成,直到遇到停止符
generation_kwargsdo_sample: falseuntil: [</s>, <|im_end|>]贪心解码;同时覆盖 Llama 系</s>与 Chat 系<|im_end|>两种结束符
validation_split/test_split/fewshot_splitvalidation/test/trainfew-shot 示例取自训练集,验证/测试使用官方划分
doc_to_target!function utils.doc_to_target从样本读取upos整数标签并映射为 POS 标签串
should_decontaminatetrue开启去污染检查(见 docs/decontamination.md)
filter_listregex_pos(flexible-extract)用正则从模型输出中提取(word, TAG)元组列表,容忍格式噪声
metric_listacc+!function utils.acc_score词级准确率,按句子逐对计算后取均值

值得注意:metric_list中同时出现了ignore_case: trueignore_punctuation: trueregexes_to_ignore: [","]——这三者主要作用于原始字符串匹配类指标,而 POS 任务实际分数由utils.acc_score计算;regex_pos过滤函数负责把模型输出的自由文本解析成结构化标签序列,是"生成式输出"能够被逐词打分的桥梁。

五种提示模板:从通用指令到专家角色

任务设计了 5 种提示变体,全部集中在 gen_utils.py 的prompt_func()中。它们共享同一套 POS 标签集合:ADJ, ADP, ADV, AUX, CCONJ, DET, INTJ, NOUN, NUM, PART, PRON, PROPN, PUNCT, SCONJ, SYM, VERB, X(对应 UD 通用标签体系),并要求模型输出"按输入词序排列的(word, tag)元组列表":

  • prompt_1:通用指令式。"Please provide the POS tags for each word in the input sentence…",直接面向任意语言文本,作为基线提示;
  • prompt_2:专家角色 + 语言注入。"You are an expert in tagging words and sentences in {lang} with the right POS tag.",其中{lang}会替换为目标语言的英文名(如Bambara),提示模型以该语言专家身份标注;
  • prompt_3:语言学家角色。"Acting as a {lang} linguist and without making any corrections or changes to the text…",强调只做标注、不改动原文,约束模型不擅自改写句子;
  • prompt_4:任务式指令。"Annotate each word in the provided sentence with the appropriate POS tag.",措辞更简洁,弱化角色设定;
  • prompt_5:带标签定义的详解式。"NOUN: Noun (person, place, thing), VERB: Verb (action, state)…"——为 17 个标签逐一给出英文释义,对能力较弱的模型更友好,但提示更长。

prompt_2prompt_3中的语言名在 YAML 生成阶段由languages字典(如bam: Bambarazul: isiZulupcm: Nigerian Pidgin)注入,因此同一变体下每种语言的提示文本不同。生成后的实际效果可从 prompt_1/masakhapos_bam.yaml 与 prompt_2/masakhapos_bam.yaml 中对照查看——前者是通用指令,后者带有 "expert in tagging words and sentences in Bambara" 的角色前缀。

数据转换与标签映射:utils.py

masakhapos/utils.py 提供两个核心函数:

doc_to_text(doc)将样本构造成提示文本:以多行指令 + 标签集合开头,然后以Input: {tokens}填入样本的 token 序列,最后以Output:收尾,引导模型开始生成。从format(subject=doc["tokens"])的写法看,该函数直接使用样本中的tokens字段作为输入词表。

doc_to_target(doc)完成整数标签到 POS 标签的映射:

pos_tag_map = { 0: "NOUN", 1: "PUNCT", 2: "ADP", 3: "NUM", 4: "SYM", 5: "SCONJ", 6: "ADJ", 7: "PART", 8: "DET", 9: "CCONJ", 10: "PROPN", 11: "PRON", 12: "X", 13: "_", 14: "ADV", 15: "INTJ", 16: "VERB", 17: "AUX", } return [pos_tag_map[tag] for tag in doc["upos"]]

它把数据集中upos字段的整数编码逐一映射为 17 个 UD 标签(另有13: "_"表示空标注),返回与输入词序严格对应的标签列表。prompt_2等目录内的utils.py保留了完全相同的映射,同时额外实现聚合函数。

词级准确率聚合:acc_score

在每个prompt_N/utils.py中,acc_score(items)定义了该任务的准确率聚合逻辑,核心步骤(见 prompt_2/utils.py):

  1. 将评测样本解包为goldspreds两组;
  2. chain.from_iterable把模型输出中嵌套的标签序列展平;
  3. 对每条样本,将 gold 与 pred截断到相同长度min_length = min(len(gold), len(pred))),避免模型多生成或少生成标签导致长度不匹配;
  4. 调用sklearn.metrics.accuracy_score计算该句的词级准确率;
  5. 对所有句子取平均,得到任务的acc分数(higher_is_better: true)。

这种"先逐句对齐、再逐句打分、最后全局平均"的方式,配合regex_pos过滤,使生成式 POS 标注既能容忍输出格式抖动,又能精确反映标签预测的正确率。此外,utils.py顶部还引入了weighted_f1_score(来自lm_eval.utils),说明该任务体系同样预留了 F1 类指标的计算能力。

批量生成语言配置:gen_utils.py

由于 20 种语言 × 5 种提示 = 100 个 YAML 文件结构高度重复,仓库用 gen_utils.py 自动化生成。其关键机制:

  • prompt_func(mode, lang)维护五种提示模板,其中{lang}由语言全名注入;
  • languages字典列出 20 种 ISO 语言代码及其英文名:bam(Bambara)、bbj(Ghomala)、ewe(Ewe)、fon(Fon)、hau(Hausa)、ibo(Igbo)、kin(Kinyarwanda)、lug(Luganda)、luo(Dholuo)、mos(Mossi)、nya(Chichewa)、pcm(Nigerian Pidgin)、sna(chiShona)、swa(Kiswahili)、tsn(Setswana)、twi(Twi)、wol(Wolof)、xho(isiXhosa)、yor(Yoruba)、zul(isiZulu)——涵盖西非、东非、中非与南部非洲多个语系;
  • 每个生成文件通过include: masakhapos_yaml继承共享模板,仅覆写dataset_name(语言代码)、taskmasakhapos_{lang}_{mode})与doc_to_text(对应提示文本);
  • 命令行接口支持--output-dir--modeprompt_1~prompt_5)与--overwrite,默认写入当前目录,文件已存在且未加--overwrite时抛出FileExistsError并列出冲突文件。

生成的文件头部均带有# Generated by utils.py注释,便于区分手写配置与生成产物。

运行评测与进一步阅读

在仓库根目录运行:

python -m lm_eval --model hf --model_args pretrained=模型名 --tasks masakhapos

即可评测全部 5 种提示、20 种语言组合;如需单独调试某个提示变体或语言,可将--tasks指定为masakhapos_prompt_1masakhapos_bam_prompt_2等粒度。AfroBench 基准还提供了afrobench(全量)与afrobench_lite(精简版)两组入口(见 afrobench/README.md),如需了解命令行接口细节可参考 docs/interface.md,任务与配置文件规范见 docs/new_task_guide.md 与 docs/config_files.md。

本任务完整覆盖了数据源、提示设计、标签映射、过滤与聚合五个环节,是从头理解"生成式结构化标注任务"如何在 lm-evaluation-harness 中落地的典型范例。引用 MasakhaPOS 论文时,可使用 masakhapos/README.md 中给出的 BibTeX 条目(Dione et al., ACL 2023)。

【免费下载链接】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 8:14:19

工业路由器双SIM与看门狗如何协同?掉线恢复机制详解

摘要&#xff1a; 工业路由器高可用设计不能简单理解为“双SIM自动重启”。真正有效的掉线恢复&#xff0c;需要把链路健康检测、SIM切换、系统级看门狗、业务重连和恢复阈值放在同一套故障模型中设计。导语&#xff1a; 工业路由器在实验室测试时可能长期正常&#xff0c;但进…

作者头像 李华
网站建设 2026/9/15 8:13:04

Codex 智能体实操课:让 AI 帮设计师承担重复执行工作

『梦想零负重 ◆ 创业新起点』&#x1f4ac;大家好&#xff0c;欢迎来到【轻创点子】◆ 今日主题设计师真正稀缺的&#xff0c;从来不是 “多做几张图”&#xff0c;而是灵感判断、风格决策、构图把控和作品沉淀的时间。如果能把反复执行的机械工作交给 AI&#xff0c;把注意力…

作者头像 李华
网站建设 2026/9/15 8:12:15

服装AI质检,最先应该替代哪一段人工?

1. 背景 服装工厂引入 AI 质检&#xff0c;很多管理者第一反应是「能不能一步到位&#xff0c;把人工全部换掉」。但实际落地经验告诉我们&#xff1a;一上来就想完全替代人工&#xff0c;反而容易翻车。更稳妥的思路&#xff0c;是优先替换那些高重复、高强度、容易疲劳&#…

作者头像 李华
网站建设 2026/9/15 8:11:55

linux命令小记

fdisk 功能&#xff1a;用于查看和修改磁盘分区表。选项含义-l列出磁盘分区表-u指定用什么表示分区单位&#xff08;扇区/柱面&#xff09;dmesg 功能&#xff1a;用于查看或控制内核环形缓冲区消息&#xff08;内核会把运行日志写入其中&#xff09;。选项含义-T显示人类可读的…

作者头像 李华
网站建设 2026/9/15 8:11:30

AI 形式化证明流水线:从自然语言论证到 Lean 内核核验

面向关注 AI for Science、数学软件和高可信推理的开发者&#xff0c;本文不讨论某个数学结论是否已经获得学界最终认可&#xff0c;而是借助 2026 年公开的 Navier–Stokes 解答与 Lean 形式化案例&#xff0c;解释“模型提出证明、机器核验形式证明”的工程链路。读完后你能区…

作者头像 李华
网站建设 2026/9/15 8:10:23

复试面试15-17号考点:三大高频题的准备框架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华