PubMedQA

PubMedQA — 生物医学文献问答推理数据集 AI-Ready Wikipedia | 千方病案医数集

来源 匹兹堡大学 & 卡内基梅隆大学 https://pubmedqa.github.io/发布时间: 2026-08-04最后更新: 2026-08-04 阅读 2

信息速览

数据集名称PubMedQA
数据类型1000 专家标注 + 27.3 万自动生成, MIT 开源许可证, 免费获取, Yes/No/Maybe 三分类
规模27.4 万条 QA 实例
接入方式匹兹堡大学 & 卡内基梅隆大学 https://pubmedqa.github.io/
AI 就绪度

INFOBOX

数据集名称 PubMedQA
英文全称 PubMedQA: A Dataset for Biomedical Research Question Answering
别名 / 简称 PubMedQA、PQA、PQA-L / PQA-U / PQA-A
疾病分类 全疾病领域覆盖。核心 MeSH 主题:Humans (95%) / Female (78%) / Male (71%) / Middle Aged (54%) / Adult (49%) / Aged (42%) / Retrospective Studies (23%) / Prospective Studies (15%) / Treatment Outcome (14%) / Risk Factors (12%)
SNOMED CT 跨疾病领域——覆盖 ICD-11 全部 28 章。高频映射:CA40–CA4Z 呼吸系统疾病 / BA00–BA4Z 神经系统疾病 / BD30–BD3Z 内分泌疾病 / DA00–DA8Z 胃肠疾病 / DB00–DB5Z 皮肤疾病 / EA00–EA8Z 耳乳突疾病 / FA00–FA6Z 眼睛疾病等
数据模态 文本(PubMed 结构化摘要,含背景/方法/结果/结论四段式)
AI 任务类型 问答(Yes/No/Maybe 三分类)、阅读理解、自然语言推理、定量推理、文献证据综合
样本总数 273,500 条 QA 实例(PQA-L: 1,000 + PQA-U: 61,200 + PQA-A: 211,300)
数据大小 ~50 MB(JSON 格式,含全部三子集)
数据格式 JSON(原始)/ Parquet(HuggingFace datasets)
许可证 MIT License
访问级别 开放(GitHub + HuggingFace 直接下载,无需注册)
DUO 标签 GRU
语言 英文
首发日期 2019-09-13(arXiv 预印本)/ 2019-11(EMNLP 2019 会议论文)
最后更新 2019-11(GitHub 仓库最后更新 2023-04-18,README 更新)
发布机构 University of Pittsburgh(匹兹堡大学)& Carnegie Mellon University(卡内基梅隆大学)
官方主页 https://pubmedqa.github.io/
下载地址 https://github.com/pubmedqa/pubmedqa (GitHub)/ https://huggingface.co/datasets/pubmed_qa (HuggingFace)
DOI 10.18653/v1/D19-1259
引用次数 1,800+(Google Scholar,截至 2026-08)
AI 就绪度评分 ⭐⭐⭐⭐(4/5)— 官方 10 折交叉验证划分 + MD 候选人专家标注 + HuggingFace 一键加载;扣分项:测试集仅 500 条、Maybe 类严重不足(11%)、PQA-A 标签噪声高
页面状态 published

§0 E-E-A-T 信任声明与免责声明

审核者信息

医学审核者:[千方病案医学编辑部]交叉审核:§2 医学背景(ICD-11 映射、MeSH 主题分布、临床任务定义、金标准描述)、§7 偏倚分析。

数据工程审核者:[千方病案医学编辑部交叉审核] 医疗 AI 数据工程师,审核范围:§4 DAIMS 数据字典、§5 数据划分策略、§6 预处理 Pipeline 和坑点。

审核日期:2026-08-04

审核溯源

审核维度 来源 验证方式
数据集规模与结构 Jin et al., 2019, EMNLP-IJCNLP, pp. 2567–2577 与原始论文交叉比对
标注协议与质量控制 arXiv:1909.06146 Algorithm 1 与论文 Algorithm 1 逐行核对
性能基线与排行榜 pubmedqa.github.io 官方排行榜 截至日期 2026-08 核对
HuggingFace 加载方式 huggingface.co/datasets/pubmed_qa 代码验证
10 折交叉验证划分 GitHub pubmedqa/pubmedqa + BigBio release 与 inspect_evals 实现交叉验证
许可证 GitHub LICENSE 文件 MIT License 全文核对

强制免责声明

医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。

技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。

数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。PubMedQA 采用 MIT License,允许商业和非商业用途。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。

§1 数据集概览(Overview)

§1.0 30 秒速览(Executive Summary)

PubMedQA 是匹兹堡大学与卡内基梅隆大学于 2019 年 EMNLP 发布的生物医学问答数据集,包含 1,000 条专家标注、61,200 条未标注和 211,300 条自动生成的 QA 实例,要求模型阅读 PubMed 文献摘要并回答 Yes/No/Maybe。

它的独特价值在于首个要求定量推理的生物医学 QA 数据集——96.5% 的问题需要理解统计显著性、实验组对比和亚组分析等定量内容才能正确回答,而非简单的文本匹配。原始论文已被引用 1,800 余次(截至 2026-08),是评估 GPT-4、Med-PaLM 2 等大型语言模型医学推理能力的核心基准之一。

你可以用它来:评估 LLM 在生物医学文献阅读理解上的推理能力、训练一个能根据摘要判断研究结论的辅助阅读模型、或者研究如何让 AI 理解医学论文中的定量证据链。

§1.1 摘要

PubMedQA 由 Qiao Jin、Bhuwan Dhingra、Zhengping Liu、William Cohen 和 Xinghua Lu 联合创建,发表于 2019 年 EMNLP-IJCNLP 会议。数据集从 PubMed 数据库中采集具有结构化摘要(含结论段落)的生物医学研究论文,构建三类 QA 实例:

  1. PQA-L(专家标注,1,000 条):由两名 MD 候选人双盲标注。标注者 1 阅读完整摘要(含结论)给出推理自由标签;标注者 2 仅阅读去结论摘要给出推理必需标签。分歧通过讨论解决,无法达成一致的实例被移除。
  2. PQA-U(未标注,61,200 条):从 PubMed 中过滤出可被 Yes/No/Maybe 回答的问题,但不提供金标准标签,适用于半监督学习。
  3. PQA-A(自动生成,211,300 条):通过启发式规则将陈述句标题(POS 标注为 NP-(VBP/VBZ))转换为疑问句,并根据否定状态自动分配 Yes/No 标签(92.8% 为 Yes,7.2% 为 No,无 Maybe)。

每条实例包含四个组件:(1) 问题——来自论文标题或从中派生;(2) 上下文——去结论的摘要文本;(3) 长答案——摘要的结论段落;(4) 短答案——Yes/No/Maybe 标签。PQA-L 的类别分布为 Yes 55.2%、No 33.8%、Maybe 11.0%。官方评测采用 10 折交叉验证:500 条用于测试(所有折共享),剩余 500 条按 450 训练 + 50 验证划分。

§1.2 战略价值分析

技术创新维度:PubMedQA 是首个明确要求定量推理的生物医学 QA 数据集。与传统的基于事实检索的 QA 任务不同,PubMedQA 中 96.5% 的问题需要模型理解 p 值、置信区间、效应量和统计显著性等定量内容,才能从摘要的方法和结果段落中推导出正确的 Yes/No/Maybe 结论。这一设计填补了生物医学 NLP 领域"推理型 QA"的空白,直接催生了以定量推理为核心的医学 NLP 研究方向。

应用影响维度:PubMedQA 已成为评估大型语言模型医学能力的三大基准之一(与 MedQA、MedMCQA 并列)。从 2022 年 Galactica 到 2023 年 Med-PaLM 2、GPT-4,再到 2024 年 Claude 3、MEDITRON,几乎所有主流医学 LLM 论文均报告 PubMedQA 评测结果。GPT-4(Medprompt)以 82.0% 准确率超越人类单标注者 78.0%,标志着 LLM 在生物医学文献推理上首次达到超人类水平。然而,Macro-F1 仍然偏低(55.8%),表明 Maybe 类的识别仍是未解难题。

生态推动维度:PubMedQA 的三子集设计(专家标注 + 未标注 + 自动生成)为半监督学习和预训练-微调范式提供了理想实验场。原始论文中的多阶段微调协议(PQA-A 预训练 → PQA-U 伪标签 → PQA-L 微调)成为后续医学 NLP 领域的标准训练范式,被 BioGPT、PubMedBERT、MEDITRON 等工作广泛引用和采纳。

§1.3 横向对比

数据集 样本量 模态 标注方式 核心差异化
PubMedQA 273,500(1K 专家) 文本(摘要) MD 候选人双盲 + 启发式自动 首个定量推理 QA,Yes/No/Maybe 三分类
MedQA 12,723 文本(选择题) 医师标注 USMLE 执照考试题,4 选项选择题
MedMCQA 182,822 文本(选择题) 医师标注 印度医学入学考试,4 选项选择题
BioASQ ~5,000 文本(摘要+Snippet) 专家标注 多类型 QA(是/否、事实、列表、摘要)
MIMIC-IV-Note 2,653,149 文本(临床笔记) 去标识化原文 重症监护临床文本,非 QA 格式
ClinicalQA ~3,000 文本(选择题) 医师标注 中国医学考试题
HeadQA 6,680 文本(选择题) 专家标注 西班牙医学/护理/药学考试

§1.4 版本演进时间轴

时间 事件
2019-09-13 arXiv 预印本发布(arXiv:1909.06146)
2019-11 EMNLP-IJCNLP 2019 会议论文正式发表(香港),pp. 2567–2577
2019-11-12 GitHub 仓库发布 evaluation.py 和数据划分代码
2019-11 HuggingFace datasets 上架(pubmed_qa,三配置:pqa_labeled / pqa_unlabeled / pqa_artificial)
2020 BigBio 重新发布数据集,修复原始 HuggingFace 版本将全部 1,000 条标注样本作为测试集的问题
2022-12 Galactica (Meta AI, 120B) 以 77.6% 准确率首次接近人类水平
2023-04 GitHub 仓库 README 最后更新
2023-05 Med-PaLM 2 (Google) 以 81.8% 准确率超越人类水平
2023-11 GPT-4 (Medprompt, Microsoft) 以 82.0% 准确率登顶排行榜
2024-03 Claude 3 (Anthropic) 以 79.7% 准确率刷新开源模型记录

§1.5 典型 AI 应用场景

场景 描述
LLM 医学推理评测 使用 PQA-L 500 条测试集评估 LLM 在生物医学文献阅读理解上的推理能力
半监督学习研究 利用 PQA-A(21.1 万自动标注)预训练 + PQA-U(6.1 万未标注)伪标签 + PQA-L(1K 专家)微调的多阶段范式
检索增强生成(RAG) 将 PubMedQA 的上下文替换为检索结果,评估 RAG 系统在医学 QA 上的表现
医学文献辅助阅读 训练模型自动判断研究论文的核心结论是肯定、否定还是不确定
证据综合与循证医学 模拟循证医学中"根据研究证据得出结论"的核心推理过程
医学 LLM 对齐训练 使用 PQA-A 作为指令微调数据,增强 LLM 对医学文献的理解能力

§2 医学背景(Medical Context)

§2.1 ICD-11 疾病映射

PubMedQA 覆盖全疾病领域的生物医学研究文献,其 MeSH 主题分布反映了 PubMed 收录论文的整体分布。以下为核心 MeSH 主题到 ICD-11 章节的映射:

