Evalita-LLM:在 lm-evaluation-harness 中评估意大利语大语言模型的多任务基准指南
2026/9/15 12:42:26 网站建设 项目流程

Evalita-LLM:在 lm-evaluation-harness 中评估意大利语大语言模型的多任务基准指南

【免费下载链接】lm-evaluation-harnessA framework for few-shot evaluation of language models.项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harness

Evalita-LLM 是专为意大利语大语言模型(LLM)评估设计的基准,由 Magnini 等人在 2025 年提出(arXiv:2502.02289)。本指南围绕该基准在 lm-evaluation-harness 中的完整集成实现展开,讲解其任务分组体系、YAML 配置结构、多提示词(multi-prompt)评估机制以及生成式任务的指标聚合原理,读者将掌握通过lm_eval命令一键评估任意模型在 10 个意大利语任务上表现的具体方法,并理解其评测结果在仓库中的计算方式。

一、基准背景:为什么需要"原生意大利语"评估

Evalita-LLM 是 EVALITA 评测活动(意大利语自然语言处理评测)衍生出的 LLM 基准,其设计目标与仓库中其他多语言基准(如 global_mmlu)不同,它具备三个区分性特征:

  1. 所有任务均为原生意大利语(native Italian):数据直接以意大利语构建,避免了"从英语翻译成意大利语"所带来的语言损耗和潜在文化偏见;
  2. 在成熟的多选题任务之外引入生成式任务(generative tasks):使模型评测更接近与 LLM 的自然交互方式,而非仅限于基于困惑度(perplexity)的选项打分;
  3. 每个任务都使用多个提示词(prompts)进行评估:缓解模型对特定提示词的敏感性,使评测结果更公平、更客观。

在仓库中,该基准的完整实现位于 lm_eval/tasks/evalita_llm,核心入口文档即 lm_eval/tasks/evalita_llm/README.md。

引用信息:如果论文或报告中使用了该基准,README 提供了标准的 BibTeX 引用(Magnini, Zanoli, Resta, Cimmino, Albano, Madeddu, Patti,《Evalita-LLM: Benchmarking Large Language Models on Italian》,2025)。

二、任务分组体系:三个组合评测入口

仓库将 Evalita-LLM 的全部任务组织为三个层级的组(group),分别在三个 YAML 文件中定义:

组名别名(group_alias)包含内容定义文件
evalita-mpEvalita-LLM全部 10 个任务(perplexity 类 + 生成类)_evalita-mp.yaml
evalita-mp_genEvalita-LLM - Generative仅生成式任务(4 个)_evalita-mp_gen.yaml
evalita-mp_mcEvalita-LLM - PPL-based仅基于困惑度的任务(6 个)_evalita-mp_mc.yaml

2.1 全量组 evalita-mp

_evalita-mp.yaml 通过task列表聚合 10 个任务,并使用aggregate_metric_list声明组级聚合指标为acc(准确率),且weight_by_size: True表示按样本量加权平均:

group: evalita-mp group_alias: Evalita-LLM task: - evalita-mp_te - evalita-mp_sa - evalita-mp_wic - evalita-mp_hs - evalita-mp_at - evalita-mp_faq - evalita-mp_sum_fp - evalita-mp_ls - evalita-mp_ner_group - evalita-mp_re aggregate_metric_list: - metric: acc weight_by_size: True metadata: version: 1

2.2 生成式子组 evalita-mp_gen

_evalita-mp_gen.yaml 只保留 4 个generate_until输出类型的任务:Summarization(evalita-mp_sum_fp)、Lexical Substitution(evalita-mp_ls)、Named Entity Recognition(evalita-mp_ner_group)、Relation Extraction(evalita-mp_re)。

2.3 困惑度子组 evalita-mp_mc

_evalita-mp_mc.yaml 只保留 6 个multiple_choice输出类型的任务:Textual Entailment(evalita-mp_te)、Sentiment Analysis(evalita-mp_sa)、Word in Context(evalita-mp_wic)、Hate Speech Detection(evalita-mp_hs)、Admission Tests(evalita-mp_at)、FAQ(evalita-mp_faq)。

