lm-evaluation-harness 多语言 LAMBADA 评测指南:StableLM 变体任务与配置详解
2026/9/15 15:55:29 网站建设 项目流程

lm-evaluation-harness 多语言 LAMBADA 评测指南:StableLM 变体任务与配置详解

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

本文以 lm-evaluation-harness 仓库中的lambada_multilingual_stablelm任务组为主线,系统讲解 LAMBADA 数据集的评测原理、该任务组在仓库中的 YAML 实现细节、运行方式与指标含义。读者在读完本文后,将能够理解多语言 LAMBADA 任务的构造逻辑(机器翻译变体、词级 log-likelihood 评测),并掌握在本地运行该任务组、解读 perplexity 与 acc 结果的完整实战方案。

LAMBADA 数据集:需要跨句语篇上下文的词预测任务

LAMBADA(LAnguage Modeling Broadened to Account for Discourse Aspects)是一个通过"预测最后一个词"来评估模型文本理解能力的基准数据集。它的核心设计思想体现在数据的构造方式上:数据集中每个样本都是一段叙事文本(narrative passage),这些文本具有一个共同特征——人类被试只有在看到完整段落时才能猜出最后一个词;如果只看到目标词之前的那一句话,则无法猜出

这意味着要在 LAMBADA 上取得好的表现,模型不能只依赖局部上下文(例如紧邻目标词的句子),而必须能够跨句子追踪信息、在更广阔的语篇(broader discourse)中建立联系。用评测领域的术语来说,LAMBADA 检验的是模型的长程语篇建模能力,而不是简单的局部语言模型困惑度。

该数据集最初由 Paperno 等人提出(《The LAMBADA dataset: Word prediction requiring a broad discourse context》,2016 年发布),官方托管于 Zenodo。在 lm-evaluation-harness 仓库中,围绕 LAMBADA 存在多个任务目录,本文聚焦的是lm_eval/tasks/lambada_multilingual_stablelm/下的 StableLM 多语言变体。

任务定位:OpenAI 变体与 StableLM 报告中的机器翻译版本

在 LAMBADA 的评测历史上,OpenAI 曾发布过一个广为人知的变体(即lambada_openai),该变体在原始数据集基础上做了清洗与过滤,是社区评测语言模型时最常使用的版本。lm-evaluation-harness 仓库中至少有三个与 LAMBADA 相关的目录:

  • lm_eval/tasks/lambada/:原始英文变体,包含lambada_openailambada_standard两个任务;
  • lm_eval/tasks/lambada_multilingual/:OpenAI 变体的早期机器翻译版本(lambada_mt_{en, fr, de, it, es});
  • lm_eval/tasks/lambada_multilingual_stablelm/:本文主角,StableLM 报告使用的机器翻译版本。

lambada_multilingual_stablelm任务组所评测的,是OpenAI LAMBADA 变体的多语言机器翻译版本,其来源与报告口径直接对应 Stable LM 2 1.6B 技术报告(Bellagente 等人,arXiv:2402.17834)中所报告的评测设置。换言之,该任务组复刻了一个已在公开论文中发布过的评测协议:如果研究者希望让自己的模型结果与 Stable LM 2 系列技术报告中的多语言 LAMBADA 分数直接可比,就应该使用这个任务组。

组与任务清单

根据 README 的官方说明:

  • 组(Group)lambada_multilingual_stablelm—— 运行该组会一次评估其下所有的lambada_mt_stablelm_X任务;
  • 任务(Tasks)lambada_openai_mt_stablelm_{en, fr, de, it, es}—— OpenAI LAMBADA 变体的机器翻译版本。

需要说明的是,README 中列举的语言集合为 5 种(en/fr/de/it/es),而从仓库的实际配置文件来看,该任务目录 下共存在7 个 YAML 文件,除上述 5 种语言外还包含nl(荷兰语)与pt(葡萄牙语):

