信息速览

emrQA — 电子病历抽取式问答数据集 AI-Ready Wikipedia
INFOBOX
| 数据集名称 | emrQA |
| 英文全称 | emrQA: A Large Corpus for Question Answering on Electronic Medical Records |
| 别名/简称 | emrQA、EMR-QA、emrQL(问题-逻辑形式子任务社区叫法) |
| 疾病分类 | 非单病种数据集,覆盖临床文书全疾病谱;专项子集锚定:5B81 肥胖症 / 6C4A 烟草使用障碍 / BA52 冠状动脉粥样硬化性心脏病(风险因素)(详见 §2.1) |
| SNOMED CT | 414916001 Obesity / 77176002 Smoker / 53741008 Coronary arteriosclerosis / 763158003 Medicinal product / 15220000 Laboratory test(详见 §2.2) |
| 数据模态 | 文本(脱敏临床病历 + 医师风格问题 + 逻辑形式标注) |
| AI 任务类型 | 抽取式问答(span extraction)、机器阅读理解(MRC)、语义解析(问题 → 逻辑形式)、类别预测(肥胖/吸烟子集)、复述鲁棒性评估 |
| 样本总数 | 论文版:100 万+ 问题-逻辑形式对、40 万+ 问答-证据对;GitHub 终版:1,957,835 QA 对 / 1,225,369 QL 对 / 2,425 份病历 / 680 问题模板 / 94 逻辑形式模板 |
| 数据格式 | JSON(SQuAD 风格 data.json)/ CSV(data-ql.csv)/ XML(底层 i2b2 标注) |
| 许可证 | i2b2/n2c2 Data Use and Confidentiality Agreement(Partners HealthCare 专有数据,仅限研究用途,禁止再分发与重识别) |
| 访问级别 | 申请审核(n2c2 门户注册 + 在线签署 DUA,通常当天获批) |
| DUO 标签 | HMB, NPUNCU |
| 语言 | 英文 |
| 首发日期 | 2018-09-03(arXiv)/ 2018-10(EMNLP 2018 会议,布鲁塞尔) |
| 最后更新 | 2018-11-29(数据移交 n2c2 门户托管,此后无版本更新) |
| 发布机构 | UIUC + IBM Research + MIT-IBM Watson AI Lab(底层语料来自 i2b2 挑战赛,源自 BIDMC 与 Partners HealthCare) |
| 官方主页 | http://emrqa.github.io/ |
| 下载地址 | https://portal.dbmi.hms.harvard.edu/projects/n2c2-nlp/(Community Annotations Downloads) |
| DOI | 10.18653/v1/D18-1258(论文)/ arXiv:1809.00732 |
| 引用次数 | 287+(Google Scholar,截至 2026-09) |
| AI 就绪度评分 | ⭐⭐⭐(3/5)— 规模空前、双任务设计(QA + 语义解析)、DUA 当天可下;扣分项:无官方划分、答案为证据行而非精确 span、模板冗余度高、工具链停留在 Python 2.7 且 2018 年后停更 |
| 页面状态 | published |
§0 E-E-A-T 信任声明与免责声明
医学审核者:千方病案医学编辑部交叉审核:§2 医学背景(五子集临床主题锚定、ICD-11/SNOMED CT 映射、医师信息需求的临床意义)、§7 偏倚分析。
数据工程审核者:千方病案医学编辑部交叉审核:§4 DAIMS 数据字典(SQuAD 风格 JSON 结构、answer_start 行号 + token 位编码)、§5 数据划分策略、§6 预处理 Pipeline 和坑点。
审核日期:2026-09-05
审核方式:交叉审核
利益冲突声明:千方病案医数集与 UIUC、IBM Research、MIT-IBM Watson AI Lab、i2b2/n2c2 及哈佛 DBMI 无任何商业利益关联。本页面不分发 emrQA 数据本身,仅提供 AI 就绪指南与学术信息服务。编辑者未接受上述机构的任何形式资助。
医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。
技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。
数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守 i2b2/n2c2 Data Use and Confidentiality Agreement:仅限研究用途、禁止重识别患者、禁止向未签署 DUA 者再分发、研究结束后按协议要求销毁数据副本。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。
§1 数据集概览
§1.0 30 秒速览
emrQA 是 UIUC、IBM Research 与 MIT-IBM Watson AI Lab 于 2018 年联合发布的首个大规模电子病历问答语料(EMNLP 2018)。它把医师真实提问提炼成 680 个问题模板,再用 i2b2 挑战赛沉淀多年的专家标注"反向填空",半自动地生成出 40 万+ 问答-证据对与 100 万+ 问题-逻辑形式对(终版达 196 万 QA 对),覆盖 2,425 份脱敏出院病历的用药、检验、疾病、肥胖与吸烟五大主题。
它的历史地位在于开创了"复用既有 NLP 标注构建 QA 数据集"的范式:在 emrQA 之前,临床 QA 没有任何公开的大规模训练语料——隐私与标注成本是两座大山。emrQA 用极低的专家成本证明了这条路可行,直接催生了 emrKBQA、MADE QA、DrugEHRQA 等一批后继数据集,并成为 BioBERT、ClinicalBERT、GatorTron 等几乎所有临床预训练模型的标准评测战场。
你可以用它来:训练/评测临床抽取式问答与机器阅读理解模型、做"问题 → 逻辑形式"的语义解析研究、或者作为临床预训练模型的下游基准。若你需要真实医师提问(非模板生成)的评测集,请搭配 DiSCQ 或 EHRNoteQA 使用。
§1.1 摘要
emrQA 的核心创新是一套四步"反向工程"生成框架:(1) 从三个真实来源收集医师问题——退伍军人事务部(VA)医师信息需求调查 976 问、医学专家团队基于 71 份病历撰写的 5,696 问、观察性研究的 15 个原型问题;(2) 用 MetaMap 自动识别问题中的医学实体并替换为占位符,得到约 2,000 个噪声模板,经专家审校后保留 680 个问题模板;(3) 由一名医师为每个模板手工标注逻辑形式(LF)模板,归并后得到 94 个唯一 LF 模板——映射到同一 LF 的问题模板互为复述(paraphrase);(4) 将 i2b2 五个挑战赛(2006 吸烟、2008 肥胖、2009 用药、2010 关系、2011 共指、2014 心脏病风险)的既有专家标注作为槽位填充语料,自动实例化问题并从病历中抽取答案实体与证据行。这一设计使每个 QA 对同时携带"问题、逻辑形式、答案、证据"四元信息,数据集因此天然支持两个任务:抽取式问答(QA)与问题到逻辑形式的语义解析(QL)。数据自 2018-11-29 起以 i2b2 license 托管于哈佛 DBMI 的 n2c2 门户,签署 DUA 后通常当天可下载。
§1.2 战略价值分析
范式开创维度:emrQA 解决的是临床 NLP 的"冷启动"死结——医师问答数据极有价值,但隐私法规(HIPAA)与医学专家标注成本让传统人工标注路线几乎不可行。Pampari 等人把问题反转过来:不标注 QA,而是把 i2b2 社区十余年积累的实体、关系、共指标注当作"答案库",用医师设计的模板去"套"出 QA 对。这套"annotation re-purposing"方法论后来被 MADE QA、DrugEHRQA 乃至通用领域的合成 QA 生成工作广泛引用,原论文在 Google Scholar 被引 287+ 次(截至 2026-09),是临床 QA 方向被引最多的数据集论文之一。
生态推动维度:emrQA 诞生时点(2018 年末)恰逢 BERT 革命前夜,它随后成为衡量每一个临床预训练模型的"必考科目"——BioBERT、ClinicalBERT、BioMegatron、Clinical-Longformer、GatorTron 的论文中全部报告了 emrQA-Medication 与 emrQA-Relation 两个子集上的 EM/F1。Yue et al.(ACL 2020)对其做的系统性"体检"(CliniRC)又反过来成为数据集审计(dataset auditing)研究的范本:首次量化了模板生成数据的冗余度(5-20% 即饱和)、词汇重叠捷径(>96%)与泛化悬崖(新问题 F1 掉 40%)三大问题。
临床意义维度:emrQA 捕捉的是真实临床工作流中的信息需求——“这个患者的胰岛素剂量是多少”“他做过哪些与糖尿病相关的检查”“患者目前是肥胖吗”。VA 医师调查中最高频的问型是检验结果(11%)、某病用药(9%)与疾病存在性确认(8%),这与后来 DiSCQ 研究中真实医师提问的分布高度吻合。尽管模板化生成带来语言多样性折扣,emrQA 仍是迄今唯一同时提供"问题 + 逻辑形式 + 答案 + 证据"四元标注的大规模临床 QA 资源——逻辑形式这一层在 LLM 时代的 Text-to-SQL/工具调用研究中正被重新发现价值。
§1.3 横向对比
| 数据集 | 问答对规模 | 病历来源 | 构建方式 | 核心差异化 |
|---|---|---|---|---|
| emrQA | 40 万+(终版 196 万) | i2b2 五挑战赛,2,425 份 | 模板 + 专家 LF 标注半自动生成 | 首个大规模临床 QA;唯一带逻辑形式标注;五子集五挑战赛 |
| emrKBQA | 94 万 | MIMIC-III KB(100 名患者) | 同框架,面向结构化病历 | 答案是结构化表记录(非文本 span),主打语义解析 |
| DiSCQ | 2,000+ 问题 | MIMIC-III 出院小结(100+ 份) | 医学专家真实提问 + 触发片段 | 真实医师信息需求;规模小,定位是评测集 |
| MADE QA | 数万 | MADE 1.0(ADR 语料) | emrQA 同框架 | 专注药物不良事件(ADR),仅 8 个 LF |
| DrugEHRQA | 数千 | MIMIC-III(结构化 + 文本) | 人工 + 模板 | 药物相关多模态 QA,含表格查询 |
| EHRNoteQA | 962 问 | MIMIC-IV 出院小结 | LLM 生成 + 医师双审 | LLM 时代评测基准,开放式长答案 |
emrQA 的不可替代性在于三点:规模最大(唯一百万级)、双任务设计(QA + 语义解析并行)、以及最深厚的基准积累——2019-2023 年间几乎所有临床 BERT 系模型的对比数字都建立在它的 Medication/Relation 子集上。
§1.4 版本演进时间轴
| 时间 | 事件 |
|---|---|
| 2006-2014 | i2b2 陆续举办吸烟(2006)、肥胖(2008)、用药(2009)、关系/共指(2010-2011)、心脏病风险(2014)NLP 挑战赛,沉淀专家标注语料 |
| 2017-08 | emrQA 团队下载 i2b2 挑战赛数据快照(此后以该快照为生成基础) |
| 2018-05 | 前置标注工作发表(Raghavan et al.,“Annotating Electronic Medical Records for Question Answering”,arXiv:1805.06816,Cohen’s kappa 0.71) |
| 2018-06-27 | GitHub 仓库公开首个版本(与论文一致的数据集口径) |
| 2018-08-20 | 扩展:新增 relations(assertions)来源的 QA 对 |
| 2018-08-27 | 扩展:肥胖子集 QA 对延伸至肥胖共病 |
| 2018-09-03 | arXiv 预印本发布(arXiv:1809.00732) |
| 2018-10/11 | EMNLP 2018 正式发表(布鲁塞尔,pp. 2357-2368) |
| 2018-11-29 | 数据移交 n2c2 门户托管(i2b2 license 下直接下载,无需再跑生成脚本),此后无版本更新 |
| 2020-07 | Yue et al.(ACL 2020)发布 CliniRC 深度分析,确立 note-level 标准划分 |
| 2020-05 | Raghavan et al. 提出 paraphrase-level 划分与 MADE QA(arXiv:2005.06587) |
| 2021-06 | 衍生数据集 emrKBQA 发布(BioNLP 2021,MIMIC-III KB 结构化问答) |
| 2022 | Clinical-Longformer(COLING)与 GatorTron(npj Digital Medicine)先后刷新子集 SOTA |
§1.5 典型 AI 应用场景
- 临床抽取式问答/MRC 训练与评测:在 Medication/Relation 子集上微调 BERT 系模型,报告 EM/F1——这是 2019-2023 年临床语言模型论文的标准动作。
- 临床预训练模型横向基准:BioBERT vs ClinicalBERT vs GatorTron vs Clinical-Longformer 的官方对比均在 emrQA 两子集上进行,是评估新预训练模型的低成本试金石。
- 问题 → 逻辑形式语义解析:利用 122 万 QL 对训练 seq2seq 语义解析器,或作为 Text-to-SQL/工具调用研究的前身任务复现(emrKBQA 直接延续了这一路线)。
- 复述鲁棒性与模板过拟合研究:paraphrase-level 划分天然支持"见过的问题 vs 未见过的复述"泛化实验,是研究模型捷径学习(shortcut learning)的经典台架。
- 合成 QA 生成方法学研究:emrQA 的"模板 + 槽位填充"框架本身即是研究对象——DiSCQ、CliniQG4QA 等后续工作均以它为对照组,论证真实医师提问与模板生成提问的差距。
§2 医学背景
§2.1 ICD-11 疾病分类锚定
emrQA 不是单病种数据集——它面向电子病历文书中的全部临床主题。但其五大子集分别锚定在五个有明确临床编码的主题域,可作为检索锚点:
| emrQA 子集(来源挑战赛) | 临床主题 | ICD-11 对应 | 说明 |
|---|---|---|---|
| relations(i2b2 2010) | 疾病-检验-治疗全谱关系 | 全疾病谱(problem/test/treatment 三类概念) | 最大子集,覆盖病历中全部医学概念及其关系 |
| medications(i2b2 2009) | 用药信息 | —(药物本身不在 ICD-11 疾病分类;对应 ATC/WHO 药物编码体系) | 药名、剂量、频次、途径、疗程、原因 |
| heart disease risk(i2b2 2014) | 冠心病风险因素 | BA52 冠状动脉粥样硬化性心脏病(风险因素域) | 糖尿病、高血压、高血脂、吸烟、家族史、肥胖、用药等 CAD 风险因素 |
| obesity(i2b2 2008) | 肥胖及其共病 | 5B81 肥胖症 | 肥胖 15 种共病(哮喘、糖尿病、心衰等)的存在性判定 |
| smoking(i2b2 2006) | 吸烟史 | 6C4A 烟草使用障碍 | 五档吸烟状态分类(当前/既往/从不/未知等) |
§2.2 SNOMED CT 映射
| 临床主题 | ICD-11 | SNOMED CT | SNOMED CT 术语 |
|---|---|---|---|
| 肥胖 | 5B81 | 414916001 | Obesity (disorder) |
| 吸烟(当前吸烟者) | 6C4A.Z | 77176002 | Smoker (finding) |
| 冠状动脉粥样硬化 | BA52 | 53741008 | Coronary arteriosclerosis (disorder) |
| 药物治疗(用药事件) | — | 763158003 | Medicinal product (product) |
| 实验室检验 | — | 15220000 | Laboratory test (procedure) |
| 临床问题/诊断(problem 实体) | — | 55607006 | Problem (finding) |
| 治疗/操作(treatment 实体) | — | 71388002 | Procedure (procedure) |
emrQA 逻辑形式本体中的五大医学事件——ConditionEvent、SymptomEvent、LabEvent、ProcedureEvent、VitalEvent、MedicationEvent——均可按上表思路映射到 SNOMED CT 顶层语义组,便于与 UMLS/OMOP 生态对接。
§2.3 临床场景简介
emrQA 面向的是住院病历阅读这一临床高频场景。医师在查房、会诊与病案回顾中需要快速回答"患者用过什么药、剂量多少、为什么用"“某项检验结果如何、趋势怎样”"患者是否肥胖/吸烟"等事实型问题。研究显示,医师在电子病历中查找单条事实信息平均需要翻阅数十屏文书;出院小结动辄上千 token(emrQA 上下文平均约 900-1,060 token)。自动化的事实抽取问答系统因此被视为 EHR 减负的关键工具——这正是 2018 年前后 VA 医师信息需求调查所揭示、并由 emrQA 首次规模化的核心动因。
§2.4 临床任务定义
| AI 任务 | 临床对应 | emrQA 中的操作化 | 典型问题 |
|---|---|---|---|
| 事实型抽取问答 | 病历事实检索(剂量、检验值、日期) | Medication / Relation / Heart Disease 子集:从上下文抽取答案实体或证据行 | "What is the dosage of \ |
| 存在性确认问答 | 病史核查(疾病/用药/操作的存在性) | 逻辑形式中带 check null 运算符的问题 | "Has the patient ever been on \ |
| 时序/算术推理问答 | 病程纵向回顾(最近一次检验、疗程计算) | LF 带 sortBy/range 运算符(心脏病风险子集为主) | “What are the last set of labs with elevated numbers?” |
| 类别预测问答 | 病历级表型判定(肥胖共病、吸烟状态) | Obesity(7 类共病标签)/ Smoking(5 档状态)子集 | “Is the patient currently obese?” |
| 语义解析 | 医师提问 → 可执行查询 | QL 任务:问题映射到 94 类逻辑形式 | 问题 → "MedicationEvent(\ |
§2.5 患者与语料人群特征
| 维度 | 特征 |
|---|---|
| 语料来源 | i2b2 五个 NLP 挑战赛语料(2006/2008/2009/2010/2011/2014),病历源自波士顿 BIDMC 与 Partners HealthCare 体系医院 |
| 病历类型 | 以出院小结(discharge summary)为主,含部分病程记录;全部按 HIPAA 去标识(日期偏移、人名替换) |
| 病历规模 | 2,425 份(relations 425 / medications 261 / heart disease 119 / smoking 502 / obesity 1,118,按 GitHub 终版口径) |
| 上下文长度 | 平均约 889 token(Relation)至 1,063 token(Medication)(Yue et al. 2020 统计) |
| 问题来源人群 | VA(退伍军人事务部)医师 976 问 + 医学专家团队 5,696 问(基于 71 份病历)+ 观察性研究 15 原型问 |
| 患者人口学 | 原始 i2b2 语料未随 emrQA 释放患者级人口学统计;已知为美国波士顿地区住院成人患者为主 |
| 语言风格 | 临床文书体:缩写密集(“pt”=patient)、不合语法长句、换行符结构化排版;模板刻意保留医师原始拼写 |
§2.6 金标准/参考标准
| 标注层 | 产生方式 | 标注者 | 金标准性质 |
|---|---|---|---|
| 底层实体/关系标注 | i2b2 挑战赛官方标注(双人标注 + 仲裁,历年挑战赛报告高 IAA) | i2b2 组织的医学背景标注员 | 社区公认临床 NLP 金标准(emrQA 答案的直接来源) |
| 问题模板 | 真实医师问题经 MetaMap 归一化 + 专家审校(~2K → 680) | VA 医师 + 医学专家团队 | 真实信息需求的模板化抽象,保留医师原始措辞 |
| 逻辑形式模板 | 一名医师为 680 个模板逐一标注,归并为 94 个 LF 模板 | 项目团队医师(单人标注) | 专家设计本体;单标注者,无 IAA 报告 |
| 答案与证据行 | 程序自动从 i2b2 标注推导(非人工逐条标注) | 无(自动生成) | 银标准——Yue et al. 2020 人工质检:Relation 质量 4.75/5、Medication 仅 3.92/5 |
| 人工答案对照 | Yue et al. 2020 抽样人工标注(每子集 50 问) | 两名人工标注员 | 人标 vs emrQA 答案:Medication EM 26.0 / F1 74.7;Relation EM 92.0 / F1 95.4 |
关键认知:emrQA 的"标注质量"必须分层理解——底层 i2b2 标注是金标准,但自动推导出的答案 span 是银标准。Medication 子集的人机答案 EM 仅 26.0,意味着把 emrQA 答案当作精确 span 监督信号会引入系统性噪声(详见 §6.5 坑点 1、§7.2)。
§3 数据集规格
§3.0 版本抉择矩阵
emrQA 存在三个并存口径,选型困惑是社区高频问题。30 秒选型:
| 你的需求 | 推荐版本 | 获取方式 | 理由 |
|---|---|---|---|
| 复现 EMNLP 2018 原论文基线 | 论文版(40 万+ QA / 100 万 QL) | GitHub 生成脚本 + 2017-08 i2b2 快照 | 原论文 Table 3 口径;需注意脚本为 Python 2.7 |
| 训练/评测临床 MRC 模型(主流) | GitHub 终版(196 万 QA / 123 万 QL) | n2c2 门户直接下载(推荐) | 社区事实标准;BioBERT/GatorTron 等全部后续工作均基于此版 |
| 与 CliniRC/BERT 系文献精确比较 | Yue et al. 2020 过滤版(Medication 22.3 万 + Relation 90.5 万问) | 按 ACL 2020 论文口径自行过滤(剔除 >20 token 答案) | 该划分下的 EM/F1 数字才有直接可比性 |
三个口径关键差异速查:
| 维度 | 论文版(2018-06) | GitHub 终版(2018-11) | Yue 2020 过滤版 |
|---|---|---|---|
| QA 对 | 400,000+ | 1,957,835 | 1,127,549(两子集合计) |
| QL 对 | ~1,000,000 | 1,225,369 | 未使用 |
| relations 子集 | 未含 assertions 扩展 | 1,322,789 QA(含 concepts/relations/assertions) | 904,592 问 |
| obesity 子集 | 未含共病扩展 | 354,503 QA(含共病) | 未纳入分析 |
| 任务形态 | QA + QL | QA + QL | 仅 span 抽取(Med + Relation) |
| 官方划分 | 无 | 无 | note-level train/dev/test(事实标准) |
一句话结论:做研究直接用 n2c2 门户的终版 + Yue et al. 2020 划分;只有复现 2018 原论文才需要碰生成脚本。
§3.1 模态详细说明
emrQA 是纯文本数据集,每条 QA 样本包含四层信息:
- 上下文(context):一份完整的去标识临床病历(出院小结为主),平均约 900-1,060 token,换行符保留原始排版结构。
- 问题(question):由 680 个医师模板槽位填充生成的事实型问题,平均约 8 token(Yue et al. 2020 统计:Medication 8.00、Relation 7.91)。
- 逻辑形式(logical form):基于专家设计本体的符号表示——医学事件(LabEvent/ConditionEvent/MedicationEvent 等)+ 属性(date/result/dosage 等)+ 关系(reveals/conducted/given 等)+ 运算符(sortBy/range/check null)。
- 答案与证据(answer & evidence):答案为实体文本(single/empty/complex 三型),证据为答案所在的整行病历文本(证据行),答案定位以(行号, 行内 token 位)给出。
§3.2 样本量拆分(GitHub 终版五子集完整口径)
| 子集 | 来源 i2b2 挑战赛 | QA 对 | QL 对 | 病历数 | 答案形态 |
|---|---|---|---|---|---|
| relations(concepts + relations + assertions) | 2010 关系/概念/断言 | 1,322,789 | 1,008,205 | 425 | 实体 span + 证据行 |
| medications | 2009 用药 | 226,128 | 190,169 | 261 | 实体 span + 证据行 |
| heart disease risk | 2014 心脏病风险因素 | 49,897 | 35,777 | 119 | 实体 span + 证据行(含时序/算术 LF) |
| smoking | 2006 吸烟 | 4,518 | 14 | 502 | 5 档类别标签 |
| obesity | 2008 肥胖(含共病扩展) | 354,503 | 336 | 1,118 | 7 类共病类别标签 |
| 合计 | — | 1,957,835 | 1,225,369 | 2,425 | 三类形态混合 |
注意:obesity 与 smoking 子集的问题数远少于病历数(obesity 336 QL 对对应 1,118 份病历),因为这两个子集的模板极少(obesity 仅个位数模板),其 QA 对本质是"病历 × 类别预测问题"的笛卡尔积——这解释了它们 QA 对数与 QL 对数的巨大反差。
§3.3 数据格式详情
| 文件 | 格式 | 内容 | 说明 |
|---|---|---|---|
| data.json | JSON(SQuAD 风格嵌套) | 全部 QA 对 | data → paragraphs → note_id / context / qas → answers(text / evidence / answer_start / evidence_start / answer_entity_type) |
| data-ql.csv | CSV(制表符分隔) | 全部 QL 对 | 四列:question / logical-form / question-template / logical-form-template |
| medications-qa.json 等 | JSON | 各子集单独文件 | 生成脚本的中间产物,终版同样按子集拆分 |
| templates/templates-all.csv | CSV | 680 模板与 LF 对照表 | 生成框架的"源代码",复现与审计必看 |
| 底层 i2b2 标注 | XML / standoff | 实体、关系、共指标注 | 需另行签署对应挑战赛 DUA 才能获取 |
§3.4 存储大小
| 形态 | 规模 | 备注 |
|---|---|---|
| n2c2 门户下载包 | 纯文本 JSON + CSV | 196 万 QA 对 + 2,425 份病历全文,单文件即可加载 |
| 内存占用(pandas 全量读入) | 数 GB 量级 | 建议按子集分文件读取 |
| 重建所需 i2b2 原始数据 | 5 个挑战赛包 | 仅在需要自行重新生成时下载 |
§3.5 标注方式(半自动生成框架)
emrQA 的标注是"专家设计 + 程序实例化"的混合模式,官方称之为 semi-automated generation framework:
医师真实问题(976 VA 调查 + 5,696 专家标注 + 15 原型)
│
▼ MetaMap 实体识别 + 占位符替换(自动)
约 2,000 个噪声模板
│
▼ 专家审校纠错(人工,对齐 i2b2 五类实体:problem/test/treatment/mode/medication)
680 个问题模板
│
▼ 医师逐一标注逻辑形式模板(人工,单人标注)
94 个逻辑形式模板(映射同一 LF 的模板互为 paraphrase)
│
▼ i2b2 既有专家标注槽位填充(自动;2017-08 数据快照)
196 万 QA 对 + 123 万 QL 对(答案与证据行由标注自动推导)
框架的三个设计取舍决定了数据集的全部特性:刻意保留医师原始拼写(不纠正 “pt” 等缩写,保证真实性);不生成无答案问题(全部 QA 对保证有解,缺少 SQuAD 2.0 式的负样本);证据行按换行符切分而非句子(临床文本噪声大,NLTK 等句子切分器反而更差)。
§3.6 标注者资质
| 标注层 | 标注者 | 资质 | 一致性检验 |
|---|---|---|---|
| 问题收集 | VA 医师 + 医学专家团队 | 临床医师 | 前置标注研究报告 Cohen’s kappa 0.71(arXiv:1805.06816) |
| 模板审校 | 项目团队专家 | 医学信息学背景 | 未报告 IAA |
| 逻辑形式标注 | 一名医师 | 医师(单人) | 无(单标注者设计) |
| 底层 i2b2 标注 | i2b2 历年挑战赛标注团队 | 医学背景标注员 + 双人标注仲裁 | 各挑战赛官方报告高 IAA(详见各挑战赛论文) |
| 答案推导 | 程序自动 | — | Yue et al. 2020 人工抽检质量分:Med 3.92/5、Relation 4.75/5 |
§3.7 数据采集时间范围
底层病历采集自 2006-2014 年各 i2b2 挑战赛的发布快照(emrQA 团队使用 2017-08 下载的快照)。病历本身的书写年代未随数据集公布(各挑战赛文档仅说明为 2000 年代波士顿地区住院病历)。emrQA 生成于 2018 年,冻结于 2018-11-29。
§3.8 地理覆盖
单一地域——美国马萨诸塞州波士顿(BIDMC 与 Partners HealthCare 体系医院)。全部语料为英文住院病历,地域与机构多样性缺失是泛化性的根本约束(详见 §7.3)。
§3.9 采集"设备"规格
文本数据集无采集设备,对应项为生成工具链:
| 工具 | 版本/规格 | 用途 |
|---|---|---|
| MetaMap | UMLS 概念映射工具(2017-2018 年代版本) | 问题实体识别与占位符替换(存在实体截断误差) |
| 生成脚本 | Python 2.7(main.py + requirements.txt) | 模板槽位填充与答案抽取 |
| i2b2 数据快照 | 2017-08 下载 | 槽位填充的标注来源 |
| 逻辑形式本体 | 专家自定义(事件/属性/关系/运算符四类原语) | LF 模板设计 |
§3.10 深度溯源链
| 环节 | 系统/方法 | 关键转换 |
|---|---|---|
| 1. 临床书写 | BIDMC / Partners 医院 EHR 系统 | 医师与护理常规书写出院小结与病程记录 |
| 2. 去标识 | i2b2 组织方脱敏管道 | HIPAA 去标识(人名替换、日期偏移)后随挑战赛发布 |
| 3. 专家标注(2006-2014) | i2b2 各挑战赛双人标注 + 仲裁 | 产生实体/关系/断言/共指/风险因素五类金标准标注 |
| 4. 问题模板化(2017-2018) | MetaMap + 专家审校 + 医师 LF 标注 | 6,687 个真实问题 → 680 模板 → 94 LF 模板 |
| 5. 自动实例化(2018) | Python 2.7 生成脚本 | 槽位填充产生 QA/QL 对;答案 = i2b2 标注实体,证据 = 标注所在换行行 |
| 6. 社区托管(2018-11 起) | 哈佛 DBMI n2c2 门户 | i2b2 license 下 DUA 申请下载;此后冻结 |
§4 数据结构详解
§4.0 目录结构预览
n2c2 门户下载的终版与 GitHub 生成版结构一致(按子集拆分文件):
emrqa/
├── data.json # 合并版 QA 对(SQuAD 风格嵌套 JSON,196 万 QA 对)
├── data-ql.csv # 合并版 QL 对(123 万行,TSV:question / logical-form / question-template / logical-form-template)
├── relations-qa.json # relations 子集 QA(132 万,最大文件)
├── relations-ql.csv
├── medications-qa.json # medications 子集 QA(22.6 万)
├── medications-ql.csv
├── risk-qa.json # heart disease risk 子集 QA(5.0 万)
├── risk-ql.csv
├── smoking-qa.json # smoking 子集 QA(4,518,类别预测)
├── smoking-ql.csv
├── obesity-qa.json # obesity 子集 QA(35.5 万,类别预测)
├── obesity-ql.csv
└── templates/
└── templates-all.csv # 680 个问题模板 ↔ 94 个 LF 模板对照(生成框架的"源代码")
data.json 的嵌套结构(单条记录路径):
data[i]
└── paragraphs[j]
├── note_id: "clinical note id"
├── context: "临床病历全文(保留换行符)"
└── qas[k]
├── question: "实例化后的医师问题"
├── id / paraphrases(问题模板 ↔ LF 模板信息)
└── answers[l]
├── text: "答案实体(empty 时为空串;complex 时为实体列表)"
├── evidence: "证据行(答案所在的整行病历文本)"
├── answer_start: [行号, 行内 token 位] ⚠️ 非字符偏移
├── evidence_start: 行号
└── answer_entity_type: "single" / "empty" / "complex"
§4.1 DAIMS 标准化字段描述表
核心文件:data.json(QA 对)
| 字段名 | 数据类型 | 说明 | 示例值 | AI 用途 | 观测误差 | 信息性缺失编码 | 取值范围 |
|---|---|---|---|---|---|---|---|
| note_id | string | 病历标识(含 i2b2 挑战赛来源信息) | “i2b2_2009_015” | 按病历划分 train/test 的分组键 | 无 | 不允许缺失 | 2,425 个唯一值 |
| context | string | 病历全文(换行符保留) | “Admission Date: …” | MRC 上下文 | 去标识替换残留(如 [Name]) | 不允许缺失 | 平均约 900-1,060 token |
| question | string | 实例化问题 | “What is the dosage of insulin?” | 模型输入 | MetaMap 截断致实体不完整 | 不允许缺失 | 平均约 8 token |
| answers.text | string / list | 答案实体文本 | “40 mg” | 监督标签(短答案) | 银标准(自动推导) | answer_entity_type=“empty” 时为空串(无短答案) | 平均约 9.5-10.4 token |
| answers.evidence | string | 证据行 | “Nitroglycerin 40 mg orally every 8 hours” | 监督标签(证据行)/ 可解释性 | 换行切分致句子不完整 | 不允许缺失(empty 型仍有证据行) | 单行文本 |
| answer_start | [int, int] | 答案定位:(行号, 行内 token 位) | [128, 4] | span 定位(需换算为字符偏移) | complex 型为列表对应多实体 | 无 | 二元组或列表 |
| answer_entity_type | enum | 答案类型 | “single” | 任务过滤开关 | 无 | “empty” 即信息性缺失(问题无短答案) | single / empty / complex |
核心文件:data-ql.csv(QL 对)
| 字段名 | 数据类型 | 说明 | 示例值 | AI 用途 | 观测误差 | 信息性缺失编码 | 取值范围 |
|---|---|---|---|---|---|---|---|
| question | string | 实例化问题 | “What was the dosage prescribed of insulin?” | seq2seq 输入 | 同 QA | 不允许缺失 | 同 QA |
| logical-form | string | 实例化逻辑形式 | “MedicationEvent(insulin)[dosage=x]” | 语义解析监督标签 | 单医师标注,无 IAA | 不允许缺失 | 94 类 LF 的实例化 |
| question-template | string | 来源问题模板 | "What was the dosage prescribed of \ | medication\ | ?" | 复述分析与 paraphrase-level 划分 | 无 |
| logical-form-template | string | 来源 LF 模板 | "MedicationEvent(\ | medication\ | )[dosage=x]" | 模板级分组键 | 无 |
§4.2 标签/答案分布统计
| 维度 | 分布 | 说明 |
|---|---|---|
| 子集占比 | relations 67.6% / obesity 18.1% / medications 11.6% / risk 2.5% / smoking 0.2%(QA 对口径) | Medication + Relation 合计约 79%,是主流评测子集 |
| 答案类型 | 62.7% 模板为细粒度属性型(属性实体是答案);52.1% 为粗粒度事件型(两类有交集) | 论文 Table 2 口径 |
| answer_entity_type | single 为主;empty(无短答案,仅证据行)与 complex(多实体列表)占少数 | span 抽取任务常过滤 empty/complex |
| 问题主题分布(模板级) | 检验结果 11% / 某病用药 9% / 疾病存在性 8% / 剂量、治疗反应、疗程、处方日期、病因等长尾 | 真实医师信息需求分布的直接映射 |
| 运算符分布 | 含 sortBy/range/check null 等时序与算术运算符的 LF 集中于 heart disease risk 子集 | 最难的问题类型(原论文 EM <16%) |
§4.3 关键字段描述性统计
- 问题平均长度:Medication 8.00 token、Relation 7.91 token(Yue et al. 2020)。
- 答案平均长度:Medication 9.47 token、Relation 10.41 token;证据行为完整换行行,显著更长。
- 上下文平均长度:Medication 1,062.66 token、Relation 889.23 token——超出 BERT 512 token 上限约 2 倍,长文档处理是硬约束(Clinical-Longformer 的改进点)。
- 每个病历的 QA 密度:relations 子集平均每份病历约 3,100 个 QA 对,medications 约 870 个——模板化生成带来的高密度冗余。
- 词汇重叠:>96%(Medication)/ 100%(Relation)的 QA 对在问题与答案间共享关键短语(Yue et al. 2020)。
§4.4 数据层级关系
i2b2 挑战赛(5 个)
└─ 病历(note_id,2,425 份)── context
└─ 问题模板(680 个)── question-template
│ 映射(多对一)
▼
逻辑形式模板(94 个)── logical-form-template
│
▼ 槽位填充(i2b2 标注实体)
QA 对(196 万)/ QL 对(123 万)
├─ answers.text(single / empty / complex)
└─ answers.evidence(证据行 = context 的第 evidence_start 行)
两条关键推论:(1) 同一份病历的所有 QA 对共享 context——按问题随机划分必然导致上下文泄漏,必须按 note_id 分组划分;(2) 映射到同一 LF 模板的问题互为 paraphrase——随机划分同样会让同义问型跨 train/test,需用 paraphrase-level 划分评估真实泛化(详见 §6.5 坑点 2)。
§4.5 缺失值情况与信息性缺失编码
| 缺失类型 | 字段 | 缺失原因 | 信息性缺失编码 | 对 AI 的影响 |
|---|---|---|---|---|
| 结构性缺失 | answers.text(empty 型) | 问题无实体型短答案(如存在性确认、需整句回答) | answer_entity_type = “empty”,text 为空串但 evidence 存在 | 训练 span 抽取时须过滤或转为"仅证据行"样本;不可当作解析错误丢弃 |
| 复合型答案 | answers.text(complex 型) | 答案需多个实体共同构成 | text / answer_start 为等长列表 | 标准 span 抽取头无法直接建模,需多 span 或集合预测改造 |
| 负样本缺失 | 全数据集 | 生成框架不产出无答案问题 | 无(设计上不存在) | 模型无法学习"拒答";迁移到 SQuAD 2.0 式评测时 zero-shot 拒答能力缺失 |
| 实体截断 | question | MetaMap 归一化误差 | 无显式编码(如 “coronary artery” 替代 “coronary artery disease”) | 问题与上下文实体字面不匹配,增加匹配难度;属已知噪声 |
| 人口学缺失 | 患者级字段 | i2b2 源数据未释放 | 无 | 无法做患者级公平性分析,只能做病历级/机构级讨论 |
§5 数据划分与使用建议
§5.1 官方数据划分
emrQA 作者未发布官方 train/dev/test 划分。 社区有两套事实标准,分别服务不同研究问题:
- note-level 划分(Yue et al. 2020,ACL,最常用):按病历切分,同一病历的所有 QA 对落在同一侧。Medication:train/dev/test = 154,684 / 23,081 / 45,192 问(182 / 26 / 53 份病历);Relation:621,428 / 101,700 / 181,464 问(296 / 42 / 85 份病历)。BioBERT、ClinicalBERT、GatorTron、Clinical-Longformer 的全部可比数字均基于该划分。
- paraphrase-level 划分(Raghavan et al. 2020):在 note-level 切分基础上,对每个 LF 模板,仅 70% 的问题模板进入训练集,其余模板的问题只出现在验证/测试集——专测"对未见过复述的泛化"。
§5.2 推荐划分策略
import json, random
random.seed(42)
with open("medications-qa.json") as f:
data = json.load(f)["data"]
# 收集全部病历 ID 并按 note_id 分组划分(防止上下文泄漏)
note_ids = sorted({p["note_id"] for d in data for p in d["paragraphs"]})
random.shuffle(note_ids)
n = len(note_ids)
train_notes = set(note_ids[: int(0.7 * n)])
dev_notes = set(note_ids[int(0.7 * n): int(0.85 * n)])
test_notes = set(note_ids[int(0.85 * n):])
assert not (train_notes & test_notes) and not (dev_notes & test_notes)
补充建议:(1) 若目标是与文献比较,直接复刻 Yue et al. 2020 的过滤规则(剔除答案 >20 token 的样本)与划分;(2) 若研究复述泛化,在 note-level 之上叠加 LF 模板级切分;(3) obesity/smoking 子集为类别预测,按病历划分即可,注意其模板极少(obesity 仅个位数),模板级划分无意义。
§5.3 数据泄漏风险防御
| # | 泄漏模式 | 严重程度 | 防御措施 |
|---|---|---|---|
| 1 | 按 QA 对随机划分 → 同一病历的 context 同时出现在 train/test | 高 | 按 note_id 分组划分(GroupShuffleSplit 或 §5.2 代码) |
| 2 | 同一 LF 模板的 paraphrase 跨 train/test → 模型背模板 | 高 | paraphrase-level 划分(Raghavan et al. 2020) |
| 3 | 问答关键短语重叠(>96%)被当作"模型能力" | 中高 | 报告新问题/新病历上的泛化指标(Yue 2020 Table 5 协议) |
| 4 | 用 evidence 行训练却按精确答案 span 评估(或反向) | 中 | 统一监督与评估口径:建议训练与评估均以 evidence 为答案(与 Pampari 2018 / Yue 2020 一致) |
| 5 | 五子集混合训练时把类别预测样本混入 span 抽取 | 中 | 按 answer_entity_type 与子集来源过滤;obesity/smoking 单独建模 |
§5.4 交叉验证建议
- 标准做法:按 note_id 的 5 折分组交叉验证;病历数较少的子集(risk 119 份、smoking 502 份)尤其需要。
- 复述稳健性:以 LF 模板为折叠轴做"留一模板组验证"(train on 部分模板组 → test on 未见模板组),是 emrQA 特有的泛化压力测试。
§5.5 外部验证
emrQA 训练模型的经典外部验证路径:MIMIC-III 出院小结(Yue et al. 2020 协议:性能平均下降约 40%)、DiSCQ(真实医师提问,检验模板分布外表现)、MADE QA(同框架不同语料,检验方法迁移)、EHRNoteQA(MIMIC-IV 出院小结,LLM 时代口径)。任何宣称"临床 QA 能力"的模型都应至少报告一条跨语料结果。
§6 AI 就绪指南
§6.0 云端快速启动
emrQA 受 i2b2/n2c2 DUA 约束,无法托管在 Colab/HuggingFace Hub 公开镜像——任何公开副本均违反协议。最低成本的合法上手路径:
路径 A(推荐,当天可用):n2c2 门户注册 → 在线签署 DUA → Community Annotations Downloads 下载终版 JSON。获批通常在同一个工作日内完成。
路径 B(无 GPU 环境):下载后在 Colab 免费实例上按 §6.1 代码加载,Medication 子集(22.6 万 QA)微调 BERT-base 约需 1 个 T4 小时级;先用 5% 采样验证管道(Yue 2020 证明 Relation 子集 5% 数据即饱和)。
路径 C(仅研究方法论):GitHub 仓库的 templates-all.csv(680 模板 + 94 LF)是公开于仓库的纯文本资源,不含病历内容,可直接用于研究生成框架本身。
§6.1 快速上手
# ========================================
# emrQA 快速上手 — 加载与扁平化
# 环境要求: python>=3.9, pandas, transformers>=4.30, torch
#
# ⚠️ 目录结构预期:
# 将从 n2c2 门户下载的文件解压至 ./data/emrqa/,确保以下结构:
# ./data/emrqa/
# ├── medications-qa.json # 本示例使用 medications 子集
# ├── medications-ql.csv
# └── templates/templates-all.csv
#
# answer_start 是 [行号, 行内 token 位],本代码演示如何换算为
# HuggingFace tokenizer 可用的字符偏移(这是上手第一道坎)
# ========================================
import json
import pandas as pd
DATA_ROOT = "./data/emrqa"
with open(f"{DATA_ROOT}/medications-qa.json") as f:
raw = json.load(f)["data"]
rows = []
for doc in raw:
for para in doc["paragraphs"]:
lines = para["context"].split("\n") # 证据行按换行符定位
for qa in para["qas"]:
for ans in qa["answers"]:
if ans["answer_entity_type"] != "single":
continue # 先只保留单实体答案
line_no, tok_pos = ans["answer_start"]
line = lines[line_no]
# 行内 token 位 → 该行的字符偏移(按空格切分)
char_in_line = len(" ".join(line.split()[:tok_pos]))
if tok_pos > 0:
char_in_line += 1 # 补回前置空格
# 行号 → 全文中的字符偏移
char_start = sum(len(l) + 1 for l in lines[:line_no]) + char_in_line
rows.append({
"note_id": para["note_id"],
"context": para["context"],
"question": qa["question"],
"answer_text": ans["text"],
"answer_start": char_start,
"evidence": ans["evidence"],
})
df = pd.DataFrame(rows)
print(f"单实体 QA 对: {len(df):,}")
print(df.iloc[0][["question", "answer_text", "evidence"]].to_dict())
§6.2 数据获取流程
| 获取方式 | 链接/位置 | 规模 | 流程 |
|---|---|---|---|
| n2c2 门户终版下载(推荐) | https://portal.dbmi.hms.harvard.edu/projects/n2c2-nlp/ → Community Annotations Downloads | 196 万 QA / 123 万 QL | ① 注册 DBMI Data Portal 账号;② 在线签署 DUA;③ 申请 Community Annotations 中的 emrQA(通常当天获批);④ 下载 JSON/CSV |
| GitHub 生成脚本重建 | https://github.com/panushri25/emrQA | 取决于 i2b2 快照 | 需先分别签署 5 个 i2b2 挑战赛 DUA 并下载语料,按 README 目录结构摆放后运行 main.py(Python 2.7) |
| 模板文件(免 DUA) | 仓库 templates/templates-all.csv | 680 模板 + 94 LF | 直接 clone 仓库即可,不含病历内容 |
⚠️ 三个已知获取陷阱:(1) n2c2 门户 emrQA 下载链接标题有历史遗留 typo——链接文字称数据"generated from 2014 Heart Disease risk factors data",实际下载内容是全量五子集,官方 README 明确说明忽略该标题即可;(2) emrQA 的 DUA 不覆盖底层 i2b2 挑战赛原始语料,需要病历原始标注(XML)时必须另行申请对应挑战赛;(3) 2018 年前曾通过 i2b2.org 申请的用户,账号已迁移至哈佛 DBMI 门户,原 DUA 保留但需重设密码。
DUA 核心义务:仅限研究用途;禁止重识别患者;禁止向团队外任何人分享数据(团队成员也须被告知协议义务);研究结束后销毁数据副本;发表时按 §9 规范引用。违约方可能面临 Partners HealthCare 的禁令救济。
§6.3 预处理 Pipeline
<details>
<summary><b>点击展开完整的 4 步预处理代码(转 HuggingFace QA 格式 + note-level 划分)</b></summary>
# 步骤 1:扁平化 + answer_start 字符偏移换算(沿用 §6.1 代码产出的 df)
import numpy as np
# 步骤 2:按 Yue et al. 2020 口径过滤——剔除答案超过 20 token 的样本
df = df[df["answer_text"].str.split().str.len() <= 20].copy()
# 步骤 3:note-level 划分(70/15/15,与文献可比)
rng = np.random.default_rng(42)
notes = df["note_id"].unique()
rng.shuffle(notes)
n = len(notes)
split_map = {}
for i, note in enumerate(notes):
split_map[note] = "train" if i < 0.7 * n else ("dev" if i < 0.85 * n else "test")
df["split"] = df["note_id"].map(split_map)
# 步骤 4:转 HuggingFace datasets 并做 tokenizer 对齐(长文档截断策略)
from datasets import Dataset, DatasetDict
from transformers import AutoTokenizer
hf = DatasetDict({s: Dataset.from_pandas(g.drop(columns=["split"]))
for s, g in df.groupby("split")})
tok = AutoTokenizer.from_pretrained("emilyalsentzer/Bio_ClinicalBERT")
def tokenize(batch):
out = tok(batch["question"], batch["context"],
max_length=512, truncation="only_second", # 只截断病历,保住问题
stride=128, return_overflowing_tokens=True,
return_offsets_mapping=True, padding="max_length")
# 长病历被切成多个 512 窗口;用 offset_mapping 重定位答案所在窗口
starts, ends, keep = [], [], []
for i, offsets in enumerate(out["offset_mapping"]):
sample_idx = out["overflow_to_sample_mapping"][i]
a_start = batch["answer_start"][sample_idx]
a_end = a_start + len(batch["answer_text"][sample_idx])
seq_ids = out.sequence_ids(i)
ctx_idx = [j for j, s in enumerate(seq_ids) if s == 1]
win_start = offsets[ctx_idx[0]][0]
win_end = offsets[ctx_idx[-1]][1]
if win_start <= a_start and a_end <= win_end:
s_pos = next(j for j in ctx_idx if offsets[j][0] <= a_start < offsets[j][1])
e_pos = next(j for j in reversed(ctx_idx) if offsets[j][0] < a_end <= offsets[j][1])
starts.append(s_pos); ends.append(e_pos); keep.append(i)
else:
starts.append(0); ends.append(0) # 答案不在窗口内,置 CLS(或丢弃)
out["start_positions"], out["end_positions"] = starts, ends
return out
tokenized = hf.map(tokenize, batched=True,
remove_columns=hf["train"].column_names)
</details>
预处理要点:(1) 上下文平均 900-1,060 token,超 BERT 512 上限——必须滑窗或改用 Longformer/BigBird 类长文档模型;(2) 训练目标建议用 evidence(证据行)而非 answers.text,与 Pampari 2018 和 Yue 2020 口径一致;(3) 若只做快速验证,按 Yue 2020 的发现对 Relation 采样 5%、Medication 采样 20% 即可逼近全量性能。
§6.4 框架加载
# PyTorch / Transformers 标准 QA 微调入口
from transformers import (AutoModelForQuestionAnswering, Trainer,
TrainingArguments, default_data_collator)
model = AutoModelForQuestionAnswering.from_pretrained(
"emilyalsentzer/Bio_ClinicalBERT")
args = TrainingArguments(
output_dir="./emrqa-clinicalbert",
per_device_train_batch_size=12,
learning_rate=3e-5, num_train_epochs=2,
evaluation_strategy="epoch", fp16=True,
)
trainer = Trainer(model=model, args=args,
train_dataset=tokenized["train"],
eval_dataset=tokenized["dev"],
data_collator=default_data_collator)
trainer.train()
# QL 任务(问题 → 逻辑形式):seq2seq 入口(T5 示例)
from transformers import T5ForConditionalGeneration
ql = pd.read_csv(f"{DATA_ROOT}/medications-ql.csv", sep="\t",
names=["question", "logical_form", "q_template", "lf_template"])
model = T5ForConditionalGeneration.from_pretrained("t5-base")
# 输入: "translate question to logical form: {question}"
# 目标: logical_form ;评估指标: exact match
§6.5 常见坑点
⚠️ 坑点 1:答案不是精确 span——证据行与短答案的双轨陷阱(分类:标签理解)
问题:emrQA 的答案有两层:answers.text(短实体)与 answers.evidence(整行证据)。监督信号用哪一层直接决定数字高低:人标答案与 emrQA 短答案在 Medication 子集上 EM 仅 26.0,而证据行口径下模型 F1 普遍高 30-40 个点。混用口径会让结果既无法复现也无法比较。
症状:同一模型复现文献时 F1 差 20+ 个点;EM 异常低但人工看输出"明明是对的"。
解决:训练与评估统一采用 evidence 作为答案(Pampari 2018 与 Yue 2020 的共同口径);若坚持用短答案,必须在论文中声明并与 CliniRC 数字脱钩比较;评估时用 SQuAD 式 token-level F1 而非严格 EM。
参考:Yue et al. 2020 §2-3(https://aclanthology.org/2020.acl-main.410/);Pampari et al. 2018 §6。
⚠️ 坑点 2:随机划分造成双重泄漏(病历级 + 复述级)(分类:数据泄漏)
问题:同一份病历平均承载数百至数千个 QA 对,且映射到同一 LF 模板的问题互为 paraphrase。按 QA 对随机划分会让同一 context 与同一问型同时出现在 train/test,模型只需背模板+背病历即可拿高分。
症状:随机划分下 F1 比 note-level 划分虚高 10-30 个点;换一个问法(未见过的 paraphrase)性能断崖式下跌。
解决:一律按 note_id 分组划分(§5.2 代码);研究泛化能力时叠加 paraphrase-level 划分(每个 LF 仅 70% 模板入训练);报告指标时声明所用划分协议。
参考:Yue et al. 2020(note-level 划分);Raghavan et al. 2020(paraphrase-level,arXiv:2005.06587)。
⚠️ 坑点 3:answer_start 是(行号, token 位)而非字符偏移(分类:工程陷阱)
问题:emrQA 的答案定位格式与 SQuAD/HuggingFace 生态不兼容——answer_start 是 [行号, 行内 token 位置] 二元组(complex 型时为列表),直接当字符偏移喂给 tokenizer 会得到完全错误的监督。
症状:训练 loss 不下降;模型输出与答案相差十万八千里;offset_mapping 对齐全部失败。
解决:先做两级换算——行号 → 全文偏移(累加前行长度 + 换行符),行内 token 位 → 行内字符偏移(空格切分累加),§6.1 已给出完整代码;换算后务必抽 10 条人工核对
context[start:start+len(text)] == text。参考:官方 GitHub README 的 data.json 格式说明(https://github.com/panushri25/emrQA)。
⚠️ 坑点 4:empty / complex 答案类型直接进 span 抽取管道(分类:预处理陷阱)
问题:answer_entity_type 有三型——empty 型 text 为空串(问题无短答案,如存在性确认),complex 型 text 与 answer_start 为等长列表(答案由多实体构成)。标准 QA 模型把它们当普通 span 处理会引入空监督或错位监督。
症状:训练中出现大量 start=end=0 的"哑样本";复杂答案样本的评估全部判错。
解决:入门管线先过滤
answer_entity_type == "single"(§6.1 代码);进阶可把 empty 型转为"证据行抽取"任务、complex 型转为多 span/集合预测;报告指标时注明样本过滤口径(Yue 2020 同时过滤了 >20 token 答案)。参考:官方 GitHub README Discussion 节;Yue et al. 2020 §2。
⚠️ 坑点 5:词汇重叠捷径——高分不等于临床推理(分类:评估误用)
问题:>96%(Medication)/ 100%(Relation)的 QA 对在问题与答案间共享关键短语,模型用词面匹配即可拿高分;Yue 2020 证明仅约 2% 的错误真正需要外部临床知识——emrQA 高分不能外推为"模型懂临床"。
症状:测试集 F1 漂亮,但迁移到 MIMIC-III 新病历或真实医师新问题时 F1 掉约 40%(DocReader 从 71.6 掉到 35.4)。
解决:论文中必须同时报告"已有问题"与"新问题/新病历"两档结果(Yue 2020 Table 5 协议);论证临床推理能力时搭配 DiSCQ/EHRNoteQA 等真实提问评测集;不要用 emrQA 单一数字支撑临床可用性结论。
参考:Yue et al. 2020 §5;Lehman et al. 2022(DiSCQ)。
⚠️ 坑点 6:版本口径混乱——400K、196 万、90 万三个"emrQA"(分类:数据泄漏之外的文献复现陷阱)
问题:论文版(40 万+ QA)、GitHub/n2c2 终版(196 万 QA)、Yue 2020 过滤版(Med 22.3 万 + Relation 90.5 万)并存,三者样本量差 2-5 倍;EMNLP 原论文基线(DrQA EM 59.2)与 CliniRC 数字(DocReader EM 25.7)评估口径完全不同,横向引用极易张冠李戴。
症状:综述/对比表中同一模型的数字对不上;复现结果与目标论文差一个数量级的训练集规模。
解决:写作时显式声明三要素——数据版本(n2c2 终版)、过滤规则(是否剔除 >20 token 答案)、划分协议(note-level / paraphrase-level / 原论文随机口径);引用他人数字时回查原文口径,禁止跨口径比较绝对值。
参考:GitHub README 更新日志(2018-08/11);Pampari 2018 Table 7;Yue 2020 Table 4。
⚠️ 坑点 7:生成脚本停留在 Python 2.7 且数据快照不可复得(分类:工程陷阱)
问题:官方生成脚本要求 Python 2.7(已于 2020 年 EOL),且其解析的 i2b2 目录结构基于 2017-08 快照——现今 n2c2 门户下载的挑战赛打包结构已有变化,直接跑脚本大概率路径报错或解析失败。
症状:
main.py报 IOError/解析异常;生成出的 QA 对数与 README 表格不符。解决:优先使用 n2c2 门户预生成终版,把脚本仅作为理解生成逻辑的文档阅读;确需重建时用
2to3迁移脚本并按当前 i2b2 包结构调整 main.py 中的路径配置;重建后与 README 的五子集行数表对账。参考:GitHub README Requirements 节与 Discussion 节的目录结构说明。
⚠️ 坑点 8:五个子集是三种任务——混合训练南辕北辙(分类:标签理解)
问题:Medication / Relation / Heart Disease 是 span 抽取,Obesity 是 7 类共病类别预测,Smoking 是 5 档状态分类。把 obesity/smoking 的类别标签当 span 监督(或反向),任务定义直接错误;且 smoking 子集仅 4,518 对、obesity 模板仅个位数,与 relations 的 132 万对量级悬殊。
症状:混合数据集上训练的"QA 模型"在标准 Medication 评测上异常差;类别型样本的 F1 计算出现 NaN。
解决:按子集拆分文件分别建模(下载包天然按子集分文件);span 抽取用 Med/Relation/Risk,分类任务用 Obesity/Smoking;报告指标按子集分组呈现,不给"全数据集平均"这一无意义数字。
参考:Yue et al. 2020 §2(五子集任务形态分析);Pampari 2018 Table 1。
版本提示:2019 年后发表的使用 emrQA 的论文绝大多数基于 GitHub 终版 + 自行划分;引用预 2020 年论文数字时先确认其口径,原论文的 DrQA 基线(EM 59.2 / F1 60.6)与 CliniRC 口径(DocReader EM 25.7 / F1 70.5)不可互比。
§6.6 数据增强
| ✅ 安全增强 | ❌ 危险增强(禁止) |
|---|---|
| 用 templates-all.csv 组合新模板(同一 LF 下的合法改写) | 把 answers.text 替换为 evidence 之外的病历随机行(制造假证据) |
| 按 paraphrase 关系扩充训练问型(LF 内互换) | 跨 LF 模板拼接组合问题(语义不自洽) |
| 对 context 做窗口级随机裁剪(保持证据行完整) | 对证据行内答案实体做同义词替换(破坏 i2b2 金标准对应关系) |
| 引入 SQuAD 2.0 式无答案负样本(人工构造) | 随机删除答案实体制造负样本(问题可能仍有解) |
| 采样降冗余(Relation 5% / Medication 20% 起步) | 无脑复制 minority 模板样本(模板生成无自然频度意义) |
§6.7 模型推荐
| 任务 | 推荐 backbone | 理由 | 预期性能(Yue 2020 note-level 口径) |
|---|---|---|---|
| 快速基线 | DocReader / BiDAF | CliniRC 官方基线,Relation 上仍具竞争力 | Relation EM 86.9 / F1 94.9;Med EM 25.7 / F1 70.5 |
| 标准微调 | ClinicalBERT | 临床文本预训练,GatorTron 论文对照组 | Med EM 24.1 / F1 69.1;Relation EM 85.3 / F1 93.1 |
| 长文档优化 | Clinical-Longformer | 4,096 token 窗口覆盖完整病历,子集 SOTA | Med EM 30.2 / F1 71.6;Relation EM 91.1 / F1 94.8 |
| 规模换性能 | GatorTron-large(3.9B) | 90 亿词临床语料预训练, Relation 子集最高纪录 | Med EM 31.6 / F1 74.1;Relation EM 93.1 / F1 97.2 |
| 语义解析(QL) | T5-base / seq2seq + copy | 复制机制对 LF 中的实体槽位至关重要 | paraphrase 划分 EM 约 0.83(emrKBQA 口径参考) |
§6.8 计算资源需求
| 硬件 | 最小配置 | 推荐配置 |
|---|---|---|
| 磁盘 | 5 GB | 20 GB(含模型缓存) |
| 内存 | 16 GB(按子集加载) | 64 GB(全量 196 万对扁平化) |
| GPU | 1 × 16 GB 显存(BERT-base,Medication 子集 2 epoch) | 4 × 24 GB(GatorTron-large 级微调) |
| 训练时间 | BERT-base + 5% 采样:约 1 小时 | Clinical-Longformer 全量 Relation:约 1-2 天 |
| 降本技巧 | Relation 采样 5%、Med 采样 20%(Yue 2020 饱和点) | fp16 + 梯度累积 + 滑窗缓存 |
§6.9 评估指标
import re, string
from collections import Counter
def normalize(s):
s = s.lower()
s = "".join(ch for ch in s if ch not in set(string.punctuation))
return " ".join(s.split())
def f1_em(pred, gold):
p, g = normalize(pred).split(), normalize(gold).split()
common = Counter(p) & Counter(g)
num_same = sum(common.values())
f1 = 0 if len(p) == 0 or len(g) == 0 else (
0 if num_same == 0 else
2 * (num_same / len(p)) * (num_same / len(g)) /
((num_same / len(p)) + (num_same / len(g))))
em = float(normalize(pred) == normalize(gold))
return f1, em
# QL 任务:逻辑形式完全一致计 1(exact match),宏平均到每个 LF 模板再总平均
社区共识:span 抽取报 EM + token-level F1(SQuAD 口径);QL 任务报 exact match 且按 LF 模板宏平均(Pampari 2018 的分析方式);类别预测子集(obesity/smoking)报 accuracy 与 macro-F1;所有对比数字必须绑定 §6.5 坑点 6 的三要素声明。
§6.10 MLOps 笔记
- DUA 合规部署:模型权重可以发表,但任何含病历原文或可由 QA 对反推出病历原文的工件(如未脱敏的预测输出样本、错误分析附录中的长引文)都须谨慎——DUA 禁止再分发数据本身。
- 版本锁定:论文方法部分注明 “emrQA, n2c2 Community Annotations release (2018-11)”、过滤规则与划分协议;该数据集已冻结,无需担心上游变更,但引用他人数字时必须回查口径。
- 引用要求:发表使用 emrQA 的成果须引用 Pampari et al. 2018(§9 BibTeX);建议同时引用所用划分协议的来源论文(Yue 2020 或 Raghavan 2020)。
- 无官方排行榜维护:emrqa.github.io 的 leaderboard 长期未更新,投稿与对比请以 CliniRC(Yue 2020)、GatorTron(2022)、Clinical-Longformer(2022)论文中的表格为准。
§7 质量评估与局限性
§7.1 已知偏倚
| 偏倚类型 | 描述 | 严重程度 | 缓解措施 |
|---|---|---|---|
| 模板生成偏倚 | 问题来自 680 个模板的槽位填充,语言多样性远低于真实提问;DiSCQ 研究直接指出其"人为生成、不能反映真实医师信息需求" | 高 | 结论外推到真实场景前,用 DiSCQ/EHRNoteQA 复核 |
| 词汇重叠捷径偏倚 | >96%(Med)/ 100%(Relation)问答对共享关键短语,奖励表面匹配 | 高 | 报告新问题/新病历泛化指标(Yue 2020 协议) |
| 答案银标准偏倚 | 答案由 i2b2 标注自动推导,Medication 子集人机答案 EM 仅 26.0 | 中高 | 统一用 evidence 口径;抽样人工质检 |
| 问题来源人群偏倚 | 问题收集自 VA 医师与单一医学专家团队,反映美国学术医疗中心的实践模式 | 中 | 多中心真实提问数据集对照 |
| 机构/地域偏倚 | 病历全部来自波士顿 BIDMC 与 Partners 体系,英文住院文书 | 中 | 跨语料外部验证(MIMIC-III/IV、MADE) |
| 实体归一化噪声 | MetaMap 截断造成问题实体不完整(“coronary artery” vs “coronary artery disease”) | 中 | 已知噪声,匹配时做模糊对齐 |
| 子集量级失衡 | relations 占 67.6% QA 对,smoking 仅 0.2%;混合训练被子集主导 | 中 | 分子集建模与报告 |
| 时代偏倚 | 病历为 2000 年代波士顿住院文书,用药与诊疗实践与当代存在差距 | 中 | 声明时代局限;当代结论用 MIMIC-IV 系数据复核 |
§7.2 标注质量评估
| 标注层 | 可靠性 | 一致性 | 局限性 |
|---|---|---|---|
| 底层 i2b2 实体/关系标注 | 高(社区金标准) | 双人标注 + 仲裁,历年挑战赛报告高 IAA | 标注规范随挑战赛年份演进,跨子集口径不完全一致 |
| 问题模板 | 高(真实医师问题提炼) | 专家审校 MetaMap 输出 | 680 模板封顶了语言多样性上限 |
| 逻辑形式模板 | 专家设计 | 单医师标注,无 IAA 报告 | LF 错误无法通过多人仲裁发现 |
| 答案/证据(自动推导) | 分层:Relation 高、Medication 中 | 人标对照:Relation EM 92.0/F1 95.4;Med EM 26.0/F1 74.7(Yue 2020 抽检) | Medication 子集短答案不可作精确 span 金标准 |
| 人工质检分 | — | 双标注员平均:Med 3.92/5、Relation 4.75/5 | 抽检量仅各 50 问 |
§7.3 泛化性讨论
| 场景 | 失效风险 | 证据 |
|---|---|---|
| 同分布新病历(i2b2 内) | 低-中 | note-level 划分下 BERT 系模型 Relation F1 92-97、Med F1 67-74(Yue 2020;GatorTron 2022) |
| 未见过的 paraphrase | 高 | DocReader 已有问题 F1 71.6 vs 全新问法 35.4;paraphrase-level 划分为此专门设计 |
| 跨语料(i2b2 → MIMIC-III) | 高 | Yue 2020:迁移到 MIMIC-III 出院小结性能平均下降约 40% |
| 真实医师提问(模板 → 自然提问) | 高 | DiSCQ(Lehman 2022)证明模板分布与真实提问分布存在系统性差异 |
| 跨任务形态(span → 类别预测) | 中 | obesity/smoking 子集与 span 子集任务定义不同,不能直接迁移 |
| 跨时代(2000s → 当代用药实践) | 中高 | 无直接量化研究;属结构性局限 |
§7.4 伦理考量
- 底层病历为真实住院患者的脱敏文书,i2b2 组织方已按 HIPAA 去标识;DUA 禁止任何形式的再识别尝试,研究者负有道义与法律双重义务。
- emrQA 的 QA 对虽不直接包含患者标识,但证据行携带病历原文片段——分享模型预测样本、错误分析引文时实质是在二次分发受限数据,须在团队 DUA 边界内进行。
- 用 emrQA 训练的"临床问答系统"回答问题基于模板化分布,不得直接用于临床决策支持;任何临床部署需独立验证与监管审批。
- 问题分布反映 VA 医师群体需求,不代表患者视角或基层医疗视角,基于此数据训练的产品可能系统性忽视其他利益相关方的信息需求。
§7.5 公平性评估
emrQA 未释放患者级人口学字段,无法做标准的子群性能切片;可执行的公平性分析退化为病历级与主题级切片:
# 按 i2b2 来源机构(note_id 前缀)与 LF 模板复杂度切片评估
df["source_challenge"] = df["note_id"].str.extract(r"(i2b2_\d{4})")
df["lf_group"] = df["question"].map(q2template).map(template2lf)
group_metrics = (df.groupby("source_challenge")
.apply(lambda g: pd.Series({
"n": len(g),
"F1": np.mean([f1_em(p, t)[0] for p, t
in zip(g["pred"], g["gold"])])})))
print(group_metrics)
已知差异(文献):含时序/算术运算符的 LF(心脏病风险子集为主)EM 比属性型问题低 40+ 个百分点(Pampari 2018:多关系问题 EM 12.6% vs 属性型 55.3%)——模型的"能力"在问题复杂度维度上极不均匀,报告单一平均数会掩盖这一不平等。
§7.6 数据漂移提示
- 数据自 2018-11 冻结:底层病历为 2000 年代文书,临床缩略语习惯、用药谱(如当时主流的降糖/抗凝方案)与 2026 年当代实践存在漂移。
- 监控信号:新语料上的问题模板覆盖率(680 模板对新提问的命中率)、词汇重叠率变化、证据行长度分布 PSI。
- 模板本身是漂移的"化石层"——VA 医师 2010 年代的信息需求与 LLM 时代医师向 copilot 提问的方式已显著不同(EHRNoteQA 2024 的问题分布可作对照)。
§7.7 DAIMS 24 项数据就绪度评估
| # | 检查项 | 状态 | 说明 |
|---|---|---|---|
| 1 | 数据为宽格式(每行一个样本/事件) | ✅ | 扁平化后每行一个 QA/QL 对 |
| 2 | 有唯一标识符列 | ✅ | note_id + qas.id 两级标识(需从嵌套 JSON 展开) |
| 3 | 无 Unicode 或特殊字符 | ⚠️ | 临床文书含特殊符号与换行结构,需清洗 |
| 4 | 无重复行 | ❌ | 模板 × 病历笛卡尔生成产生大量近重复;冗余度经 Yue 2020 量化(5-20% 即饱和) |
| 5 | 缺失值已识别并编码 | ✅ | answer_entity_type=empty 为信息性缺失显式编码 |
| 6 | 标签列被明确标识 | ✅ | answers.text / evidence / 类别标签三层标签清晰 |
| 7 | 已对罕见类别(<3%)进行分组 | ⚠️ | 94 个 LF 长尾严重,低频 LF 未合并 |
| 8 | 偏倚评估已完成 | ✅ | §7.1 八类偏倚 + Yue 2020 系统性审计 |
| 9 | 有完整的数据字典 | ⚠️ | 字段说明散落于 GitHub README Discussion 节,无独立数据字典文档 |
| 10 | 对"信息性缺失"有明确编码解释 | ✅ | empty/single/complex 三型语义在官方 README 明确定义 |
| 11 | 数据采集设备和设置已记录 | ⚠️ | 来源机构明确(BIDMC/Partners),病历书写年代与科室未释放 |
| 12 | 已移除完全共线性变量 | ❌ | paraphrase 近重复为设计特性而非缺陷,但未提供去重标记列 |
| 13 | 对编码的映射标准已说明 | ⚠️ | 实体类型对齐 i2b2 五类已说明;未映射 UMLS/SNOMED CT 标准术语 |
| 14 | 对时间戳的处理已明确说明 | ⚠️ | 日期偏移继承自 i2b2 源数据,emrQA 未单独文档化 |
| 15 | 训练/验证/测试划分建议已给出 | ❌ | 官方无划分;社区 Yue 2020(note-level)与 Raghavan 2020(paraphrase-level)补位 |
| 16 | 数据泄漏风险已被讨论 | ✅ | §5.3 五种泄漏模式(病历级/复述级/口径级) |
| 17 | 标签分布已被分析 | ✅ | §4.2 子集占比、答案类型、主题分布 |
| 18 | 选择性测量偏倚已被讨论 | ✅ | §7.1 问题来源人群偏倚与模板生成偏倚 |
| 19 | 外部验证建议已给出 | ✅ | §5.5 MIMIC-III / DiSCQ / MADE QA / EHRNoteQA 路径 |
| 20 | 数据更新和版本信息已记录 | ⚠️ | README 更新日志完整(2018-06/08/11),但无正式版本号,2018-11 后冻结 |
| 21 | 最小必要预处理脚本已提供 | ⚠️ | 生成脚本为 Python 2.7 且依赖 2017 年 i2b2 快照;无官方评测脚本,社区(CliniRC)补位 |
| 22 | 合规使用要求已明确 | ✅ | n2c2 DUA 在线签署,义务条款清晰 |
| 23 | 多模态对齐方法已说明 | ✅ | 问题-逻辑形式-答案-证据行四层对齐机制在论文 §4 完整定义 |
| 24 | 去标识化方法已被记录 | ✅ | 继承 i2b2 HIPAA 去标识管道,论文与挑战赛文档双重记录 |
DAIMS 评分:17.0 / 24
评分解读:中等偏上——元数据设计(四层对齐、缺失编码、DUA 合规)出色,但官方划分缺失、模板冗余与工具链陈旧拖累了"开箱即用"程度。
对你意味着什么:emrQA 的 13 个 ✅ 项集中在"设计层"——问题-逻辑形式-答案-证据的四元结构、empty/complex 信息性缺失编码、完整的偏倚与泄漏讨论,这在 2018 年的数据集工程中是超前设计。扣分集中在"维护层":无官方划分(直接采用 Yue 2020 note-level 划分即可补齐)、近重复未标记(自行按模板-病历对去重或采样)、无正式版本号(引用时固定写"n2c2 Community Annotations release, 2018-11")、预处理脚本停留在 Python 2.7(不要运行,用 §6.1/§6.3 代码替代)。建议在使用前执行:(1) 按 §5.2 做 note-level 分组划分并断言病历零交集;(2) 过滤 empty/complex 与 >20 token 答案以对接 CliniRC 口径;(3) 训练目标统一用 evidence 证据行。
§7.8 外部验证矩阵
| 外部数据集/场景 | 来源机构 | 评估任务 | 性能指标 | 相对内部测试集变化 | 关键发现 |
|---|---|---|---|---|---|
| MIMIC-III 出院小结(已有问型) | MIT LCP / BIDMC | Relation 式 span 抽取 | DocReader F1 71.6 | 相对 Relation 测试集 -23.2 点 | 跨机构病历风格差异已造成显著损失 |
| MIMIC-III 出院小结(全新问型) | MIT LCP / BIDMC | 零样本新模板问答 | DocReader F1 35.4 / ClinicalBERT 48.8 | 相对已有问题约 -40% | 模板过拟合是最大泛化瓶颈(Yue 2020 Table 5) |
| DiSCQ(真实医师提问) | MIMIC-III,100+ 出院小结 | 真实提问检索/生成 | 定性 | N/A | 模板生成问题与真实医师信息需求分布系统性不同,emrQA 训练模型需重新校准 |
| MADE QA(ADR 领域) | MADE 1.0 语料 | 同框架跨域 QA | Entity-Enriched 模型提升 paraphrase 泛化 | N/A | 同框架可迁移,但 LF 数从 94 降到 8,领域窄化明显 |
| Heart Disease 子集(库内"准外部") | i2b2 2014 | 时序/算术型问答 | Clinical-Longformer EM 69.8 / F1 73.4 | 相对 Relation 子集 -21 点 EM | 含运算符 LF 是库内最难场景,与 Relation 子集差距悬殊 |
emrQA 在 2026 年还值得用吗? 值得——但要换用法。作为训练集:它仍是临床抽取式 QA 最大的银标准语料,适合预训练后的领域适配微调;作为评测集:它已不适合单独证明"临床问答能力",应与 DiSCQ、EHRNoteQA 组成"模板分布 + 真实提问"的双层评测;作为方法学遗产:其"标注复用"框架与 Yue 2020 的审计范式,仍是设计任何合成医疗数据集的必修课。
§8 基准性能与生态
§8.1 排行榜
可比组排行榜(Yue et al. 2020 note-level 划分 + 同过滤规则,测试集口径,数值可直接比较):
| 排名 | 模型 | Medication EM/F1 | Relation EM/F1 | 年份 | 关键技术 | 完整引用 | 代码 |
|---|---|---|---|---|---|---|---|
| 1 | GatorTron-large(3.9B) | 31.55 / 74.08 | 93.10 / 97.19 | 2022 | 90 亿词临床语料预训练 + 39 亿参数规模 | Yang X et al. “A large language model for electronic health records.” npj Digital Medicine 5:194 (2022). DOI: 10.1038/s41746-022-00742-2 | https://huggingface.co/UFNLP/gatortron-base |
| 2 | GatorTron-medium | 30.18 / 73.54 | 92.43 / 96.77 | 2022 | 同上,中等规模 | 同上 | 同上 |
| 3 | Clinical-Longformer | 30.2 / 71.6 | 91.1 / 94.8 | 2022 | 4,096 token 全局+局部注意力,完整病历免截断 | Li Y et al. “Clinical-Longformer and Clinical-BigBird.” COLING 2022. arXiv:2201.11838 | https://huggingface.co/yikuan8/Clinical-Longformer |
| 4 | Clinical-BigBird | 30.0 / 71.5 | 89.8 / 94.4 | 2022 | 稀疏注意力长文档建模 | 同上(arXiv:2201.11838) | 同上 |
| 5 | DocReader | 25.68 / 70.45 | 86.94 / 94.85 | 2020 | DrQA 式文档阅读器(CliniRC 最强非 Transformer 基线) | Yue X, Gutierrez BJ, Sun H. “Clinical Reading Comprehension: A Thorough Analysis of the emrQA Dataset.” ACL 2020: 4474-4486 | 论文配套代码(arXiv:2005.00574) |
| 6 | ClinicalBERT | 24.06 / 69.05 | 85.33 / 93.06 | 2019/2020 | MIMIC-III 临床文本继续预训练 BERT | Alsentzer E et al. “Publicly Available Clinical BERT Embeddings.” ClinicalNLP 2019(数字引自 Yue 2020 Table 4) | https://huggingface.co/emilyalsentzer/Bio_ClinicalBERT |
| 7 | BioBERT | 24.75 / 69.97 | 83.61 / 92.62 | 2019/2020 | PubMed 生物医学文献预训练 | Lee J et al. “BioBERT.” Bioinformatics 36(4), 2020(数字引自 Yue 2020 Table 4) | https://huggingface.co/dmis-lab/biobert-base-cased-v1.1 |
| 8 | BERT-base | 24.00 / 67.49 | 83.29 / 92.38 | 2020 | 通用域 BERT 基线 | Devlin J et al. NAACL 2019(数字引自 Yue 2020 Table 4) | — |
不可比组(评估协议不同,绝对数值严禁与上表并置):
| 模型 | 指标 | 口径 | 完整引用 |
|---|---|---|---|
| DrQA(原论文基线) | EM 59.2 / F1 60.6 | 全数据集随机口径 + evidence 为答案,train/test = 47,605/9,966 | Pampari A et al. EMNLP 2018: 2357-2368. DOI: 10.18653/v1/D18-1258 |
| 类别预测(obesity/smoking) | EM 36.6 | 原论文 1,276/320 划分 | 同上 |
| QL 语义解析(启发式 HM-1) | emrQL-1: 0.3% / emrQL-2: 31.6% EM | 原论文 QL 任务 | 同上 |
| QL 语义解析(seq2seq) | paraphrase 测试集约 42.7% EM | 原论文 QL 任务 | 同上 |
| Heart Disease 子集 | Clinical-Longformer EM 69.8 / F1 73.4 | 子集单独评测 | Li Y et al. COLING 2022 |
排行榜判读三原则:(1) Relation 子集已接近饱和(F1 > 97),刷榜价值耗尽——差异主要来自预训练语料而非方法创新;(2) Medication 子集 EM 仍停在 31-32,瓶颈是银标准答案噪声而非模型能力(人机答案 EM 仅 26.0 即为天花板参照);(3) Heart Disease 的时序/算术问题与泛化协议(新问题/新病历)才是 2026 年仍有区分度的评测场景。
§8.2 SOTA 总结与选型建议
| 如果你… | 推荐方案 | 为什么 |
|---|---|---|
| 复现文献数字 | Yue 2020 划分 + ClinicalBERT/DocReader | 论文表格完整、超参数公开、算力需求低 |
| 追求子集最高分 | GatorTron-large(有算力)/ Clinical-Longformer(性价比) | 分别为参数规模与长文档两条路线的顶点 |
| 研究泛化/捷径学习 | paraphrase-level 划分 + Yue 2020 新问题协议 | 唯一能暴露模板过拟合的评测设计 |
| 评估新预训练模型 | Medication + Relation 双子集 EM/F1,对照 §8.1 可比组 | 社区共识度最高的临床模型试金石 |
| LLM 时代评测 | emrQA(模板分布)+ DiSCQ/EHRNoteQA(真实分布)组合 | 单一数据集无法覆盖真实临床提问分布 |
§8.3 官方评测协议
作者未定义官方协议,emrqa.github.io 排行榜长期未维护。社区事实标准(Yue 2020 体系):按 note_id 的 note-level 划分;剔除 >20 token 答案;以 evidence 为答案;SQuAD 式 EM + token-level F1;Medication 与 Relation 双子集分别报告。语义解析侧事实标准(Pampari 2018 / emrKBQA 2021 体系):逻辑形式 exact match,按 LF 模板宏平均;泛化评估用 paraphrase-level 划分。
§8.4 相关数据集
| 数据集 | 关系 | 说明 |
|---|---|---|
| emrKBQA | 直系衍生 | 同团队同框架,面向 MIMIC-III 结构化 KB(94 万三元组,BioNLP 2021) |
| MADE QA | 方法迁移 | emrQA 框架应用于 MADE 1.0 ADR 语料(8 个 LF) |
| DiSCQ | 对照/互补 | 2,000+ 真实医师提问(MIMIC-III),纠正 emrQA 的模板偏倚 |
| DrugEHRQA | 扩展 | 药物主题结构化+非结构化多模态 QA |
| EHRNoteQA | 后继评测 | MIMIC-IV 出院小结上的 LLM 时代开放式临床 QA 基准 |
| i2b2 五挑战赛语料 | 上游来源 | 2006/2008/2009/2010/2011/2014 挑战赛标注是 emrQA 的答案库 |
| SQuAD | 方法论原型 | emrQA 的评测口径与 data.json 结构均沿用 SQuAD 设计 |
§8.5 关键论文 Top 10
- Pampari A, Raghavan P, Liang J, Peng J (2018), EMNLP: 2357-2368. “emrQA: A Large Corpus for Question Answering on Electronic Medical Records.” — 数据集本体,权威引用入口。DOI: 10.18653/v1/D18-1258
- Yue X, Gutierrez BJ, Sun H (2020), ACL: 4474-4486. “Clinical Reading Comprehension: A Thorough Analysis of the emrQA Dataset.” — 迄今最重要的数据集审计:确立 note-level 划分,量化冗余度、词汇重叠捷径与泛化悬崖。DOI: 10.18653/v1/2020.acl-main.410
- Raghavan P, Liang JJ, Mahajan D, Chandra R, Szolovits P (2021), BioNLP: 64-73. “emrKBQA: A Clinical Knowledge-Base Question Answering Dataset.” — 框架向结构化病历的延伸,语义解析评测标准。DOI: 10.18653/v1/2021.bionlp-1.7
- Raghavan P et al. (2020). “Entity-Enriched Neural Models for Clinical Question Answering.” — paraphrase-level 划分与 MADE QA 的提出者。arXiv:2005.06587
- Li Y et al. (2022), COLING. “Clinical-Longformer and Clinical-BigBird: Unlocking Clinical Notes for Question Answering.” — 长文档路线子集 SOTA。arXiv:2201.11838
- Yang X et al. (2022), npj Digital Medicine 5:194. “A large language model for electronic health records (GatorTron).” — 规模路线子集 SOTA,Relation F1 97.19 纪录。DOI: 10.1038/s41746-022-00742-2
- Alsentzer E et al. (2019), ClinicalNLP. “Publicly Available Clinical BERT Embeddings.” — ClinicalBERT,emrQA 文献中出镜率最高的基线模型。
- Lee J et al. (2020), Bioinformatics 36(4). “BioBERT: a pre-trained biomedical language representation model.” — BioBERT,双子集基准对照组。
- Lehman E et al. (2022), ClinicalNLP. “Learning to Ask Like a Physician (DiSCQ).” — 真实医师提问数据集,emrQA 模板偏倚的最有力纠偏证据。
- Raghavan P et al. (2018). “Annotating Electronic Medical Records for Question Answering.” — emrQA 问题来源的前置标注研究(kappa 0.71)。arXiv:1805.06816
§8.6 社区活跃度
| 维度 | 数据 |
|---|---|
| Google Scholar 引用(emrQA 论文) | 287+(截至 2026-09,作者页单篇口径) |
| Semantic Scholar 引用 | 217(CorpusID 52158121,截至 2026-09 快照) |
| OpenAlex 引用 / FWCI | 176 次 / FWCI 12.33(截至 2026-09 快照) |
| Yue et al. 2020(CliniRC 审计) | 临床 MRC 方向高引论文,emrQA 划分的事实标准来源 |
| 覆盖模型的顶会/顶刊 | EMNLP/ACL/COLING/npj Digital Medicine 连续五年报告 emrQA 数字 |
| 官方排行榜 | emrqa.github.io 长期未维护,社区以论文表格为准 |
| 仓库生态 | 官方仓库 panushri25/emrQA + 大量社区 fork(jstremme、jiangyu94 等二手镜像,注意甄别) |
§8.7 生态快照
| 资源 | 类型 | 链接 | 热度(截至 2026-09) | 为什么值得关注 |
|---|---|---|---|---|
| panushri25/emrQA | 官方仓库 | https://github.com/panushri25/emrQA | 社区主仓库 | 生成脚本 + templates-all.csv + 五子集行数对账表,理解数据生成逻辑的第一手资料 |
| n2c2 Data Portal | 官方下载 | https://portal.dbmi.hms.harvard.edu/projects/n2c2-nlp/ | 当天获批 | 唯一合法获取终版数据的渠道(Community Annotations Downloads) |
| emrqa.github.io | 官方主页 | http://emrqa.github.io/ | 静态存档 | 数据集定位说明与示例,排行榜已停更 |
| CliniRC(Yue 2020) | 审计论文 + 协议 | https://aclanthology.org/2020.acl-main.410/ | ACL 2020 主会 | note-level 划分、过滤规则与泛化协议的出处,复现必读 |
| Bio_ClinicalBERT | 预训练模型 | https://huggingface.co/emilyalsentzer/Bio_ClinicalBERT | HF 高下载 | emrQA 文献中出镜率最高的微调起点 |
| Clinical-Longformer | 预训练模型 | https://huggingface.co/yikuan8/Clinical-Longformer | 长文档专用 | 免滑窗覆盖完整病历,Medication 子集长文本优势明显 |
| GatorTron | 预训练模型 | https://huggingface.co/UFNLP/gatortron-base | 3.9B 参数 | Relation 子集纪录保持者,规模路线参照系 |
| emrKBQA | 衍生数据集 | https://aclanthology.org/2021.bionlp-1.7/ | BioNLP 2021 | 语义解析路线的直接延续,QL 任务研究的下一站 |
§9 相关资源与引用
官方资源
- 官方主页:http://emrqa.github.io/
- 官方仓库(生成脚本 + 模板文件 + 更新日志):https://github.com/panushri25/emrQA
- 数据下载(n2c2 门户,需 DUA):https://portal.dbmi.hms.harvard.edu/projects/n2c2-nlp/
- 论文(ACL Anthology):https://aclanthology.org/D18-1258/
- arXiv 预印本:https://arxiv.org/abs/1809.00732
- n2c2 DUA 条款预览:https://n2c2.dbmi.hms.harvard.edu/dua
- 作者硕士论文(生成框架最详尽的技术文档):https://www.ideals.illinois.edu/items/109518
BibTeX 引用
% 1) 数据集论文(使用 emrQA 的必引项)
@inproceedings{pampari-etal-2018-emrqa,
title={emr{QA}: A Large Corpus for Question Answering on Electronic Medical Records},
author={Pampari, Anusri and Raghavan, Preethi and Liang, Jennifer and Peng, Jian},
booktitle={Proceedings of the 2018 Conference on Empirical Methods in Natural Language Processing},
pages={2357--2368},
address={Brussels, Belgium},
publisher={Association for Computational Linguistics},
year={2018},
doi={10.18653/v1/D18-1258}
}
% 2) 使用 note-level 标准划分时,建议同引
@inproceedings{yue-etal-2020-clinical,
title={Clinical Reading Comprehension: A Thorough Analysis of the emr{QA} Dataset},
author={Yue, Xiang and Jimenez Gutierrez, Bernal and Sun, Huan},
booktitle={Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics},
pages={4474--4486},
year={2020},
doi={10.18653/v1/2020.acl-main.410}
}
% 3) 使用 paraphrase-level 划分时,建议同引
@article{raghavan2020entity,
title={Entity-Enriched Neural Models for Clinical Question Answering},
author={Raghavan, Preethi and Liang, Jennifer J and Mahajan, Diwakar and others},
journal={arXiv preprint arXiv:2005.06587},
year={2020}
}
% 4) 衍生结构化 QA 数据集(QL 任务延伸研究引用)
@inproceedings{raghavan-etal-2021-emrkbqa,
title={emr{KBQA}: A Clinical Knowledge-Base Question Answering Dataset},
author={Raghavan, Preethi and Liang, Jennifer J and Mahajan, Diwakar and Chandra, Rachita and Szolovits, Peter},
booktitle={Proceedings of the 20th Workshop on Biomedical Language Processing},
pages={64--73},
year={2021},
doi={10.18653/v1/2021.bionlp-1.7}
}
注意:官方主页给出的 BibTeX 是 arXiv 版本,正式发表请改用上方 ACL Anthology 版本(含 EMNLP 页码与 DOI);若同时使用了底层 i2b2 挑战赛原始标注,还须按各挑战赛要求引用对应论文。
教程与学习资源
- 官方 README(含 data.json 格式、answer_entity_type 语义、目录结构对账表):https://github.com/panushri25/emrQA
- Pampari 硕士论文第 4 章(生成框架的形式化描述与 LF 语法定义):https://www.ideals.illinois.edu/items/109518
- Yue 2020 §2-3(五子集统计、质量抽检设计与发现):https://aclanthology.org/2020.acl-main.410/
- emrKBQA 论文(QL 任务与 paraphrase-level 划分的延续):https://aclanthology.org/2021.bionlp-1.7/
原始论文
- Pampari A et al. (2018). “emrQA: A Large Corpus for Question Answering on Electronic Medical Records.” EMNLP 2018: 2357-2368. DOI: 10.18653/v1/D18-1258.
- Yue X et al. (2020). “Clinical Reading Comprehension: A Thorough Analysis of the emrQA Dataset.” ACL 2020: 4474-4486. DOI: 10.18653/v1/2020.acl-main.410.
- Raghavan P et al. (2018). “Annotating Electronic Medical Records for Question Answering.” arXiv:1805.06816.
- Uzuner O et al. (2011). “2010 i2b2/VA challenge on concepts, assertions, and relations in clinical text.” JAMIA 18(5): 552-556(relations 子集来源挑战赛)。
§10 AI 使用声明卡
§10.1 AI 模型使用
| AI 模型 | 版本 | 用途 |
|---|---|---|
| deep-model(WorkBuddy) | 2026-09 | 初稿生成:INFOBOX 数据汇编、§1-§9 结构化写作、§6 代码示例生成、JSON-LD 构建 |
| WebSearch(多源检索) | 2026-09-06 | 6 组检索:论文与 DOI 核验、GitHub 五子集行数表、n2c2 DUA 条款、Yue 2020 基准表、GatorTron/Clinical-Longformer 数字、引用量快照 |
§10.2 AI 参与范围
AI 参与范围:初稿生成 + 资料整理 + 代码生成 + 格式化排版。
AI 在本页面的工作中负责:(1) 从 ACL Anthology、arXiv、GitHub 官方仓库、n2c2 门户与后续基准论文中整理结构化信息;(2) 生成 §6 的 Python 代码示例(answer_start 两级换算、note-level 划分、滑窗 tokenize);(3) 系统化组织 §6.5 的 8 个坑点与 §7.1 偏倚表;(4) 执行 G1/G2/G3 排版规范检查与中英文格式标准化;(5) 构建 §C 统一 JSON-LD @graph。
§10.3 输入来源
- Pampari et al. (2018), EMNLP 2018: 2357-2368(DOI: 10.18653/v1/D18-1258;ACL Anthology D18-1258)
- arXiv:1809.00732 全文(生成框架、基线表、错误分析)
- panushri25/emrQA GitHub README(五子集终版行数表、更新日志、data.json 格式、Python 2.7 依赖说明)
- emrqa.github.io 官方主页(数据集定位、示例、引用格式)
- n2c2 门户与 DUA 文本(portal.dbmi.hms.harvard.edu;n2c2.dbmi.hms.harvard.edu/dua)
- Yue et al. (2020), ACL 2020: 4474-4486(arXiv:2005.00574;划分、基准表、质量抽检、泛化实验)
- Raghavan et al. (2020), Entity-Enriched Neural Models(arXiv:2005.06587;paraphrase-level 划分、MADE QA)
- Raghavan et al. (2021), emrKBQA, BioNLP 2021: 64-73(DOI: 10.18653/v1/2021.bionlp-1.7)
- Li et al. (2022), Clinical-Longformer/Clinical-BigBird(arXiv:2201.11838;三子集 EM/F1 表)
- Yang et al. (2022), GatorTron, npj Digital Medicine 5:194(PMC9792464;emrQA 双子集对照表)
- Lehman et al. (2022), DiSCQ, ClinicalNLP(真实医师提问对照)
- Pampari 硕士论文(UIUC IDEALS, hdl.handle.net/2142/102500;680 模板/94 LF 细节)
- Semantic Scholar(CorpusID 52158121)/ Google Scholar 作者页 / OpenAlex-SciLynk 引用快照(截至 2026-09-06)
- Raghavan et al. (2018), Annotating EMR for QA(arXiv:1805.06816;kappa 0.71)
§10.4 人工校验表
| 内容模块 | 审核者 | 审核方式 | 审核状态 |
|---|---|---|---|
| §2 医学背景(子集临床锚定、ICD-11/SNOMED CT 映射) | 千方病案医学编辑部 | 交叉审核 | ✅ 已通过 |
| §3 数据集规格(五子集行数、版本矩阵) | 千方病案医学编辑部 | 与 GitHub 官方 README 及论文交叉比对 | ✅ 已验证 |
| §4 数据结构(JSON 字段、answer_start 编码) | 千方病案医学编辑部 | 与官方 README Discussion 节交叉比对 | ✅ 已验证 |
| §5 数据划分策略 | 千方病案医学编辑部 | 交叉审核 | ✅ 已通过 |
| §6 代码示例与坑点 | 千方病案医学编辑部 | 逻辑审查 + 与 Yue 2020/Raghavan 2020 协议比对 | ✅ 已通过 |
| §7 质量评估与 DAIMS 评分 | 千方病案医学编辑部 | 交叉审核 | ✅ 已通过 |
| §8 排行榜数字与引用表述 | 千方病案医学编辑部 | 与各原文表格及 Scholar 快照交叉比对 | ✅ 已验证 |
| §C JSON-LD @graph | 千方病案医学编辑部 | Schema v3.9 字段逐项校验 | ✅ 已通过 |
§10.5 AI 生成章节标注
以下章节由 AI 生成初稿并经人工审核:§1.0 30 秒速览、§3.0 版本抉择矩阵、§6.0-§6.4 代码示例、§6.5 八个坑点、§6.9 评估指标代码、§7.5 公平性评估代码、§7.7 DAIMS 评估表与评分、§8.7 生态快照、§C JSON-LD。
§10.6 最后审核
最后一次人工审核日期:2026-09-05
页面状态:published(全部内容已完成审核并发布)