三、可单独评估的 10 个任务

README 明确列出以下任务均可脱离组单独评估,每个任务名即--tasks参数可用的任务标识符:

任务标识符任务名称(意大利语任务)输出类型
evalita-mp_teTextual Entailment(文本蕴含)multiple_choice
evalita-mp_saSentiment Analysis(情感分析)multiple_choice
evalita-mp_wicWord in Context(上下文词义)multiple_choice
evalita-mp_hsHate Speech Detection(仇恨言论检测)multiple_choice
evalita-mp_atAdmission Tests(入学测试)multiple_choice
evalita-mp_faqFAQ(问答)multiple_choice
evalita-mp_sum_fpSummarization(摘要生成)generate_until
evalita-mp_lsLexical Substitution(词汇替换)generate_until
evalita-mp_ner_groupNamed Entity Recognition(命名实体识别)generate_until
evalita-mp_reRelation Extraction(关系抽取)generate_until

从源码结构可以推断,每个任务的实现采用"模板 + 提示词变体"的分层组织:底层是_*_template_yaml(定义数据集、输出类型、目标提取与指标),上层是_evalita-mp_*_pN.yaml(N=1..6,定义不同提示词的变体),再由_evalita-mp_*_tasks.yaml通过tag机制聚合。

四、快速上手:运行评估

README 给出的标准评估命令如下,使用 Hugging Face 模型后端(hf),加载 Llama-2-7B,在cuda:0上以auto批大小运行全量基准:

lm_eval --model hf --model_args pretrained=meta-llama/Llama-2-7b-hf --tasks evalita-mp --device cuda:0 --batch_size auto

参数含义与仓库 CLI 实现(lm_eval/_cli)对应如下:

  • --model hf:使用 huggingface.py 实现的本地 Hugging Face 模型加载器;
  • --model_args pretrained=...:指定模型名称或本地路径;
  • --tasks evalita-mp:评测全量组;也可替换为evalita-mp_genevalita-mp_mc或上表中的单个任务名(支持逗号分隔多个任务);
  • --device cuda:0:指定推理设备;
  • --batch_size auto:自动选择批大小。

若只评估生成式子集,可运行:

lm_eval --model hf --model_args pretrained=meta-llama/Llama-2-7b-hf --tasks evalita-mp_gen --device cuda:0 --batch_size auto

五、基于困惑度的任务实现详解(evalita-mp_mc 组)

这 6 个任务全部使用output_type: multiple_choice,即对每个选项计算对数似然,取概率最高的选项作为答案。所有数据集托管在 Hugging Face 的evalitahf组织下。

5.1 Textual Entailment(evalita-mp_te)

模板 _te_template_yaml 定义:

dataset_path: evalitahf/textual_entailment output_type: multiple_choice test_split: test fewshot_split: dev validation_split: dev doc_to_target: "{{ 0 if entailment == 'SI' else 1 }}" doc_to_choice: ["Sì", "No"] metric_list: - metric: acc aggregation: mean higher_is_better: true
  • 标签字段entailmentSI时目标为 0("Sì",是),否则为 1("No",否),选项为意大利语的"是/否";
  • 提示词变体 _evalita-mp_te_p1.yaml 定义了doc_to_text"La frase: '{{text1}}' implica logicamente che la frase: '{{text2}}' sia vera?"("句子 X 在逻辑上蕴含句子 Y 为真吗?")。仓库保留被注释的旧提示词,用于对比说明多提示词策略的演进;
  • 任务组 _evalita-mp_te_tasks.yaml 以tag: evalita-mp_te_tasks关联所有 prompt 变体,并以acc按样本量加权聚合。

5.2 Sentiment Analysis(evalita-mp_sa)

模板 _sa_template_v2_yaml 定义四分类情感任务:

