信息速览
RadQA 是一份放射报告的抽取式问答数据集:给模型一段报告文本和一个问题,让它从报告里划出能回答这个问题的那一小段话。它由德州大学休斯敦健康科学中心(UTHealth)生物医学信息学院的 Soni、Gudala、Pajouhi 与 Roberts 在 LREC 2022 上发表,同年 12 月以 1.0.0 版在 PhysioNet 上线,原始语料取自 MIMIC-III 的放射报告。
它和多数临床问答集的区别不在规模,而在提问的顺序。标注医生先只读报告开头的转诊段——开单医生写给放射科的那几行字——据此写下问题,此时报告正文是遮住的;等所有问题写完,才打开完整报告去标答案。问题先于答案诞生,于是「报告其实没回答这个问题」变成了一种自然状态,而不是人工构造的负样本。
这份数据集适合用来评测「模型能不能在放射报告里定位到临床真正想要的那句话」,也适合研究不可回答问题与跨段推理。它体量小、获取有门槛、文本只来自一家医院,用之前值得先弄清它的边界。一屏速览见下表。
| 项目 | 内容 |
|---|---|
| 全称 | RadQA: A Question Answering Dataset to Improve Comprehension of Radiology Reports |
| 发布方 | UTHealth 生物医学信息学院(Soni、Gudala、Pajouhi、Roberts) |
| 论文 | LREC 2022,pp. 6250–6259,ACL Anthology 2022.lrec-1.672 |
| 数据版本 | PhysioNet v1.0.0,2022 年 12 月 9 日上线,DOI 10.13026/ckkp-6y19 |
| 上游语料 | MIMIC-III Clinical Database v1.4(放射报告) |
| 规模 | 100 名患者 / 1,009 份报告 / 3,074 个问题 / 6,148 个问答槽位 |
| 不可回答槽位 | 1,754 个 |
| 文本单元 | 报告段落(所见段与印象段拼接),平均约 274 个词元 |
| 任务形式 | 抽取式问答:给问题与段落,划出答案跨度或判为不可回答 |
| 切分 | 按患者 8:1:1,训练 / 开发 / 测试 |
| 发放格式 | SQuAD 格式 JSON,train.json、dev.json、test.json 三个文件 |
| 许可 | PhysioNet Credentialed Health Data License 1.5.0 |
| 获取 | PhysioNet 凭证制:认证账号 + CITI 培训 + 签署 DUA |
| 官方基线 | BERT-MIMIC(SQuAD 预微调后迁入),测试集 F1 63.55 |
§1 速览:它到底是什么
1.1 一句话定义
RadQA 是一份「问题写在看报告之前」的放射报告抽取式问答集,考的是模型能否在一份报告里找到临床真正想知道的那句话,并且敢于在找不到时说找不到。
这句话里三个成分都不能省。抽取式,意味着输出必须是原文里的一段连续文字,不是自由生成的句子,也不是从选项里挑一个。放射报告,意味着文本是影像科医生的书面结论,句式高度压缩、缩写密集、否定句极多。写在看报告之前,意味着问题的分布不由答案决定——这一条决定了它和绝大多数临床问答集不是同类。
1.2 它稀缺在哪:问题先于答案
临床问答数据集大多沿两条路造出来。一条是模板法:拿已有的实体与关系标注,套进「X 的位置在哪」这类句式里批量生成,emrQA 是代表,规模能到数十万,代价是句式与提问角度被模板锁死。另一条是「看材料提问」:标注者对着完整的病历或报告,一边看一边想问什么,问完顺手标答案,代价是问题容易被答案牵着走——看到报告里写了「中等量胸腔积液」,就忍不住去问「有多少胸腔积液」,于是不可回答问题几乎不会出现。
RadQA 走的是第三条:先只给转诊段。转诊段是开单医生填的,通常只有两块内容——病人的病情概述,以及这次检查想弄清什么。标注者拿到这几行字,看不到报告结论,写下的问题因此是「开单者真正担心的东西」,而不是「报告里恰好写了的东西」。
这个设计带来两个别处少见的性质。其一是问题与答案之间存在真实的信息缺口:问题问了,报告可能真的没答。其二是答案无法退化成实体:问「心影有没有变大」,报告写的是「心影较前增大但稳定」,可以回答的那一段是「较前增大」,既不是「心影」也不是「增大」,而是一个带比较语义的短语。
1.3 三十秒决策卡
判断要不要用它,先看自己处在哪种处境。
| 你的处境 | RadQA 能帮你什么 |
|---|---|
| 要证明自家模型能读懂放射报告,需要第三方公认的考卷 | 提供一套医生出题、医生标答、按患者切分的测试集,出分可直接对标已发表基线 |
| 在做临床抽取式问答,模型总在「报告没写」时硬编一个答案 | 提供天然产生的不可回答槽位,可以专门训练与评估弃答行为 |
| 想研究跨段推理:同一问题在所见段与印象段的答案是否一致 | 每个问题在两个段落位置各有一个标注,天然构成配对样本 |
| 想知道临床问答模型离人类还有多远 | 有人类上限(两名医生)与模型下限(BERT 系)的完整对照 |
| 要评估大模型能否替代医生做报告初筛 | 只能作为其中一项证据,且必须先解决合规推理环境 |
| 需要大规模语料预训练语言模型 | 给不了。规模只有千份报告量级,训练价值远小于评测价值 |
1.4 不适合谁
如果需求是「找一批报告训练一个放射领域的语言模型」,它给不了足够的文本量——千份报告的量级连一个中等规模模型的微调都嫌薄,真正的预训练语料要去 MIMIC-CXR 或 MIMIC-III 全量笔记里找。
如果需求是「评测模型能不能生成报告」,它也给不了,因为任务形式是划出答案而不是写出报告,参考答案是原文片段,没有自由文本的参考译文可比。
如果需求是「覆盖多中心、多语种、多设备」的评测,它更给不了:全部文本来自同一家医院的 ICU 场景,报告体例、缩写习惯、甚至标点规范都带着单一来源的印记。
如果合规上无法取得 PhysioNet 凭证——例如所在机构不接受该协议,或数据出境受限——那么这份数据在流程里根本进不来,此时应转向完全开放的替代品,而不是想办法绕过。
1.5 三个常见想象与实际的偏差
初次接触这个名字,容易往三个方向想偏。
| 想象 | 实际 |
|---|---|
| 是视觉问答,给片子加问题 | 纯文本任务,输入只有报告文字,没有影像 |
| 是放射科医生的考试题 | 提问视角是开单医生,不是阅片医生;问的是「我想知道的事」,不是「报告怎么写」 |
| 是大型基准,动辄十万级 | 千份报告、数千问题的量级,定位是高难度小样本评测,不是规模化训练语料 |
第一点尤其要强调:RadQA 与 MIMIC-CXR 上的视觉问答(VQA)是两条线。后者的输入是影像加问题,考的是看图说话;前者的输入是文字加问题,考的是读文定位。两者常被并列讨论,但不能互相替代,也不能把 RadQA 的分数当作影像理解能力的证据。
§2 数据构成与规格
2.1 规模总账
官方口径下的规模只有四层,从人到问题逐层收窄。
| 层级 | 数量 | 说明 |
|---|---|---|
| 患者 | 100 名 | 从 MIMIC-III 中随机抽取,纳入条件为每人 1–36 份报告 |
| 报告 | 1,009 份 | 患者级抽样后,把选中患者的全部放射报告纳入 |
| 问题 | 3,074 个 | 医生仅凭转诊段撰写,按报告去重 |
| 问答槽位 | 6,148 个 | 每个问题在所见段与印象段各占一个槽位 |
平均算下来,每名患者约 10 份报告,每份报告约 3 个问题,每个问题 2 个槽位。这四个数字之间的关系是整份数据的骨架:抽样的单位是患者而不是报告,标注的单位是问题而不是文档,评测的单位是槽位而不是问题。三处单位不一致,是后面很多口径问题的根源。
2.2 三个计数口径
同一份数据在不同材料里会出现三个数字,它们指的不是同一件事,混用会直接算错分母。
问题数。 这是「问题 × 报告」对的数量。因为问题是在具体某份报告的转诊段上写出来的,同一个问句如果出现在两份报告上,会被算作两个问题。所以严格说它不是「去重后的问句条数」。
槽位数。 每个问题要在两个位置各标一次:所见段标一个跨度,印象段标一个跨度。两个位置各占一个槽位,于是槽位数恰好是问题数的两倍。这个数字在物理上对应 JSON 里的答案条目数。
不可回答槽位 1,754。 槽位里有约四分之一被标为「报告没有回答这个问题」。注意它统计的是槽位而非问题:一个问题可能在所见段有答案、在印象段没有,于是同一个问题一半可答一半不可答。
口径冲突就出在「问题数」这个词上。论文摘要说的是三千余个问题,而论文表 6 的「问题数」一栏填的是六千余,两者相差整一倍。两者都没错,前者按问题计,后者按槽位计,但表格标题没有区分,读表的人很容易把槽位数当成问题总数,进而在算「平均每份报告几个问题」时把结果翻倍。做对照实验时,分母要跟基线论文保持一致,否则 F1 无法直接比较。
2.3 文件清单与记录结构
发放物是三个 JSON 文件,沿用 SQuAD 的嵌套结构,没有额外的说明文档与数据字典。
| 文件 | 内容 | 说明 |
|---|---|---|
| train.json | 训练切分 | 重复问题已裁定为单一答案 |
| dev.json | 开发切分 | 保留多个合法答案 |
| test.json | 测试切分 | 保留多个合法答案,用于最终出分 |
单条记录的形状如下,结构上与 SQuAD 1.1/2.0 完全兼容,因此可以直接套用现成的加载器与评测脚本。
{
"data": [
{
"title": "s50414267",
"paragraphs": [
{
"context": "FINDINGS: The heart is enlarged in size but stable in the interval. ... IMPRESSION: 1. Findings consistent with pulmonary edema due to CHF. ...",
"qas": [
{
"id": "s50414267_q1",
"question": "Did the cardiac silhouette enlarge?",
"answers": [
{"text": "enlarged in size", "answer_start": 27}
],
"is_impossible": false
}
]
}
]
}
]
}
三点值得注意。context 是所见段与印象段的拼接,不是整份报告——转诊段被排除在外,这是论文明确的实验设定。answer_start 是字符偏移,与 SQuAD 同义,但因为是拼接后的长段落,偏移量不能直接拿去原报告里定位。is_impossible 沿用 SQuAD 2.0 的布尔标记,不可回答槽位在这一位上是真值、答案数组为空。
2.4 一条记录逐行解剖
把上面那条记录拆开看,能看出标注设计的全部意图。
| 字段 | 取值 | 含义 |
|---|---|---|
| 上下文段落 | 所见段 + 印象段 | 两个段落按固定顺序拼接,中间以分隔符区隔 |
| 问题 | 「心影有没有变大?」 | 陈述句式的问法,对应转诊段里「心衰」这个检查理由 |
| 答案文本 | 「较前增大」 | 原文的连续片段,不含主语与转折 |
| 起始偏移 | 指向所见段内部 | 定位到拼接段落里的字符位置 |
| 段落归属 | 所见段 | 该跨度取自所见段而非印象段 |
| 可答性 | 可答 | 印象段另有一个槽位,可能可答也可能不可答 |
答案文本「较前增大」这四个字说明了这套标注最讲究的地方:它既不是实体(不是「心影」),也不覆盖完整句子(不含「但较前稳定」),而是在「够回答问题」与「不多带信息」之间取的那一段。标注指南把这条原则写成两句话:所选跨度本身要足以回答该问题;同时不得包含问题不需要的额外信息。
2.5 切分方式
切分按患者做,比例 8:1:1,也就是八成的患者进训练、一成进开发、一成进测试。
| 切分 | 患者占比 | 作用 |
|---|---|---|
| 训练 | 8 成 | 微调模型 |
| 开发 | 1 成 | 调超参、早停 |
| 测试 | 1 成 | 最终出分,不参与任何选择 |
按患者切而不是按报告切,是为了避免同一病人的多份报告分处两个切分——同一患者的随访报告往往共享大量措辞与结论,跨切分泄漏会让分数虚高。这一点在放射报告场景里尤其要紧,因为同一病人的多次检查常常是同一句话反复出现,只改几个字。
代价是切分粒度粗、每份切分的患者数少,测试集只有十名患者。这意味着测试分数对个别患者的文本风格相当敏感,同一模型换一个随机种子重抽患者,分数会有可见波动。
2.6 与 emrQA 的规模对照
放在临床抽取式问答的谱系里,RadQA 与 emrQA 是最常被并提的一对,两者几乎在每个维度上都相反。
| 维度 | RadQA | emrQA |
|---|---|---|
| 文档类型 | 放射报告 | 出院小结等临床笔记 |
| 文档数 | 千余份 | 303 段 |
| 问题生成 | 医生手写,仅看转诊段 | 模板套用已有标注 |
| 不可回答问题 | 有,天然产生 | 无 |
| 答案形态 | 短语,可跨多行 | 临床实体,平均不到 2 个词 |
| 每段问题密度 | 约 6 个 | 数百个 |
| 获取门槛 | PhysioNet 凭证 | n2c2 数据使用协议 |
最值得记的一条是答案长度:RadQA 的答案平均十几个词元,emrQA 不到两个。这个差距不是标注风格差异,而是任务定义的差异——前者要求答案「够用」,后者只要求答案「是个实体」。用同一套 F1 脚本给两个数据集打分,分数的含义并不相同。
§3 报告层:文本从哪来、长什么样
3.1 为什么按患者抽,而不是按报告抽
抽样单位直接决定了数据的临床真实性。按报告随机抽,抽到的是「一堆互不相干的检查」;按患者抽,抽到的是「一批病人的完整影像病史」——今天拍的胸片与上周拍的进同一份数据集,随访对比、间期变化这类推理才有素材。
作者选的是后者:先从 MIMIC-III 里随机抽 100 名患者,再把这些人名下的全部放射报告纳入。抽样时设了纳入窗口:每名患者不少于 1 份、不多于 36 份。上限是为了剔除极端值——ICU 长期住院的病人可能留下上百份记录,放任进入会让数据集被少数几个人的写作风格主导。窗口一卡,患者报告数也就贴近上游形态:数据集里人均约 10 份,上游是 9.7 份。
代价要说清楚:100 名患者是很小的样本。上游 MIMIC-III 有 34,325 名患者、332,922 份报告,RadQA 取的是千分之三。这个比例决定它只能做评测,不能当作放射报告总体的代表性样本。
3.2 一份报告的三段结构
MIMIC-III 的放射报告是自由文本,但结构相当稳定,通常分三段。
| 段落 | 英文标签 | 内容 | 谁写的 |
|---|---|---|---|
| 转诊段 | INDICATION / CLINICAL INDICATION | 病人简况与本次检查的理由 | 开单医生 |
| 所见段 | FINDINGS | 影像上逐项观察到的征象 | 放射科医生 |
| 印象段 | IMPRESSION | 把所见归纳成结论与建议 | 放射科医生 |
这三段在 RadQA 里被区别对待:转诊段是出题材料,所见段与印象段是答题材料。同一份报告的两部分,一个只给问问题的人看,一个只给标答案的人看。
实际文本里标签并不总是这么规整。论文特别提示了两种情况:印象段有时被写成「Conclusion」,所见段有时被并进「Procedure and Findings」里。这意味着写解析脚本时不能只匹配一个固定标签,需要准备一组同义标签并处理标签缺失时的回退。
3.3 段落怎么拼、拼完多长
模型看到的输入不是整份报告,而是所见段与印象段拼接后的一个长段落。
这个设计有明确理由。所见段是逐项观察,信息密度高但结论散;印象段是归纳,句子少但直接对应临床问题。把两段拼起来,模型才有机会在「观察到什么」与「结论是什么」之间做选择——一个问题可能在两段里都有答案,也可能只在其中一段有。
代价是段落变长。拼接后的段落平均约 274 个词元,最长的远超一般 BERT 的 512 词元上限,所以官方基线用了滑动窗口:最大序列长度 384、文档步长 128。这两个超参不是随便定的,是为了让长报告被切成互相重叠的窗口,答案跨度不至于正好落在切口上。
问题本身很短,平均不到 9 个词元;答案跨度平均十几词元,中位数只有 7 个词元。这组数字说明答案的形态:多数是短促的短语,少数是跨行的长句,长尾比一般抽取式数据集更明显。
3.4 覆盖的检查类型
报告涵盖多种影像模态,以胸片为主,其次是 CT,再往下是超声、磁共振与 CT 血管造影。
这一点对使用者的实际影响是:如果只用它评测胸部 X 光相关的任务,样本量还算够;如果要评测腹部 CT 或头颅磁共振的报告理解,样本会薄到无法单独下结论。论文有意让数据集的模态构成贴近上游库,所以它继承的不只是文本,也继承了 MIMIC-III 以 ICU 胸片为主的偏斜。
3.5 一个必须澄清的口径:底层是 MIMIC-III
这一条要先说清楚,因为它是关于 RadQA 最常见的错误陈述:它的底层语料是 MIMIC-III,不是 MIMIC-IV。
依据有三处。论文第 3.1 节写明「We source the radiology reports … from the MIMIC-III database (Johnson et al., 2016)」;论文在列举自身特点时写明「数据集公开可用,因为放射报告来自公开可用的 MIMIC-III 数据库」;PhysioNet 的数据页把父项目一栏标为 MIMIC-III Clinical Database v1.4。
MIMIC-IV 里也有一套放射报告(配套 MIMIC-CXR),报告编号体系、文本清洗方式、患者标识都与 MIMIC-III 不同。把 RadQA 当成 MIMIC-IV 的派生物会引出两个实际错误:一是按 MIMIC-IV 的报告编号去关联影像或结构化表,一对就错;二是以为拿到了 MIMIC-IV 的凭证就能顺带取到 RadQA 的原文,实际上授权链走的是 MIMIC-III 那一支。
顺带纠正另一处:RadQA 的官方代码与说明放在作者实验室的仓库(krobertslab/datasets 下的 radqa 目录),不在任何政府机构账号下。沿错误路径去找仓库会得到 404。
3.6 上游许可如何传导
RadQA 本身不是原始数据,而是 MIMIC-III 的派生标注。这决定了它的授权结构是「两层」而不是「一层」。
| 层级 | 内容 | 对使用者的约束 |
|---|---|---|
| 上游 | MIMIC-III 的数据使用协议 | 不得再分发原文、不得尝试重识别、须在合规环境内处理 |
| 本层 | PhysioNet 凭证制健康数据许可 1.5.0 | 认证账号、CITI 培训、签署协议后方可下载 |
| 下游 | 用户自己的模型与论文 | 只能发布聚合结果,不得附带可还原的原文片段 |
实践中容易踩线的是第三条。论文里引用原报告句子做示例是学术惯例,但把若干条记录贴进公开仓库、或把报告原文发给在线大模型接口,都越过了协议边界。做评测时,模型推理必须发生在自己可控的环境里。
§4 问题层:问题是怎么造出来的
4.1 只给转诊段,把其余内容遮住
问题创建阶段,标注者只能看到报告的转诊段,所见段与印象段被完全遮蔽。
成本不低——标注者要分两轮工作,第一轮只看几行字提问,第二轮才打开报告标答案,中间还要保证问题与报告的对应关系不乱。作者愿意付这个成本,是因为它同时解决两个问题。
一是偏差。若能看到报告全文,提问会不自觉地向「报告里写了什么」收敛,问出来的问题看着自然,实际被答案反向塑造,模型在它上面刷出的高分无法迁移。
二是否定样本的稀缺。临床问答的难点从来不是「找到答案」,而是「判断有没有答案」。在信息不全的条件下提问,必然产生一批报告答不上来的问题,而这些恰恰最值钱。
4.2 三条撰写规则
标注指南里有三条硬规则,它们共同决定了问题的形态。
按理由拆问,不合并。 转诊段列了几个检查理由,就为每个理由分别提问,不许把多个理由塞进一个问句。比如转诊写了「心衰」与「积液」两条,就要分别问心衰相关的、积液相关的,而不是问一句「病人有没有心衰和积液」。合并式提问在评测上没有区分度——答对一半算不算对,无法界定。
每个理由至少一问。 这一条保证了覆盖率:转诊段提到的每个关切都必须有问题落地,不会出现某个理由被整体遗漏的情况。
换着说法问,不许套模板。 指南明确要求不要把所有问题都写成「病人有没有 X」的形式,还给了反例:不要一连串地问「病人有心衰吗」「病人有积液吗」。这一条是针对模板法的直接反制——emrQA 的句式单一正是被反复批评的地方,RadQA 从标注源头就把这条路堵上了。
4.3 两人独立提问,再按报告去重
每份报告的问题由两名标注者各自独立撰写,互不通气。
独立撰写带来的是问法多样性:同一个关切,一个人可能问「心影有没有变大」,另一个人可能问「心脏大小较前有无变化」,两种问法都保留下来,模型必须学会应对表述差异。
代价是重复。两人很可能对同一份报告写出字面完全相同的问题,这时按报告级别去重——同一份报告上文字完全一致的问题只留一条。注意去重的粒度是「同一份报告内」,跨报告的同形问题不会被合并,因为它们是针对不同文本提的,答案也不同。
去重之后得到的就是那三千余个问题。这个数字背后是两轮人工撰写加一轮去重,工作量远大于同规模的模板生成。
4.4 一个案例的完整拆解
论文表 1 给出的样例最适合用来理解整套设计。它是一份胸片报告,转诊段写明:64 岁男性,近期发生 ST 段抬高型心肌梗死,现出现水肿加重与气短。
| 环节 | 内容 |
|---|---|
| 转诊段给出的关切 | 心衰(CHF)、积液(effusions) |
| 报告所见段 | 心影增大但较前稳定;纵隔轮廓无变化;上肺血管纹理重分布;肺门周围模糊伴双肺弥漫渗出;符合急性心衰;双侧胸腔积液 |
| 报告印象段 | 1. 所见符合心衰所致肺水肿;2. 双侧胸腔积液 |
| 问题一 | 「肺里有没有渗出?」 |
| 答案一 | 所见段「弥漫性双肺渗出影」,印象段「肺水肿」 |
| 问题二 | 「心影有没有变大?」 |
| 答案二 | 所见段「较前增大」 |
| 问题三 | 「有没有胸腔积液的征象?」 |
| 答案三 | 所见段与印象段均为「双侧胸腔积液」 |
三个问题对应两类关切,问法各不相同。第一个问题问得最「外行」——转诊段里根本没有「渗出」这个词,报告正文里也没有,模型必须在「渗出」与「双肺弥漫渗出影」「肺水肿」之间建立医学等价关系才能答对。第二个问题问的是心衰的间接征象,转诊写的是心衰,问题问的是心影大小,中间隔着一层病理生理常识。第三个问题几乎是直问,答案在两段里都能找到,属于送分题。
这份样例同时说明了答案的取法。问题二的标准答案是「较前增大」四个字,而不是整句「心影较前增大但稳定」——因为「但稳定」回答的不是「有没有变大」,而是「变化趋势如何」,超出了问题所需。把整句标进去会引入无关信息,模型学到「答案越长越好」的错误倾向。
第三个问题的答案在两段里都出现,正好演示了双槽位设计:同一问题,所见段给的是观察描述,印象段给的是结论归纳。模型若只在一段里找到,另一个槽位就算错——这一设定把「跨段一致性」变成了可计分的指标。
4.5 十类推理需求
作者从数据里抽了 100 个可回答问题做人工分析,归纳出十类推理需求。这不是标签体系(每条样本不带类别标签),而是一张「这份数据难在哪」的清单。
| 类别 | 需要什么能力 | 例子 |
|---|---|---|
| 词汇变体(同义) | 识别同义表述 | 问「PICC 置入是否正确」,答「右侧 PICC 导管异位,尖端位于右颈内静脉」 |
| 词汇变体(世界知识) | 调用医学常识做等价替换 | 问「肺里有无阻塞」,答「左肺基底渗出较前改善,符合肺不张/肺炎」 |
| 句法变体 | 处理疑问句与陈述句的错位 | 问「骨盆有无骨折」,答「未见明确骨折」 |
| 指代消解 | 跨句指代与句内合并 | 问「PICC 是否置入」,答「导管经……置入,长度 55 cm,尖端位于上腔静脉。该管可用」 |
| 上下文不全 | 在信息残缺时作答 | 问「颈动脉有无需在搭桥期间处理的狭窄」,答「右侧颈内动脉狭窄 40–59%」 |
| 间期变化 | 理解与既往检查的对比 | 问「甲状腺癌是否进展」,答「右颈部肿块较前明显增大」 |
| 诊断知识 | 由征象推到诊断 | 问「有无肺炎征象」,答「左肺门周围渗出明显改善,残留边界清楚的肿块样影」 |
| 解剖知识 | 把问题映射到正确部位 | 问「胃癌有无转移至胸部」,答「双肺未见结节或肿块」 |
| 需要具体化 | 拒绝笼统答案 | 问「颅骨骨折累及面中部的状态」,答「右上颌窦前壁可疑无移位骨折;右鼻骨移位骨折」 |
| 否定式作答 | 识别「答案存在但被否定」 | 问「气胸是否造成纵隔移位」,答「未见气胸」 |
最后一类最容易被误判。问「气胸是否造成纵隔移位」,报告写「未见气胸」——答案确实在文本里,但它否定了问题的前提。模型若只做字符串匹配,很容易把「未见气胸」当成肯定回答。这类样本是放射报告问答的固有难点,也是这份数据比一般抽取式数据集更贴近临床的地方。
4.6 不可回答问题从哪来
不可回答槽位不是抽出来的,是撰写流程的副产品。来源大致有三类。
第一类是转诊段问得比报告答得细。开单者关心「心脏功能有没有改善」,报告只写了形态学观察,功能评价压根不在放射报告的职责范围内。
第二类是表述差异掩盖了答案。转诊用「气短」,报告写「肺淤血」,两者临床上相关但不是同一件事,标注者可能判定为不可回答,也可能判为可回答——这正是标注分歧的主要来源之一。
第三类是问题预设了不存在的发现。问「支架位置是否良好」,但这份检查里根本没有支架,报告自然不会提。
三类里只有第三类是无争议的不可回答。前两类带有标注者的判断成分,这也是为什么同一批槽位在两名医生之间会出现「一个标了跨度、一个判为不可答」的分歧。
§5 答案层:跨度、可答性与一致性
5.1 最短充分原则
答案标注只有一条核心原则,但它有两个方向,缺一不可。
充分:所选跨度单独拿出来,要能让提问的医生看懂。把「较前增大」单独给医生看,他知道在说心影;把「增大」单独给他看,他不知道在说什么。
最短:在满足充分的前提下,不得包含问题没问的信息。「心影较前增大但稳定」这句话里,「但稳定」回答的是趋势问题,不是大小问题,所以必须切掉。
上一章那个案例里的第一问最能说明这两条如何在同一个答案上同时生效。问「肺里有没有渗出」,报告的可答片段是「弥漫性双肺渗出影」——它比单个实体「渗出」充分得多(后者在原文里根本不存在这个字面),又比整句「肺门周围模糊伴双肺弥漫渗出」更短(后半句讲的是分布位置,不是有没有)。取哪一个,全靠标注者对「刚好够」的判断。
两个方向互相拉扯,标注者每次都要做判断。这也是跨度级一致性只有七成左右的根本原因——不是标注者不认真,而是「刚好够」这条线本身有模糊地带。
5.2 两个位置,各标一个
报告有所见段与印象段两个「答案区」,标注规则是每段至多标一个跨度。
「至多」意味着允许零。一个问题可能在所见段有答案、在印象段没有(印象段是归纳,细节常被略去),也可能反过来(所见段描述含糊,印象段给了明确结论),还可能两段都没有(不可回答)。
这条规则把「跨段一致性」写进了数据结构的骨架:同一个问题在数据里有两条记录,分别指向两个段落。模型必须两处都答对才算全对;做误差分析时,也可以方便地看出模型是「读懂了观察」还是「只会抄结论」。
一个副作用是分数口径变复杂。评测时如果把两个槽位当作两条独立样本,指标会被「印象段更容易」这一事实稀释;如果要求两处都对,指标又会偏严。做横向比较时,必须确认对方用的是哪种聚合方式。
5.3 双人独立标注与分批裁定
答案由两名标注者独立标注,之后定期裁定。
裁定的节奏是分阶段的。前 100 份报告按每 10 份一批裁定,目的是让两人在早期就把标准对齐——标注初期最容易出现「什么算充分」的理解偏差,密集裁定能及时纠偏。之后改为每 100 份一批,进入稳定期。
裁定不是简单取交集,而是要处理分歧。作者把分歧逐条看过,归纳成几类,并在论文里给出了带例子的说明——这部分的价值超出数据集本身,它实际上是一份「人类标放射报告问答时会错在哪」的清单。
5.4 分歧的六个来源
分歧被归为六类,其中五类有明确成因,一类是零星笔误。
| 分歧类型 | 表现 | 实质 |
|---|---|---|
| 多带了相关信息 | 一人标「右肺门周围新出现渗出」,一人标「右肺门周围渗出」 | 对「多新」算不算问题所需,判断不同 |
| 多带了无关信息 | 一人只标「迷走神经刺激器存在」,一人把同句里的「陈旧肋骨骨折」也带上 | 对句子边界的处理不同 |
| 可答与不可答对立 | 一人标了跨度,一人判为不可回答 | 对「报告是否回答了这个问题」的判断不同 |
| 漏掉关键临床信息 | 一人标「未见结构异常」,一人标「钡剂通过食管顺畅」 | 前者是套话,后者才是答案 |
| 缺少临床特异性 | 一人标「导管位于头臂静脉交汇处」,一人标「左颈内静脉导管,尖端位于头臂静脉交汇处」 | 后者补了侧别与入路,信息更完整 |
| 其他 | 跨度起点差一两个字 | 操作层面的小错 |
把这张表读透,能得到一条实用推论:分歧的主要来源不是「找错地方」,而是「边界划在哪」。 六类里只有最后一类是定位错误,其余五类都是同一位置上「多一字少一字」的判断差异。这解释了为什么跨度级 F1 卡在七成上下——即便两个人指向同一句话,切出来的片段也常常不完全一致。
5.5 一致性数字与怎么读
作者用 SQuAD 式的跨度 F1 计算两人一致性,全体报告的 F1 约为 69、完全匹配率约为 50。
| 范围 | 完全匹配 | F1 |
|---|---|---|
| 前 100 份报告 | 52.40 | 68.02 |
| 其余报告 | 50.16 | 69.48 |
| 全部报告 | 50.39 | 69.34 |
两个观察。第一,完全匹配只有一半,说明「切得一模一样」是少数情况;但 F1 接近七成,说明切出来的片段大部分重叠,只是长短不同。第二,前后两段的数字几乎持平,说明裁定节奏的调整并没有带来明显的一致性提升——这反过来说明分歧是任务本身的模糊性,不是标注者没磨合好。
这两个数字划出了一条解读红线:模型分数与人类分数之间的差距,小于一致性缺口时不宜下强结论。 如果两个医生之间都差三十个点,那么模型之间差三五个点,很可能只是标注噪声。
5.6 训练段单一答案,开发测试段保留多答案
一个容易被忽略的细节:三个切分的答案组织方式不同。
| 切分 | 答案组织 | 原因 |
|---|---|---|
| 训练 | 裁定为唯一答案 | 训练需要确定的目标,多答案会让损失打架 |
| 开发 | 保留多个合法答案 | 调参时不应因选错合法答案而受罚 |
| 测试 | 保留多个合法答案 | 同上,且更贴近真实使用 |
这个设计有它的道理:训练阶段模型需要一个明确的学习目标,多个答案会让梯度互相抵消;评测阶段则应承认「一个问题可以有好几种答法」,只要命中任一合法答案就算对。SQuAD 2.0 的官方评测脚本本来就支持多参考答案取最大分,直接套用即可。
但它也带来一个隐患:如果使用者自己写了简化的打分脚本,只取第一个参考答案,那么在开发与测试段上会系统性地低估模型性能。这类误差不会报错,只会让分数莫名其妙地低几个点,极难排查。
5.7 评测协议与基线设定
官方的评测协议很简单:给问题与段落,模型输出一个跨度或判为不可回答,用完全匹配与词级 F1 两个指标计分。
基线用了两个模型:BERT 的 base 版(cased)与 BERT-MIMIC——后者是在 MIMIC-III 笔记上继续预训练过的同架构模型。两个模型都从同一个起点出发,差别只在预训练语料是否包含临床文本。
微调策略做了三组对照:只用 RadQA;先用 SQuAD 2.0 微调再迁到 RadQA;先用 emrQA 微调再迁到 RadQA。此外还试了三段式:SQuAD 到 emrQA 再到 RadQA。
关键超参如下,复现时可直接照抄。
#-- RadQA 官方基线超参(论文第 5 节)
config = {
"max_seq_length": 384, #-- 长报告切窗后的单窗长度
"doc_stride": 128, #-- 相邻窗口重叠,防止答案落在切口
"max_query_length": 128, #-- 问题很短,128 足够
"learning_rate": 3e-5,
"epochs_per_dataset": 2, #-- 每迁一个数据集加 2 轮,三段式共 6 轮
"models": ["bert-base-cased", "bert-mimic"],
}
结果里最反直觉的一条是:先用开放域的 SQuAD 微调,比先用同属临床域的 emrQA 微调效果更好。作者的解读是数据质量压过领域接近性——SQuAD 是人工撰写的高质量问答,emrQA 是模板生成的,后者带来的句式偏置抵消了领域红利。给 RadQA 做迁移时因此不必执着于临床域语料,一个高质量开放域问答集可能更有用。
§6 与库内条目的关系
6.1 关系图谱
RadQA 处在一个由「上游语料—同任务竞品—下游派生」构成的小生态里。分清这三层,才不会把不同东西混为一谈。
| 关系 | 资源 | 差异 |
|---|---|---|
| 上游语料 | MIMIC-III 临床数据库 | 提供放射报告原文;RadQA 只取其中的放射报告部分 |
| 上游语料(平行支线) | MIMIC-CXR | 另一套影像与报告,MIMIC-IV 体系;不是 RadQA 的来源 |
| 同任务竞品 | emrQA | 同为临床抽取式问答,模板生成、规模大、无不可答样本 |
| 同域不同任务 | RadGraph、RadGraph2 | 做放射报告实体与关系标注,不做问答 |
| 同域不同任务 | 放射报告跨文档指代消解数据集 | 做跨报告的同指判定,是问答的上游能力 |
| 同域不同任务 | 放射报告自然语言推理数据集 | 做句对三分类,粒度更细、规模更小 |
| 下游派生 | 各类在 RadQA 上微调的问答系统 | 用 RadQA 训练或评测,反向贡献了引用与榜单 |
6.2 三条检索路径
要解决不同问题,入口不同。
想找「放射报告上的问答」:从 RadQA 进入,再用它对比 emrQA 与各类视觉问答集。注意视觉问答那条线(MIMIC-CXR 上图文并给)输入含影像,与 RadQA 不是同一任务,不要放在一张表里比分。
想找「放射报告上的结构化标注」:从 RadGraph 进入。它把报告拆成实体与关系图,是问答、摘要、报告生成共同的上游资源。RadQA 的答案跨度可看作实体序列的子集,但标注粒度不同,不能直接互转。
想找「临床文本的推理与蕴含」:从 MedNLI 与放射报告推理数据集进入,标签是蕴含/矛盾/中立三分类。问答需要推理,但推理不等于问答。
6.3 与 MedSTS、BLURB、BC5CDR 的分工
同一个「临床文本理解」的大筐里,几个常被并列的资源各管一段,混淆会导致评测设计出错。
| 资源 | 任务 | 输出形态 | 与 RadQA 的关系 |
|---|---|---|---|
| MedSTS | 句子语义相似度打分 | 0–5 分或二分类 | 判「两句话像不像」,RadQA 判「哪句话能答这个问题」 |
| BLURB | 生物医学 NLP 基准合集 | 多个任务的分数汇总 | 是评测套件,RadQA 是可被纳入其中的单任务,不是同类 |
| BC5CDR | 化学物质与疾病的命名实体识别 | 实体边界与类型 | 抽实体,RadQA 抽答案短语;前者是后者的前置能力 |
| RadQA | 报告级抽取式问答 | 原文跨度 + 可答性 | 需要定位、跨句整合与医学等价判断 |
一句话区分:MedSTS 问「这两句意思近不近」,BC5CDR 问「这个词是不是药」,RadQA 问「这段报告里哪句话回答了这个问题」。难度递增,因为 RadQA 同时要求定位正确、边界恰当、并且判断得出「没有答案」。
BLURB 的关系需要特别说明:它把多个生物医学任务的标准数据与脚本打包在一起,本身不产生新标注。RadQA 常被拿来与 BLURB 里的任务横向对比,但一个是数据集,一个是数据集之上的评测协议,不在同一层级。
§7 质量评估与局限性
7.0 阅读本节前需要知道的一件事
评价 RadQA 最容易犯的错,是拿「训练语料的尺子」去量它。
尺子用错了,结论会系统性偏负:一千份报告、数千个问题,放在预训练语料的标准下几乎不值一提,于是很容易得出「规模太小、没什么用」的判断。但它的设计目标从来不是提供文本量,而是提供一套判断标准——判断模型能不能在报告里找到临床真正需要的那句话,能不能在找不到时承认找不到。这是一把尺子该有的位置,不是一堆砖头该有的体量。
第二种常见误判正相反:把它当成通用能力考卷。看到「放射报告问答」这个名字,就以为模型在上面拿了高分便等于「看得懂片子」。实际上输入里根本没有影像,模型读到的只是放射科医生写下的文字结论。
把这两个错位放在前面,下面逐条讨论局限时,才不会把「设计选择」误读成「质量缺陷」。
7.1 样本量带来的统计功效问题
测试集只有十名患者。这个数字是所有解读的前提。
十名患者意味着什么?意味着测试集里的文本风格由这十个人的报告习惯主导。换一批患者重抽,同一模型的分数可能有可观波动;两个模型之间差一两个点,很可能落在抽样波动之内,不构成「A 优于 B」的证据。
正规做法是报告多次重抽或按患者做自助法置信区间。可惜论文没有提供这类区间,后续引用时也很少有人补算。因此在使用它做模型选型时,最好自己按患者分组做一次重采样,把区间算出来贴在结果旁边。另外,按患者切分意味着患者不可拆,切分一旦固定,各模态在测试集里的构成就跟着固定,薄的那几类几乎没有统计支撑。
7.2 单一机构、单一场景
全部报告来自同一家医院的 ICU 场景。
这带来三重同质性。书写习惯上,缩写、句式、段落顺序都遵循这家医院的模板,模型学到的可能是模板而不是医学。病例构成上,ICU 病人以危重症为主,导管位置、监护设备、术后改变这些主题反复出现,门诊或体检场景的常见描述则很稀薄。语言上,全英文、美式医疗语境,直接迁到中文报告上需要重新标注。
另一面是内部一致:正因为来源单一,标注标准容易统一,模型学到的信号也干净。这是小样本数据集的常见取舍——用外部效度换内部效度。
使用时该问的是:我的场景与 ICU 胸片有多远?做体检胸片筛查,这份分数的参考价值有限;做 ICU 内的报告理解,参考价值就高得多。
7.3 标注一致性的天花板
两人跨度级 F1 约七成,完全匹配约五成。
这组数字有两层含义,常被只读出一层。浅层是标注质量有噪声;深层更重要——这个任务在「答案边界」上本身就是模糊的。 六类分歧里有五类不是找错位置,而是对「多一个字算不算多」的判断不同。即便给两个医生同一句话,他们切出来的片段也常常不一样,而这不算谁错。
直接影响是分数上限被压低了:模型即便完全理解了报告,只要切分边界与标注者的习惯不一致,也会被扣分。所以在 RadQA 上比较模型时,词级 F1 比完全匹配更有解释力,完全匹配的绝对值也不适合与其他数据集横向比较。
这也解释了为什么模型与人类差三十个点却仍有意义——人类的 90 分是「与另一名人类对齐」的分数,模型的 63 分是「与标注习惯对齐」的分数。顺带指出一处口径细节:摘要把「人类最佳 90.31」与「平均 84.52」并列,实际前者是测试集上标注者一的 F1,后者是开发集上两人的平均 F1,两者取自不同切分,直接相减并不严谨。
7.4 不可回答的边界模糊
不可回答槽位是这份数据的卖点,也是它最模糊的部分。
问题在于「不可回答」有两种截然不同的成因。一种是报告确实没涉及——问心功能,报告只写形态,这是客观缺失。另一种是标注者没找到——答案以另一种表述藏在文中,换个人可能就找得到。第二种在分歧统计里被单列为一类,说明作者清楚这部分带主观性。
影响是:训练弃答行为时,模型学到的不只是「什么时候该说没有」,还包括「标注者的表述偏好」,直接迁到真实系统就容易过度弃答。缓解办法是先人工抽检,把槽位分成「客观缺失」与「表述差异」两堆,再决定后者是否降权。工作量不大,但几乎没人做。
7.5 转诊段没有进输入
官方设定里,模型只看所见段与印象段,转诊段被排除在外。
初衷是让任务纯粹:考的是读报告,不是读转诊;也让评测标准化——转诊段格式更不统一,纳入会引入额外噪声。
但真实使用中,转诊段恰恰是最重要的上下文。临床上问「气短是不是肺淤血引起的」,要同时看转诊(气短)与报告(肺淤血),缺一半就无法判断。作者在讨论部分把「转诊段前置进输入」列为待探索方向,只是论文没有做。若系统面向真实临床提问,建议在官方设定之外再跑一组「带转诊段」的实验,两组分数的差就是上下文增益,比刷高榜单更有说服力。
7.6 版本与时间戳
PhysioNet 上当前可见的是 1.0.0 版,2022 年 12 月 9 日发布。页面同时给出一个「最新版本」的 DOI,说明版本体系已预留扩展位,但截至核查时没有看到内容层面的增补。
这意味着两件事。其一,数据自 2022 年以来没有修订,标注里的已知问题(分歧、不可答边界)都还在。其二,论文与数据页的作者署名不一致——论文四位作者,PhysioNet 页只列 Soni 与 Roberts 两位。引用时以论文的四位作者为准,数据引用则以 PhysioNet 页面的作者为准,两者不必强行统一,但要知道差异存在。
7.7 DAIMS 八维评分
按 DAIMS 框架(可发现性、可获取性、互操作性、元数据、可持续性)加三项与标注型数据强相关的补充维度,给出如下评分。
| 维度 | 评分 | 依据 |
|---|---|---|
| D — 可发现性(Discoverability) | 高 | 有 ACL Anthology 论文、PhysioNet DOI、RRID 与实验室仓库四重入口;放射 NLP 综述普遍收录,检索「radiology QA dataset」首屏可得 |
| A — 可获取性(Accessibility) | 低 | 凭证制:需认证账号、CITI 培训、签署数据使用协议;部分地区的下载受法域限制,机构合规流程可能耗时数周 |
| I — 互操作性(Interoperability) | 高 | 完全沿用 SQuAD 2.0 的 JSON 结构与字段名,Hugging Face datasets、官方评测脚本、通用 MRC 训练框架均可直接读取,几乎零适配成本 |
| M — 元数据(Metadata) | 中 | 有论文级的完整方法描述与段落级统计,但无逐条记录的数据字典、无标注者编号、无裁定前后对照,字段语义要靠读论文反推 |
| S — 可持续性(Sustainability) | 中高 | 由 PhysioNet 长期托管并分配 DOI,机构级存档有保障;但内容自 1.0.0 后未更新,维护活跃度低,属「托管稳、内容静」型 |
| 标注可信度(补充) | 中高 | 双人独立标注、分阶段裁定、公开分歧分类与一致性数字,流程透明;但跨度级一致性约七成,且无第三方复核 |
| 任务可复现性(补充) | 高 | 切分固定、超参公开、基线明确、指标定义标准,任何人拿到数据即可复现论文表 8 的分数,无需额外材料 |
| 合规传导性(补充) | 中 | 上游 MIMIC-III 协议清晰、派生关系明确;但官方未就「派生标注能否单独再分发」给出比上游更细的说明,团队内部流转需自行加约束 |
综合判断:这是一份获取门槛高、使用门槛低的数据集。拿到手之后几乎不用做任何格式适配,代价全部前置在合规流程上。对能走完凭证流程的团队,它的性价比很高;对走不完的团队,再好的互操作性也用不上。
7.8 外部验证矩阵
判断一份数据集的说法是否可靠,看它被独立验证过几次。
| 验证维度 | 官方是否给出 | 独立复现情况 |
|---|---|---|
| 规模与切分 | 是,论文表 3、表 6 | 可核对,PhysioNet 页面数字一致 |
| 标注一致性 | 是,论文表 5 | 无第三方重标,无法独立核验 |
| 基线分数 | 是,论文表 8 | 后续工作在 RadQA 上复现的量级一致 |
| 人类上限 | 是,论文表 9 | 无第三方复测 |
| 已知偏差 | 部分,分歧分类与推理类别 | 后续工作补充了长文档与大模型视角的分析 |
| 数据错误 | 未系统披露 | 无公开的错误清单 |
最关键的一格是第二行:标注一致性没有被独立复核过。这意味着那七成的数字只能采信论文,无法交叉验证。它不影响使用,但影响你对「模型差距几个点意味着什么」的判断强度。
§8 版本与生态
8.1 版本沿革
时间线很短,只有三个节点。
| 时间 | 事件 |
|---|---|
| 2022 年 6 月 | 论文在 LREC 2022 发表,页码 6250–6259,同期公开实验室仓库说明 |
| 2022 年 12 月 | 数据以 1.0.0 版在 PhysioNet 上线,分配 DOI |
| 之后 | 内容未修订,版本号停在 1.0.0 |
没有 1.1,没有扩充,也没有勘误。这在学术数据集里很常见——论文发表即项目结项,后续维护取决于作者是否有新的研究需求。
对使用者的含义是:拿到的是终版,不必担心版本漂移。 反过来说,也别期待已知问题会被修好——做长期实验时把快照固定下来,记录版本号仍是好习惯。
8.2 谁在用它
三类使用者构成了它的引用生态。
第一类是临床问答系统的研究者。RadQA 提供了一个规模适中、质量可控的评测点,用来验证抽取式模型在专业文本上的表现。这类工作通常会同时报 emrQA 与 RadQA 的分数,形成对照。
第二类是报告生成与事实一致性方向的研究者。他们不一定直接用 RadQA 训练,而是把它当作「理解能力」的旁证——如果模型连原文里的答案都定位不到,那么它生成的报告可信度就值得怀疑。
第三类是做偏好对齐与指令微调的团队。近年来出现了在 RadQA 上构造偏好数据、用直接偏好优化提升问答质量的工作,把这份抽取式数据集改造成了生成式任务的训练素材。这类改造已经偏离了原始任务定义,但说明数据仍有再利用价值。
第三类的出现值得留意:它意味着 RadQA 的用途正在从「评测」向「训练素材」漂移。这种漂移会带来口径混乱——在改造后的数据上刷出的分数,与论文表 8 的分数不可比。
8.3 它靠什么活着
一份规模不大、获取还有门槛的数据集,为什么能持续被引用?
第一层是任务定义的空位。在它之前,临床抽取式问答基本等同于 emrQA,而 emrQA 的模板化问题被反复批评。RadQA 补上了「自然提问 + 不可回答」这个空位,后来者要做同类研究,绕不开它。
第二层是可复现的基线。论文给的超参足够具体,任何人拿到数据都能复现出量级一致的分数。这让它成为可靠的对照点——审稿人看到「我们在 RadQA 上达到 X」,能立刻判断这个数字是否合理。
第三层是合规上的正当性。它派生自 MIMIC-III 并且走了 PhysioNet 的完整流程,机构审查时容易通过。相比之下,很多团队自建的放射问答集无法公开,也就无法成为公共基准。
三层叠起来,形成了一种低维护但高存续的状态:作者不需要持续投入,使用者的需求也不会消失。这就是它能「托管稳、内容静」的原因。
8.4 在大模型时代的位置
抽取式问答在生成式模型兴起后显得有些过时——现在的模型可以直接生成一段回答,不必从原文里划出一段。
但 RadQA 的价值并没有因此消失,只是换了个位置。
当模型能自由生成时,「它是不是在编」成了核心问题,而判定是否编造最硬的办法仍是回到原文:这个说法在报告里有没有依据。RadQA 提供的正是这种「依据定位」的标注,于是它的角色从「问答评测集」部分转向「忠实性评测的素材」——不看模型答得像不像,而看它指的依据对不对。
§9 使用指引
9.1 三种角色的路径
不同角色进场的方式不同,走错顺序会浪费大量时间。
| 角色 | 第一步 | 第二步 | 容易卡住的地方 |
|---|---|---|---|
| 论文作者 | 复现论文表 8 的基线分数 | 在官方切分上跑自己的模型 | 忘了开发与测试段有多个参考答案,分数莫名偏低 |
| 产品工程师 | 先确认合规链路能否走通 | 再评估任务形式是否匹配产品 | 拿到数据才发现不能用于在线服务 |
| 教学者 | 取表 1 那个样例讲任务定义 | 用少量样本演示标注难点 | 直接讲指标,学生不理解「最短充分」为何重要 |
共同的第一条建议是:先跑通一个最小闭环,再谈规模。 数据量小,端到端跑一遍的成本很低,先用它确认自己的流程没问题,再迁移到更大的语料上。
9.2 一个最小可运行骨架
下面这段代码演示从加载到出分的骨架,字段名与官方 JSON 一致。
#-- 最小闭环:读官方 JSON,转成 MRC 样本,算跨度 F1
import json
from collections import Counter
def load_split(path):
with open(path, encoding="utf-8") as f:
raw = json.load(f)
rows = []
for article in raw["data"]:
for para in article["paragraphs"]:
for qa in para["qas"]:
rows.append({
"id": qa["id"],
"context": para["context"],
"question": qa["question"],
#-- 开发与测试段可能有多个合法答案,全部保留
"answers": [a["text"] for a in qa.get("answers", [])],
"impossible": qa.get("is_impossible", False),
})
return rows
def span_f1(pred, gold_list):
#-- 与任一参考答案取最大词级 F1,再对样本求平均
best = 0.0
for gold in gold_list:
p, g = pred.lower().split(), gold.lower().split()
common = Counter(p) & Counter(g)
same = sum(common.values())
if same == 0:
continue
prec, rec = same / len(p), same / len(g)
best = max(best, 2 * prec * rec / (prec + rec))
return best
train = load_split("train.json")
dev = load_split("dev.json")
test = load_split("test.json")
#-- 先确认三个切分的槽位数与不可回答比例,再开始训练
for name, rows in [("train", train), ("dev", dev), ("test", test)]:
n_imp = sum(r["impossible"] for r in rows)
print(f"{name}: {len(rows)} 槽位,其中 {n_imp} 个不可回答")
三点说明。第一,answers 用列表而非单值,是为了兼容开发与测试段的多个参考答案;如果写成单值,会系统性低估分数。第二,is_impossible 必须原样保留,否则无法训练弃答。第三,先打印三个切分的槽位数,能立刻发现「分母取错」这类错误——如果训练段的槽位数明显不是问题数的两倍,说明解析逻辑漏了段落。
9.3 在 AI 流程中的位置
把 RadQA 放进一条完整的放射报告处理流水线,它占据的是「理解力验证」这一格,而不是「训练」或「生成」。
| 流水线环节 | 是否需要 RadQA | 说明 |
|---|---|---|
| 报告文本抽取与段落切分 | 否 | 需要的是 MIMIC-III 原文与解析规则 |
| 实体与关系标注 | 否 | 用 RadGraph 一类资源 |
| 问答模型训练 | 可选 | 数据量小,通常配合开放域问答集联合训练 |
| 理解能力评测 | 是 | 这是它的主战场 |
| 生成报告的事实核查 | 部分 | 可借用其跨度标注作为依据定位的金标准 |
| 上线后的持续监控 | 否 | 需要的是自己场景的数据 |
最后一行值得强调:RadQA 不能替代自有场景的评测集。它给的是外部参照——「在这个公认难度上,我的模型处于什么位置」;它答不了「在我的产品场景里,模型够不够用」。这两件事需要两套数据。
§10 AI 使用声明
| 项目 | 声明 |
|---|---|
| 数据性质 | 真实临床文本的派生标注,非合成数据;上游为 MIMIC-III 放射报告 |
| 允许用途 | 学术研究、模型评测、教学演示、方法对比 |
| 不建议用途 | 直接作为临床决策依据、作为医疗器械软件的验证数据、用于训练面向患者的自动诊断产品 |
| 伦理边界 | 文本已经过去标识化处理,但报告中的罕见病程组合仍可能造成间接识别,不得尝试重识别 |
| 合规要求 | 须持 PhysioNet 凭证并在协议范围内处理;不得将原文发送至第三方在线服务 |
| 引用要求 | 论文引用 Soni et al., LREC 2022;数据引用 PhysioNet v1.0.0 与对应 DOI |
| 版本状态 | 1.0.0,2022 年 12 月发布,此后未修订 |
| 责任声明 | 使用本数据产生的一切模型、结论与产品后果由使用者承担,发布方与托管方不承担连带责任 |
常见误读
围绕这份数据流传着一些似是而非的说法,逐条对照官方材料可以澄清。
| 常见说法 | 实际情况 | 证据 |
|---|---|---|
| 「它基于 MIMIC-IV 的放射报告」 | 底层是 MIMIC-III v1.4,报告编号与 MIMIC-IV 不通 | 论文 3.1 节;PhysioNet 父项目一栏 |
| 「它是视觉问答,输入含影像」 | 纯文本任务,输入只有报告段落与问题,无任何影像 | 论文任务定义;发放文件仅含 context 与 question |
| 「问题数是六千多」 | 六千余是问答槽位数,问题数是三千余,两者差整两倍 | 论文摘要与表 6 的口径差异 |
| 「不可回答问题是为了凑负样本人工造的」 | 是「先看转诊后看报告」的流程副产品,非人工构造 | 论文 3.2 节问题创建流程 |
| 「答案就是一个医学实体」 | 答案是完整短语,可跨行;问「有无渗出」时答案是「弥漫性双肺渗出影」而非「渗出」 | 论文表 6 答案长度统计 |
| 「人类能到九十分,模型六十几分,差距就是能力差距」 | 人类的九十分是与另一名人类对齐的分数,模型是与标注习惯对齐的分数,对齐对象不同 | 论文表 5 与表 9 的指标定义 |
| 「标注两人一致,质量有保证」 | 跨度级一致性约七成、完全匹配约五成,且未经第三方复核 | 论文表 5;无独立重标记录 |
| 「拿到 MIMIC-IV 凭证就能下载」 | 授权链走 MIMIC-III 那一支,须单独在 RadQA 页面申请并签协议 | PhysioNet 数据页的访问政策 |
| 「仓库在政府机构账号下」 | 实际在作者实验室仓库的 datasets 仓库 radqa 目录 | 论文脚注给出的地址 |
| 「跑分时转诊段也算输入」 | 官方设定只喂所见段与印象段,转诊段被排除 | 论文第 5 节评测设定 |
| 「不可回答就是报告没写」 | 一部分是客观缺失,一部分是转诊与报告表述差异导致的判断分歧 | 论文表 4 的分歧分类 |
第十一条最容易被忽略,却直接影响弃答策略的设计:如果把所有不可回答槽位都当成「客观缺失」来训练,模型会学到过度弃答的倾向。
FAQ
Q1:RadQA 能不能商用?
不能简单地说能或不能。许可为 PhysioNet 凭证制健康数据许可 1.5.0,核心约束是不可再分发原文、不得尝试重识别、须在协议范围内处理。商业机构可以申请凭证并用于内部研发,但把数据或由其派生的可还原样本嵌入对外产品,需要单独评估。稳妥做法是只把训练出的模型权重用于产品,不携带原始文本。
Q2:只有一百名患者,做深度学习够吗?
做从零训练不够,做微调与评测够。通行做法是先在开放域问答集(如 SQuAD 2.0)上微调,再迁到 RadQA 上调参,最后在测试集出分。论文的对照实验也支持这条路径:SQuAD 预微调的效果优于 emrQA 预微调。
Q3:为什么答案常常只有几个字?
因为标注原则是「最短且充分」。报告里的原句往往包含多个信息点,只有与问题直接相关的那一段才该被划出来。比如问心影是否变大,答案只取「较前增大」,不含「但稳定」,因为后者回答的是另一个问题。同一个案例里问「肺里有没有渗出」,答案是「弥漫性双肺渗出影」而不是整句描述,理由相同。
Q4:所见段和印象段的答案不一致怎么办?
不一致本身是数据的一部分,不是错误。所见段是观察,印象段是结论,两者本就可以有措辞差异。评测时两个槽位分别计分;做误差分析时,两处的差异恰好能区分模型是「读懂了观察」还是「只会抄结论」。
Q5:能不能把它改造成生成式任务?
可以,事实上已经有人这么做——把跨度当作参考答案,训练模型直接生成句子,或构造偏好对做对齐。但要注意改造后的分数与论文表 8 不可比,因为任务定义已经变了。做这类改造时,建议同时保留原始抽取式设定作为对照。
Q6:为什么论文说 SQuAD 预微调比 emrQA 更有效?
作者的解读是数据质量压过领域接近性。emrQA 是模板生成的,句式高度重复,模型容易学到模板偏置;SQuAD 是人工撰写的高质量问答,句式多样。这个结论提示:给临床问答做迁移时,不必迷信同领域数据。
Q7:中文报告能用吗?
不能直接用。全部文本是英文,且带有美式医疗书写习惯。要用于中文场景,需要重新标注一套中文数据,RadQA 只能作为任务设计与标注流程的参照。
Q8:为什么官方不把转诊段放进输入?
为了让任务更纯粹,也为了让评测标准化。转诊段格式更不统一,纳入会引入额外噪声。但这个选择牺牲了真实场景的一部分上下文,作者自己也在讨论部分把它列为待探索方向。建议在自己的实验里补一组「带转诊段」的对照。
Q9:它和 MIMIC-CXR 的视觉问答什么关系?
没有直接派生关系。前者读文字,后者读影像加文字;前者基于 MIMIC-III 报告,后者基于 MIMIC-CXR 影像与报告。两者常被并列讨论,但测量的能力不同,分数不可互换。
Q10:怎么判断我的模型分数是否可信?
三个检查。第一,确认评测脚本对多参考答案取最大分,而不是只取第一个。第二,报告按患者重采样的置信区间,不要只报单点分数。第三,确认自己的分数与论文基线的差距落在合理范围——若在 RadQA 上突然比 63.55 高出一大截,先怀疑数据泄漏或切分错误,而不是先庆祝。
术语表
| 术语 | 含义 |
|---|---|
| 抽取式问答 | 答案必须是原文中的一段连续文字,模型的任务是定位而非生成 |
| 机器阅读理解 | 给定文本与问题,让模型从中找答案的任务范式,缩写 MRC |
| 跨度 | 原文中一段连续字符区间,用起止位置表示,是抽取式问答的输出单位 |
| 最短充分跨度 | 既足以回答问题、又不含多余信息的片段,是本数据集的核心标注原则 |
| 转诊段 | 报告开头由开单医生填写的检查理由与病情简述,英文标签多为 INDICATION |
| 所见段 | 放射科医生逐项描述影像征象的段落,英文标签多为 FINDINGS |
| 印象段 | 对所见做归纳并给出结论的段落,英文标签多为 IMPRESSION,有时写作 Conclusion |
| 不可回答 | 报告中没有能回答该问题的内容,模型应显式弃答而非硬编 |
| 弃答 | 模型判定问题无法从给定文本回答的行为,与「答错」是两类不同的错误 |
| 完全匹配 | 预测跨度与参考答案逐字相同的比例,英文缩写 EM,是最严的指标 |
| 词级 F1 | 按词重叠计算的精确率与召回率的调和平均,比完全匹配宽松 |
| 标注一致性 | 两名标注者结果之间的一致程度,本数据集用跨度 F1 度量 |
| 裁定 | 对两名标注者的分歧做人工裁决、确定最终答案的过程 |
| 患者级切分 | 以患者为单位划分训练/开发/测试,避免同一病人的报告跨切分泄漏 |
| 文档步长 | 长文档切片时相邻窗口的重叠长度,用于防止答案落在切口 |
| SQuAD 格式 | 一种广泛使用的问答数据 JSON 结构,含 context、question、answers、answer_start |
| 槽位 | 一个「问题 × 段落位置」的标注单元,本数据集中每问题两个槽位 |
| 派生数据 | 在原始数据之上生成的标注或加工产物,其授权受上游约束 |
| 凭证制访问 | 需身份认证与协议签署才能获取的数据发放方式,区别于公开下载 |
附录 A 速查卡
| 键 | 值 |
|---|---|
| 名称 | RadQA |
| 全称 | A Question Answering Dataset to Improve Comprehension of Radiology Reports |
| 论文 | LREC 2022, pp. 6250–6259, ACL 2022.lrec-1.672 |
| 数据 DOI | 10.13026/ckkp-6y19 |
| 版本 | 1.0.0(2022-12-09) |
| 上游 | MIMIC-III Clinical Database v1.4 |
| 患者 / 报告 | 100 / 1,009 |
| 问题 / 槽位 | 3,074 / 6,148 |
| 不可回答槽位 | 1,754 |
| 切分 | 患者级 8:1:1 |
| 文件 | train.json / dev.json / test.json |
| 格式 | SQuAD 2.0 兼容 JSON |
| 指标 | EM + 词级 F1 |
| 基线 | BERT-MIMIC,测试集 F1 63.55 |
| 人类上限 | 最佳 90.31(测试集,标注者一) |
| 许可 | PhysioNet Credentialed Health Data License 1.5.0 |
附录 B 文件清单
| 路径 | 类型 | 说明 |
|---|---|---|
| train.json | 数据 | 训练切分,问题去重后裁定为单一答案 |
| dev.json | 数据 | 开发切分,保留多个合法答案 |
| test.json | 数据 | 测试切分,保留多个合法答案 |
| README(PhysioNet 页) | 文档 | 版本、许可、引用、父项目、统计口径 |
| 论文 PDF | 文档 | 方法、统计表、基线、分歧分类、推理类别 |
| 实验室仓库 radqa 目录 | 代码/说明 | 数据说明与引用格式,不含原始数据 |
附录 C 外部资源对照
| 资源 | 地址形态 | 用途 |
|---|---|---|
| PhysioNet 数据页 | physionet.org/content/radqa | 申请、下载、查版本与许可 |
| ACL Anthology | aclanthology.org/2022.lrec-1.672 | 论文正文与引用信息 |
| LREC 2022 论文集 | lrec-conf.org 会议站 | 会议版 PDF 与海报 |
| 实验室仓库 | github.com/krobertslab/datasets | 数据说明与引用模板 |
| 数据使用协议 | PhysioNet 页面内链接 | 签署前必读,明确禁止事项 |
附录 D 字段字典
| 字段 | 类型 | 含义 |
|---|---|---|
| data | 数组 | 顶层容器,每个元素对应一份报告 |
| data[].title | 字符串 | 报告标识,通常为去标识化后的编号 |
| data[].paragraphs | 数组 | 段落列表,本数据集中通常只有一项(所见段与印象段拼接) |
| paragraphs[].context | 字符串 | 拼接后的报告正文,不含转诊段 |
| paragraphs[].qas | 数组 | 该段落上的问题列表 |
| qas[].id | 字符串 | 问题唯一标识,前缀含报告编号 |
| qas[].question | 字符串 | 问题文本,由医生仅凭转诊段撰写 |
| qas[].answers | 数组 | 参考答案列表,开发与测试段可能有多项 |
| answers[].text | 字符串 | 答案跨度原文 |
| answers[].answer_start | 整数 | 答案在 context 中的字符起始位置 |
| qas[].is_impossible | 布尔 | 是否为不可回答槽位,不可回答时 answers 为空 |
附录 E 引用与版本
论文引用(BibTeX 关键字段):
@inproceedings{soni2022radqa,
author = {Soni, Sarvesh and Gudala, Meghana and Pajouhi, Atieh and Roberts, Kirk},
title = {RadQA: A Question Answering Dataset to Improve Comprehension of Radiology Reports},
booktitle = {Proceedings of the Language Resources and Evaluation Conference},
month = {June},
year = {2022},
address = {Marseille, France},
pages = {6250--6259},
url = {https://aclanthology.org/2022.lrec-1.672}
}
数据引用:Soni, S., & Roberts, K. (2022). RadQA: A Question Answering Dataset to Improve Comprehension of Radiology Reports (version 1.0.0). PhysioNet. RRID:SCR_007345.
版本记录:1.0.0 于 2022 年 12 月 9 日发布;截至核查无后续修订;论文版与数据版的作者署名不一致(论文四位,数据页两位)。
编辑说明
核验时间:2026 年 10 月 29 日。
核验方式:以 LREC 2022 论文 PDF(ACL Anthology 2022.lrec-1.672)为第一来源,逐节核对规模、切分、标注流程、一致性与基线数字;以 PhysioNet 数据页(v1.0.0)核对许可、访问政策、父项目、文件清单与 DOI;以 LREC 2022 会议海报版补充模态构成与对照表;实验室仓库说明用于确认数据托管位置与引用格式。四处材料在报告数、问题数、槽位数、切分比例上一致。
未覆盖内容:未获取数据本体,因而无法核对逐条记录的实际字段命名是否与附录 D 完全一致——附录 D 依据 SQuAD 2.0 通用结构与论文描述推定,若官方 JSON 字段有自定义扩展,以实际文件为准。未复核标注一致性数字,该数字无法在不重标的情况下独立验证。
口径冲突记录:一、论文摘要的问题数与论文表 6 的「问题数」栏相差一倍,正文按「问题数 / 槽位数」两个词分别指代,已在 §2.2 说明;二、论文摘要把人类最佳 90.31 与平均 84.52 并列,两者取自不同切分,已在 §7.3 指出;三、论文四位作者与 PhysioNet 页两位作者的署名差异,已在 §7.6 与附录 E 记录。
与常见二手描述不符之处:底层语料为 MIMIC-III 而非 MIMIC-IV;代码仓库在作者实验室账号而非政府机构账号;任务为纯文本抽取式问答,不含影像输入。三处均在正文相应位置给出依据。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- asclepius — 共享标签:医疗NLP / 医学问答与基准 / 电子健康记录 / 临床文本
- mednli — 共享标签:医疗NLP / 医学问答与基准 / 电子健康记录 / 临床文本
- aci-bench — 共享标签:医疗NLP / 医学问答与基准 / 电子健康记录 / 临床文本
- er-reason — 共享标签:医疗NLP / 医学问答与基准 / 电子健康记录 / 临床文本
- mimic-ext-synnotes — 共享标签:医疗NLP / 医学问答与基准 / 电子健康记录 / 临床文本
- tcmeval-sdt — 共享标签:医疗NLP / 医学问答与基准 / 电子健康记录 / 临床文本
- medsynth — 共享标签:医疗NLP / 医学问答与基准 / 电子健康记录 / 临床文本
- tcm-sd — 共享标签:医疗NLP / 医学问答与基准 / 电子健康记录 / 临床文本
- mietic — 共享标签:医疗NLP / 医学问答与基准 / 电子健康记录 / 临床文本
- ann-pt-summ — 共享标签:医疗NLP / 医学问答与基准 / 电子健康记录 / 临床文本
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