任务名配置文件数据集语言
lambada_openai_mt_stablelm_enlambada_mt_stablelm_en.yamlen
lambada_openai_mt_stablelm_delambada_mt_stablelm_de.yamlde
lambada_openai_mt_stablelm_frlambada_mt_stablelm_fr.yamlfr
lambada_openai_mt_stablelm_itlambada_mt_stablelm_it.yamlit
lambada_openai_mt_stablelm_eslambada_mt_stablelm_es.yamles
lambada_openai_mt_stablelm_nllambada_mt_stablelm_nl.yamlnl
lambada_openai_mt_stablelm_ptlambada_mt_stablelm_pt.yamlpt

评测时只需指定组名lambada_multilingual_stablelm,harness 会自动展开并逐个运行组内全部语言的任务,最终按语言分别汇报指标。

YAML 配置逐项解析

该任务组以lambada_mt_stablelm_en.yaml主配置文件(base config),其余 6 个语言文件均通过 YAMLinclude机制继承它,只覆盖task名与dataset_name两个字段。以德语为例,lambada_mt_stablelm_de.yaml 全文如下:

include: lambada_mt_stablelm_en.yaml task: lambada_openai_mt_stablelm_de dataset_name: de

这种"一个主文件 + 多个薄覆盖文件"的组织方式是 lm-evaluation-harness 任务目录中的常见模式,它极大减少了多语言任务间的重复配置,也保证了各语言任务在评测协议上完全一致(除数据集语言外,其余字段全部继承)。

下面逐字段解读基础配置 lambada_mt_stablelm_en.yaml:

tag: lambada_multilingual_stablelm task: lambada_openai_mt_stablelm_en dataset_path: EleutherAI/lambada_multilingual_stablelm dataset_name: en output_type: loglikelihood test_split: test doc_to_text: "{{text.split(' ')[:-1]|join(' ')}}" doc_to_target: "{{' '+text.split(' ')[-1]}}" should_decontaminate: true doc_to_decontamination_query: "{{text}}" metric_list: - metric: perplexity aggregation: perplexity higher_is_better: false - metric: acc aggregation: mean higher_is_better: true metadata: version: 1.0

各字段含义如下:

  • tag:将任务归入lambada_multilingual_stablelm标签/组,供分组评测与任务索引使用;
  • task:任务唯一标识,CLI 与 Python API 中引用该任务的名字;
  • dataset_path:HuggingFace Hub 上的数据集标识符,本任务使用EleutherAI/lambada_multilingual_stablelm
  • dataset_name:数据集内部的子集(config)名,对应语言代码,如ende
  • output_typeloglikelihood,表示本任务按"对每个候选续写计算对数似然"的方式评测(词预测任务的标准配置);
  • test_split:使用数据集的test划分;
  • doc_to_text/doc_to_target:从样本构造 prompt 与目标的关键字段。doc_to_text取样本text去掉最后一个词(text.split(' ')[:-1]|join(' '))作为输入上下文;doc_to_target取最后一个词并前置一个空格(' '+text.split(' ')[-1])作为待预测目标。这种"输入=前 N-1 个词、目标=最后一个词"的切分方式,正是 LAMBADA 词预测任务的核心实现;
  • should_decontaminatetrue,表示启用训练数据去污染检查;
  • doc_to_decontamination_query:提供去污染查询所用的原始文本(完整的text);
  • metric_list:声明两个评测指标——perplexity(困惑度,聚合函数为perplexity越低越好)与acc(准确率,聚合方式为mean越高越好)。

其中perplexity聚合函数在 lm_eval/api/metrics.py 中定义,它会综合每个样本的 log-likelihood 计算困惑度;acc则统计"模型赋予最后一个词最高似然(或匹配目标词)"的样本占比。两个指标从不同角度刻画模型的语言建模质量:acc反映词预测的硬准确率,perplexity反映整体概率质量分配的好坏。

如何在本地运行该任务组

方式一:CLI 命令行

lm-evaluation-harness 安装后提供lm-eval命令行入口(见 pyproject.toml 中的[project.scripts]配置)。运行整个多语言 StableLM LAMBADA 组的最简命令为:

lm-eval --model hf \ --model_args pretrained=<你的模型名或路径> \ --tasks lambada_multilingual_stablelm \ --device cuda

也可以只评测单个语言任务,例如仅评测英语:

lm-eval --model hf \ --model_args pretrained=<你的模型名或路径> \ --tasks lambada_openai_mt_stablelm_en \ --device cuda