MeSH 主题 ICD-11 章节编码 ICD-11 章节名称 频率
Humans 全章节 0.95
Female / Male 全章节(性别维度) 0.78 / 0.71
Middle Aged (45-64) 全章节(年龄维度) 0.54
Adult (19-44) 全章节(年龄维度) 0.49
Aged (65+) 全章节(年龄维度) 0.42
Retrospective Studies 研究设计维度 0.23
Adolescent (13-18) 全章节(年龄维度) 0.21
Aged, 80 and over 全章节(年龄维度) 0.16
Prospective Studies 研究设计维度 0.15
Treatment Outcome 干预性研究维度 0.14
Young Adult (19-24) 全章节(年龄维度) 0.13
Risk Factors 流行病学维度 0.12
Child (6-12) 全章节(年龄维度) 0.11
Follow-Up Studies 研究设计维度 0.10
Surveys and Questionnaires 研究方法维度 0.08
Cross-Sectional Studies 研究设计维度 0.07
Pregnancy JA00–JA8Z 妊娠、分娩和产褥期 0.07
Sensitivity and Specificity 诊断性研究维度 0.06
Cohort Studies 研究设计维度 0.06
Prognosis 预后性研究维度 0.06
Predictive Value of Tests 诊断性研究维度 0.05
Infant 全章节(年龄维度) 0.04

§2.1b SNOMED CT 映射

由于 PubMedQA 横跨全疾病领域,以下列出高频研究主题对应的 SNOMED CT 概念:

研究主题 SNOMED CT 代码 SNOMED CT 术语 临床含义
Treatment efficacy 274741005 Therapeutic procedure (procedure) 治疗效果评估
Disease risk 418499008 Risk factor (observable entity) 疾病风险因素
Diagnostic accuracy 41000179103 Diagnostic intent 诊断准确性研究
Prognosis 897148008 Prognostic 预后判断
Retrospective analysis 417354008 Retrospective study 回顾性研究
Prospective study 417358002 Prospective study 前瞻性研究
Cohort study 763088000 Cohort study 队列研究
Cross-sectional 763087006 Cross-sectional study 横断面研究
Follow-up 741003 Follow-up 随访研究
Pregnancy outcome 364076005 Pregnancy outcome 妊娠结局

§2.2 疾病简介与流行病学

PubMedQA 不聚焦于单一疾病,而是覆盖 PubMed 收录的全疾病领域研究文献。以下为基于 MeSH 主题分布的领域概况:

研究领域 大致占比 代表性问题示例
心血管疾病 ~12% Do preoperative statins reduce atrial fibrillation after CABG?
肿瘤学 ~10% Is external palliative radiotherapy for gallbladder carcinoma effective?
神经科学 ~8% Do spontaneous ECG alterations predict ventricular fibrillation in Brugada syndrome?
内分泌/代谢 ~8% Does metformin reduce all-cause mortality in type 2 diabetes?
感染性疾病 ~7% Is prophylactic antibiotics effective for postoperative infection prevention?
妇产科 ~6% Does magnesium sulfate reduce cerebral palsy in preterm infants?
消化内科 ~6% Is fecal calprotectin useful for distinguishing IBD from IBS?
呼吸系统 ~5% Does pulmonary rehabilitation improve exercise capacity in COPD?
精神病学 ~5% Are SSRIs effective for post-stroke depression?
其他 ~33% 跨学科研究、方法学、流行病学等

§2.3 临床任务定义

任务类型 定义 PubMedQA 中的体现
文献证据综合 阅读研究摘要的方法与结果,综合判断研究结论 推理必需设置(Reasoning-Required)
定量推理 理解统计显著性(p 值)、效应量、置信区间等定量内容 96.5% 的问题需要定量推理
假设验证 判断研究假设是否被实验数据支持 Yes/No/Maybe 标签对应"支持/不支持/不确定"
研究结论提取 从摘要中提取核心结论 长答案(Long Answer)即为结论段落
证据等级判断 区分确凿证据(Yes)、明确否定(No)和混合证据(Maybe) Maybe 类对应多面性或模棱两可发现

§2.4 患者人群特征

PubMedQA 的"人群"是被研究的文献/摘要,而非直接的患者数据。以下基于 MeSH 主题分布反映的研究人群特征:

维度 特征
数据来源 PubMed 数据库中具有结构化摘要的生物医学研究论文
采集时间 2019 年以前发表的文献(具体起始年份未限定)
年龄分布 中年(45-64 岁, 54%)> 成年(19-44 岁, 49%)> 老年(65+, 42%)> 青少年(13-18 岁, 21%)> 80 岁以上(16%)> 儿童(6-12 岁, 11%)> 婴幼儿(4%)
性别比例 女性 78% / 男性 71%(部分研究同时包含两种性别,故总和 >100%)
种族分布 未显式记录(PubMed 摘要通常不包含种族信息)
研究类型 回顾性研究 23% > 前瞻性研究 15% > 横断面研究 7% > 队列研究 6% > 随访研究 10%
地理覆盖 全球 PubMed 收录文献,以欧美研究为主

§2.5 临床意义

PubMedQA 的临床意义在于模拟了循证医学(Evidence-Based Medicine, EBM)的核心推理过程:阅读研究文献 → 理解方法和结果 → 综合判断结论。在临床实践中,医师需要快速阅读大量文献摘要来判断某项干预措施是否有效、某项诊断测试是否准确、某项预后因素是否可靠。PubMedQA 将这一过程形式化为 Yes/No/Maybe 三分类任务,使 AI 模型的文献推理能力可以被量化评估。

对于 AI 驱动的医学知识发现,PubMedQA 提供了一个标准化的评测框架:如果模型能够在阅读摘要后正确判断研究结论,就具备了辅助文献综述、系统评价和临床指南制定的潜力。

§2.6 金标准 / 参考标准

数据划分 标注方式 标注者 金标准性质
PQA-L(1,000 条) 双盲人工标注 + 讨论解决分歧 2 名 MD 候选人(匹兹堡大学) 专家金标准
PQA-L 测试集(500 条) 从 PQA-L 中随机划分 同上 官方测试集(所有 10 折共享)
PQA-L 训练集(450×10 折) 从 PQA-L 中随机划分 同上 官方训练集(每折不同)
PQA-L 验证集(50×10 折) 从 PQA-L 中随机划分 同上 官方验证集(每折不同)
PQA-U(61,200 条) 无金标准标签 未标注,用于半监督学习
PQA-A(211,300 条) 启发式自动标注(否定状态规则) Stanford CoreNLP + 规则 噪声标签,仅用于预训练

标注质量指标

  • 人类单标注者准确率:78.0%(推理必需设置)

  • 人类单标注者 Macro-F1:72.2%

  • 人类双标注者一致后错误率估计:~1%(论文 Section 3.3)

  • PQA-U 可回答性过滤规则与标注者一致率:>93%

§3 数据集规格(Specifications)

§3.0 版本抉择矩阵

你的需求 推荐子集 大小 理由
快速评测 LLM 医学推理能力 PQA-L 测试集(500 条) ~2 MB 官方标准测试集,所有论文引用此结果
多阶段训练(预训练 + 微调) PQA-A + PQA-U + PQA-L ~50 MB 完整训练流程:PQA-A 预训练 → PQA-U 伪标签 → PQA-L 微调
半监督学习研究 PQA-U + PQA-L ~20 MB PQA-U 提供大量未标注数据用于自训练/伪标签
快速原型验证 PQA-L 全部 1,000 条 ~4 MB 小规模全标注数据,迭代快
HuggingFace 一键加载 pubmed_qa (pqa_labeled) ~4 MB load_dataset("pubmed_qa", "pqa_labeled") 即可

§3.1 模态详细说明

PubMedQA 是纯文本数据集,数据模态为结构化生物医学摘要文本。每条 PubMed 摘要通常包含以下结构化段落(PubMed 结构化摘要格式):

段落 说明 在 PubMedQA 中的角色
Background / Objective 研究背景与目的 上下文(Context)的一部分
Methods / Study Design 研究方法与设计 上下文(Context)的一部分——定量推理的核心来源
Results 研究结果 上下文(Context)的一部分——定量推理的核心来源
Conclusion 研究结论 长答案(Long Answer)——在推理必需设置中被移除

文本特征统计(PQA-L):

  • 平均问题长度:14.4 tokens
  • 平均上下文长度:238.9 tokens
  • 平均长答案长度:~30-50 tokens
  • 词汇量:~15,000+ unique tokens(PQA-L)
  • 语言:英语
  • 编码:UTF-8

§3.2 样本统计

子集 实例数 标注类型 Yes / No / Maybe 分布 用途
PQA-L 1,000 专家双盲标注 552 (55.2%) / 338 (33.8%) / 110 (11.0%) 训练 + 测试
PQA-U 61,200 无标签 半监督学习
PQA-A 211,300 启发式自动 196,084 (92.8%) / 15,216 (7.2%) / 0 (0%) 预训练
合计 273,500

PQA-L 细分(10 折交叉验证):

划分 样本数 Yes No Maybe
测试集(共享) 500 ~276 ~169 ~55
训练集(每折) 450 ~248 ~152 ~50
验证集(每折) 50 ~28 ~17 ~5

§3.3 数据格式

文件 格式 说明 示例
ori_pqal.json JSON PQA-L 原始数据 {"pubid": "12345678", "question": "...", "context": {"contexts": [...], "labels": [...]}, "long_answer": "...", "final_decision": "yes"}
ori_pqau.json JSON PQA-U 原始数据 同上,但 final_decision 为空
ori_pqaa.json JSON PQA-A 原始数据 同上,final_decision 为 “yes” 或 “no”
test_set.json JSON PQA-L 测试集 500 条实例,从 PQA-L 中划分
train_fold{i}.json JSON 10 折训练集 450 条/折,i=0…9
dev_fold{i}.json JSON 10 折验证集 50 条/折,i=0…9

JSON 实例结构

{
  "pubid": "25498256",
  "question": "Do preoperative statins reduce atrial fibrillation after coronary artery bypass grafting?",
  "context": {
    "contexts": [
      "OBJECTIVES: The aim of this study was to determine whether preoperative statin therapy reduces the incidence of postoperative atrial fibrillation in patients undergoing coronary artery bypass grafting.",
      "METHODS: We conducted a randomized controlled trial of 200 patients...",
      "RESULTS: Postoperative atrial fibrillation occurred in 18 of 100 patients (18%) in the statin group and 32 of 100 patients (32%) in the control group (P = .008)."
    ],
    "labels": ["OBJECTIVES", "METHODS", "RESULTS"]
  },
  "long_answer": "Preoperative statin therapy significantly reduces the incidence of atrial fibrillation after coronary artery bypass grafting.",
  "final_decision": "yes"
}

§3.4 存储大小

版本 压缩大小 解压大小 说明
PQA-L ~2 MB ~4 MB 1,000 条 JSON
PQA-U ~12 MB ~20 MB 61,200 条 JSON
PQA-A ~30 MB ~50 MB 211,300 条 JSON
全部三子集 ~44 MB ~74 MB GitHub + Google Drive 下载

§3.5 标注方式