dataset_path: evalitahf/sentiment_analysis output_type: multiple_choice test_split: test fewshot_split: train validation_split: test doc_to_target: !function utils.sa_doc_to_target_v2 doc_to_choice: ["positivo", "negativo", "neutrale", "misto"]
  • 数据集字段opos(positive 极性)与oneg(negative 极性)被 utils.py 中的sa_doc_to_target_v2映射为 0/1/2/3 四个类别索引(pos=1,neg=0 → 0;pos=0,neg=1 → 1;双 0 → 2;双 1 → 3),对应选项["positivo", "negativo", "neutrale", "misto"]
  • 该任务不是简单用acc,而是使用 F1 指标,且聚合函数为 metrics.py 中的自定义_aggreg_sa:由于提示词把任务改写成四分类多项选择,而原始标注是"正向/负向"两个独立二分类(oposoneg),聚合时先通过_map_to_original_labels将四分类预测/标签还原成两个二分类标签序列,再分别计算两个类的 F1 并取平均,从而与原始任务的评分口径对齐;
  • 提示词变体 _evalita-mp_sa_p1.yaml 的doc_to_text为:"Qual è il sentiment espresso nel seguente tweet: '{{text}}'?"

5.3 Word in Context(evalita-mp_wic)

模板 _wic_template_yaml:

dataset_path: evalitahf/word_in_context dataset_name: default output_type: multiple_choice test_split: test fewshot_split: dev validation_split: dev doc_to_target: label # 0: No, 1: Si doc_to_choice: ["No", "Sì"] metric_list: - metric: f1 higher_is_better: true aggregation: f1

该任务判断同一单词在两个上下文中是否词义一致,目标字段为label(0 表示否、1 表示是),选用 F1 指标。

5.4 Hate Speech Detection(evalita-mp_hs)

模板 _hs_template_yaml:

dataset_path: evalitahf/hatespeech_detection output_type: multiple_choice test_split: test_all fewshot_split: dev validation_split: dev doc_to_target: hs # 0 = Falso, 1 = Vero doc_to_choice: ["Falso", "Vero"]

判断文本是否包含仇恨言论,选项为意大利语"Falso(假)/ Vero(真)",测试划分使用test_all

5.5 Admission Tests(evalita-mp_at)

模板 _at_template_yaml 为多选题任务:

dataset_path: evalitahf/admission_test output_type: multiple_choice test_split: test fewshot_split: dev validation_split: test doc_to_target: Correct doc_to_choice: ["A", "B", "C", "D", "E"]

提示词变体 _evalita-mp_at_task_p1.yaml 将其塑造成医学入学考题:

doc_to_text: "Dato il seguente quesito di medicina: '{{Question}}' qual è la risposta corretta?" doc_to_choice: "{{[A,B,C,D,E]}}" doc_to_target: "{{ A if Correct == 'A' else B if Correct == 'B' else C if Correct == 'C' else D if Correct == 'D' else E}}" metric_list: - metric: acc aggregation: mean higher_is_better: true - metric: acc_norm aggregation: mean higher_is_better: true

该变体同时上报accacc_norm两种指标(acc_norm按选项长度归一化对数似然),且通过 Jinja 表达式把正确答案字母映射为对应选项文本作为目标。

5.6 FAQ(evalita-mp_faq)

模板 _faq_template_yaml:

dataset_path: evalitahf/faq test_split: test_1 fewshot_split: dev_1 doc_to_target: !function utils.faq_doc_to_target doc_to_choice: ["A", "B", "C", "D"] output_type: multiple_choice

目标由 utils.py 的faq_doc_to_target将数据集字段correct_answer("A"/"B"/"C"/"D")映射为选项索引,若取值不在范围内会通过日志发出警告。

六、生成式任务实现详解(evalita-mp_gen 组)

这 4 个任务使用output_type: generate_until,模型自由生成文本,再通过process_results函数与金标对比计算指标。生成停止条件统一使用until: ["</s>"]

6.1 Summarization(evalita-mp_sum_fp)

模板 _sum_template_fp_yaml 使用 Fanpage 新闻摘要数据集:

dataset_path: ARTeLab/fanpage output_type: generate_until generation_kwargs: until: - "</s>" test_split: test doc_to_target: "{{target}}"

指标计算依赖 sum_utils.py:process_results_sum通过evaluate库加载 ROUGE 指标,对每个样本计算rouge1,并以rouge1作为metric_list中的上报指标。组定义 _evalita-mp_sum_fp_task.yaml 声明metric: rouge1weight_by_size: True。仓库中还存在基于silvia-casola/WITS数据集与test_100划分的另一套摘要模板 _sum_template_yaml,可作为对比参考。

6.2 Lexical Substitution(evalita-mp_ls)

模板 _ls_template_yaml:

dataset_path: evalitahf/lexical_substitution test_split: test validation_split: dev fewshot_split: dev output_type: generate_until generation_kwargs: until: - "</s>" doc_to_target: !function utils.ls_doc_to_target process_results: !function utils.ls_process_results metric_list: - metric: f1 higher_is_better: True aggregation: !function metrics._aggreg_ls

该任务要求模型为句子中目标词给出同义词。评分逻辑在 utils.py 中:

  • 金标由ls_doc_to_target序列化为逗号分隔的同义词列表,若无标注则返回占位符&&NOSYN&&
  • ls_process_results用正则LS_SPLIT_REGEX = r"[^,]+"切分模型输出,最多取前 10 个候选词,与标注者给出的同义词及其频次比对,计算精度(precision),并返回(prec, has_answ, has_annotation)三元组;
  • 组级聚合 metrics.py 的_aggreg_ls在语料层面汇总|A|(模型给出答案数)与|T|(有标注数),计算最终 precision、recall 与 F1,并对分母为 0 的情况做了保护。

6.3 Named Entity Recognition(evalita-mp_ner_group)

NER 是唯一拥有子组结构的生成式任务。_evalita-mp_ner_group.yaml 聚合三个领域子组:evalita-mp_ner_tasks_fic(虚构类)、evalita-mp_ner_tasks_adgevalita-mp_ner_tasks_wn,对应仓库中的_evalita-mp_ner_fic*_evalita-mp_ner_adg*_evalita-mp_ner_wn*系列文件。

模板 _ner_template_yaml:

dataset_path: evalitahf/entity_recognition output_type: generate_until generation_kwargs: until: - "</s>" - "\n" doc_to_target: !function utils.ner_doc_to_target process_results: !function utils.ner_process_results metric_list: - metric: f1 higher_is_better: True aggregation: !function metrics._aggreg_ner

模型输出采用实体$类型,实体$类型的序列化格式(分隔符见 utils.py 中的NER_ENTITY_SEPARATOR = ","NER_TYPE_SEPARATOR = "$",无实体时返回&&NOENT&&)。ner_process_results将解析后的(实体文本, 类型)列表与金标实体逐项匹配,把结果映射为 PER/LOC/ORG/O 四类标签(NER_MAPPING),并对"预测多于金标"(补齐假阳性)与"无实体且无预测"(空标签)等边界情况做了显式处理;组级聚合_aggreg_ner将语料内所有预测/金标拼接后计算除O类以外的平均 F1。

6.4 Relation Extraction(evalita-mp_re)

模板 _re_template_yaml:

dataset_path: evalitahf/relation_extraction test_split: test output_type: generate_until generation_kwargs: until: - "</s>" doc_to_target: !function utils.re_doc_to_target process_results: !function utils.rel_process_results_v3 metric_list: - metric: f1 higher_is_better: True aggregation: !function metrics._aggreg_rel

输出格式为实体1$实体2%实体3$实体4INTRA_REL_SEPARATOR = "$"INTER_REL_SEPARATOR = "%",无关系返回&&NOREL&&)。rel_process_results_v3实现"不区分关系抽取顺序"的评分:完整覆盖四种情形——模型未答且金标存在(假阴性)、均无(真阴性)、模型多答(假阳性)、以及逐条比对匹配(已匹配的关系从候选集中删除,多余预测计为假阳性)。组级聚合_aggreg_rel按 macro 平均计算 F1。

