ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

在 lm-evaluation-harness 中评估 XQuAD:跨语言抽取式问答基准的完整实战指南

在 lm-evaluation-harness 中评估 XQuAD:跨语言抽取式问答基准的完整实战指南 在 lm-evaluation-harness 中评估 XQuAD跨语言抽取式问答基准的完整实战指南【免费下载链接】lm-evaluation-harnessA framework for few-shot evaluation of language models.项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harness导读XQuADCross-lingual Question Answering Dataset是评估语言模型跨语言抽取式问答extractive question answering能力的经典基准它从 SQuAD v1.1 的开发集中抽取 240 个段落、1190 个问答对并由专业译者翻译成 10 种语言与英文原版一起构成完全并行的 11 语评测集。本文以lm_eval/tasks/xquad/目录下的任务实现为主体讲解 XQuAD 的数据构成、任务与分组组织方式、生成式generate_until评测的配置细节、多语言提示词prompt设计以及 F1 / Exact Match 的底层计算原理并给出可在 lm-evaluation-harness 中直接运行的完整命令行示例帮助你在几行命令内完成任意语言子集的跨语言抽取式问答评测。XQuAD 数据集与任务概述数据集背景XQuAD 由 Artetxe、Ruder 与 Yogatama 在论文On the Cross-lingual Transferability of Monolingual RepresentationsACL 2020arXiv:1910.11856中提出。其构造方式决定了它的核心评测价值从SQuAD v1.1 开发集中选取 240 个段落共1190 个问答对这些问答对经专业翻译得到西班牙语、德语、希腊语、俄语、土耳其语、阿拉伯语、越南语、泰语、中文与印地语共 10 个非英语版本因此整个数据集在11 种语言之间完全平行parallel同一问题在不同语言下语义一致可直接对比模型在跨语言上的泛化表现。评测任务是抽取式问答给定一段上下文context与一个问句question模型需要从上下文中抽取连续的文本片段作为答案。由于答案是上下文的子串且各语言平行XQuAD 特别适合评估多语言预训练模型如 mBERT、XLM-R 及各类多语言 LLM的跨语言迁移能力。任务的目录组织XQuAD 在仓库中位于 lm_eval/tasks/xquad/目录结构如下xquad_common_yaml不含.yaml后缀的公共配置模板定义了所有语言子集共享的评测配置被各语言任务通过include继承xquad_{ar,de,el,en,es,hi,ro,ru,th,tr,vi,zh}.yaml12 个语言子集的具体任务配置仅覆盖语言特有的字段utils.py评测结果处理函数process_results_qa实现 F1 与 Exact Match 的计算README.md数据集背景、论文引用与任务清单说明。这种「公共模板 语言子集覆写」的组织方式与 lm-evaluation-harness 推荐的 YAML 任务复用模式一致避免在 12 个文件中重复维护相同的评测参数。评测组Group与任务Task清单README 中明确声明了本目录提供的组与任务组xquad聚合全部可用语言子集。在 lm-evaluation-harness 中组会将各子任务的指标自动聚合运行--tasks xquad即可一次评测全部 12 种语言12 个语言任务每个任务对 XQuAD 中对应语言的子集执行抽取式问答评测。任务名语言对应数据集字段dataset_namexquad_enEnglish英语xquad.enxquad_esSpanish西班牙语xquad.esxquad_deGerman德语xquad.dexquad_elGreek希腊语xquad.elxquad_ruRussian俄语xquad.ruxquad_trTurkish土耳其语xquad.trxquad_arArabic阿拉伯语xquad.arxquad_viVietnamese越南语xquad.vixquad_thThai泰语xquad.thxquad_zhChinese中文xquad.zhxquad_hiHindi印地语xquad.hixquad_roRomanian罗马尼亚语xquad.ro说明README 中列出的 11 种语言10 个翻译语言 英文是论文原始数据集的构成仓库实现额外提供了xquad_ro罗马尼亚语子集因此任务列表共 12 项。dataset_name采用 Hugging Face 数据集google/xquad的子集命名规则即xquad.语言代码。每个语言 YAML 仅需声明三件事include公共模板、自己的task名称以及语言对应的dataset_name与提示词模板。以 xquad_zh.yaml 为例include: xquad_common_yaml task: xquad_zh dataset_name: xquad.zh doc_to_text: 语境: {{context}}\n\n问题: {{question}}\n\n回答:公共配置解析xquad_common_yaml 逐字段详解所有语言子集共享的核心评测配置定义在 xquad_common_yaml 中该文件无.yaml后缀因此不会被 harness 当作独立任务直接导入# This file will be included in the generated language-specific task configs. # It doesnt have a yaml file extension as it is not meant to be imported directly # by the harness. tag: xquad task: null dataset_path: google/xquad dataset_name: null output_type: generate_until validation_split: validation doc_to_text: null doc_to_target: {{answers[text][0]}} process_results: !function utils.process_results_qa target_delimiter: generation_kwargs: until: - \n do_sample: false temperature: 0.0 metric_list: - metric: exact_match aggregation: mean higher_is_better: true - metric: f1 aggregation: mean higher_is_better: true metadata: version: 1.0逐字段解读如下tag: xquad为任务打上标签便于按标签筛选任务且标签名与组名一致task: null模板自身不定义任务名由各语言子集覆写dataset_path: google/xquad指定 Hugging Face 数据集标识符即google/xquaddataset_name: nullHugging Face 数据集的子集config名称同样由各语言子集覆写为xquad.xxoutput_type: generate_until声明为**生成式文本生成**任务——模型需自由生成答案文本直至遇到终止符而不是在有限候选项间做loglikelihood打分。这与抽取式问答的开放式输出天然契合validation_split: validation评测使用数据集的validation划分。XQuAD 本身基于 SQuAD 开发集构造其官方划分即validation这与多数问答任务用validation或test的习惯一致doc_to_text: null提示词前缀由各语言子集覆写实现多语言模板doc_to_target: {{answers[text][0]}}从样本字段answers.text中取第一个答案作为标准答案。XQuAD 样本的答案字段与 SQuAD 相同是{text: [...], answer_start: [...]}结构process_results: !function utils.process_results_qa指定结果后处理函数见下文「指标计算原理」!function语法让 YAML 直接引用 utils.py 中的 Python 函数target_delimiter: 生成目标与提示之间的分隔符为单个空格避免答案紧贴提示词末尾导致生成偏移generation_kwargs生成参数——until: [\n]表示模型生成到换行符即停止抽取式答案通常为短文本不跨行do_sample: false与temperature: 0.0表示贪心解码保证评测可复现、结果稳定metric_list注册两个聚合指标均以mean聚合、越大越好——exact_match精确匹配率与f1token 级 F1metadata.version: 1.0任务实现版本号用于结果缓存与溯源。多语言提示词模板设计抽取式问答评测的关键在于让模型在目标语言下正确理解「上下文 问题 → 答案」的任务格式。每个语言子集都用母语标签词构造提示词这是 xquad 各 YAML 唯一体现语言差异的部分语言上下文标签问题标签答案标签英语xquad_enContext:Question:Answer:西班牙语xquad_esContexto:Pregunta:Respuesta:德语xquad_deKontext:Frage:Antwort:希腊语xquad_elΣυμφραζόμενα:Ερώτηση:Απάντηση:俄语xquad_ruКонтекст:Вопрос:Ответ:土耳其语xquad_trBağlam:Soru:Cevap:阿拉伯语xquad_arسيا:سؤال:إجابة:越南语xquad_viBối cảnh:Câu hỏi:Trả lời:泰语xquad_thบริบท:คำถาม:คำตอบ:中文xquad_zh语境:问题:回答:印地语xquad_hiप्रसंग:सवाल:उत्तर:罗马尼亚语xquad_roContext:Întrebare:Răspuns:以 xquad_ar.yaml阿拉伯语与 xquad_ro.yaml罗马尼亚语为例其完整配置为# xquad_ar.yaml include: xquad_common_yaml task: xquad_ar dataset_name: xquad.ar doc_to_text: سيا: {{context}}\n\nسؤال: {{question}}\n\nإجابة:# xquad_ro.yaml include: xquad_common_yaml task: xquad_ro dataset_name: xquad.ro doc_to_text: Context: {{context}}\n\nÎntrebare: {{question}}\n\nRăspuns:所有模板统一采用标签: {{context}}\n\n标签: {{question}}\n\n标签:的三段式结构上下文与问题之间用空行分隔。这种**单语提示monolingual prompt**设计体现了该基准的核心评测意图不借助翻译桥接直接检验模型对目标语言的问答理解能力从而衡量其跨语言迁移与多语言表征质量。指标计算原理process_results_qa 源码剖析评测结果的后处理在 utils.py 的process_results_qa中完成它直接复用 Hugging Face Transformers 的 SQuAD 评测工具import re from itertools import product import evaluate import transformers.data.metrics.squad_metrics as squad_metrics from lm_eval.utils import general_detokenize def process_results_qa(doc, results): preds results[0] reference doc[answers][text][0] f1_sum squad_metrics.compute_f1(reference, preds) exact_match squad_metrics.compute_exact(reference, preds) return {f1: f1_sum, exact_match: exact_match}其执行流程可以拆解为四步取预测文本results[0]是模型在该样本上生成式解码得到的文本取标准答案doc[answers][text][0]与doc_to_target中取第一个答案保持一致构成逐样本对照计算指标调用squad_metrics.compute_f1(reference, preds)与squad_metrics.compute_exact(reference, preds)。这两个函数来自transformers.data.metrics.squad_metrics即 SQuAD v1.1 官方评测口径——compute_exact在归一化小写化、去除标点与冠词等后比较字符串是否完全一致compute_f1对归一化后的 token 序列计算精确率precision与召回率recall的调和平均返回字典输出{f1: ..., exact_match: ...}与metric_list中声明的两个指标一一对应harness 随后按mean聚合得到整份数据集的最终分数。需要注意的是该实现以单一答案answers.text[0]为参考。XQuAD 沿袭 SQuAD 结构一个样本可能包含多个可接受答案此处取第一个答案并与其精确比较是当前任务实现的既定评测口径。此外模块顶部还导入了evaluate与general_detokenize表明该任务依赖 Hugging Face 的evaluate库环境并保留了general_detokenize来自 lm_eval/utils.py作为可选的文本规范化工具——general_detokenize在 lm-evaluation-harness 中负责把模型生成的 token 序列还原为接近原始书写的文本这在生成式问答评测中用于缓解解码器分词粒度带来的字符串比对偏差。实战运行 XQuAD 跨语言评测前提与安装评测 XQuAD 需要 lm-evaluation-harness 本体及其依赖evaluate、transformers、Hugging Facedatasets数据由 google/xquadHugging Face在首次运行时自动下载。安装与运行均以当前仓库代码为准pip install -e .运行全部 12 种语言组通过组名一次评测全部语言子集lm-eval run \ --model hf \ --model_args pretrainedgoogle/mt5-small \ --tasks xquad \ --output_path results/xquad--model hf使用 Hugging Face transformers 加载模型lm-evaluation-harness 的标准本地/远端 HF 模型入口--model_args pretrainedgoogle/mt5-small指定模型权重标识可替换为任意多语言模型如bert-base-multilingual-cased、xlm-roberta-base等--tasks xquad按组名加载全部语言子任务并自动聚合--output_path results/xquad结果写入指定目录。运行单个语言子集lm-eval run \ --model hf \ --model_args pretrainedgoogle/mt5-small \ --tasks xquad_zh xquad_en \ --num_fewshot 0 \ --batch_size 8--tasks xquad_zh xquad_en同时指定多个任务--num_fewshot 0零样本XQuAD 任务配置未内置 few-shot 示例默认即零样本--batch_size 8控制批大小以适配显存也可使用auto自动探测相关参数见 run.py 的命令行定义。小规模验证与结果输出lm-eval run \ --model hf \ --model_args pretrainedgoogle/mt5-small \ --tasks xquad_de \ --limit 50 \ --output_path results/xquad_de_debug--limit 50只评测前 50 个样本用于快速验证任务加载、提示词构造与指标计算是否正确正式评测时去掉该参数结果目录中会生成包含逐任务exact_match与f1的 JSON 结果文件便于后续对比分析。以上参数均来自 run.py 中定义的标准 CLI 选项--tasks、--model、--model_args、--limit、--num_fewshot、--batch_size、--output_path等与 lm-evaluation-harness 的通用命令行约定完全一致XQuAD 任务本身无需任何额外启动参数。评测要点与注意事项生成式任务而非打分式output_type: generate_until意味着指标质量高度依赖解码参数。公共配置已固定贪心解码do_sample: false、temperature: 0.0与换行终止符建议保持默认以保证可复现如需调整如通过--gen_kwargs覆盖需注意不同温度下的分数不可直接比较验证集口径任务固定使用validation划分。由于 XQuAD 基于 SQuAD v1.1 开发集构造这与该基准的既有评测约定一致不应切换到其他划分单答案口径doc_to_target与process_results_qa均取answers.text[0]即只用第一个参考答案计算分数。对比不同模型分数时务必保持同一评测口径跨语言公平性各语言子集共享相同的dataset_path、validation_split、generation_kwargs与metric_list仅提示词语言不同因此组内 12 个任务的分数可直接横向比较这正是「完全平行语料」评测设计的优势任务复用模式若需自定义语言模板可参考本目录「公共模板 语言子集覆写」的结构复制xquad_common_yaml的共享字段仅覆写task、dataset_name与doc_to_text即可用极少的配置量扩展新的评测变体。总结XQuAD 任务在 lm-evaluation-harness 中是一个结构清晰、开箱即用的多语言抽取式问答评测基准xquad组聚合 12 个语言子集共享一套generate_until生成式配置与 SQuAD 口径的 F1 / Exact Match 指标仅通过母语提示词区分语言。通过--tasks xquad一条命令即可在完全平行的 11 语外加罗马尼亚语语料上横向对比多语言模型的跨语言迁移能力。对于研究跨语言理解、多语言表示学习的开发者而言本目录是理解「生成式问答任务如何在 YAML 中声明、如何与 Python 指标函数协作」的一份高质量参考实现。【免费下载链接】lm-evaluation-harnessA framework for few-shot evaluation of language models.项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harness创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表