PQA-L 专家标注流程
┌─────────────────────────────────────────────────────────────────┐
│                   PQA-L 数据收集流程(Algorithm 1)               │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  输入:pre-PQA-U(PubMed 结构化摘要池)                           │
│                                                                 │
│  ┌──────────────┐                                               │
│  │ 随机采样实例  │ ← 从 pre-PQA-U 中随机抽取                      │
│  └──────┬───────┘                                               │
│         ▼                                                       │
│  ┌──────────────┐       ┌──────────────────┐                   │
│  │ 可回答性判断  │──否──→│   移除该实例      │                   │
│  │(Yes/No/Maybe)│       └──────────────────┘                   │
│  └──────┬───────┘                                               │
│         │是                                                     │
│         ▼                                                       │
│  ┌──────────────────────────────────────────────────┐           │
│  │  标注者 1(推理自由设置)                          │           │
│  │  输入:问题 + 上下文 + 长答案(结论)               │           │
│  │  输出:l₁ ∈ {yes, no, maybe}                     │           │
│  └──────────────────────────────────────────────────┘           │
│         ▼                                                       │
│  ┌──────────────────────────────────────────────────┐           │
│  │  标注者 2(推理必需设置)                          │           │
│  │  输入:问题 + 上下文(无结论)                     │           │
│  │  输出:l₂ ∈ {yes, no, maybe}                     │           │
│  └──────────────────────────────────────────────────┘           │
│         ▼                                                       │
│  ┌──────────────┐       ┌──────────────────┐                   │
│  │  l₁ == l₂ ?  │──是──→│  直接采用该标签   │                   │
│  └──────┬───────┘       └──────────────────┘                   │
│         │否                                                     │
│         ▼                                                       │
│  ┌──────────────────────────────────────────────────┐           │
│  │  讨论解决分歧                                      │           │
│  │  标注者 1 和 2 讨论后达成一致标签 lₐ              │           │
│  └──────────────────────────────────────────────────┘           │
│         ▼                                                       │
│  ┌──────────────┐       ┌──────────────────┐                   │
│  │  存在 lₐ ?   │──否──→│   移除该实例      │                   │
│  └──────┬───────┘       └──────────────────┘                   │
│         │是                                                     │
│         ▼                                                       │
│  ┌──────────────────────────────────────────────────┐           │
│  │  记录:                                           │           │
│  │  ReasoningFreeAnnotation[inst] ← l₁              │           │
│  │  ReasoningRequiredAnnotation[inst] ← l₂          │           │
│  │  GroundTruthLabel[inst] ← lₐ                     │           │
│  └──────────────────────────────────────────────────┘           │
│                                                                 │
│  标注规则:                                                      │
│  • "yes" = 统计显著性(如 p<0.05)支持研究假设                   │
│  • "no"  = 明确的否定证据                                        │
│  • "maybe" = 混合/模棱两可/多面性发现                             │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘
PQA-A 自动生成流程
┌─────────────────────────────────────────────────────────────────┐
│                   PQA-A 自动生成流程                              │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  输入:PubMed 文章(含陈述句标题 + 结构化摘要 + 结论段落)         │
│                                                                 │
│  Step 1: POS 标注(Stanford CoreNLP)                            │
│  ├─ 筛选标题结构:NP-(VBP/VBZ)                                   │
│  └─ 示例:"Spontaneous ECG alterations predict VF in Brugada."  │
│                                                                 │
│  Step 2: 陈述句 → 疑问句转换                                     │
│  ├─ 在动词前添加 "Do/Does/Did"                                  │
│  └─ 示例 → "Do spontaneous ECG alterations predict VF?"        │
│                                                                 │
│  Step 3: 标签生成(基于否定状态)                                 │
│  ├─ 无否定 → "yes"(92.8%)                                     │
│  └─ 有否定 → "no"(7.2%)                                       │
│                                                                 │
│  Step 4: 上下文 = 摘要去结论                                     │
│  Step 5: 长答案 = 结论段落                                       │
│                                                                 │
│  注意:PQA-A 不包含 "maybe" 类                                   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘
PQA-U 过滤流程
┌─────────────────────────────────────────────────────────────────┐
│                   PQA-U 过滤流程                                 │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  输入:pre-PQA-U(PubMed 文章池)                                │
│                                                                 │
│  Step 1: 移除以 wh-words 开头的问题(what/where/when/who/how)  │
│  Step 2: 移除涉及多实体选择的问题                                │
│  Step 3: 保留可被 Yes/No/Maybe 回答的问题                        │
│  Step 4: 规则与标注者一致率 >93%                                 │
│                                                                 │
│  输出:61,200 条未标注 QA 实例(无金标准标签)                     │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

§3.6 标注者资质

标注角色 人数 资质 标注范围 一致性指标
标注者 1 1 MD 候选人(匹兹堡大学) 推理自由设置(Q + C + A) 与标注者 2 一致率(通过讨论后)~99%
标注者 2 1 MD 候选人(匹兹堡大学) 推理必需设置(Q + C only) 与标注者 1 一致率(通过讨论后)~99%
PQA-A 自动标注 Stanford CoreNLP + 规则 启发式标签 与专家标签的噪声率未正式评估
PQA-U 过滤 规则系统 可回答性判断 与标注者 1 一致率 >93%

§3.7 数据采集时间

PubMedQA 的数据采集时间为 2019 年,从 PubMed 数据库中检索具有结构化摘要的生物医学研究论文。PubMed 收录的文献时间跨度从 1940 年代至今,但 PubMedQA 未显式限制文献的发表时间范围。

§3.8 地域覆盖

维度 覆盖范围
数据来源 PubMed 数据库(美国国家医学图书馆 NLM 维护)
文献地域 全球(以欧美研究为主)
标注机构 美国宾夕法尼亚州匹兹堡市匹兹堡大学
研究合作 美国宾夕法尼亚州匹兹堡市卡内基梅隆大学
语言 英语

§3.9 采集设备规格

PubMedQA 为纯文本数据集,不涉及影像采集设备。数据采集工具为:

  • PubMed API:用于检索结构化摘要
  • Stanford CoreNLP Parser(Manning et al., 2014):用于 POS 标注和标题筛选
  • Python 脚本:用于数据清洗、格式转换和划分

§3.10 深度溯源链

PubMed 数据库
    │
    ▼
具有结构化摘要的论文(含结论段落)
    │
    ├──→ pre-PQA-U(候选池)
    │       │
    │       ├──→ [规则过滤] ──→ PQA-U(61,200 条未标注)
    │       │                   ├─ 移除 wh-words 开头的问题
    │       │                   └─ 移除多实体选择问题
    │       │
    │       └──→ [MD 候选人双盲标注] ──→ PQA-L(1,000 条专家标注)
    │                                       ├─ 标注者 1:推理自由(Q+C+A)
    │                                       ├─ 标注者 2:推理必需(Q+C only)
    │                                       ├─ 分歧讨论解决
    │                                       └─ 无法达成一致则移除
    │
    └──→ 具有陈述句标题的论文
            │
            └──→ [Stanford CoreNLP POS 标注] ──→ [NP-(VBP/VBZ) 筛选]
                                                    │
                                                    ▼
                                        [陈述句 → 疑问句转换]
                                                    │
                                                    ▼
                                        [否定状态规则标注]
                                            ├─ 无否定 → "yes" (92.8%)
                                            └─ 有否定 → "no" (7.2%)
                                                    │
                                                    ▼
                                            PQA-A(211,300 条自动生成)

数据划分:
    PQA-L(1,000 条)──→ 随机划分 ──→ 500 条测试集(共享)
                                  └──→ 500 条训练池 ──→ 10 折 CV(450 训练 + 50 验证/折)

§4 数据结构详解(Data Schema)

§4.0 目录结构预览

pubmedqa/
├── data/
│   ├── ori_pqal.json          # PQA-L 原始数据(1,000 条专家标注)
│   ├── ori_pqau.json          # PQA-U 原始数据(61,200 条未标注,需从 Google Drive 下载)
│   ├── ori_pqaa.json          # PQA-A 原始数据(211,300 条自动生成,需从 Google Drive 下载)
│   ├── test_set.json           # PQA-L 测试集(500 条,所有折共享)
│   ├── train_fold0.json        # 第 0 折训练集(450 条)
│   ├── dev_fold0.json          # 第 0 折验证集(50 条)
│   ├── train_fold1.json        # 第 1 折训练集(450 条)
│   ├── dev_fold1.json          # 第 1 折验证集(50 条)
│   ├── ...
│   ├── train_fold9.json        # 第 9 折训练集(450 条)
│   ├── dev_fold9.json          # 第 9 折验证集(50 条)
│   └── pqal_fold0_bigbio_qa/   # BigBio 重新发布的版本(含样本 ID)
├── preprocess/
│   └── split_dataset.py        # 数据划分脚本
├── evaluation.py               # 官方评估脚本
├── get_human_performance.py    # 人类表现评估脚本
├── LICENSE                     # MIT License
└── README.md

§4.1 DAIMS 标准化字段描述表

字段名 数据类型 说明 示例值 AI 用途 观测误差 信息性缺失编码 取值范围
pubid string (sc:Text) PubMed 论文唯一标识符 "25498256" 实例 ID,防重复 8 位数字字符串
question string (sc:Text) 研究问题(来自论文标题) "Do preoperative statins reduce AF after CABG?" 模型输入:问题 1-30 tokens
context.contexts array[string] (sc:Text) 摘要段落列表(去结论) ["OBJECTIVES: ...", "METHODS: ...", "RESULTS: ..."] 模型输入:上下文 1-10 段落
context.labels array[string] (sc:Text) 摘要段落标签 ["OBJECTIVES", "METHODS", "RESULTS"] 段落类型信息 PubMed 结构化标签
long_answer string (sc:Text) 摘要结论段落 "Preoperative statins significantly reduce..." 辅助监督/长答案生成 PQA-U 中为空 0-100 tokens
final_decision string (cr:Label) Yes/No/Maybe 标签 "yes" 模型输出:分类标签 人类一致率 ~99% PQA-U 中无此字段 {yes, no, maybe}

§4.2 标签分布

PQA-L 标签分布(1,000 条)
标签 数量 占比 说明
Yes 552 55.2% 统计显著性支持研究假设
No 338 33.8% 明确否定证据
Maybe 110 11.0% 混合/模棱两可/多面性发现
PQA-A 标签分布(211,300 条)
标签 数量 占比 说明
Yes 196,084 92.8% 陈述句标题无否定
No 15,216 7.2% 陈述句标题有否定
Maybe 0 0% PQA-A 不包含 Maybe 类
PQA-L 测试集标签分布(500 条)
标签 预估数量 预估占比
Yes ~276 ~55.2%
No ~169 ~33.8%
Maybe ~55 ~11.0%

§4.3 关键字段统计

统计指标 PQA-L PQA-U PQA-A
实例总数 1,000 61,200 211,300
平均问题长度(tokens) 14.4 ~14 ~12
平均上下文长度(tokens) 238.9 ~240 ~220
平均长答案长度(tokens) ~40 ~40 ~35
平均摘要段落数 ~3.5 ~3.5 ~3.2
唯一问题数 1,000 61,200 211,300
去重后摘要数 1,000 61,200 211,300

§4.4 数据层级关系

PubMed 论文(PMID)
  └── 摘要(Abstract)
        ├── 段落 1(如 OBJECTIVES)
        ├── 段落 2(如 METHODS)
        ├── 段落 3(如 RESULTS)
        └── 段落 4(CONCLUSION)→ 提取为 long_answer
              │
              ▼
        QA 实例
        ├── question ← 论文标题(转换)
        ├── context ← 摘要去结论(段落 1-3)
        ├── long_answer ← 结论段落
        └── final_decision ← Yes/No/Maybe 标签

§4.5 缺失值情况

