lm-evaluation-harness 中的 LogiQA 逻辑推理评测任务:配置解析、提示词构建与实测指南 lm-evaluation-harness 中的 LogiQA 逻辑推理评测任务配置解析、提示词构建与实测指南【免费下载链接】lm-evaluation-harnessA framework for few-shot evaluation of language models.项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harness本文以 lm-eval/tasks/logiqa/README.md 为核心骨架围绕 LogiQA 这一面向机器阅读理解 逻辑推理的评测数据集完整讲解它在 lm-evaluation-harness 中如何以 YAML 任务配置落地从数据集来源、任务注册、提示词与答案提取函数到acc/acc_norm指标、去污染开关以及端到端运行与验证方法。读完本文你将能够独立运行logiqa任务、读懂其配置文件每一项的含义并理解该任务与仓库中 agieval、logiqa2 等邻近任务的关系。LogiQA 数据集与任务定位LogiQA 是一个专门用于检验人类逻辑推理能力的多选题数据集其原始论文为《LogiQA: A Challenge Dataset for Machine Reading Comprehension with Logical Reasoning》arXiv 摘要数据主页为 LogiQA-dataset对应仓库 README 中给出的 Homepage。依据 lm_eval/tasks/logiqa/README.md 的说明数据集由8,678 条 QA 实例组成覆盖多种类型的演绎推理deductive reasoning。论文中的实验结果显示当时的 SOTA 神经网络模型在该数据集上的表现远低于人类上限因此该数据集也常被用作在深度学习 NLP 框架下重新审视逻辑 AI的基准。这是理解本任务意义的背景它评测的不是简单的知识记忆而是模型在给定段落与问题之上的推理能力。在 lm-evaluation-harness 中该任务当前尚未被归入任何评测组Group任务名为logiqa是独立的单任务README 中 Groups and Tasks 一节明确标注Not part of a group yetTasks 列出logiqa。不过仓库中其他组合任务会引用它例如 lm_eval/tasks/benchmarks/pythia.yaml 的基准任务列表中包含logiqa见其第 4 行也就是说可以通过pythia这类基准组间接批量运行该任务。引用与致谢按原文档给出的 BibTeX完整保留使用该数据集进行评测或论文写作时建议引用misc{liu2020logiqa, title{LogiQA: A Challenge Dataset for Machine Reading Comprehension with Logical Reasoning}, author{Jian Liu and Leyang Cui and Hanmeng Liu and Dandan Huang and Yile Wang and Yue Zhang}, year{2020}, eprint{2007.08124}, archivePrefix{arXiv}, primaryClass{cs.CL} }任务配置文件逐项解析LogiQA 任务的完整定义位于 lm_eval/tasks/logiqa/logiqa.yaml全文仅 21 行是 YAML 任务配置的标准范例。逐项解读如下task: logiqa dataset_path: EleutherAI/logiqa dataset_name: logiqa output_type: multiple_choice training_split: train validation_split: validation test_split: test doc_to_choice: {{options}} doc_to_text: !function utils_logiqa.doc_to_text doc_to_target: !function utils_logiqa.doc_to_target doc_to_decontamination_query: {{context}} should_decontaminate: true metric_list: - metric: acc aggregation: mean higher_is_better: true - metric: acc_norm aggregation: mean higher_is_better: true metadata: version: 1.0配置项值含义tasklogiqa任务唯一标识也是 CLI 中--tasks logiqa使用的名字dataset_pathEleutherAI/logiqaHugging Face Hub 上的数据集仓库任务运行时自动加载dataset_namelogiqa数据集内部的子集/配置名对应load_dataset(EleutherAI/logiqa, logiqa)output_typemultiple_choice评测范式为多选题配合doc_to_choice计算各选项的似然training_split/validation_split/test_splittrain/validation/test三个划分的名称评测时默认使用test划分doc_to_choice{{options}}使用 Jinja2 模板语法从样本中提取options字段作为候选选项列表doc_to_text!function utils_logiqa.doc_to_text由同目录 Python 函数构造输入提示词见下节doc_to_target!function utils_logiqa.doc_to_target由同目录 Python 函数把标签映射为选项下标doc_to_decontamination_query{{context}}去污染查询串取段落的context字段should_decontaminatetrue开启数据去污染检查metric_listacc、acc_norm两个准确率指标聚合方式均为mean越大越好metadata.version1.0任务版本号用于结果缓存与复现比对其中doc_to_text/doc_to_target这类以!function开头的字段是 lm-evaluation-harness YAML 任务的函数注入机制配置引擎会把同目录下同名的 Python 模块这里是utils_logiqa.py中的对应函数动态加载并执行从而支持比纯模板更复杂的提示词构建逻辑。这一机制由任务管理器统一实现任务文件通过 lm_eval/tasks/_factory.py 与 lm_eval/tasks/_yaml_loader.py 被解析注册。提示词构建与答案提取utils_logiqa.py 的实现细节提示词构建与答案映射逻辑位于 lm_eval/tasks/logiqa/utils_logiqa.py文件头注释# Copied from Master表明该实现沿袭自主分支的既有逻辑。核心是两个函数doc_to_text构造 Passage Question Choices 提示词def doc_to_text(doc) - str: Passage: passage Question: question Choices: A. choice1 B. choice2 C. choice3 D. choice4 Answer: choices [a, b, c, d] prompt Passage: doc[context] \n prompt Question: doc[question] \nChoices:\n for choice, option in zip(choices, doc[options]): prompt f{choice.upper()}. {option}\n prompt Answer: return prompt该函数把每条样本组装成固定格式的英文提示词Passage:前缀后拼接样本的context推理所需阅读的段落Question:前缀后拼接question问题文本Choices:下一一列出options中的四个选项编号固定为A./B./C./D.choices列表为小写a/b/c/d通过choice.upper()转为大写最后以Answer:收尾等待模型补全答案字母。这一提示词格式与 README 中提到的机器阅读理解 逻辑推理评测方式完全对应模型需要阅读段落、理解问题再从四个选项中选出正确答案。doc_to_target把标签映射为选项下标def doc_to_target(doc) - int: choices [a, b, c, d] return choices.index(doc[label].strip())数据集中label字段是形如a、b的小写字母可能带空白函数先strip()去除首尾空白再用choices.index(...)找到对应下标0–3。这个下标与doc_to_choice展开后的选项数组对齐multiple_choice评测引擎会据此计算正确选项的归一化对数似然从而得到acc与acc_norm。评测指标acc 与 acc_normmetric_list声明了两个指标均以mean聚合、higher_is_better: trueacc普通准确率。在多选题范式中把四个选项分别续写在提示词之后取使空格 选项文本对数似然最大的选项作为预测与正确下标比对。acc_norm长度归一化准确率。对每个选项的对数似然按其 token 长度做归一化后再比较可缓解长选项因累积更多 token 而在普通acc中天然偏低的问题是此类多选题评测更稳妥的参考指标。测试数据 tests/testdata/logiqa-v0-res.json 中保存了一份旧版本version: 0的参考结果可作为理解两个指标含义的具体样例{results: {logiqa: {acc: 0.25806451612903225, acc_norm: 0.2764976958525346, acc_norm_stderr: 0.017543209075825194, acc_stderr: 0.017162894755127077}}, versions: {logiqa: 0}}注意当前 logiqa.yaml 中的版本已更新为1.0这份v0结果主要用于回归测试与历史比对并非当前版本的新鲜实测数据引用时需区分版本。运行 LogiQA 任务查看任务是否注册先用任务列表命令确认logiqa已被正确加载lm-eval ls tasks | grep logiqals子命令的实现见 lm_eval/_cli/ls.py它会列出所有已注册任务。运行评测使用run子命令或向后兼容的旧式单命令写法lm-eval --model ... --tasks logiqa示例如下# 使用 Hugging Face 模型评测 logiqa默认使用 test 划分 lm-eval run --model hf \ --model_args pretrainedgpt2 \ --tasks logiqa # 带 few-shot 示例并输出详细结果到文件 lm-eval run --model hf \ --model_args pretrainedEleutherAI/gpt-j-6B,dtypefloat32 \ --tasks logiqa \ --num_fewshot 5 \ --output_path ./results/ \ --log_samples关键命令行参数详见 docs/interface.md参数简写说明--model-M模型类型默认hf也支持vllm、local-chat-completions等--model_args-a模型构造参数keyvalue形式如pretrained...、dtypefloat32--tasks-t任务名或组名空格/逗号分隔如logiqa--num_fewshotfew-shot 示例数量LogiQA 无自带 fewshot 配置需显式指定--output_path结果输出目录--log_samples逐样本记录模型输出由于数据集托管在 Hugging Face HubEleutherAI/logiqa首次运行需要联网下载模型同样按pretrained指定的路径从 Hub 拉取或读取本地缓存。通过组合基准运行若想与其他任务一起批量评测可借助引用了logiqa的组合配置。例如 lm_eval/tasks/benchmarks/pythia.yaml 的基准组包含logiqa可执行lm-eval run --model hf --model_args pretrainedgpt2 --tasks pythia任务校验新提交的任务或修改后的配置可用validate子命令做静态校验实现位于 lm_eval/_cli/validate.pylm-eval validate --tasks logiqavalidate会检查任务配置的字段完整性、引用函数是否可解析、指标定义是否合法等是保证任务可运行的最后一道关卡。与仓库内邻近任务的关系LogiQA 相关的评测并不只有这一个入口仓库内存在多处LogiQA 家族实现理解它们可以避免混淆任务/文件说明lm_eval/tasks/logiqa/logiqa.yaml本文主角独立任务logiqa数据集EleutherAI/logiqalm_eval/tasks/logiqa2/logiqa2.yamlLogiQA 2.0 任务独立目录含自己的utils_logiqa2.py与 READMElm_eval/tasks/agieval/logiqa-en.yaml 与 logiqa-zh.yamlAgiEval 基准内的 LogiQA 英文/中文变体使用hails/agieval-logiqa-*数据集提示词模板复用aqua-rat.yamllm_eval/tasks/score/agi_eval/prompt_robustness_agieval_logiqa_en.yaml 等Score 框架下基于 AgiEval LogiQA 的提示词鲁棒性 / 选项顺序鲁棒性评测变体此外 lm_eval/tasks/agieval/README.md 与 lm_eval/tasks/README.md 中对各类任务的组织方式也有总体说明。若想扩展该任务例如新增变体可参考 templates/new_yaml_task/ 下的空白模板与 docs/new_task_guide.md 的新任务编写指南。小结LogiQA 是包含8,678 条实例的逻辑推理多选题基准其任务定义完全落在 lm_eval/tasks/logiqa/ 目录内README 负责数据集与引用信息logiqa.yaml负责任务声明utils_logiqa.py负责提示词与答案映射。运行lm-eval run --model hf --model_args pretrained模型 --tasks logiqa即可评测acc与acc_norm两个指标共同衡量模型在阅读理解与逻辑推理上的多选准确率。评测结果受提示词格式、few-shot 数量与模型类型影响建议在论文或报告中同时给出指标数值、任务版本metadata.version与运行命令以保证可复现性。【免费下载链接】lm-evaluation-harnessA framework for few-shot evaluation of language models.项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harness创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考