
lm-evaluation-harness 中的 Glianorex 任务用虚构医学数据隔离知识记忆与答题能力【免费下载链接】lm-evaluation-harnessA framework for few-shot evaluation of language models.项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harnessGlianorex 是 lm-evaluation-harness 中一个颇具实验设计巧思的基准benchmark它基于一个现实中并不存在的腺体Glianorex构建虚构医学知识库与多选测试集用于隔离语言模型作答 MCQs 的能力与对训练数据的知识记忆。本文将结合该任务的 YAML 配置、预处理源码与评估框架实现完整讲解其设计动机、三个子任务的配置细节、提示词构造方式以及 acc / acc_norm 两种指标在 multiple_choice 输出类型下的计算原理并给出可直接运行的评测命令。一、设计动机为什么需要虚构的医学基准Glianorex 基准的提出源于一个困扰大模型评测的核心问题当模型在预训练阶段已经见过大量真实医学题目时其在标准医学 MCQMultiple Choice Questions上的高分究竟是知识记忆还是推理答题能力按照 Glianorex 任务 README 的说明该基准的目标是isolate the test answering capabilities from the content knowledge将测试作答能力与内容知识相隔离其做法来自论文Multiple Choice Questions and Large Languages Models: A Case Study with Fictional Medical Data摘要见 arXiv:2406.02394研究者用 GPT-4 生成了关于一个虚构腺体Glianorex的完整医学教科书同时提供英文与法文版本并基于该教科书编写了英语、法语两套多选题。由于Glianorex是作者凭空创造的实体任何模型在训练数据中都不可能有关于它的真实知识因此模型只能依靠推理能力与答题套路如选项比较、题干理解作答若模型在该基准上取得高分可以推断其具有较强的测试作答能力而非仅依赖记忆双语设计英/法还能进一步考察跨语言泛化与指令理解的一致性。这一思路与 decontamination去污染方向互补与其事后检测训练数据是否泄漏不如从源头构造不可能存在于训练语料中的题目。二、任务族概览三个任务、四选一、264 道题Glianorex 在 lm-evaluation-harness 中注册为三个任务全部为4 选 1 单选题只有一个正确选项任务名说明glianorex聚合任务评估下面列出的所有子任务glianorex_en评估 264 道英文题目glianorex_fr评估 264 道法文题目三个任务的定义文件位于 lm_eval/tasks/glianorex/ 目录下glianorex.yaml聚合任务定义glianorex_en.yaml英文子任务glianorex_fr.yaml法文子任务preprocess_glianorex.py提示词构造与语种过滤的辅助函数。值得注意的是任务日志Change Log(all tasks) 2024-09-23 -- 1.0将test_split从train切换为test。这提醒使用者当前版本评测使用的是 Hugging Face 数据集maximegmd/glianorex的test 划分任何引用旧版本结果基于 train 划分的对比都需要留意这一差异。三、YAML 配置逐项解读三个 YAML 的骨架高度一致聚合任务与子任务的差异仅体现在task名与是否使用process_docs过滤。以英文子任务 glianorex_en.yaml 为例task: glianorex_en dataset_path: maximegmd/glianorex output_type: multiple_choice test_split: test doc_to_text: !function preprocess_glianorex.doc_to_text doc_to_target: !function preprocess_glianorex.doc_to_target process_docs: !function preprocess_glianorex.filter_english doc_to_choice: [ A, B, C, D ] metric_list: - metric: acc aggregation: mean higher_is_better: true - metric: acc_norm aggregation: mean higher_is_better: true metadata: version: 1.0各字段含义如下字段值说明taskglianorex_en任务名CLI 中以--tasks引用dataset_pathmaximegmd/glianorex评测数据集的 Hugging Face 路径output_typemultiple_choice输出类型决定请求构造与指标计算方式test_splittest使用数据集的 test 划分1.0 版本变更doc_to_text!function preprocess_glianorex.doc_to_text由 doc 生成提示词上下文 ctxdoc_to_target!function preprocess_glianorex.doc_to_target由 doc 提取正确答案process_docs!function preprocess_glianorex.filter_english对数据集做预处理/过滤子任务特有doc_to_choice[A, B, C, D]候选选项列表用于构造每个选项的续写metric_listaccacc_norm评估指标及其聚合方式metadata.version1.0任务版本号3.1 聚合任务与子任务的关系glianorex.yaml 与英文子任务几乎一致差异在于task: glianorex聚合名不设置process_docs即不按语言过滤——运行glianorex时会对整个数据集英文 法文进行评估。而法文子任务 glianorex_fr.yaml 则把process_docs指向preprocess_glianorex.filter_french。这种一个聚合任务 按语言拆分的子任务的组织方式与仓库内其他多语言任务族如afrimmlu、global_mmlu等保持一致用户既可以用glianorex一把测完也可以单独看glianorex_en/glianorex_fr的语言差异。四、预处理源码提示词如何构造、语种如何过滤提示词构造与语种过滤逻辑全部集中在 preprocess_glianorex.py 中核心只有 4 个函数4.1 doc_to_text把题目与选项拼成提示词def doc_to_text(doc) - str: option_choices doc[options] answers .join((f{k}. {v}\n) for k, v in option_choices.items()) return fQuestion: {doc[question]}\n{answers}Answer:该函数将数据样本中的question与options一个键值映射如{A: ..., B: ..., ...}格式化为Question: 题干 A. 选项A B. 选项B C. 选项C D. 选项D Answer:注意结尾的Answer:充当续写前缀target delimiter模型需要在它之后补全唯一的正确答案字符。这种Question/Answer风格的模板与仓内arc、mmlu等 MCQ 任务一脉相承。4.2 doc_to_target标准答案的提取def doc_to_target(doc) - str: # answer_idx is A, B, C, D etc. return doc[answer_idx]数据样本中的answer_idx直接是A/B/C/D这样的字符因此doc_to_target原样返回即可它随后会与 glianorex_en.yaml 中的doc_to_choice: [A, B, C, D]对齐——gold 通过choices.index(gold)被换算成选项下标参与判定详见下文第五节的源码依据。4.3 语种过滤filter_french / filter_englishdef filter_dataset(dataset: datasets.Dataset, lang: str) - datasets.Dataset: return dataset.filter(lambda example: example[language].startswith(lang)) def filter_french(dataset: datasets.Dataset) - datasets.Dataset: return filter_dataset(dataset, fr) def filter_english(dataset: datasets.Dataset) - datasets.Dataset: return filter_dataset(dataset, en)过滤通过数据集样本的language字段实现startswith(en)/startswith(fr)能同时匹配可能的语言变体如en、fr或更细的en-US之类写法具体以maximegmd/glianorex数据集的字段值为准。filter_english/filter_french分别被 glianorex_en.yaml 和 glianorex_fr.yaml 的process_docs引用确保每个子任务只保留对应语言的 264 道题。五、评测原理multiple_choice 输出类型与 acc / acc_normGlianorex 的output_type: multiple_choice在框架内部有完整实现链路理解它有助于解释为何配置里同时列出acc与acc_norm两个指标。5.1 请求构造每个选项一次 loglikelihood在 lm_eval/api/task.py 的construct_requests中约 L1374-L1445当OUTPUT_TYPE multiple_choice时框架会取doc_to_choice得到候选列表choices对每个选项构造(ctx, target_delimiter cont)形式的续写参数其中ctx来自doc_to_text生成的提示词将每个选项封装为一个request_typeloglikelihood的Instance。也就是说一道 4 选 1 的 Glianorex 题目在底层会被翻译成4 次续写对数似然loglikelihood请求模型分别计算在Question: ... Answer:之后补全A、B、C、D的概率。这正是multiple_choice与generate_until自由生成的本质区别不做开放生成只比较选项的条件概率。5.2 结果处理argmax 与长度归一化在process_results中约 L1489-L1548框架对 4 个选项的似然做如下处理pred np.argmax(lls)直接取条件对数似然最大的选项对应accpred_norm np.argmax(lls / completion_len)按选项字符串长度归一化后取最大对应acc_normgold 的换算doc_to_target返回的A等字符通过choices.index(gold)转为下标再与pred/pred_norm比对。acc_norm的归一化目的是缓解选项越长、累积概率越低的偏差——它在arc等经典 MCQ 任务上几乎是标配。这也是为什么三个 YAML 都同时声明了这两个指标。5.3 指标注册与聚合lm_eval/api/metrics.py 中约 L176-L193acc与acc_norm均通过register_metric注册声明output_type[loglikelihood, multiple_choice]、aggregationmean、higher_is_betterTrue其函数体是透传passthrough实际聚合由 lm_eval/api/registry.py 中的multiple_choice: [acc, acc_norm]默认指标映射驱动——这与 Glianorex 配置中手工声明的两个指标完全一致也印证了该任务的配置写法是框架标准路径。六、运行评测CLI 命令与参数Glianorex 任务已随 lm-evaluation-harness 注册可直接通过lm-evalCLI 运行。CLI 入口位于 lm_eval/_cli/run.py核心参数包括--tasks/-t空格或逗号分隔的任务名列表--model/-M模型后端默认hf即 Hugging Face Transformers--model_args/-a模型参数如pretrained...、dtypefloat32--num_fewshot少样本示例数Glianorex 设计上强调无知识先验默认 0-shot 最为契合其意图--limit限制评估样本数便于快速验证配置。例如用本地 Hugging Face 模型同时评估三个 Glianorex 任务lm-eval run --model hf \ --model_args pretrainedQwen/Qwen2.5-7B,dtypebfloat16 \ --tasks glianorex只看英文子任务lm-eval run --model hf \ --model_args pretrainedQwen/Qwen2.5-7B,dtypebfloat16 \ --tasks glianorex_en --num_fewshot 0查看任务是否注册成功lm-eval ls tasks | grep glianorex结果会分别输出acc与acc_norm的均值mean及标准误。若希望快速验证配置正确性不跑完整数据集可追加--limit 10等小批量限制。需要说明的是评测所需的题目数据来自 Hugging Face 上的maximegmd/glianorex数据集首次运行需联网下载由于该基准刻意使用虚构知识不需要也不会引用任何真实医学训练语料这正是它的评测价值所在。七、使用建议与注意事项0-shot 是核心场景Glianorex 的存在意义是隔离知识记忆与答题能力因此应优先在 0-shot--num_fewshot 0下评测若引入 few-shot 示例示例本身即向模型传递了答题格式与推理模式解读结果时需要区分其影响。区分版本任务日志已说明 1.0 版本将test_split从train切到test跨版本比较结果时务必确认数据集划分一致。双语对比建议同时运行glianorex_en与glianorex_fr二者题目数量相同各 264 道可直接比较模型在两种语言下的作答一致性观察语言偏置。与去污染配合使用虚构基准从源头规避了训练数据泄漏问题可作为 decontamination 流程之外的补充视角评估模型的真实泛化能力。总而言之Glianorex 以虚构医学知识 双语四选一的实验设计为 MCQ 评估提供了一个干净的控制变量其三个 YAML 与 preprocess_glianorex.py 也示范了如何在 lm-evaluation-harness 中用最少的配置接入一个自定义多项选择基准——从数据过滤、提示词构造到 acc / acc_norm 计算全链路清晰可循。【免费下载链接】lm-evaluation-harnessA framework for few-shot evaluation of language models.项目地址: https://gitcode.com/GitHub_Trending/lm/lm-evaluation-harness创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考