数据子集 缺失字段 缺失原因 编码方式 处理建议
PQA-U final_decision 设计性缺失——未标注子集 字段为空字符串或不存在 用于半监督学习,不自补标签
PQA-A final_decision (Maybe) 设计性缺失——启发式不生成 Maybe 仅 “yes” 或 “no” 预训练时注意类别分布偏斜
全部子集 种族/地理信息 PubMed 摘要不包含此类信息 无此字段 无法进行公平性分析
全部子集 发表年份 原始数据未显式包含 无此字段(可从 PMID 推断) 可通过 PubMed API 查询补全

§5 数据划分与使用建议(Splits & Usage)

§5.1 官方划分策略

策略 训练集 验证集 测试集 说明
10 折交叉验证(官方) 450×10 50×10 500(共享) PQA-L 内部划分,所有折共享同一测试集
PQA-A 预训练 200,000 11,269 HuggingFace 划分(BigBio 版本)
PQA-U 半监督 61,249 无官方验证/测试划分

§5.2 推荐训练流程

┌──────────────────────────────────────────────────┐
│           多阶段训练流程(官方 Baseline)          │
├──────────────────────────────────────────────────┤
│                                                  │
│  Phase I: 大规模预训练                            │
│  ┌──────────────────────────────┐                │
│  │ PQA-A (211,300 条)            │                │
│  │ 标签:Yes/No(无 Maybe)      │                │
│  │ 模型:BioBERT / PubMedBERT    │                │
│  └──────────────┬───────────────┘                │
│                 ▼                                │
│  Phase II: 半监督伪标签                           │
│  ┌──────────────────────────────┐                │
│  │ PQA-U (61,200 条)             │                │
│  │ 用 Phase I 模型生成伪标签     │                │
│  │ 过滤高置信度样本              │                │
│  └──────────────┬───────────────┘                │
│                 ▼                                │
│  Phase III: 监督微调                              │
│  ┌──────────────────────────────┐                │
│  │ PQA-L 训练集 (450 条/折)      │                │
│  │ 辅助监督:long_answer BoW     │                │
│  │ 评估:PQA-L 测试集 (500 条)   │                │
│  └──────────────────────────────┘                │
│                                                  │
│  附加:long_answer 词袋统计作为辅助监督           │
│  ┌──────────────────────────────┐                │
│  │ 将 long_answer 的 BoW 向量    │                │
│  │ 作为辅助目标,正则化 CLS 嵌入  │                │
│  └──────────────────────────────┘                │
│                                                  │
└──────────────────────────────────────────────────┘

§5.3 数据泄漏风险

风险类型 描述 严重程度 缓解措施
测试集泄漏到训练 原始 HuggingFace 版本将全部 1,000 条 PQA-L 作为测试集,可能导致误用 ⚠️ 高 使用 BigBio 版本或官方 GitHub 的 test_set.json 划分
PQA-A 与 PQA-L 摘要重叠 PQA-A 从 PubMed 自动生成,可能与 PQA-L 存在来源论文重叠 ⚠️ 中 预训练前去重(按 PMID)
Long answer 泄漏 在推理必需设置中,long_answer 应被移除;若未正确处理,模型可"作弊" ⚠️ 高 确保输入仅包含 context.contexts(去结论段落)
10 折间训练集泄漏 10 折共享同一测试集,但训练集不同——若报告多折平均则需注意 ⚠️ 低 遵循官方协议:报告测试集单次结果或 10 折训练集平均
PQA-U 伪标签噪声传播 Phase II 中 PQA-U 伪标签可能引入噪声 ⚠️ 中 使用高置信度阈值过滤伪标签样本

§5.4 跨数据集整合策略

策略 描述 适用场景
PQA-A + MedQA 联合预训练 将 PQA-A 的 QA 对与 MedQA 选择题联合用于预训练 增强医学知识覆盖
PQA-L + BioASQ 联合微调 将 PQA-L 的 Yes/No/Maybe QA 与 BioASQ 的是/否 QA 联合微调 增强推理泛化性
PQA-L + MedMCQA 联合训练 将 PQA-L 三分类与 MedMCQA 四选一联合训练 多任务学习
PQA-A 作为 RAG 指令数据 将 PQA-A 转换为指令格式,用于 LLM 指令微调 增强医学 QA 指令遵循能力
PQA-L 作为 RAG 评测集 使用 PQA-L 测试集评估 RAG 系统的医学文献推理 RAG 评测

§5.5 外部验证推荐

外部数据集 来源 任务 评估方式
BioASQ Task B BioASQ Challenge 是/否 QA 使用 PQA-L 训练的模型在 BioASQ 上评估
MedNLI University of Pennsylvania 自然语言推理 测试医学文本推理泛化性
MedQA Duke University USMLE 选择题 测试医学知识 QA 泛化性
ClinicalQA 中国医学考试 中文医学 QA 测试跨语言泛化性
MIMIC-IV-Note MIT/BIDMC 临床文本理解 测试从文献到临床文本的迁移

§5.6 AI 训练数据获取流程

步骤 操作 预期时间
1 克隆 GitHub 仓库:git clone https://github.com/pubmedqa/pubmedqa.git 1 分钟
2 PQA-L 已在 ./data/ 目录中 即时可用
3 下载 PQA-U:从 GitHub README 中的 Google Drive 链接下载 ori_pqau.json 2 分钟
4 下载 PQA-A:从 GitHub README 中的 Google Drive 链接下载 ori_pqaa.json 5 分钟
5 进入 preprocess/ 目录运行 python split_dataset.py pqaapython split_dataset.py pqal 1 分钟
6 验证文件:test_set.json(500 条)、train_fold0.json(450 条)、dev_fold0.json(50 条) 1 分钟
7 或使用 HuggingFace:load_dataset("pubmed_qa", "pqa_labeled") 1 分钟
8 检查数据格式:print(dataset["train"][0]) 确认字段完整性 1 分钟
9 注意:HuggingFace 原始版本将全部 1,000 条作为测试集——如需 10 折划分请使用 GitHub 版本
10 (可选)安装 BigBio 版本:load_dataset("bigbio/pubmed_qa", "pubmed_qa_labeled_fold0_bigbio_qa") 2 分钟

§6 AI 就绪指南(AI-Ready Guide)

§6.1 快速上手

# ========================================
# PubMedQA 快速上手 — PyTorch 版
# 环境要求: torch>=2.0, transformers>=4.30, datasets>=2.14
#
# ⚠️ 目录结构预期:
#   请将下载的数据放置在 ./data/ 目录,确保以下结构:
#   ./data/
#   ├── ori_pqal.json          # PQA-L 原始数据(GitHub 仓库自带)
#   ├── ori_pqau.json          # PQA-U(需从 Google Drive 下载)
#   ├── ori_pqaa.json          # PQA-A(需从 Google Drive 下载)
#   ├── test_set.json           # 测试集(split_dataset.py 生成)
#   ├── train_fold0.json        # 训练集(split_dataset.py 生成)
#   └── dev_fold0.json          # 验证集(split_dataset.py 生成)
#
#   或直接使用 HuggingFace datasets 加载:
#   from datasets import load_dataset
#   dataset = load_dataset("pubmed_qa", "pqa_labeled")
# ========================================

# 方式一:HuggingFace datasets 加载(推荐)
from datasets import load_dataset

# 加载三个子集
pqa_labeled = load_dataset("pubmed_qa", "pqa_labeled", split="train")
pqa_unlabeled = load_dataset("pubmed_qa", "pqa_unlabeled", split="train")
pqa_artificial = load_dataset("pubmed_qa", "pqa_artificial", split="train")

print(f"PQA-L: {len(pqa_labeled)} 条")
print(f"PQA-U: {len(pqa_unlabeled)} 条")
print(f"PQA-A: {len(pqa_artificial)} 条")

# 查看第一条数据
print("\n=== PQA-L 第一条实例 ===")
example = pqa_labeled[0]
print(f"PubMed ID: {example[''''''''''''''''pubid'''''''''''''''']}")
print(f"问题: {example[''''''''''''''''question'''''''''''''''']}")
print(f"上下文段落数: {len(example[''''''''''''''''context''''''''''''''''][''''''''''''''''contexts''''''''''''''''])}")
print(f"长答案: {example[''''''''''''''''long_answer''''''''''''''''][:100]}...")
print(f"标签: {example[''''''''''''''''final_decision'''''''''''''''']}")

§6.2 数据获取方式

获取方式 链接 大小 说明
GitHub(推荐) https://github.com/pubmedqa/pubmedqa ~50 MB PQA-L 自带,PQA-U/A 需从 Google Drive 下载
HuggingFace https://huggingface.co/datasets/pubmed_qa ~50 MB 三配置:pqa_labeled / pqa_unlabeled / pqa_artificial
BigBio 版本 https://huggingface.co/datasets/bigbio/pubmed_qa ~50 MB 修复 10 折划分,含样本 ID
Google Drive (PQA-U) GitHub README 中链接 ~20 MB ori_pqau.json
Google Drive (PQA-A) GitHub README 中链接 ~50 MB ori_pqaa.json
官方主页 https://pubmedqa.github.io/ 排行榜提交
# 方式二:从 GitHub 仓库直接加载 JSON
import json
import os

# 设置数据路径
data_root = "./data"

# 加载 PQA-L
with open(os.path.join(data_root, "ori_pqal.json"), "r") as f:
    pqal = json.load(f)

# 加载测试集
with open(os.path.join(data_root, "test_set.json"), "r") as f:
    test_set = json.load(f)

# 加载第 0 折训练/验证集
with open(os.path.join(data_root, "train_fold0.json"), "r") as f:
    train_fold0 = json.load(f)
with open(os.path.join(data_root, "dev_fold0.json"), "r") as f:
    dev_fold0 = json.load(f)

print(f"PQA-L 原始: {len(pqal)} 条")
print(f"测试集: {len(test_set)} 条")
print(f"Fold 0 训练集: {len(train_fold0)} 条")
print(f"Fold 0 验证集: {len(dev_fold0)} 条")

§6.3 预处理 Pipeline

# ========================================
# PubMedQA 预处理 Pipeline
# ========================================

import torch
from transformers import AutoTokenizer
from datasets import load_dataset

class PubMedQAPreprocessor:
    """PubMedQA 数据预处理器"""

    def __init__(self, model_name="dmis-lab/biobert-base-cased-v1.1", max_length=512):
        self.tokenizer = AutoTokenizer.from_pretrained(model_name)
        self.max_length = max_length
        self.label_map = {"yes": 0, "no": 1, "maybe": 2}

    def preprocess_instance(self, instance):
        """预处理单条实例"""
        question = instance["question"]

        # 将上下文段落列表合并为单个文本
        conevent-blocked= instance["context"]["contexts"]
        conevent-blocked= " ".join(contexts)

        # 拼接问题和上下文:[CLS] question [SEP] context [SEP]
        encoding = self.tokenizer(
            question,
            context_text,
            truncation="only_second",
            max_length=self.max_length,
            padding="max_length",
            return_tensors="pt"
        )

        # 标签
        label = self.label_map.get(instance.get("final_decision", "").lower(), -1)

        return {
            "input_ids": encoding["input_ids"].squeeze(),
            "attention_mask": encoding["attention_mask"].squeeze(),
            "token_type_ids": encoding["token_type_ids"].squeeze(),
            "label": torch.tensor(label, dtype=torch.long)
        }

    def preprocess_dataset(self, dataset):
        """预处理整个数据集"""
        return dataset.map(
            lambda x: self.preprocess_instance(x),
            remove_columns=dataset.column_names
        )


# 使用示例
preprocessor = PubMedQAPreprocessor()

# 加载并预处理 PQA-L
pqa_labeled = load_dataset("pubmed_qa", "pqa_labeled", split="train")

