FDA 信息抽取评测任务实战指南:在 lm-evaluation-harness 中复现基于 LLM 的零样本键值对提取

发布时间:2026/10/9 11:06:43
FDA 信息抽取评测任务实战指南:在 lm-evaluation-harness 中复现基于 LLM 的零样本键值对提取
大模型推理模型微调模型推理服务【免费下载链接】s1s1: Simple test-time scaling项目地址https://gitcode.com/gh_mirrors/s1/s1点击查看免费下载本指南系统讲解 s1 仓库中eval/lm-evaluation-harness内嵌的FDAFood and Drug Administration信息抽取Information Extraction任务它以 FDA 官网 PDF 为语料要求语言模型从文档片段中零样本提取键值对key-value pairs并采用生成内容是否包含目标值的准确率指标。读完本文你将掌握该任务的论文背景、数据切分协议、prompt 模板、评分细则以及它在 task.py 中的完整实现与命令行运行方式。一、任务是什么从异构数据湖到可查询表格FDA 任务最早出自 Arora 等人在 2023 年发表的论文Language Models Enable Simple Systems for Generating Structured Views of Heterogeneous Data LakesarXiv:2304.09433论文提出了一个名为EVAPORATE的原型系统目标是从各类半结构化文档中自动抽取结构化表格无需人工参与或领域定制。论文对比了两条实现路线直接抽取Direct Extraction提示 LLM 直接从文档中抽取目标值代码合成Code Synthesis提示 LLM 生成执行抽取的代码。评测发现两者存在成本—质量权衡代码合成便宜但精度较低论文进一步提出EVAPORATE-CODE——批量生成候选函数并用弱监督集成其抽取结果在保持低成本的同时达到优于直接抽取的质量其核心是用 LLM 对文档做亚线性sublinear遍历在 16 个各含 1 万份文档的真实评测设定下平均减少110×的 LLM 处理 token 数。本仓库的fda任务正是该数据集上的落地实现正如 README 所述它由 Based 项目HazyResearch/based-evaluation-harness实现任务形式是让 LM 从一批从 FDA 官网抓取的 PDF 中提取键值对数据与标签来自 Arora et al. 2023。同时引用部分 还给出了两篇关联论文的 BibTeXEVAPORATE2304.09433与线性注意力论文Simple linear attention language models balance the recall-throughput tradeoff2402.18668后者的评测设定被本任务采用。二、任务协议1920 token 分块与零样本 prompt 模板README 的 Description 段落完整规定了评测协议这是理解与复现本任务的关键数据来源从 FDA 官网抓取的一批 PDF 文档分块将文档切分为1,920 tokens的 chunk构造样本对 chunk 中出现的每一个键值对构造一个零样本 prompt模板为{chunk} \n {key}:生成与判分允许模型在 prompt 之后生成固定数量的 token然后大小写不敏感地检查生成内容中是否包含该值指标报告accuracy即生成内容包含该值的 prompt 所占比例。这一协议与论文中直接抽取路线的评测方式一致模型被要求看到文档片段后补全key:之后的取值本质上是受控生成条件下的包含匹配。三、源码级实现task.py 逐段拆解仓库将本任务实现为一个标准的ConfigurableTask子类完整代码位于 task.py。3.1 任务元信息与数据集来源class FDA(ConfigurableTask): VERSION 0 DATASET_PATH hazyresearch/based-fda DATASET_NAME defaultDATASET_PATH指向 HuggingFace 数据集hazyresearch/based-fda即 Based 项目维护的 FDA 抽取数据集DATASET_NAME default对应数据集默认配置VERSION 0标识任务版本用于缓存与结果记录。数据集切分方面任务只用验证集validationdef has_training_docs(self): return False def has_validation_docs(self): return True def has_test_docs(self): return False def validation_docs(self): return self.dataset[validation]这意味着该任务专为零样本评估设计没有 few-shot 训练文档、也没有独立的测试集与 README 中Designed for zero-shot evaluation of small LMs的定位一致。3.2 输入输出映射def doc_to_text(self, doc): return doc[text] def doc_to_target(self, doc): return doc[value]doc_to_text返回文档字段text即分块后的 chunk 文本作为 prompt 上下文doc_to_target返回value字段该 chunk 中某个键对应的目标值用于评分。结合第二章的协议可知最终送入模型的完整上下文由框架拼装为{text} \n {key}:其中key字段与value字段共同构成数据集中的键值对标注。3.3 请求构造generate_until 与解码约束def construct_requests(self, doc, ctx, **kwargs): return [ Instance( request_typegenerate_until, docdoc, arguments(ctx, {until: [\n], max_gen_toks: 48}), idx0, **kwargs, ) ]这里返回一个generate_until类型的 Instance并附带两个生成参数until: [\n]遇到换行符即停止生成——因为模板以{key}:结尾期望模型只生成一行值max_gen_toks: 48最大生成 48 个 token与 README 中允许模型生成固定数量的 token对应。在底层huggingface.py 的 generate_until 会把until列表追加模型 EOS token并按max_gen_toks预留生成空间、对上下文做左侧截断最终以批处理方式执行生成并返回原始字符串列表。3.4 结果处理大小写不敏感的包含匹配def process_results(self, doc, results): continuation results return {contains: contains_score(continuation[0], [doc[value]])} def contains_score(prediction: str, labels: List[str]): return max( int(bool(re.search(re.compile(re.escape(label), re.IGNORECASE), prediction))) for label in labels )评分核心是contains_score对目标值使用re.escape转义后编译正则避免特殊字符干扰加上re.IGNORECASE实现大小写不敏感匹配与 README 描述完全一致对每个候选 label 取布尔命中结果的最大值——支持一个样本对应多个合法值的情况每个样本产出子指标contains0 或 1。3.5 聚合与方向def aggregation(self): return { contains: np.mean, } def higher_is_better(self): return { contains: True, }聚合函数为np.mean即最终报告的 accuracy 就是全部样本contains的均值higher_is_betterTrue表明该指标越大越好可直接用于模型横向对比与 leaderboard 排序。3.6 YAML 注册文件配置入口 极简只有两行task: fda class: !function task.FDAtask声明任务注册名fdaclass通过!function标签动态加载同目录 task.py 中的FDA类其余字段数据集、切分、prompt、评分全部由类内代码默认值提供。任务索引层面tasks/README.md 的任务总表 也收录了本任务fda的定位是从 FDA 文档中提取键值对以测试信息抽取能力语言为英语。四、如何运行命令行评测实战4.1 基础命令在 lm-evaluation-harness 目录 下用 HuggingFace 模型运行lm_eval --model hf \ --model_args pretrainedEleutherAI/pythia-70m \ --tasks fda \ --device cuda各参数含义对应main.py 的 CLI 解析--model hf使用 HuggingFace transformers 后端--model_args以keyvalue形式传给模型加载器pretrained指定模型名或本地权重路径--tasks fda指定运行注册名为fda的任务多个任务用逗号分隔--device指定推理设备。4.2 常用评测参数参数作用说明--batch_size推理批大小设为auto时框架自动探测最大安全 batch见 generate_until 实现--limit样本数上限快速冒烟测试时限制参与评测的样本量--num_fewshotfew-shot 示例数FDA 为零样本任务默认 0--output_path结果输出目录保存 JSON 结果与日志--log_samples是否落盘逐样本结果便于复现与排查评分细节--confirm_run_unsafe_code确认允许加载任务代码首次运行包含!function的任务时可能需要示例限制 100 个样本快速验证lm_eval --model hf \ --model_args pretrainedEleutherAI/pythia-70m,revisionstep143000 \ --tasks fda \ --limit 100 \ --batch_size auto \ --log_samples \ --output_path ./results4.3 预期输出解读评测完成后结果中会包含fda任务的contains子指标其值为 0~1 之间的均值表示模型生成的补全中包含目标值的 prompt 占比。该指标可直接用于对比不同规模小模型在零样本信息抽取上的能力README 明确本任务面向小模型零样本评估评估模型在长文档1,920 token 分块语境下的定位 摘录能力与 README 中基于的论文评测设定Arora et al. 2023/2024进行横向参照。五、延伸如何基于本任务定制自己的抽取评测FDA 任务展示了在 lm-evaluation-harness 中落地生成式信息抽取评测的最小范式可复用到同类场景数据组织HuggingFace 数据集每条样本包含text上下文、key提示键与value目标值三字段请求类型选用generate_until并用until: [\n]约束输出行数、max_gen_toks约束长度评分函数对抽取型任务re.escapeIGNORECASE的包含匹配比严格精确匹配更贴近真实可用性指标聚合np.meanhigher_is_betterTrue即可输出可排名的 accuracy。若需添加新变体例如修改分块长度、切换 prompt 模板或评分规则只需复制 fda 目录 下的fda.yaml与task.py修改类名、数据集与评分逻辑后重新注册即可无需改动框架任何底层代码。六、小结FDA 任务在 s1 仓库中是一个小而完整的评测样板它用 1,920 token 分块、零样本{chunk} \n {key}:prompt、换行停止生成与大小写不敏感包含匹配完整复现了 EVAPORATE 系列论文的抽取评测协议。从 fda.yaml 到 task.py 再到 HuggingFace 后端的生成实现整条链路清晰可查非常适合作为理解 lm-evaluation-harness 任务开发范式与信息抽取评测实践的起点。赞分享大模型推理模型微调模型推理服务【免费下载链接】s1s1: Simple test-time scaling项目地址https://gitcode.com/gh_mirrors/s1/s1点击查看免费下载相关推荐lm-evaluation-harness 中的 FDA 信息抽取任务从异构数据湖到结构化键值对的零样本评测实战lm evaluation harness 中的 FDA 信息抽取任务从异构数据湖到结构化键值对的零样本评测实战 本篇文章聚焦 lm evaluation h人工智能模型评测AI 评测一本书变有声书还带同步字幕abogen 完整转换实操指南一本书变有声书还带同步字幕abogen 完整转换实操指南 想把小说读给孩子听却不想自己花一个月录完或者手头一堆 EPUB、PDF 常年吃灰abogenAI 应用语音音频媒体生成本地部署在 lm-evaluation-harness 中评测巴斯克语 NLUBasqueGLUE 任务族实战指南在 lm evaluation harness 中评测巴斯克语 NLUBasqueGLUE 任务族实战指南 本文以当前仓库 eval/lm evaluatio大模型推理模型微调模型推理服务上一篇用 Frida 动态枚举 Android 应用已加载的 Java 类与方法MASTG-TECH-0042 实战指南下一篇Codex 技能安装完整指南用 skill-installer 三步完成首次一键安装创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考