七、多提示词(multi-prompt)机制:同一任务 6 套提示词

README 强调的"所有任务用多个提示词评估"在仓库中体现为_evalita-mp_*_p1.yaml_evalita-mp_*_p6.yaml的变体文件(各任务变体数量不一,如 TE/SA/WIC/HS/FAQ 有 6 个,LS 有 2 个,AT 有 6 个)。每个变体的结构一致:

tag: evalita-mp_te_tasks # 与组定义中的 task 项对应的 tag include: _te_template_yaml # 继承模板的全部字段 task: evalita-mp_te_prompt-1 # 变体任务名 task_alias: prompt-1 # 报告中的显示别名 doc_to_text: "..." # 该变体独有的提示词

以 TE 为例,_evalita-mp_te_p1.yaml 通过include继承模板的dataset_pathoutput_typedoc_to_target等全部字段,仅重写doc_to_text,并允许在变体级别覆盖metric_list(如 SA 变体即覆盖了聚合函数)。这种"模板继承 + 变体重写"的设计使得新增提示词只需新增一个几行的 YAML 文件,与仓库任务配置规范(见 docs/config_files.md)一致。

八、指标与自定义聚合函数总览

汇总各任务的评测指标与实现位置:

任务指标聚合方式实现位置
TE / AT / FAQacc(AT 另有 acc_norm)mean,组级按样本加权内建指标
SAf1自定义_aggreg_sa(还原 opos/oneg 二分类后平均)metrics.py
WICf1内建 f1内建指标
HSacc(组级)mean内建指标
SUM_FProuge1内建 rouge1sum_utils.py
LSf1自定义_aggreg_ls(语料级 P/R/F1)metrics.py
NERf1自定义_aggreg_ner(去除 O 类的平均 F1)metrics.py
REf1自定义_aggreg_rel(macro F1)metrics.py

metrics.py 基于sklearn.metricsf1_scoreprecision_scorerecall_score实现全部自定义聚合,并在文件末尾保留了文档定年(Document Dating)任务的_aggreg_dd,说明该文件随基准演进持续扩展。

九、版本变更记录与维护说明

README 记录了当前唯一一条变更:

  • v0.1:将evalita-mp_sum_fp的小型变体组重命名为evalita-mp_sum_fp_small,以解决其与完整变体(full variant)之间的重复组名冲突。仓库文件系统印证了这一变更:摘要任务目录中同时存在_evalita-mp_sum_fp-small_task.yaml_evalita-mp_sum_fp-small_p1.yaml_evalita-mp_sum_fp-small_p2.yaml_evalita-mp_sum_fp_task.yaml_evalita-mp_sum_fp_p1.yaml等文件,二者分别对应不同的数据规模变体。

十、配套测试与质量保障

作为 lm-evaluation-harness 的标准任务,Evalita-LLM 的实现遵循仓库统一的配置加载、few-shot 上下文构建与指标上报流程(相关机制见 docs/task_guide.md 与 docs/interface.md)。所有任务的metadata.version均为 1 或 1.0,符合任务版本化要求;README 末尾的 Checklist 也确认:该基准已有公开论文(已引用)、原始实现由基准作者直接贡献,且仓库 README 对各变体的评估目标给出了明确说明。

结语

Evalita-LLM 在 lm-evaluation-harness 中的集成是一个"原生语言基准 + 模板化任务组织 + 多提示词 + 生成式指标定制"的完整范例:通过evalita-mpevalita-mp_genevalita-mp_mc三个入口即可对任意 Hugging Face 模型展开全量或分组的意大利语评测;include继承机制让 10 个任务 60 余个提示词变体得以极简维护;而metrics.pyutils.py中的自定义函数则保证了生成式任务在语料层面的精确评分。读者可直接复制上文命令,将--tasks替换为所需的组名或任务名,快速复现论文中的意大利语评测流程。

【免费下载链接】lm-evaluation-harnessA framework for few-shot evaluation of language models.项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harness

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询