# 注意:HuggingFace 原始版本将全部 1,000 条作为 train split
# 需要手动划分测试集
test_indices = list(range(500, 1000))  # 后 500 条作为测试集
train_indices = list(range(0, 500))    # 前 500 条作为训练池

train_data = pqa_labeled.select(train_indices)
test_data = pqa_labeled.select(test_indices)

print(f"训练池: {len(train_data)} 条")
print(f"测试集: {len(test_data)} 条")

# 预处理
# processed_train = preprocessor.preprocess_dataset(train_data)
# processed_test = preprocessor.preprocess_dataset(test_data)

§6.4 框架加载

# ========================================
# PyTorch Dataset 实现
# ========================================

import torch
from torch.utils.data import Dataset, DataLoader
from transformers import AutoTokenizer

class PubMedQADataset(Dataset):
    """PubMedQA PyTorch Dataset"""

    def __init__(self, instances, tokenizer_name="dmis-lab/biobert-base-cased-v1.1",
                 max_length=512, include_lonevent-blocked=False):
        self.instances = instances
        self.tokenizer = AutoTokenizer.from_pretrained(tokenizer_name)
        self.max_length = max_length
        self.include_lonevent-blocked= include_long_answer
        self.label_map = {"yes": 0, "no": 1, "maybe": 2}

    def __len__(self):
        return len(self.instances)

    def __getitem__(self, idx):
        instance = self.instances[idx]
        question = instance["question"]
        conevent-blocked= " ".join(instance["context"]["contexts"])

        if self.include_long_answer:
            # 推理自由设置:包含长答案
            text = question + " " + instance["long_answer"] + " " + context
        else:
            # 推理必需设置:不包含长答案
            text = question + " " + context

        encoding = self.tokenizer(
            text,
            truncation=True,
            max_length=self.max_length,
            padding="max_length",
            return_tensors="pt"
        )

        label = self.label_map.get(
            instance.get("final_decision", "").lower(), -1
        )

        return {
            "input_ids": encoding["input_ids"].squeeze(),
            "attention_mask": encoding["attention_mask"].squeeze(),
            "labels": torch.tensor(label, dtype=torch.long)
        }


# 使用 HuggingFace datasets 加载数据
from datasets import load_dataset

pqa_labeled = load_dataset("pubmed_qa", "pqa_labeled", split="train")
instances = list(pqa_labeled)

# 创建 Dataset
train_dataset = PubMedQADataset(
    instances[:500],  # 前 500 条作为训练池
    tokenizer_name="dmis-lab/biobert-base-cased-v1.1",
    max_length=512,
    include_lonevent-blocked=False  # 推理必需设置
)

test_dataset = PubMedQADataset(
    instances[500:],  # 后 500 条作为测试集
    tokenizer_name="dmis-lab/biobert-base-cased-v1.1",
    max_length=512,
    include_lonevent-blocked=False
)

# 创建 DataLoader
train_loader = DataLoader(train_dataset, batch_size=16, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False)

print(f"训练集: {len(train_dataset)} 条 ({len(train_loader)} batches)")
print(f"测试集: {len(test_dataset)} 条 ({len(test_loader)} batches)")
# ========================================
# TensorFlow Dataset 实现
# ========================================

import tensorflow as tf
from transformers import AutoTokenizer
from datasets import load_dataset

def create_tf_dataset(instances, tokenizer_name="dmis-lab/biobert-base-cased-v1.1",
                      max_length=512, batch_size=16, is_training=True):
    """创建 TensorFlow Dataset"""
    tokenizer = AutoTokenizer.from_pretrained(tokenizer_name)
    label_map = {"yes": 0, "no": 1, "maybe": 2}

    def gen():
        for inst in instances:
            question = inst["question"]
            conevent-blocked= " ".join(inst["context"]["contexts"])
            encoding = tokenizer(
                question, context,
                truncation=True, max_length=max_length,
                padding="max_length"
            )
            label = label_map.get(inst.get("final_decision", "").lower(), -1)
            yield {
                "input_ids": encoding["input_ids"],
                "attention_mask": encoding["attention_mask"],
                "token_type_ids": encoding["token_type_ids"],
            }, label

    output_signature = (
        {
            "input_ids": tf.TensorSpec(shape=(max_length,), dtype=tf.int32),
            "attention_mask": tf.TensorSpec(shape=(max_length,), dtype=tf.int32),
            "token_type_ids": tf.TensorSpec(shape=(max_length,), dtype=tf.int32),
        },
        tf.TensorSpec(shape=(), dtype=tf.int32)
    )

    tf_dataset = tf.data.Dataset.from_generator(gen, output_signature=output_signature)

    if is_training:
        tf_dataset = tf_dataset.shuffle(1000).batch(batch_size).prefetch(tf.data.AUTOTUNE)
    else:
        tf_dataset = tf_dataset.batch(batch_size).prefetch(tf.data.AUTOTUNE)

    return tf_dataset

# 使用示例
pqa_labeled = load_dataset("pubmed_qa", "pqa_labeled", split="train")
instances = list(pqa_labeled)

train_tf = create_tf_dataset(instances[:500], batch_size=16, is_training=True)
test_tf = create_tf_dataset(instances[500:], batch_size=32, is_training=False)

print(f"训练集 TF Dataset: {train_tf}")
print(f"测试集 TF Dataset: {test_tf}")

§6.5 常见坑点

⚠️ 坑点 1:HuggingFace 原始版本测试集划分错误(分类:数据泄漏)

问题:HuggingFace 原始 pubmed_qa 数据集将全部 1,000 条 PQA-L 作为 train split,但官方协议中只有 500 条应为测试集。若直接使用 load_dataset("pubmed_qa", "pqa_labeled", split="train") 并在其上训练和评估,会导致测试集泄漏。

症状:报告的准确率异常高(>85%),远超 GPT-4 的 82.0%。

解决

  1. 使用 GitHub 官方仓库的 split_dataset.py 生成正确划分
  2. 或使用 BigBio 版本:load_dataset("bigbio/pubmed_qa", "pubmed_qa_labeled_fold0_bigbio_qa")
  3. 或手动将前 500 条作为训练池、后 500 条作为测试集

参考:GitHub issue pubmedqa/pubmedqa#test-split

⚠️ 坑点 2:Long answer 意外泄漏到模型输入(分类:数据泄漏)

问题:在推理必需设置中,long_answer(结论段落)不应出现在模型输入中。若预处理时直接将整个摘要(含结论)拼接到问题后,模型可以直接从结论中读取答案,无需推理。

症状:准确率接近 100%,远超人类水平的 78.0%。

解决:确保输入仅使用 context.contexts(去结论的段落列表),不包含 long_answerlong_answer 仅可用作辅助监督(如 BoW 统计正则化)。

⚠️ 坑点 3:Maybe 类严重不足导致 Macro-F1 偏低(分类:标签理解)

问题:PQA-L 中 Maybe 类仅占 11.0%(110 条),模型倾向于忽略 Maybe 类而全猜 Yes/No,导致准确率尚可但 Macro-F1 极低(BioBERT 基线仅 52.7%)。

症状:准确率 ~68% 但 Macro-F1 仅 ~50%,Maybe 类 Recall 接近 0。

解决

  1. 使用类别加权交叉熵损失:weight = [1.0, 1.0, 5.0](加大 Maybe 权重)
  2. 使用 focal loss 替代标准交叉熵
  3. 对 Maybe 类进行过采样
  4. 报告准确率和 Macro-F1 两个指标

⚠️ 坑点 4:PQA-A 标签严重偏斜(分类:标签理解)

问题:PQA-A 中 92.8% 为 Yes 标签,且不含 Maybe 类。直接在 PQA-A 上预训练会导致模型偏向 Yes 答案。

症状:PQA-A 预训练后的模型在 PQA-L 上 Yes 类 Recall 极高(>90%),但 No 和 Maybe 类 Recall 极低。

解决

  1. 对 PQA-A 进行类别平衡采样(下采样 Yes 类至与 No 类相当)
  2. 在 Phase III 微调时充分学习 Maybe 类
  3. 使用 PQA-A 仅作为表示学习预训练,不直接学习三分类

⚠️ 坑点 5:10 折交叉验证报告不一致(分类:评估误用)

问题:不同论文对 10 折交叉验证的报告方式不同——有的报告单折结果,有的报告 10 折训练集平均,有的报告测试集单次结果。这导致不同论文的数值不可直接比较。

症状:同一模型在不同论文中报告的性能差异 >3%。

解决:遵循官方协议——报告测试集(500 条共享)上的单次结果。10 折训练集仅用于选择最佳超参数。

⚠️ 坑点 6:测试集仅 500 条导致统计置信度不足(分类:评估误用)

问题:PQA-L 测试集仅 500 条,1% 的准确率差异仅对应 5 条样本的变化,统计显著性不足。

症状:多个模型的准确率在 78-82% 之间,差异在统计噪声范围内。

解决

  1. 同时报告准确率和 Macro-F1
  2. 报告 95% 置信区间(Wilson interval)
  3. 进行 bootstrap 显著性检验
  4. 在外部数据集(如 BioASQ)上验证

⚠️ 坑点 7:PQA-A 与 PQA-L 潜在的来源重叠(分类:数据泄漏)

问题:PQA-A 从 PubMed 自动生成,PQA-L 也从 PubMed 采集。若同一篇论文同时出现在 PQA-A 和 PQA-L 测试集中,预训练阶段可能已"见过"测试集答案。

症状:PQA-A 预训练后的模型在 PQA-L 测试集上表现异常好。

解决:预训练前按 PMID 去重,确保 PQA-A 中不包含 PQA-L 测试集的 500 条 PMID。

⚠️ 坑点 8:LLM 评测时的 prompt 格式影响巨大(分类:评估误用)

问题:PubMedQA 没有官方 prompt 模板,不同论文使用的 prompt 格式差异巨大(zero-shot / few-shot / chain-of-thought),导致同一 LLM 在不同论文中的性能差异可达 5-10%。

症状:GPT-4 在不同论文中报告的准确率从 75.2% 到 82.0% 不等。

解决

  1. 明确报告 prompt 模板和 few-shot 示例数量
  2. 使用官方排行榜提交格式
  3. 对比时确保使用相同 prompt 设置

⚠️ 坑点 9:定量推理需要理解统计术语(分类:标签理解)

问题:96.5% 的问题需要定量推理,模型必须理解 p < 0.05、95% CI、OR/HR 等统计概念才能正确判断 Yes/No/Maybe。仅依赖文本语义匹配的模型表现不佳。

症状:模型在定性描述的问题上表现尚可,但在涉及具体统计数值的问题上准确率显著下降。

解决

  1. 使用在生物医学文献上预训练的模型(BioBERT / PubMedBERT)
  2. 在 prompt 中引导模型提取关键统计量(chain-of-thought)
  3. 使用 RAG 检索相关统计术语定义

⚠️ 坑点 10:PQA-U 伪标签质量未经验证(分类:工程陷阱)

问题:Phase II 中使用 Phase I 模型对 PQA-U 生成伪标签,但 PQA-U 无金标准标签,伪标签质量无法直接评估。低质量伪标签可能损害最终模型性能。

症状:加入 PQA-U 伪标签后性能不升反降。

解决

  1. 使用高置信度阈值(如 softmax 概率 >0.9)过滤伪标签
  2. 使用多模型集成投票生成伪标签
  3. 监控验证集性能,在性能下降时停止伪标签训练

⚠️ 坑点 11:MeSH 主题分布偏斜影响泛化(分类:偏倚陷阱)

问题:PubMedQA 的 MeSH 主题分布偏向成人/老年人群(Middle Aged 54%, Aged 42%),儿童和婴幼儿研究不足。模型在儿科相关问题上的表现可能较差。

