☰
FDA 信息抽取评测任务实战指南:在 lm-evaluation-harness 中复现基于 LLM 的零样本键值对提取
2026/10/9 11:06:27 网站建设 项目流程
  • 大模型
  • 推理模型
  • 微调
  • 模型推理服务

【免费下载链接】s1

s1: Simple test-time scaling

项目地址:https://gitcode.com/gh_mirrors/s1/s1
点击查看免费下载

本指南系统讲解 s1 仓库中eval/lm-evaluation-harness内嵌的FDA(Food 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 Lakes(arXiv: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。同时,引用部分 还给出了两篇关联论文的 BibTeX:EVAPORATE(2304.09433)与线性注意力论文Simple linear attention language models balance the recall-throughput tradeoff(2402.18668,后者的评测设定被本任务采用)。

二、任务协议:1920 token 分块与零样本 prompt 模板

README 的 Description 段落完整规定了评测协议,这是理解与复现本任务的关键:

  1. 数据来源:从 FDA 官网抓取的一批 PDF 文档;
  2. 分块:将文档切分为1,920 tokens的 chunk;
  3. 构造样本:对 chunk 中出现的每一个键值对,构造一个零样本 prompt,模板为:
    {chunk} \n {key}:
  4. 生成与判分:允许模型在 prompt 之后生成固定数量的 token,然后(大小写不敏感地)检查生成内容中是否包含该值;
  5. 指标:报告accuracy,即"生成内容包含该值的 prompt 所占比例"。

这一协议与论文中"直接抽取"路线的评测方式一致:模型被要求看到文档片段后补全key:之后的取值,本质上是受控生成条件下的包含匹配。

三、源码级实现:task.py 逐段拆解

仓库将本任务实现为一个标准的ConfigurableTask子类,完整代码位于 task.py。

3.1 任务元信息与数据集来源

class FDA(ConfigurableTask): VERSION = 0 DATASET_PATH = "hazyresearch/based-fda" DATASET_NAME = "default"
  • DATASET_PATH指向 HuggingFace 数据集hazyresearch/based-fda,即 Based 项目维护的 FDA 抽取数据集;
  • DATASET_NAME = "default"对应数据集默认配置;
  • VERSION = 0标识任务版本,用于缓存与结果记录。

数据集切分方面,任务只用验证集(validation):

def 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_type="generate_until", doc=doc, arguments=(ctx, {"until": ["\n"], "max_gen_toks": 48}), idx=0, **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 取布尔命中结果的最大值——支持一个样本对应多个合法值的情况;
  • 每个样本产出子指标contains(0 或 1)。

3.5 聚合与方向

def aggregation(self): return { "contains": np.mean, } def higher_is_better(self): return { "contains": True, }
  • 聚合函数为np.mean,即最终报告的 accuracy 就是全部样本contains的均值;
  • higher_is_better=True表明该指标越大越好,可直接用于模型横向对比与 leaderboard 排序。

3.6 YAML 注册文件

配置入口 极简,只有两行:

task: fda class: !function task.FDA
  • task声明任务注册名fda;
  • class通过!function标签动态加载同目录 task.py 中的FDA类,其余字段(数据集、切分、prompt、评分)全部由类内代码默认值提供。

任务索引层面,tasks/README.md 的任务总表 也收录了本任务:fda的定位是"从 FDA 文档中提取键值对以测试信息抽取能力",语言为英语。

四、如何运行:命令行评测实战

4.1 基础命令

在 lm-evaluation-harness 目录 下,用 HuggingFace 模型运行:

lm_eval --model hf \ --model_args pretrained=EleutherAI/pythia-70m \ --tasks fda \ --device cuda

各参数含义(对应main.py 的 CLI 解析):

  • --model hf:使用 HuggingFace transformers 后端;
  • --model_args:以key=value形式传给模型加载器,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 pretrained=EleutherAI/pythia-70m,revision=step143000 \ --tasks fda \ --limit 100 \ --batch_size auto \ --log_samples \ --output_path ./results

4.3 预期输出解读

评测完成后,结果中会包含fda任务的contains子指标,其值为 0~1 之间的均值,表示"模型生成的补全中包含目标值的 prompt 占比"。该指标可直接用于:

  • 对比不同规模小模型在零样本信息抽取上的能力(README 明确本任务面向小模型零样本评估);
  • 评估模型在长文档(1,920 token 分块)语境下的"定位 + 摘录"能力;
  • 与 README 中基于的论文评测设定(Arora et al. 2023/2024)进行横向参照。

五、延伸:如何基于本任务定制自己的抽取评测

FDA 任务展示了在 lm-evaluation-harness 中落地"生成式信息抽取"评测的最小范式,可复用到同类场景:

  1. 数据组织:HuggingFace 数据集每条样本包含text(上下文)、key(提示键)与value(目标值)三字段;
  2. 请求类型:选用generate_until,并用until: ["\n"]约束输出行数、max_gen_toks约束长度;
  3. 评分函数:对抽取型任务,re.escape+IGNORECASE的包含匹配比严格精确匹配更贴近真实可用性;
  4. 指标聚合:np.mean+higher_is_better=True即可输出可排名的 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 任务开发范式与信息抽取评测实践的起点。

  • 大模型
  • 推理模型
  • 微调
  • 模型推理服务

【免费下载链接】s1

s1: Simple test-time scaling

项目地址:https://gitcode.com/gh_mirrors/s1/s1
点击查看免费下载

相关推荐

上一篇:用 Frida 动态枚举 Android 应用已加载的 Java 类与方法:MASTG-TECH-0042 实战指南
下一篇:Codex 技能安装完整指南:用 skill-installer 三步完成首次一键安装

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询