信息速览

MedicationQA — 药物消费者问答基准 AI-Ready Wikipedia
INFOBOX
| 数据集名称 | MedicationQA(MedInfo2019-QA-Medications) |
| 英文全称 | MedicationQA: Consumer Health Questions about Medications |
| 别名/简称 | MedicationQA、MedInfo2019-QA-Medications、MultiMedQA MedicationQA split |
| 疾病分类 | 药物治疗与用药安全全谱(ICD-11 章节级映射,详见 §2.1:5A00-5D46 内分泌用药 / BA00-BE2Z 心血管用药 / CA00-CB7Z 呼吸用药 / 1A00-1H0Z 抗感染用药等) |
| SNOMED CT | 373873000 Pharmaceutical / biologic product (product) / 410942007 Drug or medication (product)(详见 §2.1b) |
| 数据模态 | 药物消费者问答文本(英文问题 + 权威来源答案 + 结构化标注) |
| AI 任务类型 | 消费者健康问答(consumer health QA)、问答生成与检索、问题焦点(question focus)识别、问题类型分类、LLM 医学能力评测 |
| 样本总数 | 690 条消费者药物问题(发布文件)/ 674 条金标准 QA 对(论文口径) |
| 数据大小 | 约 162 KB(GitHub 仓库,单 XLSX 文件) |
| 数据格式 | XLSX / CSV / HuggingFace Dataset 镜像 |
| 许可证 | CC BY 4.0 International |
| 访问级别 | 开放(无注册、无申请、无 DUA 门槛) |
| DUO 标签 | NRES |
| 语言 | 英文 |
| 首发日期 | 2019-05-07(GitHub 发布 XLSX)/ 2019-08-21(MEDINFO 2019 论文发表) |
| 最后更新 | 2025-12-05(官方仓库 README 更新,数据本体自 2019 年起未变) |
| 发布机构 | 美国国家医学图书馆 Lister Hill 生物医学通信中心(NLM Lister Hill National Center for Biomedical Communications) |
| 官方主页 | https://github.com/abachaa/Medication_QA_MedInfo2019 |
| 下载地址 | https://github.com/abachaa/Medication_QA_MedInfo2019 |
| DOI | 10.3233/SHTI190176(论文) |
| 引用次数 | 134+(Google Scholar,截至 2026-09) |
| AI 就绪度评分 | ⭐⭐⭐⭐(4/5)— 单文件即用、CC BY 4.0 零门槛、字段清晰;扣分项:无官方 train/test 划分、社区镜像含重复条目、Answer 字段存在 null 与超长拼接 |
| 页面状态 | published |
§0 E-E-A-T 审核与免责声明
医学审核声明:本页面医学与药学背景章节由千方病案医学编辑部审核。审核范围:§2 医学背景(ICD-11 章节级映射、SNOMED CT 概念、健康素养与用药安全叙事)、§7 偏倚分析。审核日期:2026-09-05。
数据工程审核声明:[千方病案医学编辑部交叉审核] 医疗 AI 数据工程师,审核范围:§4 DAIMS 数据字典、§5 数据划分策略、§6 预处理 Pipeline 和坑点。审核日期:2026-09-05。
利益冲突声明:千方病案医数集与美国国家医学图书馆(NLM)、NIH、IOS Press 无任何商业利益关联。本页面不销售 MedicationQA 数据集本身,仅提供 AI 就绪指南与学术信息服务。编辑者未接受 NLM 或 NIH 的任何形式资助。
医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。
技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。
数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。MedicationQA 采用 CC BY 4.0 International 许可,可免费下载与商用(须署名),无注册或数据使用协议(DUA)门槛。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。
§1 数据集概览
§1.0 📌 30 秒速览
这是什么? MedicationQA 是美国国家医学图书馆(NLM)于 2019 年发布的一个小而精的开放数据集:690 条真实的消费者药物问题,全部来自公众提交给 MedlinePlus 网站的提问(已匿名化),例如“我吃的这种药能和咖啡一起用吗”。每条问题都被人工标注了焦点药名和问题类型,并配有一段从 DailyMed、MedlinePlus 等权威来源检索整理的参考答案。发布形式是一个约 162 KB 的 Excel 文件,下载即用。
为什么重要? 在大模型出现之前,机器很难回答这种口语化、含糊、甚至带着焦虑情绪的真人健康提问。MedicationQA 第一次把“消费者药物问题 → 权威可信答案”这条链路做成了可量化的基准(原论文)。2023 年,Google 在《Nature》发表的 Med-PaLM 论文将 MedicationQA 纳入 MultiMedQA 评测套件,用它检验大模型回答真实患者用药问题的安全性,使这个 690 条的小数据集成为衡量医疗大模型“能不能好好和普通人说话”的试金石之一。
我能用它做什么? 如果你在做医疗问答机器人、用药咨询助手或大模型评测,可以用它来:评测模型对真实消费者药物问题的回答质量(与权威答案对照);训练或评测问题焦点识别与问题类型分类器;研究消费者到底在关心哪些用药问题(剂量、副作用、相互作用等 25 类)。它是 CC BY 4.0 开放许可,不需要任何注册申请,一个 pandas 读取即可开始。
§1.1 摘要
MedicationQA 由 NLM Lister Hill 生物医学通信中心团队(Ben Abacha 等)构建,研究目标是弥合消费者药物问题与可信答案之间的鸿沟。团队从提交给 MedlinePlus 的消费者问题出发,先用 MetaMapLite 做医学实体识别并限定 UMLS 语义类型(抗结核药 antb、临床药物 clnd、非处方药 nsba、药理物质 phsu、甾体 strd、维生素 vita),再人工筛选出可理解、可回答、焦点为药名的问题,最终形成 690 条问题(发布文件),其中论文金标准为 674 条问题-答案对(PMID 31437878)。标注层面,每条问题由 4 名标注者独立标注问题焦点(question focus,恒为药名)与问题类型(共 25 类,如剂量、副作用、相互作用),再由 1 名医学博士与 1 名 QA 专家仲裁。答案检索遵循 FDA 消费者药品信息推荐:优先 MedlinePlus 与 DailyMed,其次其他 NIH/政府网站,再到其他可信网站。平均每条问题仅 7.16 个 token,平均每条答案 69.06 个 token、3.23 句——短问题、中短答案的结构使它天然适合评测生成式模型而非检索式长文。论文同步报告了 Bi-LSTM-CRF 焦点识别(精确匹配 F1 74.07)与 CNN 问题类型分类(14 类聚合、准确率 75.7%)两条基线,为后来的大模型评测提供了对照起点。
§1.2 战略价值
维度一:消费者真实语料的稀缺性。 医疗 NLP 数据集大多来自文献(PubMedQA)、考试题(MedQA)或临床记录(i2b2/n2c2),而真实消费者“怎么问药”的语料极为稀缺——真人提问往往欠指定(不说明年龄、适应证)、口语化甚至迂回(原论文记录了用“吃多少 X 会杀死你”代指中毒剂量的问题)。MedicationQA 是少数由 NLM 官方构建、经过严格标注的消费者药物问答语料,对训练“听得懂人话”的用药助手具有不可替代的分布价值。
维度二:LLM 评测生态的卡位。 2023 年《Nature》Med-PaLM 论文把 MedicationQA 与 HealthSearchQA、LiveQA 一起组成消费者健康问答评测轴,由 9 名临床医生按 12 个维度盲评(Nature, 2023)。此后任何号称“医疗大模型”的系统都难以绕开 MultiMedQA 体系;掌握 MedicationQA 的数据特性(答案短、来源异构、口径 690 vs 674)就直接掌握了复现与质疑这类评测的能力。2026 年 2 月,MedARC/Prime Intellect 又将其做成 RL 训练环境,说明该数据集仍在活跃的强化学习生态中使用(sophon.at)。
维度三:零门槛的药物安全教学素材。 相较动辄数 GB 的 EHR 数据库,162 KB、6 列结构的单文件使其成为讲授“医疗 QA 标注协议”“答案溯源”“评估指标设计”的理想教具;答案来源分布(DailyMed 290 条、MedlinePlus 128 条、其他 256 条)本身就是一部微缩的药品信息资源地图。
维度四:评估方法学的反例富矿。 原论文与其后的大模型评测共同沉淀了一批"用错这个数据集"的真实案例:数量口径分叉(690/674)、镜像重复、参考答案不宜作 BLEU 真值、TensorFlow 非确定性波动……这些失败模式已在 §6.5 沉淀为 8 个坑点。对评估方法学研究者而言,MedicationQA 是研究"参考答案质量如何影响自动指标有效性"的天然实验材料——同一个模型在同一批问题上的 ROUGE 排名与人工盲评排名可以显著背离,这种背离本身即可量化分析。
§1.3 同类数据集横向对比
| 数据集 | 规模/形态 | 模态与标注 | 差异化定位 |
|---|---|---|---|
| MedicationQA(本页) | 690 条消费者药物问题(论文金标准 674 QA 对) | 问题 + 焦点药名 + 25 类问题类型 + 权威来源答案 | NLM 官方构建,唯一以“消费者药物问题”为核心、带 25 类细粒度标注的开放基准 |
| HealthSearchQA | Med-PaLM 论文评测抽样 100 题 | 搜索引擎自动补全生成的健康问题(无参考答案) | 规模大但无标注答案,只能人工评测 |
| TREC LiveQA | Med-PaLM 论文评测抽样 20 题 | 真实消费者健康问题 + NLM 答案 | 与 MedicationQA 同源生态,规模更小 |
| MedQA | 美国医师执照考试(USMLE)风格多选题 | 专业考试题 + 选项 | 考专业能力,不反映消费者口语提问 |
| PubMedQA | 文献摘要是/否/也许问答 | 生物医学文献 + 研究者结论 | 学术问答,非消费者视角 |
| CHiQA(NLM 系统) | 持续运行的消费者 QA 系统(非静态数据集) | 实时生成 | MedicationQA 原论文构建时的工程化出口 |
§1.4 版本时间轴
| 时间 | 事件 |
|---|---|
| 2019-05-07 | 官方仓库 abachaa/Medication_QA_MedInfo2019 上传 MedInfo2019-QA-Medications.xlsx(690 条) |
| 2019-08-21 | 原论文发表于 MEDINFO 2019(Stud Health Technol Inform 264:25-29,DOI 10.3233/SHTI190176) |
| 2023-05 | Med-PaLM 论文(《Nature》)将 MedicationQA 纳入 MultiMedQA,人工评测抽样 20 题(Nature, 2023) |
| 2025-12-05 | 官方仓库 README 更新(数据本体未变) |
| 2026-02 | MedARC/Prime Intellect 发布基于全量 690 题的 RL 评测环境(sophon.at) |
时间轴读法:2019 年的两个日期(文件上传与论文发表)相隔三个月,说明数据发布先于论文定稿,这也解释了发布文件(690 条)与论文金标准(674 条 QA 对)之间的口径差——文件是发布态快照,论文数字是实验态口径。2023 年的 Med-PaLM 纳入是该数据集影响力的一次跃迁,此后社区使用方式从"训练数据"转向"评测基准"。
§1.5 典型应用场景
- 医疗大模型消费者问答评测:按 Med-PaLM 协议抽样人工盲评,或以参考答案为参照做 ROUGE/BERTScore 自动评测。这是当前最主流的用法——任何面向患者的用药助手在宣称"达到医生水平"之前,都应先在这 690 题上证明自己能听懂并正确回答真实消费者的提问。
- 问题理解模型训练:用 690 条标注训练/验证问题焦点识别(NER)与问题类型分类器,作为更大规模消费者 QA 系统的冷启动标注规范。论文的 Bi-LSTM-CRF 与 CNN 基线直接给出了可对照的起点(精确匹配 F1 74.07、14 类分类准确率 75.7%)。
- RAG 答案溯源研究:利用 URL 字段研究"答案该从哪个权威来源来",评测检索器能否命中 DailyMed/MedlinePlus。Section Title 字段天然提供了节级(而非文档级)的检索监督信号,这对药品说明书场景的细粒度检索研究尤为珍贵。
- 用药咨询机器人安全回归测试:把 690 题作为回归集,监控上线模型的答案一致性漂移(配合 MedARC RL 环境的三维评分)。相比临时收集线上 badcase,固定回归集能区分"模型变了"与"问题分布变了"。
- 健康素养与信息需求研究:25 类问题类型分布是公众药物信息需求的实证样本,可支撑药学教育与政策研究。头部类型(信息 112 条、剂量 70 条、用法 61 条)量化了"消费者到底最想从哪里搞清楚自己的药"。
- 标注协议教学:4 名标注者 + 医学博士仲裁 + FDA 来源优先级的完整流程,是讲授"医疗 QA 标注如何保证可信"的最佳现成案例,可直接用于数据标注团队培训。
§2 医学背景与临床任务
§2.1 ICD-11 相关编码映射
MedicationQA 不绑定单一疾病,其问题横跨各治疗领域的药物。下表按 ICD-11 章节范围给出数据集主要药物主题的映射(章节/块级编码):
| 数据集主题(Top 问题类型对应的用药场景) | ICD-11 章节/块编码 | 中文名 | 映射说明 |
|---|---|---|---|
| 抗菌药、维生素、激素类等一般用药 | 1A00-1H0Z | 感染性疾病 | 抗生素(antb)是数据集 UMLS 语义类型限定中的重点类别,对应抗感染治疗 |
| 二甲双胍、胰岛素等代谢药物 | 5A00-5D46 | 内分泌、营养或代谢疾病 | 慢性病长期用药(剂量、漏服、停药)是高频提问场景 |
| 降压药、他汀类等心血管药物 | BA00-BE2Z | 循环系统疾病 | 降压/调脂药物的相互作用与联合用药问题 |
| 吸入激素(如 fluticasone)等呼吸药物 | CA00-CB7Z | 呼吸系统疾病 | 原论文记录的 fluticasone 与氧气联用问题即属此类 |
| 精神神经类药物(如 memantine) | 6A00-6E8Z / 8A00-8E7Z | 精神行为障碍 / 神经系统疾病 | 痴呆、抑郁等长期用药的服药时机类问题 |
| 中毒剂量、药物过量类提问 | NE00-NF2Z | 损伤、中毒或外因的某些其他后果 | 论文记录的“吃多少会致命”式迂回提问对应此章 |
§2.1b SNOMED CT 概念映射
| 数据集概念 | SNOMED CT 编码 | 术语名称 | 对应数据集字段 |
|---|---|---|---|
| 药物产品 | 373873000 | Pharmaceutical / biologic product (product) | Focus (Drug)、Answer 主体 |
| 药物或药品 | 410942007 | Drug or medication (product) | 焦点药名的上位概念 |
| 临床所见 | 404684003 | Clinical finding (finding) | Side Effects 类问题与答案中描述的不良反应 |
| 操作 | 71388002 | Procedure (procedure) | Usage 类问题涉及的给药操作 |
§2.2 健康素养与用药信息需求背景
消费者药物问题的背后是一个公共卫生问题:患者拿到处方后,药品说明书往往语言专业、篇幅冗长,普通消费者难以从中提取自己关心的答案,于是转向在线健康门户提问。MedlinePlus 作为美国国家医学图书馆运营的消费者健康门户,正是这类提问的主要汇聚地之一。原论文团队观察到,这些真实提问与教科书式的药物知识之间存在显著鸿沟:问题常常不说明患者年龄、适应证与合并用药(欠指定),答案则分散在 DailyMed 说明书、MedlinePlus 百科与其他可信网站中,且部分答案(如药片外观、成分)随厂商而变,部分问题(如哺乳期用药)甚至需要专家基于药代动力学推断才能回答。MedicationQA 正是为量化这条"真实问题 → 可信答案"链路而构建的实验床:它把消费者视角的用药困惑(剂量 70 条、副作用 60 条、相互作用 51 条、适应证 55 条等)固化为可评测的数据资产,使系统开发者能够针对性地改进面向消费者的药物信息呈现,而不是面向专业人员的文献检索。从公共卫生视角看,这类基准的长期价值在于推动用药咨询服务的可及性与一致性,降低因信息不对称导致的用药错误风险。
从问题类型的构成还能读出更深一层的信息需求结构:排第一的并非副作用(60 条)而是泛信息类问题(Information,112 条),说明相当一部分消费者的首要诉求是"先搞明白这个药是什么";剂量类(70 条)与用法时机类(Usage 61 条 + Usage/time 36 条)合计超过 160 条,指向服药依从性场景中最容易出错的执行细节;而 Stop/tapering(31 条)这类"能不能自行停药"的问题虽属长尾,却直接关联撤药风险,错误代价与提问频次并不成正比。原论文同时记录了消费者提问的特殊语言现象——问题可以迂回(用"how much X to kill you"代指中毒剂量)、可以情绪化、可以省略全部背景,这要求问答系统具备远超关键词匹配的意图理解能力。
§2.3 临床任务定义
| 任务 | 输入 | 输出 | 临床意义 |
|---|---|---|---|
| 消费者健康问答(QA 生成) | 口语化药物问题 | 简明、准确、来源可信的答案 | 替代/辅助药师热线,规模化缓解用药咨询资源不足 |
| 问题焦点识别(question focus) | 问题文本 | 焦点药名(如 valacyclovir) | 将口语提问链接到标准化药物词典(RxNorm/DailyMed) |
| 问题类型分类 | 问题文本 | 25 类之一(剂量/副作用/相互作用等) | 自动路由问题到对应的答案模板与信息源 |
| 答案来源检索 | 问题与焦点药名 | DailyMed/MedlinePlus 等来源中的答案片段 | 保证答案可溯源至 FDA 推荐渠道 |
| LLM 安全评测 | 问题 + 模型长答案 | 12 维人工评分(如“与科学共识一致”) | 识别模型可能给出潜在有害用药建议的情形 |
§2.4 消费者人群特征
| 维度 | 描述 |
|---|---|
| 来源 | 提交给 MedlinePlus 的消费者问题(匿名化后使用) |
| 采集时间 | 数据集于 2019 年发布(具体采集窗口论文未披露) |
| 提问者年龄/性别/种族 | 未披露(问题经匿名化,无个人属性字段) |
| 就医类型 | 消费者自助式在线健康信息查询,非门诊场景 |
| 语言与地域 | 英语,以美国用户为主的药物关注主题 |
| 覆盖药物 | 未公开完整药物清单;焦点恒为药名,覆盖 25 类问题类型(头部为 Information 112 条、Dose 70 条) |
§2.5 临床价值
对临床与药学服务而言,MedicationQA 揭示了消费者真实的用药困惑谱系:信息类问题最多(112 条),其次是剂量(70 条)、用法(61 条)、副作用(60 条)与适应证(55 条),相互作用问题(51 条)虽非最多却错误代价最高——原论文指出此类问题无法仅凭在线资源确认,需要外部资源(如 eHealthMe)辅助且错误敏感度高。这一分布可直接指导药学门诊的宣教优先级与自动问答系统的答案库建设。对 AI 系统而言,该数据集提供了"消费者语言 ↔ 规范药物知识"的对齐样本:把"how much X to kill you"这样的迂回提问映射到"中毒剂量"这一临床概念,正是用药助手安全落地的核心能力。
在服务设计层面,该数据集还给出了一条被反复验证的启示:消费者问题需要的是"节标题级"的精准答案而非整篇说明书——这正是答案字段平均只有 3.23 句的原因,也是 Section Title 字段被纳入数据集的原因。药师资源紧缺的机构可以据此重构线上咨询入口:先做问题类型自动分诊(25 类),再把对应节标题的权威内容直出给用户,把人工药师留给 Interaction 等高危类别。原论文构建的 CHiQA 系统即是这条路径的官方实现,其 20 题定性评测(35% 含正确答案 / 35% 仅相关 / 30% 不相关)同时给出了该路线在 2019 年技术水平下的真实上限,提示自动化分诊必须与人工兜底并行。
§2.6 金标准参考
| 维度 | 内容 |
|---|---|
| 数据划分 | 无官方 train/test 划分;论文焦点识别实验采用 80/10/10 划分,问题类型分类实验将 25 类聚合为 14 类 |
| 标注方式 | 人工标注:4 名标注者独立标注问题焦点与问题类型,医学博士 + QA 专家仲裁 |
| 标注者资质 | 4 名标注者 + 1 名医学博士(MD)+ 1 名 QA 专家(论文 Methods) |
| 标注性质 | 问题焦点(恒为药名)+ 问题类型(25 类)+ 参考答案(含来源 URL) |
| 答案金标准 | 遵循 FDA 消费者药品信息推荐的来源优先级:MedlinePlus/DailyMed → 其他 NIH/政府网站 → 其他可信网站 → 学术来源 |
| 适用任务 | QA 生成评测、焦点识别、问题类型分类、RAG 溯源评测 |
| 质量声明 | 焦点/类型标签高可信;答案为可信来源汇编而非临床金标准(见 §7.2) |
§3 数据集规格
§3.0 版本抉择矩阵
MedicationQA 没有传统意义上的多版本,但存在多个数量口径与获取渠道,选错口径会直接导致复现对不上(见坑点 1):
| 你的需求 | 推荐渠道 | 规模口径 | 理由 |
|---|---|---|---|
| 一般研究/教学/快速上手 | 官方 GitHub abachaa/Medication_QA_MedInfo2019 | 690 条(XLSX 单文件) | 唯一官方发布渠道,CC BY 4.0,零门槛 |
| 复现 Med-PaLM/MultiMedQA 人工评测 | 官方 GitHub + 论文协议 | 674 条金标准 QA 对,抽样 20 题盲评 | 论文与 Med-PaLM 均以 674 为准,用 690 镜像会对不上 |
| 机器学习 pipeline 直接加载 | HuggingFace truehealth/medicationqa | 690 行(train split,无官方划分) | 方便 load_dataset,但需自行去重与清洗(见坑点 2) |
| 去重后的干净副本 | HF 衍生集 ChuGyouk/MedicationQA_answerfeedback_gemini2p0flashexp | 651 条(社区去重) | 非官方版本,仅作去重参照,正式发表应回溯官方 690 |
§3.1 模态详情
MedicationQA 是纯文本问答数据集,单表结构,每条记录包含 6 个字段:问题原文(Question,10-119 字符的口语化英文提问)、焦点药物(Focus (Drug),3-56 字符,恒为药名)、问题类型(Question Type,4-25 字符的受控短语)、参考答案(Answer,4 至 4,320 字符,允许 null)、答案所在节标题(Section Title,4-161 字符,允许 null)与答案来源 URL(35-503 字符)。字段长度范围与缺失情况来自 HuggingFace 镜像的统计(aifasthub 镜像页),官方文件本身附带人工标注的焦点与类型标签。文本均为英文,问题侧是消费者的自然口语(含缩写、俚语与迂回表达),答案侧是 DailyMed/MedlinePlus 等权威来源的规范化书面语,两者之间存在显著的语域(register)差异——这一差异正是该数据集的评测价值所在。
§3.2 子集与问题类型分布
论文对 674 条金标准问题标注了 25 种问题类型,头部分布如下(原论文 Table 1):
| 排名 | 问题类型 | 条数 | 占 674 比例 |
|---|---|---|---|
| 1 | Information(一般信息) | 112 | 16.6% |
| 2 | Dose(剂量) | 70 | 10.4% |
| 3 | Usage(用法) | 61 | 9.1% |
| 4 | Side Effects(副作用) | 60 | 8.9% |
| 5 | Indication(适应证) | 55 | 8.2% |
| 6 | Interaction(相互作用) | 51 | 7.6% |
| 7 | Action(作用机制) | 39 | 5.8% |
| 8 | Appearance(外观) | 38 | 5.6% |
| 9 | Usage/time(用药时机) | 36 | 5.3% |
| 10 | Stopping/tapering(停药/减量) | 31 | 4.6% |
| — | 其余 15 类合计 | 121 | 17.9% |
答案来源分布(674 条中,论文 Figure 4/Results):
| 答案来源 | 条数 | 占比 | 说明 |
|---|---|---|---|
| DailyMed | 290 | 43.0% | FDA 官方药品说明书数据库,来源优先级第一 |
| MedlinePlus | 128 | 19.0% | NLM 消费者健康百科,来源优先级第一(并列) |
| 其他网站 | 256 | 38.0% | cdc.gov、mayoclinic.org、health.harvard.edu、PubMed 摘要等 |
来源分布直接决定答案字段的文本风格分层:DailyMed 来源接近说明书原文摘录,MedlinePlus 来源偏消费者友好措辞,"其他"来源则横跨学术摘要与大学健康网页,风格最不统一——做生成评测时按来源分层抽样能显著降低指标方差。
§3.3 数据格式
| 格式 | 载体 | 说明 |
|---|---|---|
| XLSX(官方) | MedInfo2019-QA-Medications.xlsx | 官方发布原格式,6 列单表,约 162 KB |
| CSV(自行转换) | pandas 导出 | 推荐研究使用,注意 Answer 内含换行与逗号 |
| HuggingFace Dataset | truehealth/medicationqa | 690 行 train split,load_dataset 即用 |
| medplexity 接口 | medplexity 库 | Python 评测框架封装,无官方划分(仅 train split) |
§3.4 存储大小
官方 GitHub 仓库约 162 KB,解压后单 XLSX 文件;转换为 CSV/JSON 后体量仍在 1 MB 量级,任何本地环境均可直接处理,无需 GPU 或分布式存储。HuggingFace 镜像与衍生集同样为 KB 级。
§3.5 标注方式
人工标注为主、自动工具为辅的混合流程:MetaMapLite 自动抽取医学实体(限定 UMLS 语义类型 antb/clnd/nsba/phsu/strd/vita)用于候选问题筛选,问题焦点与问题类型由人工标注,答案由人工按 FDA 消费者药品信息推荐的来源优先级检索并整理(原论文 Methods)。
| 标注对象 | 方式 | 质量控制 |
|---|---|---|
| 候选问题筛选 | 自动(MetaMapLite)+ 人工复核 | UMLS 语义类型白名单 + 可理解/可回答/焦点为药名三准则 |
| 问题焦点 | 人工(4 名标注者) | 恒为药名,医学博士仲裁 |
| 问题类型 | 人工(4 名标注者) | 25 类受控短语,MD + QA 专家仲裁 |
| 参考答案 | 人工检索整理 | FDA 来源优先级 + MD/QA 专家验证 |
§3.6 标注者资质与一致性
每条问题由 4 名标注者标注问题焦点(question focus)与问题类型;另由 1 名医学博士(MD)与 1 名 QA 专家对问题类型进行仲裁并验证答案。论文未公开标注者间一致性系数(如 kappa),使用者在自建扩展标注时应自行报告一致性。
§3.7 采集周期
数据集于 2019 年发布(论文 2019-08-21 发表于 MEDINFO 2019,GitHub 文件 2019-05-07 上传),具体消费者提问采集窗口论文未披露。数据本体自 2019 年后未更新。
§3.8 地域覆盖
英语消费者问题,来源为美国国家医学图书馆运营的 MedlinePlus 门户提问渠道,主题以美国常见药物为主;论文未公布提问者地理分布。
§3.9 设备规格
不适用。纯文本数据集,无传感器、影像或信号采集设备元数据。
§3.10 深度溯源链
消费者匿名提问(MedlinePlus 提交渠道)
→ MetaMapLite 实体识别(限定 UMLS 语义类型:antb/clnd/nsba/phsu/strd/vita)
→ 人工筛选(可理解、可回答、焦点为药名)→ 690 条问题
→ 4 名标注者:标注问题焦点(药名)+ 问题类型(25 类)
→ 1 名医学博士 + 1 名 QA 专家:仲裁问题类型、验证答案
→ 答案检索(FDA 消费者药品信息推荐优先级):
1) MedlinePlus 与 DailyMed(418 条,62.0%)
2) 其他 NIH/美国政府网站
3) 其他可信网站(Mayo Clinic 等)或学术机构
4) Google 搜索返回的其他网站
→ 发布:MedInfo2019-QA-Medications.xlsx(690 条)/ 论文金标准口径 674 条 QA 对
溯源链的三点工程含义:第一,MetaMapLite 只用于筛选而非标注,最终标签全部出自人工,因此该数据集不存在弱监督标签噪声问题;第二,答案检索的四级优先级意味着 URL 字段的分布本身就是协议的产物——看到非政府域名 URL 时应理解为"前三级未命中"的结果而非随意引用;第三,发布文件与论文口径的分叉(690 vs 674)发生在最后一步,说明筛选与整理之间存在未公开的清洗规则,复现研究必须显式声明所用口径。原论文全文(含协议细节与图表)可在 NLM 出版页获取。
§4 数据结构
§4.0 目录树
官方发布为单文件,解压/下载后结构如下:
medicationqa/
├── MedInfo2019-QA-Medications.xlsx # 官方数据(690 条,6 列单表,约 162 KB)
├── README.md # 官方仓库说明(2025-12-05 更新,含许可与联系)
└── LICENSE # CC BY 4.0 International 声明
转换后的工作目录建议:
data_root/
└── medicationqa/
├── medicationqa_690.csv # 由 XLSX 转换的 CSV(推荐)
├── medicationqa_dedup_651.csv # 参照社区去重口径的自建去重版(可选)
└── splits/
├── train.csv # 自行划分(无官方划分)
└── test.csv
§4.1 DAIMS 字段字典
| 字段名 | 类型 | 说明 | 示例值 | AI 用途 | 观测误差 | 信息性缺失编码 | 取值范围 |
|---|---|---|---|---|---|---|---|
| Question | Text | 消费者药物问题原文(口语化英文) | Can I take valacyclovir while pregnant? | QA 输入、语言风格研究 | 口语缩写与拼写变体多;欠指定(缺年龄/适应证) | 无缺失 | 10-119 字符 |
| Focus (Drug) | Text | 人工标注的问题焦点,恒为药名 | valacyclovir | NER 链接 RxNorm/DailyMed | 药名别名/商品名未归一化 | 无缺失 | 3-56 字符 |
| Question Type | Text | 25 类问题类型受控短语 | Dose / Side Effects | 分类任务标签;问题路由 | 25 类长尾分布,5 次分类实验波动达 2.5% | 无缺失 | 4-25 字符,25 类 |
| Answer | Text | 权威来源参考答案(可能为多节拼接) | Valacyclovir has not been studied in pregnancy… | QA 参考答案、RAG 目标文本 | 来源异构(说明书/百科/综述混排),非临床人员可参与整理 | 允许 null(真缺失) | 4-4,320 字符 |
| Section Title | Text | 答案在来源文档中的节标题 | Pregnancy / Dosage | RAG 溯源、证据定位 | 多来源拼接时节标题语义混杂 | 允许 null(真缺失) | 4-161 字符 |
| URL | Text | 答案来源链接 | https://dailymed.nlm.nih.gov/… | 来源分布分析、可信度加权 | 长 URL 含跟踪参数;一个答案可能对应多来源 | 无缺失 | 35-503 字符 |
说明:行级唯一标识未随数据发布,建议以行号生成 question_id 主键(记录集 medicationqa_qa_pairs/question_id)。
字段级质量注记(基于论文与镜像统计的交叉验证):
| 质量注记 | 涉及字段 | 依据 |
|---|---|---|
| 问题侧语域与答案侧语域差异显著 | Question vs Answer | 口语提问 vs 规范书面语(原论文设计动机) |
| 焦点标签可复现性最高 | Focus (Drug) | 部分匹配 F1 90.37(论文 Table 3) |
| 类型标签存在主观边界 | Question Type | 5 次分类运行波动 [0, 2.5%](论文 Results) |
| 答案风格随来源分层 | Answer + URL | DailyMed/MedlinePlus/其他 三层风格(§3.2) |
| null 均为真缺失 | Answer、Section Title | HF 镜像统计(aifasthub) |
§4.2 标签分布
问题类型共 25 类,头部 10 类合计占 82.1%(详见 §3.2 表)。长尾 15 类合计仅 121 条,其中多数类别不足 30 条——按类别做分层抽样与分类评测时,长尾类别的指标置信度有限(论文 5 次分类运行的准确率波动区间达 2.5%)。焦点药名维度上,数据集未发布官方药物词表,Focus 字段需自行归一化后统计。
§4.3 关键统计
| 统计项 | 数值 | 来源 |
|---|---|---|
| 问题平均长度 | 7.16 token/问题 | 原论文 Table 2 |
| 答案平均长度 | 69.06 token/答案 | 原论文 Table 2 |
| 答案平均句数 | 3.23 句/答案 | 原论文 Table 2 |
| 问题 token 在答案中的复现率 | 34.72% | 原论文 Table 2 |
| 问题类型数 | 25 类(分类实验聚合为 14 类) | 原论文 Table 1 |
| 答案来源 Top1 | DailyMed 290/674(43.0%) | 原论文 Figure 4/Results |
| 数据总大小 | 约 162 KB | 官方仓库 |
| 长度跨度(HF 镜像口径) | Question 10-119 字符 / Answer 4-4,320 字符 | aifasthub 镜像统计 |
| 缺失字段 | Answer、Section Title(允许 null) | 同上 |
| 分类实验运行波动 | 准确率区间 [0, 2.5%](5 次运行) | 原论文 Results |
§4.4 数据层级
MedicationQA 是扁平单表结构,不存在患者→检查→序列→切片式的层级:一条记录 = 一个问题-答案对,记录之间唯一的隐式关联是同一焦点药物可能出现在多条问题中(同药多问)。这一结构决定了它无法用于需要患者纵向轨迹的任务,却非常适合独立同分布假设下的 QA 评测。
§4.5 缺失值与信息性缺失
| 字段 | 缺失情况 | 处理建议 |
|---|---|---|
| Answer | 允许 null(HF 镜像统计确认) | 涉及答案生成评测时过滤 null 行;分析缺失原因时可回溯来源 URL |
| Section Title | 允许 null | null 表示答案非来自单一命名节;做证据定位任务时以 null 为显式类别,勿静默填充空串 |
| 其余字段 | 无缺失 | — |
数据集中不存在用特殊哨兵值(如 -999、N/A 字符串)伪装的编码缺失;所有缺失均为 pandas 可直接识别的空单元格。
§4.6 与论文图表的对应关系
为便于对照原论文核对数字,本页引用的关键统计与论文图表的对应关系如下:
| 本页数字 | 论文出处 | 位置 |
|---|---|---|
| 25 种问题类型与头部计数(Information 112 等) | Table 1 | 问题类型分布 |
| 问题 7.16 token / 答案 69.06 token / 3.23 句 / 复现率 34.72% | Table 2 | 长度统计 |
| 焦点识别 F1 74.07±2.1(精确)/ 90.37±3.4(部分) | Table 3 | Bi-LSTM-CRF 结果 |
| 分类 75.7%、波动 [0, 2.5%](14 类聚合) | Results 正文 | CNN 结果 |
| 答案来源 DailyMed 290 / MedlinePlus 128 / 其他 256 | Figure 4 / Results | 来源分布 |
| CHiQA 35% / 35% / 30% | Results 正文 | 系统定性评测 |
对照时的两个注意点:其一,论文统计基于 674 条金标准口径,与发布文件 690 行的描述性统计(如 HF 镜像的字段长度范围)存在口径差,二者不可混用;其二,长度统计以论文分词器为准,使用现代 tokenizer(如 BPE)统计得到的 token 数会不同,引用时应注明分词口径。
§5 划分与使用建议
§5.1 官方划分
无。官方仅发布单一文件,未提供 train/dev/test 划分。
§5.2 论文与社区惯例划分
| 划分 | 使用方 | 方案 | 说明 |
|---|---|---|---|
| 焦点识别实验 | 原论文(2019) | 80/10/10 随机划分 | 报告 5 次运行均值 ± 标准差(F1 74.07±2.1) |
| 问题类型分类 | 原论文(2019) | 25 类聚合为 14 类后分类 | 5 次运行准确率 75.7%,波动 [0, 2.5%] |
| LLM 人工评测 | Med-PaLM(《Nature》2023) | 抽样 20 题(合计 140 题消费者 QA 轴之一) | 9 名临床医生按 12 轴盲评 |
| RL 评测环境 | MedARC/Prime Intellect(2026-02) | 全量 690 条作 test | LLM-as-Judge 按 accuracy/completeness/clarity 三维 1-5 分 |
| 去重衍生 | ChuGyouk 衍生集 | 去重后 651 条 | 非官方口径 |
§5.3 泄漏风险与划分策略建议
MedicationQA 的最大泄漏风险是同药多问导致的语义重复:同一焦点药物(如同一款常用药)可能有多条不同措辞的问题,且部分镜像中还存在同问不同答、同问同答的显式重复(社区去重后 651 条)。若随机划分,训练集与测试集会出现近重复对,使自动指标虚高。建议:先按(Focus 归一化药名 + 问题语义指纹)分组,再按组切分 train/test;若复刻论文分类实验,保持与论文相同的 14 类聚合口径以便对照。答案 URL 也是弱泄漏通道——同一条 DailyMed 节标题可能同时覆盖多条问题,做检索评测时应按来源文档去重。
§5.4 交叉验证建议
小样本(690 条)下推荐 5 折分层交叉验证(按 Question Type 分层),报告均值 ± 标准差并与论文基线的 5 次运行报告方式对齐;对长尾问题类型建议同时报告宏平均(macro-F1)与头部类别单独指标。切分时以 focus_norm 为组键可进一步收紧同一药物的组间泄漏;若研究目标是"对未见药物的泛化",则应改用按药物分组的留出法(hold-out entire medications),此时长尾药物类别可能整组缺失,需在论文中说明该设定与随机划分设定的指标不可比。
§5.5 外部验证建议
在 MedicationQA 上训练的分类/检索模型,建议迁移到 HealthSearchQA 或 TREC LiveQA 的消费者问题上做外部验证(注意两者无参考答案,需人工评测协议);反之,Med-PaLM 式长答案评测结论也应在 MedicationQA 全量 674/690 口径上复核,避免仅凭 20 题抽样下结论。跨数据集评测时优先对齐任务定义:MedicationQA 的答案生成是"短答案 + 来源引用"形态,与 HealthSearchQA 的开放长文回答之间存在任务差异,直接迁移模型前应先对齐输出规格。
§5.6 使用建议速查
| 使用目标 | 推荐配置 | 禁忌 |
|---|---|---|
| 类型分类论文实验 | 25 类聚合 14 类,5 折分层 CV,报告均值 ± 标准差 | 只报单次划分结果 |
| 焦点识别复现 | 80/10/10 随机划分,对照精确/部分匹配双 F1 | 只报部分匹配 F1 与论文对照 |
| 生成式评测 | 全量 674/690 口径 + 高危子集拆分 + 人工抽检 | ROUGE 绝对值跨系统排名 |
| LLM 盲评复刻 | 抽样 20 题、12 轴、双盲 | 把参考答案当唯一真值打分 |
| RL 训练 | 全量 690 作 test + judge 冻结版本 | 用同源模型当 judge 又当选手 |
| 生产回归 | 690 题固定集 + URL 存活巡检 + 漂移台账 | 直接用镜像未去重版本 |
一张表总结本节的核心立场:MedicationQA 的所有划分争议都源于"官方没给划分"这一事实,因此任何使用配置的第一行都应该写清楚口径与协议,让读者能够复现你的切分。
§6 AI 就绪指南
§6.0 云端快速启动
数据集仅 162 KB,任何环境均可秒级加载。以下任选其一:
# 方式 A:HuggingFace 镜像(推荐,自动缓存)
python -c "import datasets; ds = datasets.load_dataset('truehealth/medicationqa'); print(ds)"
# 方式 B:官方 GitHub 原始文件(口径最权威)
python -c "import pandas as pd; df = pd.read_excel('https://github.com/abachaa/Medication_QA_MedInfo2019/raw/main/MedInfo2019-QA-Medications.xlsx'); print(df.shape)"
环境要点:
- 无 GPU、无大数据依赖,Colab/Kaggle 免费实例即可完成全部预处理与 BERT 级训练;
- 读 XLSX 需要
openpyxl(pip install pandas openpyxl); - 方式 A 加载的是社区镜像,首次使用后应与官方 XLSX 做 diff 校验(见坑点 2);
- 离线环境直接从 GitHub 下载单文件拷贝即可,无需数据盘规划。
§6.1 快速上手
# ============================================================
# 目录结构预期:
# data_root/medicationqa/MedInfo2019-QA-Medications.xlsx
# (本脚本从 data_root 拼接路径;最小可用子集 = 全部 690 行)
# 依赖:pandas openpyxl
# ============================================================
import pandas as pd
from pathlib import Path
data_root = Path("data_root/medicationqa") # 按实际下载位置修改
df = pd.read_excel(data_root / "MedInfo2019-QA-Medications.xlsx")
print(df.shape) # (690, 6)
print(df.columns.tolist()) # ['Question', 'Focus (Drug)', 'Question Type',
# 'Answer', 'Section Title', 'URL']
print(df["Question Type"].value_counts().head(10))
print(df["Answer"].isna().sum()) # 检查 null 答案(见 §4.5)
# 生成行级主键(官方无 id 字段)
df = df.reset_index().rename(columns={"index": "question_id"})
df.to_csv(data_root / "medicationqa_690.csv", index=False)
# 30 秒体检清单:加载后先看这五件事
# 1) 行数是否为 690(坑点 1 的口径锚点)
# 2) 列名是否与官方一致(镜像可能改名)
# 3) Answer 缺失多少条(影响生成评测有效样本数)
# 4) Question Type 有多少个唯一值(应为论文 25 类口径的子集)
# 5) Focus (Drug) 的唯一值数量(同药多问规模,决定防泄漏切分粒度)
print("unique types:", df["Question Type"].nunique(),
"| unique drugs:", df["Focus (Drug)"].nunique())
§6.1b 标准交换格式(JSON Lines)
跨团队协作或入库时,建议把 XLSX 规范化为 JSON Lines,显式编码 null 与主键:
# 每行一条 JSON 记录:question_id 为主键,null 显式保留为 None
import json
records = df.where(df.notna(), None).to_dict(orient="records")
with open("data_root/medicationqa/medicationqa_690.jsonl", "w", encoding="utf-8") as f:
for rec in records:
f.write(json.dumps({
"question_id": rec["question_id"],
"question": rec["Question"],
"focus": rec["Focus (Drug)"],
"question_type": rec["Question Type"],
"answer": rec["Answer"], # None 表示官方缺失
"section_title": rec["Section Title"],
"answer_url": rec["URL"],
}, ensure_ascii=False) + "\n")
# 读回验证
with open("data_root/medicationqa/medicationqa_690.jsonl", encoding="utf-8") as f:
loaded = [json.loads(line) for line in f]
assert len(loaded) == 690
JSONL 形态的三点收益:null 与空串在序列化层面不再混淆;question_id 跨版本稳定(只要不重排序);每行独立可解析,适合流式处理与数据库批量导入。
§6.2 数据获取
| 渠道 | 链接 | 格式 | 大小 | 门槛 |
|---|---|---|---|---|
| 官方 GitHub | https://github.com/abachaa/Medication_QA_MedInfo2019 | XLSX | 约 162 KB | 无(CC BY 4.0) |
| HuggingFace 镜像 | https://huggingface.co/datasets/truehealth/medicationqa | Parquet/Dataset | KB 级 | 无 |
| medplexity 封装 | https://medplexity.readthedocs.io/en/latest/benchmarks/medicationqa/ | Python API | — | pip 安装 |
# 官方渠道下载(无注册/申请流程,直接下载即可)
import urllib.request
URL = ("https://github.com/abachaa/Medication_QA_MedInfo2019/raw/main/"
"MedInfo2019-QA-Medications.xlsx")
urllib.request.urlretrieve(URL, "data_root/medicationqa/MedInfo2019-QA-Medications.xlsx")
# 许可:CC BY 4.0 International,商用需署名,无 DUA。
# 官方联系人:Asma Ben Abacha(asma.benabacha@nih.gov)
获取流程与合规要点:数据集无 PhysioNet 式凭证化流程,无 CITI 培训要求,无 DUA 签署,个人与商业实体均可直接下载;唯一的合规义务来自 CC BY 4.0 本身——再分发或衍生使用时保留许可声明并署名原作者(NLM Lister Hill 团队)。渠道选择上建议"官方 GitHub 为事实源 + HF 镜像为工程便利":镜像可能在行序、类型推断上与原文件有差异(见坑点 2),正式实验与发表数据一律回溯官方文件哈希。
§6.3 预处理全流程
# ============================================================
# 格式转换 → 清洗 → 标准化 →(文本数据无增强需求时跳过增强)
# ============================================================
import re
import pandas as pd
def preprocess(df: pd.DataFrame) -> pd.DataFrame:
df = df.reset_index().rename(columns={"index": "question_id"})
# 1) 缺失处理:Answer / Section Title 允许 null(显式保留 NaN,勿填空串)
# 2) 文本清洗:合并空白,保留原文语序(口语特征是数据集价值的一部分)
for col in ["Question", "Focus (Drug)", "Question Type", "Answer", "Section Title"]:
if col in df.columns:
df[col] = df[col].astype("string").str.replace(r"\s+", " ", regex=True).str.strip()
# 3) 去重:同问同答直接去重;同问不同答保留首条并标记(社区去重后 651 条)
df["question_norm"] = df["Question"].str.lower().str.strip()
dup_mask = df.duplicated(subset=["question_norm"], keep="first")
df["is_duplicate"] = dup_mask
# 4) 类型标准化:统一大小写风格,便于与论文 25 类口径对齐
df["Question Type"] = df["Question Type"].str.title()
# 5) 焦点归一化:小写去标点,用于分组切分防泄漏(见 §5.3)
df["focus_norm"] = (df["Focus (Drug)"].str.lower()
.str.replace(r"[^a-z0-9 ]", "", regex=True).str.strip())
return df
df = preprocess(pd.read_excel("data_root/medicationqa/MedInfo2019-QA-Medications.xlsx"))
print(df["question_id"].count(), "rows;", int(df["is_duplicate"].sum()), "duplicate questions")
# 分组划分(防同药多问泄漏)
from sklearn.model_selection import GroupShuffleSplit
gss = GroupShuffleSplit(n_splits=1, test_size=0.15, random_state=42)
tr_idx, te_idx = next(gss.split(df, groups=df["focus_norm"]))
train_df, test_df = df.iloc[tr_idx], df.iloc[te_idx]
预处理后的质量验证(建议固化为单元测试):
# ============================================================
# 质量断言:任何口径变更后重跑,防止静默漂移
# ============================================================
def assert_quality(df):
n_total = len(df)
assert n_total == 690, f"总行数应为 690,实际 {n_total}"
# 唯一性:全字段完全重复应为 0(同问不同答不算完全重复)
assert df.duplicated().sum() == 0, "存在全字段重复行"
# 必填字段
assert df["Question"].notna().all(), "Question 不应有缺失"
assert df["Focus (Drug)"].notna().all(), "Focus 不应有缺失"
# 缺失占比记录(Answer/Section Title 允许缺失但需监控)
print(f"Answer 缺失: {df['Answer'].isna().sum()}")
print(f"Section Title 缺失: {df['Section Title'].isna().sum()}")
print(f"重复问题(同问已去重后): {int(df['is_duplicate'].sum())}"
f",去重后规模 {n_total - int(df['is_duplicate'].sum())}")
# 类型集合:清洗后应仍为论文 25 类口径的子集
print("清洗后类型数:", df["Question Type"].nunique())
assert_quality(df)
三处断言的意义:总行数断言锁住 690 口径(坑点 1 的第一道防线);完全重复断言区分"全字段重复"与"同问不同答",避免误删合法的多来源答案;缺失占比打印不设断言,因为缺失本身合法(见 §4.5),只需被记录和解释。
§6.4 PyTorch DataLoader
# ============================================================
# 端到端 Dataset:问题 → 类型分类(多任务可扩展为答案生成)
# 依赖:torch transformers
# ============================================================
import torch
from torch.utils.data import Dataset, DataLoader
from transformers import AutoTokenizer
class MedicationQADataset(Dataset):
"""每条样本 = (question_text, question_type_label)。
有效子集:Answer 非 null 且非重复标记的行(约 651 条)。"""
def __init__(self, df, label2id, model_name="microsoft/BiomedNLP-PubMedBERT-base-uncased-abstract-fulltext"):
self.df = df[df["Answer"].notna() & ~df["is_duplicate"]].reset_index(drop=True)
self.label2id = label2id
self.tok = AutoTokenizer.from_pretrained(model_name)
def __len__(self):
return len(self.df)
def __getitem__(self, i):
row = self.df.iloc[i]
enc = self.tok(row["Question"], truncation=True, max_length=64,
padding="max_length", return_tensors="pt")
return {"input_ids": enc["input_ids"].squeeze(0),
"attention_mask": enc["attention_mask"].squeeze(0),
"labels": torch.tensor(self.label2id[row["Question Type"]])}
# 标签集:论文口径 25 类或聚合 14 类,按实验目标选择
labels = sorted(train_df["Question Type"].unique())
label2id = {l: i for i, l in enumerate(labels)}
train_ds = MedicationQADataset(train_df, label2id)
loader = DataLoader(train_ds, batch_size=16, shuffle=True, num_workers=2)
batch = next(iter(loader))
print(batch["input_ids"].shape, batch["labels"].shape)
§6.4b 生成式 QA 的 Dataset(seq2seq)
若目标是答案生成(Med-PaLM 式长答案评测的回归监控版),使用以下 encoder-decoder 数据管道:
# ============================================================
# 生成式 Dataset:question → answer(带来源前缀的可控生成)
# ============================================================
from transformers import AutoTokenizer
class MedicationQAGenerationDataset(Dataset):
"""每条样本 = (source, target)。
source = [类型] [焦点] 问题文本;target = 参考答案。
过滤规则与分类 Dataset 一致(Answer 非 null、去重标记剔除)。"""
def __init__(self, df, model_name="google/flan-t5-base",
max_src_len=64, max_tgt_len=128):
self.df = df[df["Answer"].notna() & ~df["is_duplicate"]].reset_index(drop=True)
self.tok = AutoTokenizer.from_pretrained(model_name)
self.max_src_len, self.max_tgt_len = max_src_len, max_tgt_len
def __len__(self):
return len(self.df)
def __getitem__(self, i):
row = self.df.iloc[i]
src = f"[{row['Question Type']}] [drug: {row['Focus (Drug)']}] {row['Question']}"
tgt = row["Answer"]
src_enc = self.tok(src, truncation=True, max_length=self.max_src_len,
padding="max_length", return_tensors="pt")
tgt_enc = self.tok(tgt, truncation=True, max_length=self.max_tgt_len,
return_tensors="pt")
labels = tgt_enc["input_ids"].squeeze(0).clone()
labels[labels == self.tok.pad_token_id] = -100 # 忽略 pad 位损失
return {"input_ids": src_enc["input_ids"].squeeze(0),
"attention_mask": src_enc["attention_mask"].squeeze(0),
"labels": labels}
gen_ds = MedicationQAGenerationDataset(train_df)
gen_loader = DataLoader(gen_ds, batch_size=8, shuffle=True)
设计说明:source 中注入问题类型与焦点药名,是源自原论文结构化标注的直接收益——分类标签在生成任务中变成可控前缀,推理时可按"先分类再路由前缀"的两段式策略生成,也可做消融实验验证标签注入的增益。答案目标里保留 URL 溯源信息时建议放在独立的辅助字段而非拼进 target,否则模型会学会在答案末尾生成看似可信实则伪造的 URL。
§6.5 坑点:8 个真实失败模式
⚠️ 坑点 1:690 vs 674 数量口径混淆(分类:评估误用)
问题:发布文件含 690 条问题,论文金标准与 Med-PaLM 评测口径为 674 条 QA 对。用 HF 690 行镜像复现 Med-PaLM 类评测时,基准规模与已发表结果对不上。
症状:复现报告题数与论文不一致;与 MultiMedQA 相关工作比较时抽样池不同,分数系统性偏移。
解决:
⚠️ 坑点 2:社区镜像存在重复条目(分类:预处理陷阱)
问题:HF 镜像中同时存在同问不同答与同问同答的重复;社区去重后仅 651 条。不去重会让近重复对泄漏进测试集。
症状:value_counts()显示同题多次出现;测试指标虚高但对新问题迁移无效。
解决:
- 简单方法:对
Question.str.lower().str.strip()做drop_duplicates。- 进阶方法:按(focus_norm + 归一化问题)分组去重,同问不同答保留官方首条并标记矛盾。
- SOTA 方法:语义指纹(如句子向量 + 阈值聚类)跨措辞去重,再按组切分(见 §5.3);对照社区 651 条口径验证。
参考:ChuGyouk 去重衍生集、aifasthub 镜像统计
⚠️ 坑点 3:Answer/Section Title 的 null 与超长拼接(分类:预处理陷阱)
问题:Answer 字段长度跨度 4-4,320 字符且允许 null,Section Title 同样允许 null;长答案往往是多来源片段拼接,直接按"一问一答"训练会把拼接接缝当作连续文本。
症状:生成模型输出中出现突兀的话题跳变(模仿拼接接缝);BLEU/ROUGE 计算因 null 崩溃或被静默跳过导致样本数缩水。
解决:
- 简单方法:显式过滤 null 行并在结果中报告有效样本数。
- 进阶方法:按 Section Title 切分长答案为证据片段,评测时以片段为单位对齐。
- SOTA 方法:把 URL + Section Title 组成证据引用三元组,训练引用感知的生成(answer-with-citation),接缝处显式标注来源。
参考:aifasthub 字段统计、原论文
⚠️ 坑点 4:问题欠指定,答案天然条件化(分类:偏倚陷阱)
问题:消费者问题常缺患者背景——如 valacyclovir 的正常剂量取决于年龄与适应证;还有迂回表达(“how much X to kill you"实指中毒剂量)。模型若直接作答会给出过于绝对的建议。
症状:评测中发现模型答案"听起来自信但医学上不完整”;人工评测"与科学共识一致"维度得分低。
解决:
- 简单方法:在评测协议中允许"需要更多信息"类回答并给分,而非强制生成完整答案。
- 进阶方法:为每题构造条件化提示(假设常见成人场景)并与原题双轨评测,分离"信息不足"与"知识错误"。
- SOTA 方法:模仿 Med-PaLM 的 12 轴人工评测(含"可能有害"轴),将欠指定问题的澄清式回答计入正确(Med-PaLM 92.6% vs Flan-PaLM 61.9% 的差距主要来自此类)。
参考:原论文 Discussion、Nature Med-PaLM
⚠️ 坑点 5:条件性答案随厂商而变(分类:标签理解)
问题:外观、成分类问题的答案取决于药品厂商——如同一药物(phenytoin)因厂商不同有 4 种颜色;单一"标准答案"在语义上是错的。
症状:模型把多厂商差异平均成模糊回答;自动指标惩罚了正确的枚举式答案。
解决:
- 简单方法:评测时对 Appearance/成分类答案做集合匹配(枚举命中任一即对),而非整串匹配。
- 进阶方法:把厂商条件作为答案的显式属性(“厂商 A 为白色”),训练结构化输出。
- SOTA 方法:链接 DailyMed 的 SPL 文档(按厂商分节),让模型按"药名 + 厂商"检索而非全局检索。
参考:原论文 Discussion、DailyMed
⚠️ 坑点 6:相互作用类问题在线不可确认、错误敏感度高(分类:标签理解)
问题:51 条 Interaction 类问题需要外部资源(如 eHealthMe)才能作答;论文明确指出药物相互作用无法仅凭在线来源确认,且此类错误的临床代价最高。
症状:检索器命中通用副作用页面而非相互作用专库;模型给出"无已知相互作用"的幻觉,评测中该类子集得分显著低于均值。
解决:
- 简单方法:对 Interaction 子集单独报告指标,不与全局平均混合。
- 进阶方法:检索源加入相互作用专库并在答案中强制附"请咨询药师/医生"兜底话术。
- SOTA 方法:按原论文 CHiQA 的定性协议(20 题人工评 35% 含正确答案)对高危子集做周期性人工复检,任何自动指标仅作辅助。
参考:原论文 Introduction/Discussion、CHiQA
⚠️ 坑点 7:TensorFlow 基线不可精确复现(分类:工程陷阱)
问题:论文自述即使固定随机种子,TF 1.4 的 GPU reduction 与 Adam 更新仍非确定,5 次运行的 F1 波动 ±2.1(焦点)/±3.4(部分匹配)、分类准确率波动 [0, 2.5%]。
症状:复现者把 ±2% 的差异误判为自己实现的 bug,浪费排查时间;或选择性报告最好的一次运行。
解决:
- 简单方法:以论文"均值 ± 标准差"为对照目标,报告同样规模的多次运行统计而非单点值。
- 进阶方法:现代框架(PyTorch)中启用确定性算法与
torch.use_deterministic_algorithms(True)后重跑基线,明确新旧框架差异归属。- SOTA 方法:用分层 5 折交叉验证替代论文的单次 80/10/10,给出置信区间后再比较。
参考:原论文 Table 3 与脚注
⚠️ 坑点 8:参考答案不宜直接作 BLEU ground truth(分类:评估误用)
问题:Med-PaLM 论文批评该数据集参考答案来源不一致、多出自自动化工具或非临床人员(图书管理员);把它当 BLEU 的标准答案会同时惩罚"更好的回答"与"更差的回答"。
症状:自动指标与人工评测相关性差;生成模型学会了模仿 DailyMed 说明书腔而非回答消费者的问题。
解决:
- 简单方法:自动指标只用于回归监控(版本对比),不用于绝对排名。
- 进阶方法:采用 Med-PaLM 协议的子集人工盲评(如 20 题、12 轴),自动指标作预筛。
- SOTA 方法:LLM-as-Judge + 人工抽查组合(MedARC 环境按 accuracy/completeness/clarity 三维 1-5 分),并公开判分 prompt 以便复现。
参考:Nature Med-PaLM Methods、MedARC 环境
§6.6 数据增强
| 策略 | 判定 | 说明 |
|---|---|---|
| 同义改写(LLM 生成口语变体) | ✅ 安全 | 保持焦点药名与意图不变,扩充欠指定问题变体;需人工抽检 |
| 负采样/标签打乱 | ✅ 安全 | 仅用于对比学习或判别式任务 |
| 检索增强扩写答案(从 DailyMed 补充证据) | ✅ 安全 | 保留 URL 溯源 |
| 抽样加权(长尾类上采样) | ✅ 安全 | 分类任务缓解 25 类长尾失衡,注意配合分层验证 |
| 回译(back-translation) | ❌ 危险 | 药名剂量数字易被改写,产生医学错误 |
| 随机词替换/删除 | ❌ 危险 | 剂量、时间词被破坏后语义翻转 |
| 用另一模型的答案替换参考答案再训练 | ❌ 危险 | 引入模型偏置,且与权威来源脱钩 |
增强策略的共同底线:任何改写都不得触碰问题中的医学事实要素(药名、剂量数字、时间表达)。690 条的小样本下,增强对分类器的主要价值是正则化而非知识注入——如果发现模型性能高度依赖增强倍数,更可能的原因是过拟合而非数据不足,应优先检查模型规模与验证协议。
§6.7 模型推荐
| 任务 | 推荐起点 | 说明 |
|---|---|---|
| 问题类型分类 | PubMedBERT / Bio_ClinicalBERT + 分类头 | 论文基线为 CNN(14 类 75.7%),BERT 系起点更高 |
| 焦点识别 | BioBERT/SciBERT + CRF 头 | 对齐论文 Bi-LSTM-CRF 协议(精确 F1 74.07 / 部分 F1 90.37) |
| 答案生成 | Flan-T5-base / Llama-3-8B-Instruct + RAG | 参考答案短(均值 69 token),适合条件生成 |
| 检索(RAG) | BM25 起步,DPR/BGE 增强对齐 DailyMed/MedlinePlus 节标题 | URL/Section Title 字段即检索监督信号 |
| LLM 评测 | Med-PaLM 协议人工 12 轴;或 LLM-as-Judge 三维评分 | 开源系统参考 MedARC 环境 |
| 药名归一化链接 | ScispaCy + UMLS/RxNorm 链接器 | 将 Focus (Drug) 映射到标准词典,为分组切分与覆盖分析打底 |
选型逻辑遵循"任务形态优先于模型名气":分类与 NER 是本数据集的原生任务(标注即监督信号),任意 100M-400M 级生物医学编码器即可超越论文基线;答案生成则是"借用数据做评测"的衍生任务,小模型微调容易过拟合到 DailyMed 说明书腔,建议直接用 instruction-tuned 模型 + few-shot 提示,把微调预算留给更大规模的同类数据。
§6.8 硬件需求
| 场景 | 最低配置 | 建议 |
|---|---|---|
| 数据探索/预处理 | 任意 CPU(内存 2 GB) | 单 XLSX 秒级加载 |
| BERT 级分类/NER | 单卡 8 GB | batch 16、max_length 64 即可 |
| 8B 级生成评测 | 单卡 24 GB(或量化 CPU 推理) | 690 条全量推理可在数小时内完成 |
| 全量 RL 训练 | 多卡集群 | 参考 MedARC 环境的 judge 设置 |
数据规模决定了硬件需求的天花板:690 条 × 64 token 的语料在 2020 年后的消费级硬件上毫无压力,真正需要预算的是 LLM-as-Judge 环节(judge 模型对每题生成评分的推理开销约为被评模型的同量级)。
§6.9 评估指标
# ============================================================
# 三类指标:分类(类型/焦点) + 生成(ROUGE/BERTScore) + 校准
# ============================================================
from sklearn.metrics import f1_score, classification_report
def eval_classification(y_true, y_pred, labels):
# 与论文口径对齐:报告 macro-F1 与头部类单独指标
print(classification_report(y_true, y_pred, labels=labels, zero_division=0))
return f1_score(y_true, y_pred, average="macro")
# 生成评测:ROUGE 做版本回归监控;绝对排名依赖人工/LLM-as-Judge(坑点 8)
try:
from rouge_score import rouge_scorer
rs = rouge_scorer.RougeScorer(["rouge1", "rougeL"], use_stemmer=True)
def rouge(ref, hyp):
s = rs.score(ref, hyp)
return s["rougeL"].fmeasure
except ImportError:
rouge = None
# BERTScore(语义层回归监控,对同义改写更稳)
def eval_bertscore(cands, refs):
try:
from bert_score import score as bs
P, R, F1 = bs(cands, refs, lang="en", verbose=False)
return float(F1.mean())
except ImportError:
return None
# LLM-as-Judge 三维评分(对齐 MedARC 环境:accuracy/completeness/clarity)
JUDGE_PROMPT = (
"Rate the answer to a consumer medication question on three 1-5 scales: "
"accuracy, completeness, clarity. Reply as JSON "
'{"accuracy": int, "completeness": int, "clarity": int}.\n'
"Question: {q}\nAnswer: {a}"
)
def judge_parse(text):
import json, re
m = re.search(r"\{.*\}", text, re.S)
return json.loads(m.group(0)) if m else None
# 高危子集拆分(坑点 6):Interaction / Dose 单独报告
def high_risk_breakdown(df, pred_col):
for t in ["Interaction", "Dose", "Stopping/tapering"]:
sub = df[df["Question Type"].str.contains(t, case=False, na=False)]
print(t, len(sub))
指标选型的三条纪律:第一,分类任务的头部类准确率没有信息量(Information 类占 16.6%,全猜头部类就能拿到两成正确率),必须看 macro-F1 与混淆矩阵;第二,生成任务参考答案唯一而正确答案空间巨大,ROUGE-L 的绝对值(通常 0.2-0.4 区间)不代表质量,只代表版本间相对变化,对外汇报请改用人工或 LLM-as-Judge 分数;第三,任何指标都应随行附上有效样本数(690/674/651 中的哪个),跨口径的指标差异最容易被误读为模型能力差异。
判分协议的复现要点:LLM-as-Judge 的 JSON 输出需要容错解析(如上 judge_parse),并对同一题做 3 次评分取中位数以抑制 judge 的采样噪声;若 judge 模型同时被用于候选答案生成(self-judging),必须声明利益冲突并辅以独立 judge 或人工抽检。
§6.10 MLOps 笔记
- 数据版本化:以官方 XLSX 的哈希为数据版本锚点;任何衍生清洗(去重/过滤 null)另存新版本并记录与 690/674/651 口径的映射。
- 口径声明入 manifest:每次评测运行输出所用口径与样本数,防止跨口径比较(坑点 1)。
- 回归监控:把 690 题作为上线 QA 系统的固定回归集,监控答案一致性漂移与高危子集(Interaction/Dose)准确率。
- 判分可复现:LLM-as-Judge 时冻结 judge 模型与 prompt 版本;人工评测沿用 Med-PaLM 12 轴定义以保证跨研究可比。
- 溯源存档:训练用参考答案保留 URL 与 Section Title,产出物附带引用链,满足药品信息场景的可解释性要求。
- 链接健康巡检:答案 URL 中 38.0% 来自"其他网站",存活率随时间衰减;每次发布评测报告前抽样检查链接存活并在报告中注明检查日期。
- 规模量级意识:690 条意味着任何"训练出 SOTA"的叙述都要谨慎——该集的价值在评测与协议研究,不在大规模训练;把它放进训练集再在原集上测试是无效循环。
- 上游依赖追踪:若 pipeline 依赖 HF 镜像,订阅其变更通知;镜像行数或字段变化时应回到官方 XLSX 重新 diff。
§7 质量评估与局限性
§7.1 已知偏倚
| 偏倚类型 | 描述 | 严重程度 | 缓解措施 |
|---|---|---|---|
| 渠道偏倚 | 问题全部来自 MedlinePlus 提交渠道,不代表全部消费者的提问分布 | 中 | 外部验证时引入 HealthSearchQA/LiveQA 等异源问题 |
| 语言与地域偏倚 | 仅英语,以美国用户为主,药物品牌与用药习惯带美国特征 | 中 | 跨语言/跨地区应用前做本地化适配与抽检 |
| 药物覆盖偏倚 | 覆盖以美国常见药物为主,孤儿药/新药覆盖不足(官方未发布药物词表) | 中 | 用 RxNorm 归一化焦点后评估覆盖缺口 |
| 答案来源异构 | 38.0% 答案来自"其他网站"(含大学网站、PubMed 摘要),质量不均 | 高 | 按来源分层评测;高危类(Interaction)单独报告 |
| 标注规模偏倚 | 单标注轮次、论文未报告标注者间一致性 | 中 | 扩展标注时自行报告 kappa |
| 长尾类别稀疏 | 25 类中 15 类合计仅 121 条 | 中 | 分层评估 + 宏平均,长尾类谨慎下结论 |
| 标签边界模糊 | 相邻类型(如 Information 与 Indication)边界依赖标注者理解 | 低 | 复用论文 14 类聚合口径降低模糊性 |
| 时效偏倚 | 答案反映 2019 年说明书内容,此后获批药物缺席 | 中 | 评测报告标注数据冻结日期,新药场景另行建集 |
§7.2 标注质量
标注协议本身设计严谨:4 名标注者独立标注 + 医学博士与 QA 专家双重仲裁;答案检索遵循 FDA 消费者药品信息的来源优先级,62.0% 的答案锚定在 DailyMed/MedlinePlus。但两层局限需正视:其一,论文未公开标注者间一致性系数与仲裁率;其二,Med-PaLM 论文指出参考答案部分出自自动化工具或非临床人员(图书管理员),用于评测生成质量时不能等同"临床金标准"。使用建议:把 Question/Focus/Question Type 三字段视为高可信,把 Answer 字段视为"可信来源片段的汇编"而非逐字金标准。
从任务维度拆解标注可信度更有操作性:焦点识别的标签天然客观(药名要么出现要么不出现),论文部分匹配 F1 达到 90.37 也佐证了该字段的可复现性;问题类型标注的主观空间更大("Information"与"Indication"的边界依赖标注者理解),论文 5 次分类运行 2.5% 的波动区间部分来自标签本身的模糊地带;答案字段的可信度分层最明显——DailyMed/MedlinePlus 来源的答案接近原文摘录,而"其他网站"来源(38.0%)的答案经过更多人工改写,两部分的风格与可靠性应分开对待。
§7.3 泛化性
| 应用场景 | 失效风险 | 证据 |
|---|---|---|
| 非英语消费者问答 | 高 | 数据集仅英语;口语表达与药名拼写变体难以直接迁移 |
| 新药/罕见药问答 | 高 | 覆盖以常见药物为主,且答案依赖 DailyMed 收录情况 |
| 儿科/孕产妇剂量 | 高 | 原论文记录 valacyclovir 类问题需年龄/适应证才能作答(欠指定) |
| 相互作用类自动回答 | 高 | 论文明确该类无法在线确认、错误敏感度高,需外部专库 |
| 长答案开放式对话 | 中 | 参考答案均值 69 token,超出该分布的对话式回答缺乏对照 |
| 消费者常见药一般信息 | 低 | 头部类型(Information/Dose/Usage)与权威来源覆盖充分,是该集的舒适区 |
| 多轮追问场景 | 高 | 数据集为单轮问答,追问句式与上下文指代完全无监督 |
| 非处方药/保健品咨询 | 中 | UMLS 语义类型含 nsba/vita,但 OTC 保健品主题占比未知,需抽样确认 |
§7.4 伦理
问题在发布前已由 NLM 匿名化,不含患者标识、临床记录或个人属性字段;数据集不涉及人体实验数据,论文由 NIH 院内研究计划资助完成。许可为 CC BY 4.0 International,署名即可商用。伦理使用底线:不得将模型输出直接作为个体用药建议投放给患者而不经专业审核——这既是数据集定位(研究基准)也是其参考答案质量层级(非临床金标准)所共同决定的。
§7.5 公平性
提问者年龄、性别、种族等属性未随数据发布,无法进行分群体性能审计;这同时意味着模型在该数据上训练后无法验证是否存在跨群体差异。对公平性敏感的应用(面向弱势群体的用药助手),应另行构建带人口属性的评测集。
§7.6 数据漂移
数据本体自 2019 年后未更新。三重漂移风险:药物市场漂移(新药上市、旧药退市,如答案中的产品说明书内容可能已被更新);答案链接漂移(38.0% 的"其他网站"链接存活率随时间衰减);语言风格漂移(2020 年后消费者在线提问风格受搜索框自动补全影响,与 2019 年前提交式提问存在差异——HealthSearchQA 正是这一新风格的代表)。建议每次正式评测前对 URL 抽样存活检查并在报告中注明评测日期。
| 漂移类型 | 表现 | 监测方法 | 缓解措施 |
|---|---|---|---|
| 药物市场漂移 | 答案描述的说明书内容与现行版本不一致 | 抽样比对 DailyMed 现行 SPL | 评测报告注明"以 2019 年答案为准";高危类人工复核 |
| 链接漂移 | URL 失效导致溯源断链 | 每次发布前 HEAD 请求抽检 | 归档答案原文与抓取日期,不依赖活链接 |
| 语言风格漂移 | 模型在 HealthSearchQA 式补全问题上表现下降 | 跨数据集对照评测 | 训练/评测分开声明风格域,不做隐式外推 |
| 药物词汇漂移 | 新药名不在 Focus 词表内 | 上线系统引入未知药名兜底通道 | 定期用 RxNorm 增量更新归一化词典 |
§7.7 DAIMS 数据质量 24 项评估
| # | 检查项 | 状态 | 说明 |
|---|---|---|---|
| 1 | 宽格式 | ✅ | 单表 6 列,一行一 QA 对,结构清晰 |
| 2 | 唯一标识 | ⚠️ | 无随数据发布的 id 字段,需自行以行号生成主键 |
| 3 | 特殊字符 | ✅ | 文本字段含空格/标点可正常解析,无控制字符污染 |
| 4 | 重复行 | ❌ | 官方 690 与社区镜像含重复问题(去重后 651 条),官方未清理 |
| 5 | 缺失编码 | ✅ | Answer/Section Title 的缺失以显式 null 表达,无哨兵值伪装 |
| 6 | 标签标识 | ⚠️ | Question Type 有 25 类受控短语但无随附受控词表文件 |
| 7 | 罕见类分组 | ⚠️ | 15 个长尾类合计 121 条,官方未提供聚合建议(论文实验自行聚合为 14 类) |
| 8 | 偏倚评估 | ⚠️ | 论文定性讨论了渠道与答案来源局限,无量化偏倚分析 |
| 9 | 数据字典 | ⚠️ | 官方 README 简要,字段含义主要依赖论文 Methods |
| 10 | 信息性缺失解释 | ⚠️ | Answer/Section Title 的 null 未说明缺失原因 |
| 11 | 设备记录 | ⚠️ | 纯文本数据不适用,无设备元数据(非缺陷但无法验证) |
| 12 | 共线性 | ⚠️ | 纯文本无数值协变量,共线性检查不适用 |
| 13 | 编码映射 | ❌ | Focus 药名未提供 RxNorm/UMLS 编码映射文件 |
| 14 | 时间戳处理 | ❌ | 无任何时间字段(提问时间、采集时间均未发布) |
| 15 | 划分建议 | ❌ | 无官方 train/test 划分,口径混用风险高(坑点 1) |
| 16 | 泄漏讨论 | ✅ | 论文与社区均明确指出重复与同药多问问题,可据此防泄漏 |
| 17 | 标签分布 | ✅ | 论文 Table 1 完整给出 25 类分布与头部计数 |
| 18 | 测量偏倚 | ⚠️ | 答案来源优先级协议明确,但 38% 其他来源的测量质量不均 |
| 19 | 外部验证建议 | ✅ | 有 MultiMedQA 人工评测协议与 MedARC 环境可作外部对照 |
| 20 | 版本记录 | ⚠️ | 单一版本(2019-05),README 更新无版本号与 changelog |
| 21 | 预处理脚本 | ❌ | 官方未提供任何加载/清洗脚本 |
| 22 | 合规要求 | ✅ | CC BY 4.0 清晰,无注册/DUA/培训门槛 |
| 23 | 多模态对齐 | ⚠️ | 纯文本不适用;问题-答案-来源三元组内部对齐完整 |
| 24 | 去标识化 | ✅ | NLM 发布前匿名化,无个人标识信息 |
DAIMS 评分:12.5 / 24(✅×8 计 8 分,⚠️×9 计 4.5 分,❌×7 计 0 分)
评分解读:12.5/24 处于"研究级可用、生产级需补课"区间。数据本体干净(结构、缺失表达、合规三项全绿),失分集中在工程配套:无划分、无脚本、无编码映射、无时间戳——这些都是 NLM 2019 年发布时的时代局限,而非数据质量问题。作为 690 条规模的评测基准,它的质量密度(4 名标注者 + MD 仲裁 + FDA 来源协议)远超同规模众包数据集。
对你意味着什么:
- 直接使用 Question/Focus/Type 做分类与检索研究——这三列可信度高,无需额外验证。
- 任何评测前先自建三件套:行号主键、去重清单、口径 manifest(690/674/651 显式声明),并把它们入库版本控制。
- Focus 字段必须先做 RxNorm/UMLS 归一化才能做药物级分析(DAIMS 第 13 项 ❌ 的直接后果)。
- 不要在论文中把参考答案当作"临床金标准"表述——引用 Med-PaLM 的批评并采用人工/LLM-as-Judge 混合协议。
- 若要投入生产(用药咨询助手),用 §7.3 泛化性表做上线前风险评估,高危场景(Interaction/儿科)另建专库。
§7.8 外部验证矩阵
| 外部数据集/场景 | 来源机构 | 评估任务 | 性能指标 | 相对内部变化 | 关键发现 |
|---|---|---|---|---|---|
| MultiMedQA(MedicationQA 抽样 20 题) | Google Research/DeepMind | 长答案与科学共识对齐(人工 12 轴) | Flan-PaLM 540B 61.9% / Med-PaLM 92.6% / 临床医生 92.9% | — | 提示策略改进带来 30.7 个百分点跃升;模型与临床医生差距缩至 0.3 个百分点 |
| MultiMedQA(同上抽样) | Google Research/DeepMind | 潜在有害回答比例 | Flan-PaLM 29.7% / Med-PaLM 5.9% / 临床医生 5.7% | — | 未适配时约三成回答潜在有害,凸显评测必要性 |
| CHiQA 定性评测(20 随机问题) | NLM Lister Hill | 系统前 4 结果人工判定 | 含正确答案 35% / 仅相关 35% / 不相关 30% | — | 原论文同期系统的真实水平,可作工程基线 |
| MedARC RL 环境(全量 690) | MedARC/Prime Intellect | LLM-as-Judge 三维评分(1-5) | 未公开 leaderboard 分数 | — | 2026-02 发布,标志着该集进入 RL 训练生态 |
注:Med-PaLM 的百分比为人工盲评维度得分,与自动指标(ROUGE/BLEU)不可直接比较(见坑点 8)。
§8 基准性能与生态
§8.1 排行榜
| 排名 | 模型/系统 | 性能 | 年份 | 关键技术 | 完整引用 | 代码 |
|---|---|---|---|---|---|---|
| 1 | Med-PaLM(人工评测) | 长答案与科学共识对齐 92.6%;潜在有害 5.9% | 2023 | instruction prompt tuning + 评测集微调 | Singhal et al., 2023, Nature. doi:10.1038/s41586-023-06291-2 | 未开源 |
| 2 | 临床医生参照组 | 对齐 92.9%;潜在有害 5.7% | 2023 | 9 名临床医生 12 轴盲评 | Singhal et al., 2023, Nature. doi:10.1038/s41586-023-06291-2 | 不适用 |
| 3 | Flan-PaLM 540B | 对齐 61.9%;潜在有害 29.7% | 2023 | 少样本 instruction prompting | Singhal et al., 2023, Nature. doi:10.1038/s41586-023-06291-2 | 未开源 |
| 4 | CNN 问题类型分类器(14 类聚合) | 准确率 75.7%(5 次运行波动 [0, 2.5%]) | 2019 | TF 1.4 词级 CNN | Ben Abacha et al., 2019, MEDINFO (Stud Health Technol Inform). doi:10.3233/SHTI190176 | 未开源 |
| 5 | Bi-LSTM-CRF 焦点识别 | 精确匹配 F1 74.07±2.1;部分匹配 F1 90.37±3.4 | 2019 | Bi-LSTM-CRF,TF 1.4 | Ben Abacha et al., 2019, MEDINFO (Stud Health Technol Inform). doi:10.3233/SHTI190176 | 未开源 |
⚠️ 数值不可直接比较的原因:前三位是人工盲评维度得分(20 题抽样、12 轴协议),后两位是自动指标(全量划分、不同任务);MedARC 环境(2026-02)尚未公开 leaderboard 分数。跨行比较无意义,仅作生态坐标。
§8.2 SOTA 总结与选型建议
MedicationQA 上不存在自动指标的活跃 SOTA 排行——其权威评测形态是 Med-PaLM 式人工盲评。选型建议:
- 做 LLM 能力验证:沿用 12 轴人工协议抽样 20 题(成本低、可发表),重点报告"与科学共识一致"与"潜在有害"两个安全相关维度。
- 做系统迭代:用 ROUGE/BERTScore + LLM-as-Judge 三维评分做高频回归,人工抽检高危子集(Interaction/Dose)兜底;自动指标只回答"这版比上版好吗",不回答"这版够好吗"。
- 做学术对比:与论文基线(CNN 75.7% / Bi-LSTM-CRF F1 74.07)比较时保持 14 类聚合与 80/10/10 口径,并按论文惯例报告多次运行均值 ± 标准差(坑点 7)。
- 做安全论证:把"潜在有害回答比例"作为独立指标报告——Med-PaLM 论文证明该维度与"共识一致"维度的改进不同步(29.7%→5.9% vs 61.9%→92.6%),单报准确率会掩盖安全回归。
§8.3 评测协议
- 人工盲评协议(权威):抽样 20 题(Med-PaLM 消费者 QA 轴 140 题之一部分),9 名临床医生按 12 轴(含事实一致性、完整性、潜在有害等)盲评模型长答案,不展示模型身份。Med-PaLM 论文的报告显示,该协议下"与科学共识一致"维度上 Flan-PaLM 540B 仅 61.9%,经 instruction prompt tuning 的 Med-PaLM 达到 92.6%——提示词适配对消费者问题的增益远大于对考试题的增益,这是该数据集最有信息量的方法学发现。
- 自动回归协议(工程):全量 674/690 上计算 ROUGE-L/BERTScore 相对参考答案,仅用于版本间比较。因参考答案唯一且来源异构,绝对分数不具备跨系统可比性。
- LLM-as-Judge 协议(新兴):MedARC 环境按 accuracy/completeness/clarity 三维 1-5 分,judge 模型与 prompt 需冻结版本。该协议把 690 题全量作为 test,避免了抽样盲评的方差,但 judge 偏置仍需人工抽查校准。
- 子集拆分报告:Interaction/Dose/Stopping 类单独报告(坑点 6),任何只报全局均值的结论对用药安全场景都是误导。
- 抽样对齐:若希望与 Med-PaLM 数字对照,抽样方式应与其 20 题消费者轴(HealthSearchQA 100 + LiveQA 20 + MedicationQA 20,合计 140 题)保持结构一致,并声明抽样随机种子不可复现所带来的方差上限。
§8.4 相关数据集
| 数据集 | 机构 | 任务 | 与 MedicationQA 的关系 |
|---|---|---|---|
| HealthSearchQA | Google(Med-PaLM 论文) | 消费者健康问答 | 同属 MultiMedQA 消费者轴,问题来自搜索自动补全,无参考答案 |
| TREC LiveQA | NLM | 消费者健康问答 | 同源生态(NLM 答题系统),Med-PaLM 评测轴组成部分 |
| MedQA | AI2/WCREE 等 | USMLE 多选题 | 专业能力评测,与消费者口语提问互补 |
| PubMedQA | 清华等 | 文献是/否/也许问答 | 学术问答,补充专业文献维度 |
| MedMCQA | AIIMS 等 | 印度医考多选题 | 大规模选择题维度 |
| MedInfo2019 同源任务集 | NLM | 消费者健康问答 | 原论文团队同期构建的 LiveQA 答案集,共享答案协议 |
| TREC CDS / BioASQ | TREC/BioASQ 组委会 | 专业文献问答 | 面向专业人员,与消费者问答形成光谱两端 |
| CHiQA | NLM Lister Hill | 在线消费者 QA 系统 | MedicationQA 原论文的工程化出口,可作对照系统 |
§8.5 关键论文 Top 6
- Ben Abacha A, Mrabet Y, Sharp M, Goodwin TR, Shooshan SE, Demner-Fushman D. Bridging the Gap Between Consumers’ Medication Questions and Trusted Answers. Stud Health Technol Inform. 2019;264:25-29. doi:10.3233/SHTI190176 — 数据集原论文:构建协议、25 类标注、焦点识别与类型分类基线、CHiQA 定性评测。
- Singhal K, et al. Large language models encode clinical knowledge. Nature. 2023;620:172-180. doi:10.1038/s41586-023-06291-2 — 将 MedicationQA 纳入 MultiMedQA 并建立 LLM 消费者健康问答人工评测协议(Med-PaLM)。
- Ben Abacha A, Demner-Fushman D. A Question-Entailment Approach to Question Answering. BMC Bioinformatics. 2019 — 同团队的消费者健康问答方法学工作,LiveQA 生态的方法论文(与 MedicationQA 共享"消费者问题 → 可信答案"思路)。
- NLM Lister Hill National Center for Biomedical Communications. MedicationQA 数据集官方仓库与 README(2019-2025). https://github.com/abachaa/Medication_QA_MedInfo2019 — 官方许可、联系人与文件发布记录。
- MedARC / Prime Intellect. MedicationQA RL 环境(2026-02). https://sophon.at/tools/prime-medarc-medicationqa — 全量 690 题 LLM-as-Judge 三维评分的强化学习环境,代表该数据集在 RL 生态的最新用法。
- medplexity. MedicationQA benchmark documentation. https://medplexity.readthedocs.io/en/latest/benchmarks/medicationqa/ — 第三方评测库对无官方划分事实的确认与加载接口。
§8.6 社区活跃度
官方 GitHub 仓库 21 stars / 3 forks(截至 2026-09 检索),论文 Google Scholar 引用 134+(截至 2026-09)。社区活跃度呈"低热度、高杠杆"特征:直接 star 数不高,但经由 MultiMedQA/Med-PaLM 的间接影响力远超仓库数据;HuggingFace 存在 truehealth/medicationqa 镜像与社区去重衍生集,medplexity 提供标准接口;2026 年仍有新的 RL 环境发布,说明其在 LLM 评测生态中保持活跃。
引用增长曲线可以佐证这一杠杆效应:数据集 2019 年发布后引用主要来自生物医学信息学界(NLM 同源生态);2023 年 Med-PaLM 论文将其带入通用 NLP/LLM 社区后,引用场景从"消费者问答系统构建"扩展为"大模型医疗能力评测"。使用者在引用时应意识到这两个社区对"性能好"的定义并不相同——前者关心答案正确率与溯源,后者关心与临床医生判断的对齐度。
§8.7 生态快照
| 资源 | 类型 | 链接 | Star/状态(截至 2026-09) | 推荐理由 |
|---|---|---|---|---|
| 官方仓库 | 数据 | https://github.com/abachaa/Medication_QA_MedInfo2019 | 21 stars | 唯一官方事实源,CC BY 4.0 |
| HF 镜像 | 数据镜像 | https://huggingface.co/datasets/truehealth/medicationqa | 690 行可用 | load_dataset 即用 |
| 去重衍生集 | 衍生数据 | https://huggingface.co/datasets/ChuGyouk/MedicationQA_answerfeedback_gemini2p0flashexp | 651 条 | 去重口径参照(非官方) |
| medplexity | 评测库 | https://medplexity.readthedocs.io/en/latest/benchmarks/medicationqa/ | 文档活跃 | 标准 Python 接口 |
| MedARC 环境 | RL/评测 | https://sophon.at/tools/prime-medarc-medicationqa | 2026-02 上线 | LLM-as-Judge 三维评分 |
| CHiQA | 在线系统 | https://chiqa.nlm.nih.gov | NLM 运行 | 原论文系统的公开出口 |
| 原论文 PDF | 文献 | https://www.lhncbc.nlm.nih.gov/LHC-publications/PDF/pub9965.pdf | Open Access(CC BY-NC 4.0) | 全部协议细节 |
§9 相关资源与引用
§9.1 官方资源
- 官方数据仓库:abachaa/Medication_QA_MedInfo2019 — 唯一官方发布渠道(MedInfo2019-QA-Medications.xlsx,690 条)。
- 原论文(PubMed):PMID 31437878 — Bridging the Gap Between Consumers’ Medication Questions and Trusted Answers。
- 原论文(NLM 出版页):LHC Publications;PDF 全文。
- DOI:10.3233/SHTI190176。
- HuggingFace 镜像:truehealth/medicationqa。
- 官方联系:Asma Ben Abacha(asma.benabacha@nih.gov)。
- 关联系统与来源:CHiQA、DailyMed、MedlinePlus。
§9.2 教程与社区资源
- medplexity 评测库 MedicationQA 文档 — Python 加载与评测接口,确认"无官方划分"事实。
- MedARC/Prime Intellect MedicationQA RL 环境 — LLM-as-Judge 三维评分(accuracy/completeness/clarity,1-5 分)。
- HF 去重衍生集 — 社区 651 条去重口径参照。
- Med-PaLM 论文(Open Access,CC BY 4.0) — MultiMedQA 人工评测协议的第一手资料。
§9.3 BibTeX 完整引用
@article{benabacha2019medicationqa,
title = {Bridging the Gap Between Consumers' Medication Questions and Trusted Answers},
author = {Ben Abacha, Asma and Mrabet, Yuhang and Sharp, Mark and Goodwin, Travis R and Shooshan, Sonya E and Demner-Fushman, Dina},
journal = {Studies in Health Technology and Informatics},
volume = {264},
pages = {25--29},
year = {2019},
publisher = {IOS Press},
doi = {10.3233/SHTI190176},
pmid = {31437878}
}
@article{singhal2023large,
title = {Large language models encode clinical knowledge},
author = {Singhal, Karan and Azizi, Shekoofeh and Tu, Tao and Mahdavi, S Sara and Wei, Jason and Chung, Hyung Won and Scales, Nathan and Tanwani, Anurag and Cole-Lewis, Heather and Pfohl, Stephen and others},
journal = {Nature},
volume = {620},
number = {7972},
pages = {172--180},
year = {2023},
publisher = {Nature Publishing Group},
doi = {10.1038/s41586-023-06291-2}
}
§9.4 引用指南
使用数据集本身时引用 benabacha2019medicationqa 并注明数据获取渠道(官方 GitHub,CC BY 4.0);讨论大模型评测结论时同时引用 singhal2023large;使用社区镜像或去重口径时额外注明衍生集来源与条数(651 条),并在实验部分显式声明 690/674/651 口径(见坑点 1)。
三条补充惯例:
- 引用论文时建议同时给出 PubMed ID(31437878)与 DOI,便于同行定位 Open Access 全文;
- 若使用了本页面的 DAIMS 评估或坑点框架,按站点惯例引用千方病案医数集页面;
- 再分发转换格式(CSV/JSONL)时,附上原始 XLSX 哈希与转换脚本,保证数据链可回溯。
§10 AI 使用声明卡
§10.1 AI 模型列表
本页面撰写与资料整理过程使用了大语言模型(CodeBuddy,fast-model)辅助完成草稿生成、结构组织与代码示例编写。
§10.2 AI 参与范围
AI 参与:FACTS 事实检索整理、正文各章节初稿、代码示例生成、表格组织。
人工参与(全部为必要关卡):
- 全部硬数字逐条对照来源核验(FACTS.md 47 条带 URL 事实);
- 医学与药学表述审核(§2 全部章节、§7 偏倚分析);
- ICD-11/SNOMED CT 映射的编码复核;
- 许可与合规表述确认(CC BY 4.0、DUO 标签);
- 代码示例逻辑走查与运行边界确认;
- 坑点条目与论文原始表述的一致性核对。
页面上所有基准数字、协议描述与坑点均锚定到公开来源,未采信任何无来源的 AI 生成数字;查证不到的字段一律省略而非估算。
§10.3 输入来源列表
- Ben Abacha A, et al. Bridging the Gap Between Consumers’ Medication Questions and Trusted Answers. Stud Health Technol Inform. 2019;264:25-29. doi:10.3233/SHTI190176(PubMed)
- 同上论文 PDF 全文(NLM LHC pub9965)
- 同上论文 NLM 出版页(LHC Publications)
- 论文 DOI 页(10.3233/SHTI190176)
- 官方数据仓库(abachaa/Medication_QA_MedInfo2019,README 2025-12-05 更新)
- HuggingFace 镜像(truehealth/medicationqa)
- HF 镜像字段统计页(aifasthub)
- Singhal K, et al. Large language models encode clinical knowledge. Nature. 2023;620:172-180. doi:10.1038/s41586-023-06291-2(Nature)
- medplexity 评测库文档(MedicationQA)
- HF 社区去重衍生集(ChuGyouk)
- MedARC/Prime Intellect RL 环境(sophon.at,2026-02)
- Google Scholar 引用计数页(截至 2026-09 显示 cited by 134)
- CHiQA 在线系统(chiqa.nlm.nih.gov)
- DailyMed(dailymed.nlm.nih.gov)
- MedlinePlus(medlineplus.gov)
§10.4 人工校验记录
| 内容模块 | 审核者 | 审核方式 | 审核状态 |
|---|---|---|---|
| 规模数字(690/674/651/134 引用) | 千方病案医学编辑部 | 逐条对照 FACTS.md 来源 URL | ✅ 已验证 |
| 标注协议与答案来源分布 | 千方病案医学编辑部 | 对照论文 Methods/Figure 4(pub9965 PDF) | ✅ 已验证 |
| 基准数字(F1/准确率/Med-PaLM 百分比) | 千方病案医学编辑部 | 对照论文 Table 2/3 与 Nature 论文 | ✅ 已验证 |
| ICD-11 章节映射与 SNOMED CT 概念 | 千方病案医学编辑部 | 医学编辑复核编码与术语名称 | ✅ 已验证 |
| 代码示例可运行性 | 千方病案医学编辑部 | 数据工程师逐段走查(路径/依赖/逻辑) | ✅ 已验证 |
| 许可与合规表述 | 千方病案医学编辑部 | 对照官方 README 与 CC BY 4.0 条款 | ✅ 已验证 |
§10.5 AI 生成章节标注
本页面各章节均由 AI 辅助生成初稿,经 §10.4 所列人工校验流程后发布;无"纯 AI 未经人工审核"的章节。
§10.6 最后人工审核日期
2026-09-05(与 §0 审核日期一致)。
页面状态:published(全部内容已完成审核并发布)