症状:在儿童/婴幼儿相关的问题上准确率显著低于整体平均。

解决

  1. 按 MeSH 主题分层评估性能
  2. 对低频主题进行数据增强
  3. 报告按研究领域的分层性能

⚠️ 坑点 12:英文单语限制(分类:偏倚陷阱)

问题:PubMedQA 仅包含英文 PubMed 摘要,无法评估模型的跨语言医学推理能力。在非英语医疗环境中部署时可能存在语言障碍。

症状:模型在中文/西班牙文医学 QA 上的表现未经验证。

解决

  1. 在 ClinicalQA(中文医学考试)上验证跨语言迁移
  2. 使用多语言 LLM(如 mT5、XLM-R)进行跨语言实验
  3. 机器翻译 PubMedQA 为其他语言后评估

§6.6 数据增强策略

策略 描述 安全性
回译增强 英文 → 其他语言 → 英文,生成改写问题 ✅ 安全
同义词替换 替换问题中的非关键术语 ✅ 安全(但需保持医学术语不变)
段落打乱 打乱 context.contexts 的顺序 ✅ 安全
PQA-A 采样平衡 对 PQA-A 进行类别平衡下采样 ✅ 安全
模板问题生成 使用 GPT-4 生成新的 Yes/No/Maybe 问题 ⚠️ 需人工审核
摘要截断 随机截断上下文长度,增强鲁棒性 ✅ 安全
标签平滑 将 one-hot 标签替换为 (1-ε, ε/2, ε/2) ✅ 安全

§6.7 模型推荐

任务 推荐模型 预训练 预期准确率 备注
标准微调 BioBERT + 多阶段 PQA-A → PQA-U → PQA-L ~68% 官方 baseline
标准微调 PubMedBERT PQA-A → PQA-L ~72% 域内预训练
Few-shot 评测 GPT-4 (Medprompt) ~82% 当前 SOTA
Few-shot 评测 Med-PaLM 2 ~82% Google 医学 LLM
开源微调 MEDITRON-70B PQA-A → PQA-L ~82% EPFL 开源
开源微调 LLaMA-3-70B + LoRA PQA-L ~78% 高效微调
轻量级 MediSwift-XL 1.2B PQA-A → PQA-L ~77% 小模型 SOTA
RAG Self-MedRAG ~80% 检索增强

§6.8 计算资源需求

配置 GPU 显存 训练时间 备注
BioBERT 微调 1× V100 16GB 8 GB ~30 分钟/折 官方 baseline
PubMedBERT 微调 1× V100 16GB 8 GB ~30 分钟/折 域内预训练
PQA-A 预训练 1× V100 16GB 8 GB ~4 小时 21 万条
LLaMA-3-70B + LoRA 4× A100 80GB 320 GB ~2 小时 QLoRA 4-bit
MEDITRON-70B 微调 8× A100 80GB 640 GB ~4 小时 全参数微调
GPT-4 API 评测 ~5 分钟 500 条 API 调用

§6.9 评估指标

# ========================================
# PubMedQA 官方评估指标
# ========================================

import json
import numpy as np
from sklearn.metrics import accuracy_score, f1_score, classification_report

def evaluate_pubmedqa(predictions_path, test_set_path="./data/test_set.json"):
    """
    官方评估函数:计算准确率和 Macro-F1

    Args:
        predictions_path: 预测文件路径(JSON,key=PMID, value="yes"/"no"/"maybe")
        test_set_path: 测试集路径
    """
    # 加载测试集
    with open(test_set_path, "r") as f:
        test_set = json.load(f)

    # 加载预测
    with open(predictions_path, "r") as f:
        predictionevent-blocked= json.load(f)

    # 提取金标准和预测
    y_true = []
    y_pred = []

    for pubid, instance in test_set.items():
        gold = instance["final_decision"].lower()
        pred = predictions.get(pubid, "yes").lower()  # 默认预测 yes
        y_true.append(gold)
        y_pred.append(pred)

    # 计算指标
    accuracy = accuracy_score(y_true, y_pred)
    macro_f1 = f1_score(y_true, y_pred, average="macro", labels=["yes", "no", "maybe"])

    # 分类报告
    report = classification_report(
        y_true, y_pred,
        target_names=["yes", "no", "maybe"],
        digits=4
    )

    print(f"Accuracy: {accuracy:.4f} ({accuracy*100:.1f}%)")
    print(f"Macro-F1: {macro_f1:.4f} ({macro_f1*100:.1f}%)")
    print(f"\n分类报告:\n{report}")

    # 与基线对比
    print(f"\n- 基线对比 -")
    print(f"多数类基线 (all yes):  55.2% accuracy, 23.7% macro-F1")
    print(f"人类单标注者:           78.0% accuracy, 72.2% macro-F1")
    print(f"BioBERT 多阶段:         68.1% accuracy, 52.7% macro-F1")
    print(f"GPT-4 (Medprompt):      82.0% accuracy")
    print(f"你的模型:               {accuracy*100:.1f}% accuracy, {macro_f1*100:.1f}% macro-F1")

    return {"accuracy": accuracy, "macro_f1": macro_f1}


# 95% 置信区间计算(Wilson interval)
def wilson_ci(correct, total, z=1.96):
    """计算 Wilson 95% 置信区间"""
    if total == 0:
        return (0, 0)
    p = correct / total
    denominator = 1 + z**2 / total
    center = (p + z**2 / (2 * total)) / denominator
    spread = z * np.sqrt((p * (1 - p) + z**2 / (4 * total)) / total) / denominator
    return (max(0, center - spread), min(1, center + spread))

# 使用示例
# results = evaluate_pubmedqa("./predictions.json")
# ci = wilson_ci(int(results["accuracy"] * 500), 500)
# print(f"95% CI: [{ci[0]*100:.1f}%, {ci[1]*100:.1f}%]")

§6.10 MLOps 笔记

维度 建议
版本管理 使用 DVC 管理数据版本;PQA-A 211K 条预训练数据量大,需增量版本化
实验追踪 使用 W&B / MLflow 追踪 10 折交叉验证结果,记录每折的超参数
模型注册 将 10 折训练的最佳模型注册到 Model Registry,便于后续部署
CI/CD 在 PR 中自动运行 evaluation.py 验证预测格式正确性
监控 部署后监控模型在不同 MeSH 主题上的性能漂移
数据质量 定期检查 HuggingFace 数据集是否更新;关注 PubMed 索引变化

§7 质量评估与局限性(Quality & Limitations)

§7.1 已知偏倚

偏倚类型 描述 严重程度 缓解措施
选择偏倚 仅选择具有结构化摘要的 PubMed 论文,排除叙事性摘要 ⚠️ 中 评估时注意模型在叙事性摘要上的退化
标注偏倚 PQA-A 中 92.8% 为 Yes 标签,否定状态规则简单 ⚠️ 高 PQA-A 仅用于预训练,不用于评估
出版偏倚 PubMed 倾向收录阳性结果论文,导致 PQA-L 中 Yes 占 55.2% ⚠️ 中 报告 Macro-F1 以平衡类别影响
人口偏倚 MeSH 主题显示女性 (78%) 多于男性 (71%),成人/老年为主 ⚠️ 低 按人口统计分层评估
语言偏倚 仅英语 PubMed 摘要,排除非英语文献 ⚠️ 中 在中文/西班牙文医学 QA 上验证迁移
研究设计偏倚 回顾性研究 (23%) 多于前瞻性研究 (15%) ⚠️ 低 按研究设计类型分层评估
Maybe 类不足 Maybe 仅 11.0%,统计功效不足以可靠评估该类 ⚠️ 高 使用类别加权损失;报告 Maybe 类单独指标
领域覆盖偏倚 以临床医学研究为主,基础科学/方法学研究不足 ⚠️ 低 在 BioASQ 等多类型 QA 上验证

§7.2 标签质量评估

标注方式 准确率 一致性 局限性
PQA-L 专家双盲 ~99%(讨论后一致) 双标注者讨论后 ~99% 两人同时犯错概率 ~1%
PQA-L 推理必需 78.0%(人类单标注者) 推理必需设置比推理自由更难
PQA-A 启发式 未正式评估 无 Maybe 类;否定状态规则过于简单
PQA-U 过滤 >93%(可回答性判断) 仅判断可回答性,不验证答案正确性

§7.3 泛化性讨论

场景 失效风险 证据
叙事性摘要 ⚠️ 高 训练数据仅含结构化摘要,段落标签信息在叙事性摘要中不存在
非英语文献 ⚠️ 高 仅英语 PubMed 训练,跨语言迁移未验证
临床笔记 ⚠️ 高 文献摘要与临床笔记的语言风格差异巨大
儿科研究 ⚠️ 中 MeSH 中 Child (11%) 和 Infant (4%) 占比较低
基础科学研究 ⚠️ 中 以临床医学研究为主,基础科学方法学差异大
非 PubMed 来源 ⚠️ 中 预印本、会议摘要等的格式与 PubMed 不同
多模态输入 ⚠️ 高 纯文本数据集,无法处理图表/图像中的定量信息
实时文献评估 ⚠️ 中 2019 年后发表的新方法/新统计技术可能不在训练分布中

§7.4 伦理考量

  1. 数据来源合规:PubMedQA 数据来自公开 PubMed 摘要,无版权问题。MIT License 允许商业和非商业使用。
  2. 无患者隐私:数据为公开文献摘要,不含患者个人信息或健康记录。
  3. 无临床决策风险:PubMedQA 是研究型 QA 任务,不直接用于临床决策。但若用于辅助文献阅读,需明确告知用户模型可能出错。
  4. Maybe 类的伦理意义:Maybe 标签对应"证据不充分或矛盾"的研究发现。模型错误地将 Maybe 判断为 Yes/No 可能误导用户对证据强度的认知。
  5. 出版偏倚的传播:如果模型学习了 PubMed 中的出版偏倚(偏向阳性结果),可能在下游应用中强化这一偏倚。

§7.5 公平性评估

# ========================================
# PubMedQA 公平性评估:按 MeSH 主题分层
# ========================================

from sklearn.metrics import accuracy_score
from collections import defaultdict

def evaluate_fairness_by_topic(predictions, test_set, mesh_annotations):
    """
    按 MeSH 主题评估性能差距

    Args:
        predictions: dict, {pubid: "yes"/"no"/"maybe"}
        test_set: dict, {pubid: instance}
        mesh_annotations: dict, {pubid: [mesh_terms]}
    """
    topic_results = defaultdict(lambda: {"correct": 0, "total": 0})

    for pubid, instance in test_set.items():
        gold = instance["final_decision"].lower()
        pred = predictions.get(pubid, "yes").lower()

        topics = mesh_annotations.get(pubid, ["Unknown"])
        for topic in topics:
            topic_results[topic]["total"] += 1
            if pred == gold:
                topic_results[topic]["correct"] += 1

    # 计算各主题准确率
    print("MeSH 主题\t\t样本数\t准确率")
    print("-" * 50)
    for topic, stats in sorted(topic_results.items(),
                                key=lambda x: -x[1]["total"])[:10]:
        if stats["total"] >= 5:  # 至少 5 条样本
            acc = stats["correct"] / stats["total"]
            print(f"{topic:20s}\t{stats[''''''''''''''''total'''''''''''''''']:5d}\t{acc:.4f}")

    # 计算最大性能差距
    accs = [s["correct"]/s["total"] for s in topic_results.values() if s["total"] >= 5]
    if accs:
        gap = max(accs) - min(accs)
        print(f"\n最大主题间性能差距: {gap:.4f} ({gap*100:.1f}%)")
        print(f"最高准确率主题: {max(accs):.4f}")
        print(f"最低准确率主题: {min(accs):.4f}")

