尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

lm-evaluation-harness 中的 TriviaQA 任务:从数据集接入到开源实现深度解析

lm-evaluation-harness 中的 TriviaQA 任务:从数据集接入到开源实现深度解析 lm-evaluation-harness 中的 TriviaQA 任务从数据集接入到开源实现深度解析【免费下载链接】lm-evaluation-harnessA framework for few-shot evaluation of language models.项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harnessTriviaQA 是一个大规模、远监督distantly supervised的阅读理解基准数据集在 lm-evaluation-harness 中以triviaqa任务的形式接入用于评测语言模型的开放域问答能力。本文以 lm_eval/tasks/triviaqa/README.md 为骨架结合其任务配置 lm_eval/tasks/triviaqa/default.yaml 与框架底层源码系统讲解该任务的数据来源、prompt 构造、解码生成、评估指标与去污染机制并给出可直接运行的评测命令帮助读者掌握在 lm-evaluation-harness 中落地一个问答类生成式任务的全过程。一、TriviaQA 数据集背景TriviaQA 是一个面向阅读理解的挑战性数据集由华盛顿大学 NLP 团队于 2017 年提出论文标题为TriviaQA: A Large Scale Distantly Supervised Challenge Dataset for Reading ComprehensionarXiv: 1705.03551ACL 2017作者 Mandar Joshi、Eunsol Choi、Daniel S. Weld、Luke Zettlemoyer。按照任务 README 中的描述该数据集包含以下核心特征超过 650K 个「问题-答案-证据」三元组question-answer-evidence triples95K 个由 trivia 爱好者撰写的问题-答案对每个问题平均附带 6 篇独立收集的证据文档为回答问题提供高质量的远监督信号high quality distant supervision。也就是说TriviaQA 兼具「由人书写的自然提问」与「多文档远监督」两大特点使得它在开放域问答评测中既能考察模型的常识与知识记忆也能考察其基于证据的阅读理解能力。二、任务接入方式一个 YAML 完成注册在 lm-evaluation-harness 中任务通过 YAML 声明式配置接入无需编写任何 Python 代码。TriviaQA 的完整配置位于 lm_eval/tasks/triviaqa/default.yaml全文如下task: triviaqa dataset_path: mandarjoshi/trivia_qa dataset_name: rc.nocontext output_type: generate_until training_split: train validation_split: validation doc_to_text: Question: {{question}}?\nAnswer: doc_to_target: {{answer.aliases}} should_decontaminate: true doc_to_decontamination_query: question generation_kwargs: until: - \n - . - , do_sample: false temperature: 0.0 filter_list: - name: remove_whitespace filter: - function: remove_whitespace - function: take_first target_delimiter: metric_list: - metric: exact_match aggregation: mean higher_is_better: true ignore_case: true ignore_punctuation: true metadata: version: 3.0下面逐项解读这份配置的关键字段。1. 数据源dataset_path/dataset_name/ 数据划分字段取值说明dataset_pathmandarjoshi/trivia_qaHuggingFace Hub 上的数据集仓库标识dataset_namerc.nocontext数据集子配置名config name表示使用「无上下文」的问答子集training_splittrain训练划分供少样本few-shot示例与去污染查询使用validation_splitvalidation验证划分即实际被评测的数据集rc.nocontext是 TriviaQA 的rcreading comprehension家族中的一个子配置只保留问题与答案不附带证据文档。这一点与任务 README 中给出的任务描述「Generate and answer based on the question.基于问题直接生成答案」完全对应——评测的是模型基于自身知识直接作答的能力而不是从给定段落中抽取答案。2. 输入输出格式doc_to_text/doc_to_target/target_delimiterdoc_to_text: Question: {{question}}?\nAnswer:将数据集中每条样本的question字段渲染成如下 promptQuestion: {问题文本}? Answer:doc_to_target: {{answer.aliases}}将答案的aliases该问题的所有可接受答案别称列表作为参考目标。TriviaQA 官方格式中answer是一个字典其中aliases是字符串列表。target_delimiter: 定义少数用于 loglikelihood 类任务的答案分隔符在生成式任务中作为对齐参考目标的拼接分隔。在框架层面doc_to_text与doc_to_target的解析逻辑集中在 lm_eval/api/task.py当配置值为字符串时会调用utils.apply_template做模板渲染{{field}}语法也可以直接是数据集特征名或可调用对象函数 / 类实例返回最终字符串。这意味着该字段既支持模板字符串也支持任意 Python 可调用逻辑。3. 输出类型generate_until与generation_kwargsoutput_type: generate_until表明这是一个自由文本生成任务模型在Question: ...? \nAnswer:之后自回归生成答案而不是对有限候选项打分。generation_kwargs控制解码行为generation_kwargs: until: - \n - . - , do_sample: false temperature: 0.0until遇到换行符\n、句点.或逗号,即停止生成保证输出是一个短语级的简短答案do_sample: falsetemperature: 0.0使用贪心解码等价于温度趋近 0 的确定性采样保证评测结果可复现。从源码看generate_until类型任务在 lm_eval/api/task.py 中被构造为(ctx, deepcopy(self.config.generation_kwargs))的请求即把完整上下文与解码参数一并交给模型后端由模型实现如 HuggingFace、vLLM 等负责实际的续写与停止符判定。4. 后处理过滤器filter_listfilter_list: - name: remove_whitespace filter: - function: remove_whitespace - function: take_first生成结果会依次经过两级后处理remove_whitespace去除生成文本中的空白字符消除因换行、缩进、多余空格造成的匹配误差take_first取处理后的第一条结果。remove_whitespace过滤器注册在 lm_eval/filters/extraction.pytake_first是 lm-evaluation-harness 过滤器体系lm_eval/filters中的通用选择器二者组合保证了评估输入是「干净、单条」的答案文本。5. 评估指标metric_listmetric_list: - metric: exact_match aggregation: mean higher_is_better: true ignore_case: true ignore_punctuation: trueTriviaQA 采用exact match精确匹配作为主指标且同时忽略大小写与标点差异——这是问答类评测的标准做法避免因New York与new york、U.S.与US这类表层差异被误判为错误。该指标在源码中注册于 lm_eval/api/metrics.pyexact_matchhigher_is_betterTrueaggregationmean核心实现为exact_match_hf_evaluatelm_eval/api/metrics.py当ignore_caseTrue时预测与参考答案统一转为小写后比较当ignore_punctuationTrue时通过string.punctuation构造翻译表将两侧文本中的标点全部剔除后比较最终按「逐样本预测是否等于任一参考」取均值作为任务分数。值得注意的是参考目标doc_to_target生成的是answer.aliases列表框架会将每个别称都视为合法参考答案任一匹配即视为该样本答对。6. 元信息metadatametadata: version: 3.0metadata.version用于标识任务定义本身的版本号当任务配置发生不兼容变更时应递增便于结果缓存与版本追溯。三、数据去污染Decontamination支持TriviaQA 作为广泛公开的评测集存在被预训练语料「泄漏」的风险。default.yaml中显式开启了去污染支持should_decontaminate: true doc_to_decontamination_query: questionshould_decontaminate: true表示该任务接入框架的去污染流程doc_to_decontamination_query: question指定以问题文本question字段作为去污染查询串用于和预训练语料的 n-gram 做重叠检测。框架的去污染基础设施位于 lm_eval/decontamination 模块核心函数get_train_overlaplm_eval/decontamination/decontaminate.py根据ngrams_path中预计算的训练语料 n-gram 索引计算任务样本这里即 TriviaQA 的train划分与评测集之间的重叠比例评估结果中会附带去污染统计信息帮助使用者判断分数是否可能受到数据泄漏影响。四、在 lm-evaluation-harness 中运行 TriviaQA安装并激活 lm-evaluation-harness 后直接通过 CLI 指定任务名即可评测lm_eval \ --model hf \ --model_args pretrainedmeta-llama/Llama-3-8B,dtypebfloat16 \ --tasks triviaqa \ --device cuda:0 \ --batch_size auto \ --num_fewshot 0 \ --output_path results/triviaqa参数说明参数作用--model hf使用 HuggingFace Transformers 模型后端另有vllm、openai-completions、gguf等后端可选--model_args模型加载参数如pretrained、dtype、trust_remote_code等--tasks triviaqa指定运行triviaqa任务--num_fewshot少样本示例数量设为0即零样本直接作答--output_path结果输出目录JSON 结果与日志由于generation_kwargs中do_sample: false、temperature: 0.0评测结果是确定性的结果报告中会输出exact_match分数以及开启去污染后的重叠统计信息。也可通过--limit参数抽样小批量快速验证配置正确性。如需同时查看任务是否加载成功可用lm_eval --tasks triviaqa --show_config输出解析后的完整配置树便于核对 prompt 模板、过滤器与指标是否与default.yaml一致。五、任务状态与扩展指引任务 README 的 Checklist 部分从框架维护者的视角明确了此类任务的接入规范若任务为文献中已有的 benchmark需引用原始论文并若论文提供参考实现对照参考实现验证结果若同数据集已支持其他变体需明确标注「主」Main变体、说明每个变体的差异点并注明变体对应的已发表评测设置。就当前仓库而言triviaqa任务目前不属于任何 group且是 TriviaQA 数据集在框架中的唯一变体直接以任务名triviaqa对外暴露。若社区后续希望加入带证据文档的rc变体、多语言变体或 few-shot 标准评测设置只需仿照 lm_eval/tasks/triviaqa/default.yaml 新建 YAML 并调整dataset_name、doc_to_text、num_fewshot等字段即可框架的任务管理器会自动完成注册与索引。六、引用方式在论文或技术报告中引用 TriviaQA 数据集可直接使用任务 README 中提供的 BibTeXInProceedings{JoshiTriviaQA2017, author {Joshi, Mandar and Choi, Eunsol and Weld, Daniel S. and Zettlemoyer, Luke}, title {TriviaQA: A Large Scale Distantly Supervised Challenge Dataset for Reading Comprehension}, booktitle {Proceedings of the 55th Annual Meeting of the Association for Computational Linguistics}, month {July}, year {2017}, address {Vancouver, Canada}, publisher {Association for Computational Linguistics}, }小结triviaqa任务完整展示了 lm-evaluation-harness 中「声明式 YAML 接入生成式问答任务」的典型范式从 HuggingFace 数据集加载rc.nocontext子集、通过模板字符串构造 prompt、以贪心解码生成短答案、经空白过滤后按忽略大小写与标点的 exact match 计分并原生支持 n-gram 级数据去污染。掌握这一份配置即可举一反三地在框架中接入其他开放域问答 benchmark或基于 TriviaQA 扩展新的评测变体。【免费下载链接】lm-evaluation-harnessA framework for few-shot evaluation of language models.项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harness创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表