参数说明:

  • --model:模型后端,hf表示使用 HuggingFace Transformers 模型;
  • --model_args:以逗号分隔的模型加载参数,pretrained必填,可传模型名或本地路径;
  • --tasks:逗号分隔的任务或组名列表,传组名lambada_multilingual_stablelm即评测全部 7 个语言任务;
  • --device:推理设备(cuda/cpu),也支持--batch_size等更多参数控制批量大小与内存占用。

方式二:Python API

在脚本中使用simple_evaluate接口(来自 lm_eval/evaluator.py)可得到同样的结果,便于二次处理:

from lm_eval import simple_evaluate results = simple_evaluate( model="hf", model_args="pretrained=<你的模型名或路径>", tasks=["lambada_multilingual_stablelm"], device="cuda", ) # results["results"] 中按任务名(如 lambada_openai_mt_stablelm_en) # 保存了 perplexity 与 acc 等指标

与仓库中其他 LAMBADA 任务的关系

为帮助读者在仓库中准确选择任务,这里给出三个相关目录的对比(从配置内容看):

目录任务命名数据集特点
lambada/lambada_openailambada_standardEleutherAI/lambada_openai 等英文原始/OpenAI 变体
lambada_multilingual/lambada_mt_{en,fr,de,it,es}EleutherAI/lambada_openaiOpenAI 变体的早期机器翻译版本,共 5 种语言
lambada_multilingual_stablelm/lambada_openai_mt_stablelm_{...}EleutherAI/lambada_multilingual_stablelm独立的多语言数据集,对应 Stable LM 2 1.6B 报告口径,实际配置覆盖 7 种语言

从配置结构看,lambada_multilingual_stablelm与早期lambada_multilingual的评测协议(loglikelihood、同样的词切分方式、相同的两个指标)一脉相承,但数据集源不同——前者使用独立的多语言数据集EleutherAI/lambada_multilingual_stablelm,后者仍基于英文EleutherAI/lambada_openai的翻译版本。因此,若要与 Stable LM 2 系列技术报告中的多语言结果对齐,应选择lambada_multilingual_stablelm

去污染与评测完整性

该任务组在所有语言的配置中都开启了should_decontaminate: true,并提供了doc_to_decontamination_query(完整的原始文本)。这意味着评测时 harness 会将测试样本的原始文本与模型的预训练语料进行比对,帮助识别"测试数据是否已被模型在训练阶段见过"的潜在污染问题。对于语篇级词预测任务,样本可能以近似形式出现在训练语料中,因此这一检查对结果可信度具有重要意义。

此外,README 的 Checklist 部分说明:该任务对 Evaluation Harness 而言属于新增任务,并已对照 harness v0.3.0 版本完成校验;同时任务明确标注了其"主变体"定位,并说明了各语言变体的评测目标与对应的已发布评测协议(即 Stable LM 2 1.6B 技术报告),方便后续维护者与使用者溯源。

引用方式

在论文或技术报告中引用该任务背后的数据集与评测口径时,可使用 README 中提供的两条文献:

@misc{ author={Paperno, Denis and Kruszewski, Germán and Lazaridou, Angeliki and Pham, Quan Ngoc and Bernardi, Raffaella and Pezzelle, Sandro and Baroni, Marco and Boleda, Gemma and Fernández, Raquel}, title={The LAMBADA dataset}, DOI={10.5281/zenodo.2630551}, publisher={Zenodo}, year={2016}, month={Aug} } @article{bellagente2024stable, title={Stable LM 2 1.6 B Technical Report}, author={Bellagente, Marco and Tow, Jonathan and Mahan, Dakota and Phung, Duy and Zhuravinskyi, Maksym and Adithyan, Reshinth and Baicoianu, James and Brooks, Ben and Cooper, Nathan and Datta, Ashish and others}, journal={arXiv preprint arXiv:2402.17834}, year={2024} }

前者对应 LAMBADA 原始论文,后者对应 Stable LM 2 1.6B 技术报告——即该多语言评测任务所匹配的已发布评测设置。在复现对比实验时,请同时引用这两篇文献以保证评测口径可追溯。

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

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

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

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

立即咨询