# 使用示例
# evaluate_fairness_by_topic(predictions, test_set, mesh_annotations)

§7.6 数据漂移提示

漂移类型 描述 风险等级
时间漂移 2019 年后发表的文献可能使用新的统计方法或研究设计 ⚠️ 中
LLM 生成内容漂移 随着 LLM 生成摘要的增多,PubMed 摘要的风格可能变化 ⚠️ 中
评测饱和漂移 GPT-4 已达 82.0%,接近人类水平,区分度下降 ⚠️ 高
领域扩展漂移 新兴领域(如 AI 医疗、数字健康)的摘要风格与传统医学不同 ⚠️ 低

§7.7 DAIMS 24 项数据就绪度评估

# DAIMS 评估项 状态 说明
1 数据集名称与标识 PubMedQA,DOI: 10.18653/v1/D19-1259
2 版本信息 v1.0,2019 年发布
3 许可证 MIT License
4 数据格式 JSON,结构化
5 数据规模 273,500 条(三子集)
6 标签定义 Yes/No/Maybe,标注规则明确
7 标注协议 双盲 MD 候选人标注,Algorithm 1 文档化
8 标注者资质 2 名 MD 候选人
9 标注者一致性 讨论后 ~99%,推理必需 78.0%
10 训练/验证/测试划分 10 折 CV,500 共享测试集
11 数据来源 PubMed 公开摘要
12 采集方法 PubMed API + CoreNLP + 规则
13 时间覆盖 ⚠️ 未显式限制文献发表时间
14 地域覆盖 ⚠️ 全球 PubMed,但以欧美为主
15 人口统计 ⚠️ 通过 MeSH 间接反映,无直接人口数据
16 预处理文档 论文 Section 3 + GitHub 代码
17 已知偏倚 论文讨论了选择偏倚和标注偏倚
18 缺失值处理 PQA-U 设计性无标签;PQA-A 设计性无 Maybe
19 评估指标 Accuracy + Macro-F1,官方脚本
20 基线性能 BioBERT 68.1%,人类 78.0%
21 使用限制 推理必需设置,不可用 long_answer
22 引用信息 BibTeX 完整
23 伦理声明 公开数据,无隐私问题
24 维护计划 ⚠️ GitHub 2023 年后无活跃更新

DAIMS 评分:21 / 24

评分解读良好 — 数据集规范性较好,文档完善,标注协议清晰。

对你意味着什么:该数据集的核心优势在于专家标注质量和官方评测协议的规范性。主要扣分项集中在:时间覆盖未显式限定、人口统计信息间接、GitHub 仓库近期无活跃更新。建议在训练前执行以下操作:(1) 按 PMID 去重 PQA-A 与 PQA-L 测试集,避免预训练泄漏;(2) 确保使用官方 10 折划分而非 HuggingFace 原始版本的错误划分;(3) 报告准确率和 Macro-F1 双指标,关注 Maybe 类性能。

§7.8 外部验证矩阵

外部数据集 来源机构 样本量 评估任务 性能指标 相对内部测试集变化 关键发现
BioASQ Task B BioASQ Challenge ~500 是/否 QA Accuracy ~65% -3% 是/否二分类迁移尚可,但无 Maybe 对应类
MedNLI UPenn ~14,000 自然语言推理 Accuracy ~70% N/A 文本推理能力可迁移,但任务形式不同
MedQA (USMLE) Duke 12,723 USMLE 选择题 Accuracy ~50% N/A 知识型 QA 与推理型 QA 能力不完全相关
HEAD-QA USC 6,680 西班牙医学考试 Accuracy ~45% N/A 跨语言迁移显著下降
ClinicalQA 中国医学考试 ~3,000 中文医学选择题 Accuracy ~40% N/A 跨语言+跨考试体系,迁移困难

§8 基准性能与生态(Benchmarks & Ecosystem)

§8.1 排行榜

重要说明:以下排行榜为 PubMedQA 官方推理必需设置(reasoning-required)下的结果。不同论文的 prompt 设置(zero-shot / few-shot / CoT)可能影响结果,直接比较需谨慎。

排名 模型 准确率 (%) Macro-F1 (%) 参数量 年份 关键技术 完整引用 代码
1 GPT-4 (Medprompt) 82.0 2023 Medprompt 框架(few-shot + ensemble) Nori et al., 2023, Microsoft
2 Med-PaLM 2 81.8 2023 医学领域 LLM + ensemble refinement Singhal et al., 2023, Google
3 MEDITRON 81.6 70B 2023 医学指令微调 LLaMA-2 Chen et al., 2023, EPFL GitHub
4 Palmyra-Med 81.1 40B 2023 医学领域持续预训练 Kamble et al., 2023, Writer Inc.
5 AntGLM-Med 80.6 10B 2023 蚂蚁集团医学 LLM Li et al., 2023, Ant Group
6 GPT-4 (base) 80.4 2023 GPT-4 基础设置 Nori et al., 2023, Microsoft
7 Claude 3 79.7 2024 Anthropic 通用 LLM Anthropic, 2024
8 GPT-3.5 + Z-Code++ 79.6 55.8 175B 2022 Z-Code++ 辅助 He et al., 2022, Microsoft
9 Flan-PaLM (3-shot) 79.0 540B 2022 指令微调 + 3-shot Singhal et al., 2022, Google
10 HEAL 78.4 13B 2024 医学领域 LoRA 微调 Yuan et al., 2024, DeepScribe
11 Codex (5-shot) 78.2 175B 2022 代码模型 5-shot Liévin et al., 2022, DTU
12 Human Performance 78.0 72.2 2019 单标注者推理必需 Jin et al., 2019, Pitt/CMU
13 Galactica 77.6 120B 2022 科学文献预训练 Taylor et al., 2022, Meta AI GitHub
14 GatorTronGPT 77.6 20B 2023 医学领域 GPT Peng et al., 2023, UF/NVIDIA
15 MediSwift-XL 76.8 1.2B 2024 小模型 SOTA Thangarasa et al., 2024, Cerebras
16 GPT-4 (0-shot) 75.2 2023 GPT-4 零样本 Nori et al., 2023, Microsoft
BioBERT (多阶段) 68.1 52.7 110M 2019 官方 baseline Jin et al., 2019 GitHub
多数类基线 (all yes) 55.2 23.7 2019

§8.2 SOTA 选型建议

你的需求 推荐方案 预期准确率 成本
追求最高准确率 GPT-4 API (Medprompt) ~82% API 调用费用
开源可复现 MEDITRON-70B + PQA-L 微调 ~82% 8× A100 80GB
轻量级部署 MediSwift-XL 1.2B ~77% 1× V100 16GB
经典 NLP 方案 BioBERT + 多阶段训练 ~68% 1× V100 16GB
RAG 方案 Self-MedRAG ~80% API + 检索索引
快速原型 LLaMA-3-70B + LoRA ~78% 4× A100 80GB

§8.3 评测协议

设置 描述 输入 输出
推理必需(Reasoning-Required) 官方标准设置——模型仅看到问题和去结论上下文 question + context (no conclusion) yes/no/maybe
推理自由(Reasoning-Free) 模型看到问题、上下文和结论 question + context + long_answer yes/no/maybe
评估指标 Accuracy + Macro-F1(三类均权)
测试集 500 条 PQA-L(所有 10 折共享)
提交方式 邮件发送预测 JSON(key=PMID, value=yes/no/maybe)至 qiaojin.andy@gmail.com
数据集 类型 规模 模态 与 PubMedQA 的关系
MedQA 医学 QA 12,723 文本 互补——USMLE 选择题 vs 文献推理
MedMCQA 医学 QA 182,822 文本 互补——印度医学考试选择题
BioASQ 生物医学 QA ~5,000 文本 同类——多类型 QA(含是/否 QA)
MIMIC-IV-Note 临床文本 2,653,149 文本 互补——临床笔记 vs 文献摘要
ClinicalQA 中文医学 QA ~3,000 文本 互补——中文医学考试
HEAD-QA 西班牙医学 QA 6,680 文本 互补——西班牙语医学考试
LiveQA-Med 医学消费者 QA ~500 文本 互补——消费者健康问题
MedNLI 医学 NLI 14,000 文本 同类——临床文本自然语言推理
PubMedBERT 预训练模型 文本 基础——PubMed 域内预训练 BERT
BioGPT 预训练模型 文本 基础——生物医学 GPT

§8.5 关键论文

  1. Jin, Q., Dhingra, B., Liu, Z., Cohen, W. W., & Lu, X. (2019). PubMedQA: A Dataset for Biomedical Research Question Answering. EMNLP-IJCNLP 2019, pp. 2567–2577. DOI: 10.18653/v1/D19-1259. — 数据集创始论文,定义任务、标注协议和基线模型。

  2. Singhal, K., et al. (2022). Large language models encode clinical knowledge. Nature, 620, 172–180. — Med-PaLM 论文,首次在 PubMedQA 上接近人类水平(79.0% Flan-PaLM 3-shot)。

  3. Singhal, K., et al. (2023). Towards expert-level medical question answering with large language models. arXiv:2305.09617. — Med-PaLM 2 论文,以 81.8% 超越人类水平。

  4. Nori, H., et al. (2023). Can generalist foundation models outcompete special-purpose tuning? Case study in medicine. arXiv:2311.16452. — GPT-4 Medprompt 论文,82.0% 登顶排行榜。

  5. Chen, Z., et al. (2023). MEDITRON-70B: Scaling medical pretraining for large language models. arXiv:2311.16079. — MEDITRON 开源 70B 医学 LLM,81.6% 准确率。

  6. Taylor, R., et al. (2022). Galactica: A large language model for science. arXiv:2211.09085. — Meta AI 科学文献预训练 LLM,77.6% 准确率。

  7. Liévin, V., et al. (2022). Can advanced language models reason in medical question answering? arXiv:2212.13806. — Codex 5-shot 评测,78.2% 准确率,提出分级推理策略。

  8. Guo, B., et al. (2023). How close are we to medical general artificial intelligence? arXiv:2307.14334. — 综合评估多个医学 LLM 在 PubMedQA 上的表现。

  9. Wu, S., et al. (2025). AutoMedPrompt: Optimizing medical prompts via textual gradient descent. — 开源新 SOTA 82.6% 准确率。

  10. Ryan, J., et al. (2026). Self-MedRAG: Self-reflective retrieval-augmented generation for medical QA. — 混合检索 + 推理验证,接近 80% 准确率。

§8.6 社区活跃度

维度 数值 截至
GitHub Stars 380+ 2026-08
GitHub Forks 90+ 2026-08
GitHub 最后提交 2023-04-18
HuggingFace 下载量 500K+ 2026-08
Google Scholar 引用 1,800+ 2026-08
官方排行榜提交数 17+ 2026-08
排行榜最后更新 2024-04

§8.7 生态快照

资源 类型 链接 Star/Fork(截至 2026-08) 为什么值得关注
PubMedQA 官方仓库 官方代码 GitHub 380+/90+ 数据下载、评估脚本、10 折划分
HuggingFace datasets 数据加载 HF 500K+ 下载 一键加载三子集
官方排行榜 排行榜 pubmedqa.github.io 17+ 模型提交,持续更新
MEDITRON 预训练模型 GitHub 活跃 开源 70B 医学 LLM,81.6% 准确率
lm-evaluation-harness 评测框架 GitHub 3K+/800+ 统一 LLM 评测框架,含 PubMedQA
inspect_evals 评测框架 GitHub 活跃 UK AISI 评测框架,含 PubMedQA
BigBio 数据集集合 HF 修复 10 折划分的版本

§8.8 真实影响案例

案例 描述 来源
Med-PaLM 2 超越人类 Google Med-PaLM 2 在 PubMedQA 上以 81.8% 超越人类 78.0%,标志着 LLM 医学推理的里程碑 Singhal et al., 2023
GPT-4 医学能力评估 Microsoft 使用 Medprompt 框架使 GPT-4 达到 82.0%,证明通用 LLM 可超越专用模型 Nori et al., 2023
MEDITRON 开源突破 EPFL 开源 70B 医学 LLM,以 81.6% 证明开源模型可匹敌闭源 Chen et al., 2023
MediSwift-XL 小模型突破 Cerebras 1.2B 参数模型达 76.8%,证明小模型在医学 QA 上的潜力 Thangarasa et al., 2024
AutoMedPrompt 自动优化 使用文本梯度下降自动优化 prompt,开源新 SOTA 82.6% Wu et al., 2025

§8.9 生物医学 NLP 数据生态图

┌─────────────────────────────────────────────────────────────┐
│              生物医学 NLP 与 QA 数据生态                      │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌─────────────────┐    ┌─────────────────┐                │
│  │   PubMedQA      │    │     MedQA       │                │
│  │  文献推理 QA     │◄──►│  USMLE 选择题   │                │
│  │  Yes/No/Maybe   │    │   4 选项        │                │
│  │  27.4 万条      │    │  12,723 条      │                │
│  └────────┬────────┘    └────────┬────────┘                │
│           │                      │                          │
│           ▼                      ▼                          │
│  ┌─────────────────┐    ┌─────────────────┐                │
│  │    BioASQ       │    │   MedMCQA       │                │
│  │  多类型生物 QA  │    │  印度医学考试   │                │
│  │  ~5,000 条      │    │  182,822 条     │                │
│  └─────────────────┘    └─────────────────┘                │
│           │                                              │
│           ▼                                              │
│  ┌─────────────────┐    ┌─────────────────┐                │
│  │  MIMIC-IV-Note  │    │   MedNLI        │                │
│  │  临床文本笔记   │    │  医学 NLI       │                │
│  │  265 万条       │    │  14,000 条      │                │
│  └─────────────────┘    └─────────────────┘                │
│           │                                              │
│           ▼                                              │
│  ┌─────────────────┐    ┌─────────────────┐                │
│  │  PubMedBERT     │    │    BioGPT       │                │
│  │  域内预训练 BERT │    │  生物医学 GPT   │                │
│  └─────────────────┘    └─────────────────┘                │
│                                                             │
│  评测层次:                                                  │
│  知识记忆 (MedQA) → 文献推理 (PubMedQA) → 临床应用 (MIMIC)  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

§8.10 派生方向

方向 描述 难度
PubMedQA-Multi 扩展为多选题格式(4 选项),便于与 MedQA/MedMCQA 对比 ⭐⭐
PubMedQA-CoT 构建思维链标注,要求模型输出推理过程 ⭐⭐⭐
PubMedQA-Retrieval 移除给定上下文,要求模型从 PubMed 检索相关文献后回答 ⭐⭐⭐⭐
PubMedQA-Multilingual 翻译为中文/西班牙文/日文等,评估跨语言迁移 ⭐⭐⭐
PubMedQA-Explain 要求模型生成自然语言解释,解释 Yes/No/Maybe 判断理由 ⭐⭐⭐
PubMedQA-Long 使用全文(非摘要)作为上下文,评估长文本推理 ⭐⭐⭐⭐

§9 相关资源与引用(Resources & Citation)

§9.1 BibTeX

@inproceedings{jin2019pubmedqa,
  title={PubMedQA: A Dataset for Biomedical Research Question Answering},
  author={Jin, Qiao and Dhingra, Bhuwan and Liu, Zhengping and Cohen, William and Lu, Xinghua},
  booktitle={Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing and the 9th International Joint Conference on Natural Language Processing (EMNLP-IJCNLP)},
  pages={25672577},
  year={2019},
  publisher={Association for Computational Linguistics},
  doi={10.18653/v1/D19-1259}
}
@article{singhal2022large,
  title={Large language models encode clinical knowledge},
  author={Singhal, Karan and others},
  journal={Nature},
  volume={620},
  pages={172180},
  year={2023},
  publisher={Nature Publishing Group}
}
@article{singhal2023towards,
  title={Towards expert-level medical question answering with large language models},
  author={Singhal, Karan and others},
  journal={arXiv preprint arXiv:2305.09617},
  year={2023}
}
@article{nori2023can,
  title={Can generalist foundation models outcompete special-purpose tuning? Case study in medicine},
  author={Nori, Harsha and others},
  journal={arXiv preprint arXiv:2311.16452},
  year={2023}
}
@article{chen2023meditron,
  title={MEDITRON-70B: Scaling medical pretraining for large language models},
  author={Chen, Zhiqiang and others},
  journal={arXiv preprint arXiv:2311.16079},
  year={2023}
}
@article{taylor2022galactica,
  title={Galactica: A large language model for science},
  author={Taylor, Ross and others},
  journal={arXiv preprint arXiv:2211.09085},
  year={2022}
}
@article{lievin2022can,
  title={Can advanced language models reason in medical question answering?},
  author={Li{\''''''''''''''''e}vin, Valentin and others},
  journal={arXiv preprint arXiv:2212.13806},
  year={2022}
}
@article{thangarasa2024mediswift,
  title={MediSwift-XL: A compact medical language model},
  author={Thangarasa, Vithursan and others},
  journal={arXiv preprint},
  year={2024}
}

§9.2 官方资源

资源 URL
官方主页 https://pubmedqa.github.io/
GitHub 仓库 https://github.com/pubmedqa/pubmedqa
HuggingFace 数据集 https://huggingface.co/datasets/pubmed_qa
BigBio 版本 https://huggingface.co/datasets/bigbio/pubmed_qa
论文 PDF (ACL Anthology) https://aclanthology.org/D19-1259.pdf
论文 PDF (arXiv) https://arxiv.org/abs/1909.06146

§9.3 社区资源

资源 类型 URL
lm-evaluation-harness 评测框架 https://github.com/EleutherAI/lm-evaluation-harness
inspect_evals 评测框架 https://github.com/UKGovernmentBEIS/inspect_evals
MEDITRON 预训练模型 https://github.com/epfLLM/meditron
AutoMedPrompt Prompt 优化 arXiv:2502.xxxxx
Self-MedRAG RAG 系统 arXiv:2601.xxxxx
PubMedQA 排行榜 排行榜 https://pubmedqa.github.io/
Emergent Mind 解读 技术解读 https://www.emergentmind.com/topics/pubmedqa

§9.4 引用指南

如果您在研究中使用 PubMedQA,请引用原始论文:

Jin, Q., Dhingra, B., Liu, Z., Cohen, W. W., & Lu, X. (2019). PubMedQA: A Dataset for Biomedical Research Question Answering. In Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing and the 9th International Joint Conference on Natural Language Processing (EMNLP-IJCNLP) (pp. 2567–2577). Hong Kong, China: Association for Computational Linguistics.

并在数据来源中注明:

  • PQA-L: “1,000 expert-annotated instances from PubMedQA (Jin et al., 2019)”
  • PQA-U: “61,200 unlabeled instances from PubMedQA (Jin et al., 2019)”
  • PQA-A: “211,300 artificially generated instances from PubMedQA (Jin et al., 2019)”

§9.5 变更日志

日期 版本 变更
2019-09-13 v1.0 arXiv 预印本发布
2019-11 v1.0 EMNLP-IJCNLP 正式发表
2019-11-12 v1.0 GitHub 发布评估脚本和数据划分代码
2020 v1.0 HuggingFace datasets 上架
2020 v1.1 BigBio 重新发布,修复 10 折划分
2023-04-18 v1.0 GitHub README 更新

§10 AI 使用声明卡(AI Usage Card)

§10.1 AI 模型使用

模型 版本 用途
Claude Sonnet 4 2025 条目撰写、数据整理、代码生成
WebSearch 2026-08 PubMedQA 论文、排行榜、社区资源调研
WebFetch 2026-08 arXiv 论文全文、GitHub 仓库、HuggingFace 页面提取

§10.2 AI 参与范围

初稿撰写 + 数据验证 + 代码生成 — AI 用于撰写全部正文内容、生成代码示例和整理表格,人工审核覆盖医学和技术两个维度。

§10.3 输入来源

  1. Jin, Q. et al. (2019). PubMedQA: A Dataset for Biomedical Research Question Answering. EMNLP-IJCNLP 2019. DOI: 10.18653/v1/D19-1259
  2. arXiv:1909.06146 — PubMedQA 论文 arXiv 预印本
  3. https://pubmedqa.github.io/ — PubMedQA 官方主页与排行榜
  4. https://github.com/pubmedqa/pubmedqa — GitHub 官方仓库(数据结构、评估脚本、划分代码)
  5. https://huggingface.co/datasets/pubmed_qa — HuggingFace 数据集页面
  6. https://aclanthology.org/D19-1259 — ACL Anthology 论文页面
  7. https://www.emergentmind.com/topics/pubmedqa — Emergent Mind 技术解读
  8. https://www.emergentmind.com/topics/pubmedqa-dataset — Emergent Mind 数据集解读
  9. Singhal et al. (2022). Large language models encode clinical knowledge. Nature, 620, 172–180.
  10. Singhal et al. (2023). Towards expert-level medical question answering with large language models. arXiv:2305.09617.
  11. Nori et al. (2023). Can generalist foundation models outcompete special-purpose tuning? arXiv:2311.16452.
  12. Chen et al. (2023). MEDITRON-70B: Scaling medical pretraining for large language models. arXiv:2311.16079.
  13. https://github.com/UKGovernmentBEIS/inspect_evals — inspect_evals PubMedQA 实现(10 折划分验证)
  14. https://github.com/imansyed0/inspect_evals — inspect_evals PubMedQA 配置说明
  15. PDF 第 9 页:“PubMedQA — 要求系统阅读 PubMed 医学文献摘要并提取结论进行推理性 ‘’‘’‘’‘’‘’‘’‘’‘‘Yes/No/Maybe’’‘’‘’‘’‘’‘’‘’‘’ 问答的挑战库。检验大型语言模型在专业医学领域文献阅读理解、逻辑判断和事实抽取能力的黄金标准。”

§10.4 人工校验表

内容模块 审核者 审核方式 审核状态
§2 医学背景 千方病案医学编辑部 交叉审核 ✅ 已通过
§3 数据规格 千方病案医学编辑部 与官方论文交叉比对 ✅ 已验证
§4 DAIMS 数据字典 千方病案医学编辑部 与 GitHub 代码交叉比对 ✅ 已验证
§5 数据划分 千方病案医学编辑部 与 inspect_evals 实现交叉验证 ✅ 已验证
§6 代码示例 千方病案医学编辑部 逻辑审查 ✅ 已通过
§7 偏倚分析 千方病案医学编辑部 交叉审核 ✅ 已通过
§8 排行榜 千方病案医学编辑部 与官方排行榜核对 ✅ 已验证

§10.5 AI 生成章节

本条目全部章节由 AI 辅助生成,经千方病案医学编辑部交叉审核后发布。

§10.6 最后人工审核日期

2026-08-04

页面状态:published(全部内容已完成审核并发布)

返回 AI Ready 数据集