信息速览
一张胸片上写着的东西,远多于一份报告里被念出来的东西。前者可以被拆成一张关系表:三十六个解剖对象、六十八种属性、五百六十三条「某处有或没有某种表现」的判断;后者是放射科医师在时间压力下挑出来讲的那两三句。医学视觉问答(Visual Question Answering, VQA)想做的,是把前者按需取出来——问一句,答一句。但过去十几年里公开的医学 VQA 资源,规模停在几千到几万的量级,问法也集中在「这里正不正常」这一类:模板少、复述少、逻辑结构简单,模型只要把输出压到「是/否」两个字上,就能拿到不难看的分数。
MIMIC-Ext-MIMIC-CXR-VQA 换了一条路子。它不请人来写问题,而是先定义四十八个带槽位的句子模板,用集合运算(并、交、差)与逻辑运算(与、或)把问法撑开,再用 GPT-4 对每个模板做平均十六点五次复述,最终得到 377,391 组(图像、问题、答案)三元组。答案不是人工写的,而是由与模板一一对应的程序在结构化的场景图标注上执行出来——这意味着每一条答案都能追溯到「哪一个对象、哪一个属性、存在还是不存在」这条原始关系,而不是某位标注者的一句印象。
它的代价同样清楚:图像全部来自单中心的 MIMIC-CXR 成人住院人群;训练与验证集建立在机器生成的银标之上,只有测试集用了四名放射科医师手工修订过的金标;获取它需要 PhysioNet credentialed 账号与一份数据使用协议。它不是「放射科医师真实提问」的记录,是一件为 benchmarking 与指令微调而造的量具。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 全名 | MIMIC-Ext-MIMIC-CXR-VQA: A Complex, Diverse, And Large-Scale Visual Question Answering Dataset for Chest X-ray Images |
| 发布方 | PhysioNet;数据由韩国科学技术院(KAIST)团队构建 |
| 作者 | Seongsu Bae、Daeun Kyung、Jaehee Ryu、Eunbyeol Cho、Gyubok Lee、Sunjun Kweon、Jungwoo Oh、Lei JI、Eric Chang、Tackeun Kim、Edward Choi,共 11 人 |
| 首次发布 | 2024 年 7 月 19 日 |
| 最近改动 | 2024 年 7 月 19 日(至今仅 1.0.0 一个版本) |
| 版本号 | 1.0.0 |
| DOI | 10.13026/deqx-d943(v1.0.0);10.13026/my7r-v463(latest) |
| 三元组总数 | 377,391 组(图像、问题、答案) |
| 图像数 | 训练 133,687、验证 8,610、测试 500 |
| 问题数 | 训练 132,387、验证 31,148、测试 7,565 |
| 答案数 | 训练 6,628、验证 2,508、测试 700 |
| 样本数 | 训练 290,031、验证 73,567、测试 13,793 |
| 模板 | 48 个种子模板,复述后扩展为 794 个,平均每个模板 16.5 个复述 |
| 问题分类 | 3 种语义类型(verify/choose/query)× 7 种内容类型 |
| 图像来源 | MIMIC-CXR-JPG v2.0.0,每个 study 取一张代表性正位(AP 或 PA) |
| 标注来源 | Chest ImaGenome v1.0.0(银标用于训练与验证,金标用于测试) |
| 表格来源 | MIMIC-IV v2.2(用于结构化电子病历侧的扩展) |
| 标注方式 | 模板填充 + 程序化答案生成 + GPT-4 复述,模板经专科医师审定 |
| 文件格式 | JSON(train.json/valid.json/test.json),每条为字典 |
| 许可 | PhysioNet Credentialed Health Data License 1.5.0 |
| 访问门槛 | 仅 credentialed 用户且签署 DUA 可访问;需完成 CITI 培训 |
| 典型用途 | 医学 VQA 基准评测、医学视觉语言模型指令微调、多模态电子病历问答 |
§1 它要解决的具体麻烦
1.1 医学 VQA 长期缺的三样东西
医学视觉问答的设想很朴素:给模型一张影像和一句自然语言问题,让它用自然语言回答。这个设想在通用领域(VQA、GQA)跑通之后被搬进医学影像,但搬过来的过程中丢了三样东西。
第一样是复杂度。早期医学 VQA 资源的问题大多是单条件的:「这处有没有异常」「这是什么模态」「这个器官在哪儿」。这类问题把任务退化成了二分类或小规模多分类,模型不需要在图像上做检索、比较或集合运算。真正的诊断推理里,「左肺和右肺都有异常吗」「只在左上肺而不在右上肺的异常有哪些」这类问法才是常态——它们要求模型先在图像上定位两个区域,再对各自的结论做一次逻辑合成。
第二样是多样性。同一个意思可以有十几种说法,而模板化的问法往往只有一个说法。模型于是学会了匹配句子表面形式,而不是理解语义。一旦换个说法,性能就掉。
第三样是规模。几千条样本既不够训练深层模型,也不够做稳定的评测切分——切出来的测试集小到几百条,两个模型之间差几个样本就翻转结论。
MIMIC-Ext-MIMIC-CXR-VQA 的设计几乎是对着这三点逐个回应的:四十八个模板里有一半带集合或逻辑运算,用于撑开复杂度;GPT-4 复述把四十八个句子撑成七百九十四个,用于撑开多样性;三十七万余条三元组,用于撑开规模。
1.2 三条常见的错误期待
第一条,期待它是「放射科医师真实问过的问题」。它不是。问题先由模板生成、再由 GPT-4 复述,模板虽然经过一位专科医师审定临床重要性,但语料并不来自诊室里的真实对话。想研究「临床真实提问分布」的项目,用它会答非所问。
第二条,期待它自带图像。它不带。三个 JSON 文件里只有 image_path 字段给出相对路径,真正的 JPG 要到 MIMIC-CXR-JPG v2.0.0 里去取,而那需要单独签一份 DUA(§5.5)。
第三条,期待它的答案是人工判读结果。只有测试集的五百张图像来自人工金标;训练与验证集建立在 Chest ImaGenome 的机器生成银标上。把训练集当金标准用,等于把上游自动标注的误差直接搬进自己的模型。
1.3 它能给到的与给不到的
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 医学 VQA 模型的大规模训练 | 训练 290,031 条、验证 73,567 条,覆盖 794 个模板 | 够,这是目前公开医学 VQA 里规模最大的一档 |
| 稳定的评测切分 | 测试集 13,793 条,来自 500 张人工金标图像 | 够做整体比较,不够做单类细分比较 |
| 集合与逻辑推理能力评测 | 模板 4–18、29–40 显式使用并、交、差、与、或 | 够,这是它相对同类最硬的一块 |
| 指令微调语料 | 三十七万余条图文问答对,字段完整可转对话格式 | 够,且比报告改写类语料更结构化 |
| 多模态电子病历问答 | 问题侧完整,表格侧要自己从 MIMIC-IV 接 | 半成品,需自行对齐 subject_id(§6.1) |
| 临床真实提问建模 | — | 不够,问题是机器生成而非采集 |
| 多中心泛化验证 | 单一来源、单一人群 | 不够,只能做跨库不能做跨中心 |
| 纵向对比(同一患者前后片比较) | 每 study 只取一张代表性正位 | 不够,设计上就没有成对的时序样本 |
| 自由文本报告生成 | 只有短答案,没有成段文本 | 不够,那是 MIMIC-CXR 报告原文的任务 |
1.4 你的处境与它能帮到的事
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 你在做医学 VQA,但现有基准太小,结果不稳 | 提供 13,793 条金标测试样本,不需要自己凑评测集 | 先按官方切分跑一遍基线,再决定是否做模板级分析 |
| 你想证明模型会做「两个部位都异常吗」这类推理 | 模板 11、12、29、30 等专门覆盖这类合成判断 | 按 template 字段分组评测,看合成类是否明显低于单条件类 |
| 你在做医学视觉语言模型的指令微调 | 三十七万余条问答对可直接转成单轮对话 | 用 question 作 instruction、answer 作 response,注意空答案要剔除 |
| 你想做图文加表格的多模态病历问答 | 问题侧与 subject_id 已就绪,可与 MIMIC-IV 对齐 | 用 subject_id 做连接键,注意 MIMIC-IV v2.2 的版本一致性 |
| 你担心模型只是记住了模板表面形式 | 794 个复述模板 + 可按 template 分组 |
做「训练见过的模板 vs 未见模板」分组评测 |
| 你要一个可复核答案来源的数据集 | 每条带 template_program 与 template_arguments |
按程序重放答案,验证与 answer 字段一致 |
1.5 一句话判断
它不适合当「临床问答的真实样本」,而适合当「一把刻度很细的尺子」:三十七万条问题覆盖了从单条件判断到集合差运算的整条难度轴,并且每一条答案都能被程序重放验证。
1.6 不适合谁:四条边界
不适合拿来做临床语言研究。 问题由模板与 GPT-4 生成,语序与用词分布与真实医患/医医对话不同。
不适合拿来当金标准训练。 训练与验证集的标签是 Chest ImaGenome 的机器生成银标,官方明确承认存在标注误差,只在测试集换成了人工金标。
不适合拿来做时序或纵向推理。 每个 study 只保留一张代表性正位图像,同一患者的多次检查没有被组织成序列。
不适合在没有 MIMIC-CXR-JPG 授权的情况下使用。 没有 image_path 指向的那批 JPG,这三份 JSON 只是一堆没有图像的问题。
§2 数据构成与规格
2.1 目录结构与三个文件
官方页面给出的目录结构极简:一个 mimiccxrvqa 根目录下的 dataset 子目录,里面放着三个 JSON 文件。
#-- 官方页面给出的目录结构
mimiccxrvqa
└── dataset
├── train.json
├── valid.json
└── test.json
三个文件对应训练、验证、测试三个切分。切分逻辑不是随机打散,而是先按标注来源分:机器生成的银标集合按 95:5 切成训练与验证,人工标注的金标集合整体作为测试。官方还说明,在切分银标集合时做了均衡——让「至少有一个属性存在的异常 study」与「无任何属性的正常 study」在两个集合里分布接近。
每个 JSON 文件的内容都是一个 Python 字典列表(list of dict),一条样本一个字典。这意味着整份文件可以一次性 json.load 进内存;三十七万条的规模下,训练文件加载后占用内存在数 GB 量级,内存紧张的机器应当流式读取(§5.3)。
配套的 GitHub 仓库(baeseongsu/mimic-cxr-vqa)另外披露:仓库内的 dataset/ 目录还包含 ans2idx.json(答案到索引的映射),以及带下划线前缀的预发布文件 _train_part1.json、_train_part2.json、_valid.json、_test.json——这些预发布文件故意不含答案,完整文件由复现脚本在持有 PhysioNet 凭据的本地生成。这一点解释了为什么「从仓库直接下载」拿不到可用的数据集。
| 文件 | 角色 | 内容形态 | 使用注意 |
|---|---|---|---|
dataset/train.json |
训练切分 | 字典列表,290,031 条 | 标签为银标;答案由程序生成 |
dataset/valid.json |
验证切分 | 字典列表,73,567 条 | 与训练同源,均为银标 |
dataset/test.json |
测试切分 | 字典列表,13,793 条 | 标签为人工金标,唯一可当准绳的一档 |
ans2idx.json |
答案索引映射 | 答案字符串到整数索引 | 见于 GitHub 仓库,官方页面正文未列 |
_*.json |
不含答案的预发布文件 | 含问题与模板,不含答案 | 需本地运行复现脚本补齐 |
2.2 字段字典
官方页面逐条列出了十三个键。这套字段的设计有一个明显特点:它同时保存了「问题的自然语言形态」与「问题的结构化来源」——question 给人看,template、template_program、template_arguments 给程序看。这个双轨设计是它区别于多数问答数据集的地方。
| 字段 | 类型 | 含义 | 使用注意 |
|---|---|---|---|
split |
字符串 | 所属切分:train/valid/test | 与所在文件名一致,冗余但便于合并后回溯 |
idx |
整数 | 样本在切分内的序号 | 只在单个切分内唯一,跨文件合并需加前缀 |
subject_id |
字符串 | 患者唯一标识 | 与 MIMIC-IV、MIMIC-CXR 的患者编号体系一致 |
study_id |
字符串 | 对应的检查(study)标识 | 与 image_path 中的 s<study_id> 段对应 |
image_id |
字符串 | 图像唯一标识 | 形如 2b8cc8f3-d8c51958-3023a0e5-10571272-6d3d0f04 |
image_path |
字符串 | 图像相对路径 | 形如 p15/p15569663/s51014827/<image_id>.jpg |
question |
字符串 | 自然语言问题 | 由模板填充并经复述,同一模板多种说法 |
semantic_type |
字符串 | 语义类型:verify/choose/query | 决定答案形态与评测指标 |
content_type |
字符串 | 内容类型:presence/anatomy/attribute/abnormality/plane/gender/size | 决定问题在问什么 |
template |
字符串 | 问题模板原文 | 带 ${...} 槽位标记,可做模板级分组 |
template_program |
字符串 | 该模板对应的答案生成程序名 | 形如 program_5,模板与程序一一对应 |
template_arguments |
字典 | 五个子字典:object/attribute/category/viewpos/gender | 同参数多次出现时键后追加序号 |
answer |
字符串列表 | 答案 | choose 与 query 类无答案时为空列表 |
template_arguments 是五个子字典的组合,这一点容易被误读。它的含义不是「这条样本有五个参数」,而是「模板里可能出现的参数一共分五类」,实际填充了哪几类取决于模板。例如上文的示例样本只填了 object 与 attribute,其余三个子字典为空字典。当同一个参数在模板里出现两次时(如 ${attribute_1} 与 ${attribute_2}),子字典用 "0"、"1" 作为键区分。
2.3 一条样本的完整解剖
官方页面给出的示例样本如下(为便于阅读做了缩进展开):
{
"split": "train",
"idx": 13280,
"subject_id": "15569663",
"study_id": "51014827",
"image_id": "2b8cc8f3-d8c51958-3023a0e5-10571272-6d3d0f04",
"image_path": "p15/p15569663/s51014827/2b8cc8f3-d8c51958-3023a0e5-10571272-6d3d0f04.jpg",
"question": "Is there any sign of both pleural effusion and copd/emphysema present in the right lower lung zone?",
"semantic_type": "verify",
"content_type": "presence",
"template": "Is there any sign of both ${attribute_1} and ${attribute_2} present in the ${object}?",
"template_program": "program_5",
"template_arguments": {
"object": { "0": "right lower lung zone" },
"attribute": { "0": "pleural effusion", "1": "copd/emphysema" },
"category": {},
"viewpos": {},
"gender": {}
},
"answer": ["yes"]
}
把这条样本拆开读,可以看到整条生成链:模板 Is there any sign of both ${attribute_1} and ${attribute_2} present in the ${object}? 是官方模板列表里的第 5 号,属于 verify 语义、presence 内容,问的是「两个属性是否同时存在于同一个对象」——这是一次显式的逻辑与运算。填充值是 right lower lung zone(右下肺野)、pleural effusion(胸腔积液)、copd/emphysema(慢阻肺/肺气肿)。program_5 的任务是到这张图像的场景图关系表里查这两条属性在该对象上是否同时为真,并输出答案。
这条样本同时暴露了一个使用细节:attribute 子字典里两个值的顺序是采样决定的,程序做的是集合判断,因此「${attribute_1} 与 ${attribute_2}」的先后不影响答案。评测时如果只做字符串精确匹配,模型回答的顺序敏感性就是评测引入的、而不是数据引入的。
2.4 三个主键的层级映射
subject_id、study_id、image_id 构成一条三级链,与 MIMIC-CXR 的原始组织方式完全一致。理解这条链是做数据划分的前提。
| 层级 | 字段 | 在 MIMIC-CXR 中的含义 | 在本数据集中的处理 |
|---|---|---|---|
| 患者 | subject_id |
一次住院或多次就诊归属的同一个人 | 原样保留,是跨库连接的唯一可靠键 |
| 检查 | study_id |
同一次拍片检查,可能含多张图像 | 每个 study 只保留一张代表性正位 |
| 图像 | image_id |
单张 DICOM 转出的 JPG | 样本直接挂在图像上 |
这里有一个容易被忽略的泄漏源。由于一个患者可以有多次 study,而每次 study 出一张图、每张图可以配多组问答,同一名患者的样本会以三种方式重复出现在数据集里:同一张图的不同问题、同一患者的不同 study、同一 study 的不同问题。如果按 idx 做随机切分,测试集里会出现大量与训练集同图甚至同患者的样本,模型只要记住这张图的场景图就能答对。
正确的做法是用 subject_id 做分组键,保证同一个人只出现在一侧。更进一步,如果研究目标是「同一张图内的泛化」,可以用 image_id 分组;如果目标是「跨检查的泛化」,必须用 subject_id 分组。
| 分组键 | 允许的泄漏 | 适用研究问题 |
|---|---|---|
| 随机 | 同图、同 study、同患者均泄漏 | 仅用于快速 sanity check,不可报告 |
image_id |
同 study 与同患者泄漏 | 同一次检查内部的跨区域泛化 |
study_id |
同患者泄漏 | 同一患者跨检查的泛化 |
subject_id |
无 | 跨患者泛化,多数论文应采用的口径 |
2.5 与同类资源的字段差异
| 对比项 | 本数据集 | VQA-RAD | SLAKE(英文部分) | PathVQA |
|---|---|---|---|---|
| 影像模态 | 胸片 | CT/MRI/X 线混合 | 多模态混合 | 病理图像 |
| 图像数(官方或综述口径) | 训练 133,687、验证 8,610、测试 500 | 315 | 642 | 4,998 |
| 问答对数 | 377,391 | 3,515 | 7,032 | 32,795 |
| 问题来源 | 模板 + GPT-4 复述 | 临床人员手工撰写 | 医师标注 | 教科书与数字图书馆抽取 |
| 答案生成 | 与模板一一对应的程序执行 | 人工 | 人工 | 半自动 |
| 是否含集合/逻辑运算 | 是,显式设计 | 否 | 否 | 否 |
| 是否带结构化参数 | 是,五个子字典 | 否 | 否 | 否 |
| 是否可程序重放答案 | 是 | 否 | 否 | 否 |
| 是否连接电子病历 | 是,经 subject_id 连 MIMIC-IV | 否 | 否 | 否 |
这张表要说清的只有一件事:它在「规模」「可复核性」「集合与逻辑运算」三列上同时占优,在「真实性」这一列上明确处于下风。上表 VQA-RAD、SLAKE、PathVQA 的三个规模数字转引自公开综述与论文,非本文直接核验,已列入附录 B 第二层。
2.6 四十八个模板的两个坐标
四十八个模板由两个正交的坐标定义:语义类型决定「要模型输出什么形态的答案」,内容类型决定「问的是哪一类信息」。
| 语义类型 | 要求输出什么 | 评测含义 |
|---|---|---|
| verify | 是/否 | 可用精确匹配,天然二分类 |
| choose | 从给定选项中选一个 | 可用精确匹配,但选项顺序敏感 |
| query | 开放式检索,答案是一个列表 | 精确匹配偏严,通常需集合级指标 |
| 内容类型 | 问的是什么 | 答案的取值空间 |
|---|---|---|
| presence | 某属性或某类别是否存在 | 是/否 |
| anatomy | 与某属性相关的解剖位置 | 三十六对象的一个子集 |
| attribute | 与某对象相关的属性或类别 | 六十八属性的一个子集 |
| abnormality | 异常相关(解剖所见、疾病、设备、管路四类之和) | 是/否或列表 |
| size | 两个临床测量:心胸比与纵隔胸廓比 | 是/否 |
| plane | 体位(PA 或 AP) | 二选一 |
| gender | 患者性别 | 男/女 |
两个坐标交叉后,模板的难度并不均匀。低端是「这张片子是 PA 位吗」这类单条件查询,高端是「只在左上肺而不在右上肺的异常有哪些」这类需要先分别检索两个区域、再做集合差的复合查询。官方把四十八个模板全部列出并编号,编号顺序大致就是难度顺序:1–3 单条件,4–18 引入逻辑与集合,19–28 去掉对象限定,29–40 转向以属性为中心的反查,41–46 是体位与性别,47–48 是两个测量判断。
| 模板区间 | 运算复杂度 | 代表模板 |
|---|---|---|
| 1–3 | 单条件 | ${object} 里有没有 ${attribute} |
| 4–6 | 逻辑与/或 | ${attribute_1} 与 ${attribute_2} 是否同时存在 |
| 7–10 | 单对象列举 | 列出 ${object} 里的全部 ${category} |
| 11–18 | 双对象集合运算 | 只在 ${object_1} 而不在 ${object_2} 的异常有哪些 |
| 19–28 | 去对象限定的全局判断 | 影像里有没有任何 ${category} |
| 29–36 | 以属性为中心反查位置 | 与 ${attribute} 相关的解剖位置有哪些 |
| 37–40 | 属性与对象的交叉 | 与两个对象都/任一相关的 ${category} |
| 41–43 | 体位判断 | 这是 PA 还是 AP 位 |
| 44–46 | 性别判断 | 患者性别是什么 |
| 47–48 | 两个测量判断 | 心影宽度是否超过胸廓一半 |
§3 它是谁的数据
3.1 贡献者
十一位作者分属四个机构,核心团队在 KAIST。
| 作者 | 机构 | 备注 |
|---|---|---|
| Seongsu Bae | KAIST | PhysioNet 页面给出的联系人之一 |
| Daeun Kyung | KAIST | PhysioNet 页面给出的联系人之一 |
| Jaehee Ryu | KAIST | — |
| Eunbyeol Cho | KAIST | — |
| Gyubok Lee | KAIST | — |
| Sunjun Kweon | KAIST | — |
| Jungwoo Oh | KAIST | — |
| Edward Choi | KAIST | 通讯作者角色,长期从事临床序列建模 |
| Lei JI | Microsoft Research | — |
| Eric Chang | Taiwan Artificial Intelligence Foundation | — |
| Tackeun Kim | TALOS Corp. | — |
致谢部分列出的资助方包括 Microsoft Research Asia、韩国 IITP(编号 2019-0-00075、RS-2022-00155958)、韩国 NRF(NRF-2020H1D3A2A03100945)与韩国保健产业振兴院(HR21C0198)。作者声明无利益冲突、无伦理方面的顾虑。
3.2 时间线
| 时间 | 事件 | 出处 |
|---|---|---|
| 2023-10-28 | EHRXQA 论文发布到 arXiv(2310.18652) | GitHub 仓库更新日志 |
| 2023-12-12 | 在 NeurIPS 2023 Datasets and Benchmarks Track 以海报形式报告 | GitHub 仓库更新日志 |
| 2024-07-19 | 数据集 v1.0.0 发布于 PhysioNet | PhysioNet 页面 datePublished |
| 2024-07-20 | 仓库更新日志记录「数据集已在 PhysioNet 发布」 | GitHub 仓库更新日志 |
| 2026-10-28 | 本文核验时仍为 1.0.0,无后续版本 | PhysioNet 版本列表 |
有一点值得单独说明:论文与数据集之间存在先后错位。EHRXQA 论文(NeurIPS 2023)是这套模板体系的首次公开,数据集本身则在半年多之后才作为独立资源发布到 PhysioNet。因此引用时官方要求同时给出数据集引用与论文引用(§9.3)。
3.3 采集场景与来源层次
它是一份派生数据集,本身不做任何采集。三个上游来源各有分工。
| 上游来源 | 版本 | 提供的东西 | 在本数据集中的位置 |
|---|---|---|---|
| MIMIC-CXR-JPG | v2.0.0 | 胸片 JPG 图像与路径体系 | image_path、image_id、study_id |
| Chest ImaGenome | v1.0.0 | 场景图标注(对象-属性关系)与银/金标 | 答案生成依据;银标供训练验证,金标供测试 |
| MIMIC-IV | v2.2 | 结构化电子病历表 | 用于多模态病历问答扩展,不直接出现在三份 JSON 里 |
三个来源全部来自 Beth Israel Deaconess Medical Center 的同一批住院患者,全部托管在 PhysioNet 上,全部要求 credentialed 访问。因此本数据集的许可不是「由作者选择」的,而是继承的:PhysioNet Credentialed Health Data License 1.5.0,配套 PhysioNet Credentialed Health Data Use Agreement 1.5.0。
官方页面把这三个来源列为 Parent Projects,并明确要求使用时一并引用。
3.4 标注的两层结构
Chest ImaGenome 的标注分两层,这个分层被本数据集完整继承下来,并直接决定了三个切分的可信度差异。
| 层级 | 名称 | 产生方式 | 用在哪 |
|---|---|---|---|
| 银标 | silver | 机器从报告自动生成 | 训练与验证集,按 95:5 切分 |
| 金标 | gold | 四名放射科医师手工修订 | 测试集,五百张图像 |
银标集合里的每一张图像带一套关系:三十六个解剖对象与六十八个属性之间共五百六十三条关系,每条关系给出某个属性在某个对象上「存在(1)或不存在(0)」,属性又分属五个类别——解剖所见、疾病、设备、管路、技术评估。金标集合是这套关系的人工修订版本。
分层带来一个直接后果:训练标签与测试标签的可信度不在同一档。在训练集上接近满分,并不代表模型学到了正确的影像语义,也可能代表它学会了上游自动标注的系统性偏好。这是解读任何基于本数据集的实验结果时必须先校正的一点(§7.0)。
§4 它最独特的东西
4.1 稀缺性:三个「最」
把它放进公开医学 VQA 资源里横向比,它同时在三个维度上站在端点。
| 维度 | 它所处的位置 | 说明 |
|---|---|---|
| 规模 | 三十七万余条,比主流基准高一到两个数量级 | 主流基准多在三千到三万条之间 |
| 问法复杂度 | 显式引入集合运算与逻辑运算 | 同类资源基本停留在单条件问法 |
| 答案可复核性 | 每条答案由与模板对应的程序从结构化关系表执行得出 | 同类资源的答案是标注结果,无法重放 |
三点里最难被复制的是第三点。规模可以靠投入扩大,问法可以照抄模板,但「答案由程序从场景图执行得出」意味着整个数据集在逻辑上是闭合的:给定同一份 Chest ImaGenome 关系表,任何人都能重放全部三十七万条答案并逐条比对。这在问答类资源里相当罕见。
4.2 差异化证据:模板本身就是设计文档
多数问答数据集把「问了什么」藏在几十万条自然语句里,使用者只能靠事后聚类反推。本数据集把四十八个模板原封不动地放在 template 字段里,还附上了 template_program 与 template_arguments。这三个字段合起来构成了一份完整的设计文档:
template告诉研究者这条问题属于哪一个句型;template_program告诉研究者答案是怎么算出来的;template_arguments告诉研究者这次用了哪些具体取值。
由此可以做一件别处做不了的事:按模板分组评测。把测试集按四十八个模板切开,逐模板看准确率,就能直接读出模型在「单条件」「逻辑合成」「集合差」「属性反查」四类运算上的能力剖面,而不只是拿一个总准确率。这条能力剖面对医学多模态模型的迭代比总分有用得多。
| 可做的分析 | 用什么字段 | 能回答什么 |
|---|---|---|
| 逐模板准确率 | template |
哪一类句型是短板 |
| 语义类型分组 | semantic_type |
生成式答案与二值答案的差距 |
| 内容类型分组 | content_type |
位置、属性、异常、测量哪类最弱 |
| 运算复杂度分组 | 模板编号区间(§2.6) | 模型是否真的会合成推理 |
| 参数取值分组 | template_arguments |
是否在罕见属性上系统性失效 |
4.3 具体案例:两类问题的差距
看两个具体问法,就能体会它把难度轴拉开到了什么程度。
低端问法(模板 2,verify + presence):「Is there lung cancer in the left lung?」——左肺有没有肺癌。模型需要在图像上定位左肺,判断一个属性。这是单条件判断,落到二分类上。
高端问法(模板 15,query + attribute):「List all ${category} only in the ${object_1} but not in the ${object_2}.」——列出只在左上肺而不在右上肺的全部所见。模型需要:定位两个对象、分别检索各自的类别集合、执行集合差、把结果组织成列表、用自然语言输出。任何一步出错,答案就错。
官方给出的「按内容类型的示例问题」里也体现了这种跨度:presence 类问「心影有没有疾病或设备的证据」,anatomy 类问「浸润与间质性肺病同时出现的所有解剖位置是哪些」——后者已经把两个属性的交集与位置检索绑在了一起。
这种跨度的价值在于,它让「模型在医学 VQA 上达到 X 分」这句话变得可追问:X 分是在哪一段难度上拿到的。
4.4 标注粒度:五百六十三条关系撑起的答案空间
答案的可复核性来自上游标注的粒度。每张图像有一套关系表:三十六个解剖对象 × 六十八个属性,二者之间共五百六十三条有效关系,属性分属五个类别。
| 组成项 | 数量 | 说明 |
|---|---|---|
| 解剖对象 | 36 | 如左上肺、右下肺野、心影、上纵隔等 |
| 属性 | 68 | 如胸腔积液、慢阻肺/肺气肿、肺癌等 |
| 关系 | 563 | 每条给出某属性在某对象上存在(1)或不存在(0) |
| 类别 | 5 | 解剖所见、疾病、设备、管路、技术评估 |
五百六十三条关系听起来不多,但它撑起的答案空间很大:一个 query 类问题的答案可以是这五百六十三条关系里任意一个子集。这也解释了为什么「答案数」这一行在官方统计表里远小于「问题数」——问题可以有十几万条不同说法,而可取的答案字符串只有几千个。
这里有一个容易被误读的地方:官方统计表里的「# of Answers」指的是不同答案字符串的个数,不是答案的总条数。训练切分里 6,628 个不同答案对应 290,031 条样本,意味着平均每个答案字符串被用了很多次。这个结构对把任务建模成分类的模型非常友好,对生成式模型则意味着评测时精确匹配会偏宽松。
4.5 答案可重放意味着什么
「答案可重放」这四个字值得单独拆开讲,因为它是这份数据集最难被复制、也最容易被低估的性质。多数问答资源的答案是标注产物:一位标注者看了图、读了问题、写下一个回答。这个回答的正确性只能靠第二位标注者复核,复核成本与数据集规模成正比,因此三十七万条的规模下根本无法做到全量复核。
本数据集把答案的生成从「人的判断」换成了「程序在结构化关系表上的执行」。给定一条样本,template_program 指出该跑哪个程序,template_arguments 给出程序需要的全部入参,关系表给出被查询的对象与属性状态,程序输出一个或一组答案字符串。整个链条里没有任何一步依赖人的临场判断——人只在前置环节(审定模板、修订金标、生成关系表)出现。
由此得到三个实际好处。第一,错误可定位:如果某一条答案看起来不对,可以顺着程序与入参一路回溯到具体那条对象—属性关系,判断是关系标错了还是程序写错了。第二,评测口径可统一:不同论文在用同一份关系表重放答案时,得到的金标准完全一致,不会因为「谁家的预处理不一样」而产生歧义。第三,难度可控:想构造一个只含集合差运算的子集,只要按模板区间筛 template 即可,不需要人工判读。
代价是答案的形态被程序限定住了:它只能是关系表能表达的东西。关系表里有「胸腔积液在右下肺野存在」,所以可以问;关系表里没有「这片阴影边缘是否毛糙」这类形态描述,所以问不了。把它的答案空间当成「胸片能回答的全部问题」,是一个很自然但很危险的跳跃。
4.6 边界条件
四个边界定义了它能被用到哪里。
| 边界 | 具体值 | 后果 |
|---|---|---|
| 人群 | MIMIC-CXR 成人住院患者,单中心 | 不能外推到门诊、儿童或其他人群 |
| 图像 | 每个 study 只取一张代表性正位(AP 或 PA) | 无侧位、无成对时序、无同 study 多图 |
| 标签 | 训练验证为银标,测试为金标 | 训练侧误差不可消除,只能减轻 |
| 语言 | 全部为英文 | 中文医学 VQA 需自行翻译,且不可声称原生 |
§5 怎么拿到
5.1 前置条件
| 步骤 | 要求 | 说明 |
|---|---|---|
| 1 | 注册 PhysioNet 账号 | 免费 |
| 2 | 完成 credentialing | 需提交身份与机构信息 |
| 3 | 完成 CITI「Data or Specimens Only Research」培训 | PhysioNet 页面列为 Required training |
| 4 | 签署本数据集的 DUA | PhysioNet Credentialed Health Data Use Agreement 1.5.0 |
| 5 | 签署三个上游数据集的 DUA | MIMIC-CXR-JPG v2.0.0、Chest ImaGenome v1.0.0、MIMIC-IV v2.2 |
| 6 | 下载三份 JSON | 从项目页 Files 区获取 |
| 7 | 若需图像,另下 MIMIC-CXR-JPG | 按 image_path 取子集即可 |
第 5 步常被忽略。仓库 README 明确列出复现脚本需要三个上游的 DUA,缺一个就跑不通;如果只是下载现成的三份 JSON,则只需要本数据集的 DUA。
5.2 批量下载
PhysioNet 支持两种取法。带凭据的整库下载用 wget:
#-- 整库下载:需要 PhysioNet 账号,密码不在命令行中出现
wget -r -N -c -np --user <YOUR_USERNAME> --ask-password \
https://physionet.org/files/mimic-ext-mimic-cxr-vqa/1.0.0/
只想拿三个 JSON 文件时:
#-- 只取三个切分文件
for f in train valid test; do
wget -N -c --user <YOUR_USERNAME> --ask-password \
"https://physionet.org/files/mimic-ext-mimic-cxr-vqa/1.0.0/dataset/${f}.json"
done
图像不要整库下。MIMIC-CXR-JPG 体量很大,而本数据集用到的图像只是其中一部分。正确做法是先把三份 JSON 里的 image_path 去重,再按清单下子集——仓库 README 里提供了一条 download_images.sh 脚本专门做这件事:
#-- 仓库自带的按清单下载图像脚本
git clone https://github.com/baeseongsu/mimic-cxr-vqa.git
cd mimic-cxr-vqa
bash download_images.sh
5.3 流式读取与转表
三十七万条样本一次性 json.load 会占用可观内存。用 ijson 流式解析可以边读边处理:
import ijson, csv
#-- 流式解析,避免一次性把整份 JSON 读进内存
def iter_samples(path):
with open(path, 'rb') as f:
for item in ijson.items(f, 'item'):
yield item
#-- 只保留常用字段,落成扁平 CSV
FIELDS = ['split', 'idx', 'subject_id', 'study_id', 'image_id',
'image_path', 'question', 'semantic_type', 'content_type',
'template', 'template_program']
with open('train_flat.csv', 'w', newline='', encoding='utf-8') as out:
w = csv.DictWriter(out, fieldnames=FIELDS + ['answer', 'answer_n'])
w.writeheader()
for s in iter_samples('train.json'):
ans = s.get('answer') or [] #-- choose/query 可能为空列表
row = {k: s.get(k, '') for k in FIELDS}
row['answer'] = '|'.join(map(str, ans))
row['answer_n'] = len(ans) #-- 0 表示这条没有答案
w.writerow(row)
转成表后最容易出问题的两个字段是 answer 与 template_arguments。前者是列表,直接 str() 会变成带引号的 Python 字面量;后者是嵌套字典,需要额外展平。下面这段代码把五个子字典摊成列:
import pandas as pd
#-- 把 template_arguments 的五个子字典摊成字符串列
ARG_KEYS = ['object', 'attribute', 'category', 'viewpos', 'gender']
def flatten_args(ta):
out = {}
for k in ARG_KEYS:
sub = ta.get(k, {}) or {}
out['arg_' + k] = '|'.join(sub[str(i)] for i in range(len(sub)))
return out
rows = []
for s in iter_samples('test.json'):
r = {k: s.get(k) for k in ['idx', 'subject_id', 'image_id',
'question', 'semantic_type', 'content_type',
'template']}
r.update(flatten_args(s.get('template_arguments', {})))
r['answer'] = '|'.join(map(str, s.get('answer') or []))
rows.append(r)
df = pd.DataFrame(rows)
print(df.shape)
print(df.groupby('semantic_type').size())
注意最后一行 groupby 的用途:它是规模核对,用来确认切分后的条数与官方表一致,不是用来做分布性结论。任何按类型拆开的比例都不应写进报告。
5.4 从零复现
如果不想用现成的 JSON,仓库给了两条脚本:
#-- 已下载好三个上游数据集时用这条
bash build_dataset.sh
#-- 需要从 PhysioNet 下载上游并重建时用这条
bash download_and_build_dataset.sh
两条脚本做三件事:下载(或定位)三个上游数据集、做预处理、生成带答案与元数据的完整数据集。仓库 README 写明:带下划线前缀的 _*.json 是不含答案的预发布文件,故意不含答案,完整文件只在本地持凭据运行脚本后产生。环境的 Python 版本要求是 3.12 及以上,依赖只有 pandas、tqdm、scikit-learn 三个。
5.5 图像对齐
image_path 是相对路径,形如 p15/p15569663/s51014827/<image_id>.jpg。把它拼到 MIMIC-CXR-JPG 的根目录之后就可以定位到具体文件,路径中的 p<前两位>/p<subject_id>/s<study_id>/ 与 MIMIC-CXR-JPG 的目录约定一致。
| 路径片段 | 对应字段 | 说明 |
|---|---|---|
p15 |
subject_id 前两位 |
MIMIC-CXR-JPG 的分片目录 |
p15569663 |
subject_id |
患者目录 |
s51014827 |
study_id |
检查目录 |
<image_id>.jpg |
image_id |
单张 JPG |
一个常见坑是版本。本数据集基于 MIMIC-CXR-JPG v2.0.0,如果本地是别的版本,image_path 可能命中不到文件。另一个坑是大小写与扩展名——仓库 README 的示例路径里带 files/ 前缀(files/p10/p10000032/...),官方页面的示例不带。两者只是根目录相对位置不同,按本地实际布局调整即可。
5.6 五个坑
| 序 | 坑 | 表现 | 处理 |
|---|---|---|---|
| 1 | 答案字段是列表且可能为空 | choose 与 query 类样本可能 answer == [] |
训练前剔除或单独成组,别当空字符串 |
| 2 | idx 只在单切分内唯一 |
合并三份文件后 idx 撞号 |
加 split 前缀或重建全局索引 |
| 3 | 训练侧标签是银标 | 训练集上准确率虚高 | 只把测试集成绩当结论 |
| 4 | 同患者跨样本泄漏 | 随机切分时成绩不可信 | 用 subject_id 做分组切分 |
| 5 | 模板复述导致「表面陌生」 | 同一模板有十多种说法,按 question 去重会误判 |
用 template 而不是 question 做模板级分组 |
§6 与库内条目的关系
6.1 关系图谱
它在库里的位置很清楚:上游是三个 MIMIC 系资源,下游是同一团队做的多模态病历问答。
| 相关资源 | 关系 | 连接键 | 用途差别 |
|---|---|---|---|
| Chest ImaGenome | 父项目,提供标注 | 场景图关系表 | 只有标注没有问答 |
| MIMIC-CXR-JPG | 父项目,提供图像 | image_path |
只有图像与报告标签 |
| MIMIC-IV | 父项目,提供结构化病历 | subject_id |
只有表格没有图像 |
| EHRXQA | 同团队下游成果 | 模板 + subject_id |
表格加图像的多模态问答 |
| MIMIC-Ext-CXR-QBA | 同团队姊妹资源 | 同源于 MIMIC-CXR | 带框定位的问答,问法体系不同 |
| MIMIC-Ext-SynNotes | 同系列命名,不同任务 | — | 合成临床笔记,纯文本 |
| MIMIC CXR 视觉问答评测集 | 同一任务的另一份资源 | 同源于 MIMIC-CXR | 规模与问法体系不同 |
6.2 检索路径
| 你想找什么 | 该去哪个词条 | 为什么不是这里 |
|---|---|---|
| 胸片场景图标注本身 | Chest ImaGenome | 本数据集只用它的结果,不重发标注 |
| 胸片图像与报告 | MIMIC-CXR-JPG | 本数据集不含图像与报告原文 |
| 结构化住院表格 | MIMIC-IV | 本数据集的三份 JSON 里没有表格数据 |
| 带框定位的胸片问答 | MIMIC-Ext-CXR-QBA | 本数据集不做 bounding box |
| 报告改写类指令语料 | LLaVA-Rad 标注集 | 本数据集的答案是短语不是段落 |
| 合成临床笔记 | MIMIC-Ext-SynNotes | 本数据集是图文问答不是文本语料 |
| 表格侧问答 | EHR-DS-QA | 本数据集只覆盖影像侧问题 |
6.3 分工判据
| 判据 | 选它 | 选别的 |
|---|---|---|
| 要最大的医学 VQA 规模 | 是 | 否则看 VQA-RAD、SLAKE 一类小基准 |
| 要可程序重放的答案 | 是 | 否则多数数据集都不提供 |
| 要集合与逻辑运算 | 是 | 否则小基准的问法基本是单条件 |
| 要真实的临床提问 | 否 | 去看 VQA-RAD 一类人工撰写的资源 |
| 要 bounding box | 否 | 去看 MIMIC-Ext-CXR-QBA |
| 要成段的报告文本 | 否 | 去看 MIMIC-CXR-JPG 的报告原文 |
| 要时序对比 | 否 | 本数据集每 study 仅一张代表性正位 |
§7 质量评估与局限性
7.0 前置校正:先看标签分了几层
任何基于本数据集的结果,解读前都要先做一次校正:训练集与验证集的答案建立在机器生成的银标上,测试集建立在人工金标上。这两层标签的可信度不同档,因此训练准确率与测试准确率之间的差距,同时包含了泛化差距与标签质量差距,不能整体归因于模型。
官方对此的处理是明确的:把人工金标整体留给测试集,并在说明里承认上游 Chest ImaGenome 可能存在标注错误,尤其在 MIMIC-CXR 报告中带有主观性的所见上。
7.1 五维评分
| 维度 | 评价 | 依据 |
|---|---|---|
| 规模 | 强 | 377,391 条三元组,比主流医学 VQA 基准高一到两个数量级 |
| 结构一致性 | 强 | 十三个字段全切分统一,模板与程序一一对应 |
| 可复核性 | 强 | 答案可由 template_program 在关系表上重放 |
| 标签可信度 | 中 | 训练验证为银标,仅测试为四名放射科医师修订的金标 |
| 真实性 | 弱 | 问题由模板与 GPT-4 生成,非临床真实提问 |
五维里唯一明确偏弱的是真实性,而这一维恰恰是它主动放弃的:设计目标是 benchmark 与指令微调,不是语言现象研究。
7.2 标注两层带来的不对称
| 切分 | 标签层 | 图像数 | 样本数 | 可信度 |
|---|---|---|---|---|
| train | 银标 | 133,687 | 290,031 | 中,受上游自动标注误差影响 |
| valid | 银标 | 8,610 | 73,567 | 中,与训练同源 |
| test | 金标 | 500 | 13,793 | 高,四名放射科医师手工修订 |
不对称有两个可推的后果。第一,验证集不能用来估计测试集成绩——两者标签来源不同,验证集上的分数与测试集上的分数之间不存在稳定的换算关系。第二,在验证集上做早停或超参选择,选出来的是「最拟合银标」的配置,未必是「最正确」的配置。可行的折中是:用验证集做工程性决策(学习率、轮数),用测试集做一次性结论。
7.3 可枚举偏差
| 偏差来源 | 机制 | 影响方向 |
|---|---|---|
| 上游自动标注误差 | 报告中的主观所见被机器标成存在或不存在 | 系统性,训练侧直接继承 |
| 单中心人群 | 全部来自一家医院的住院患者 | 外部有效性受限 |
| 只取正位 | 侧位片被排除 | 无法评估依赖侧位的判断 |
| 每 study 只取一张 | 同次检查的多图被丢弃 | 无法做图内对比 |
| 模板采样 | 参数取值由采样决定 | 罕见属性的样本数由采样策略决定 |
| GPT-4 复述 | 复述语料来自一个生成模型 | 措辞分布带有该模型的风格印记 |
| 答案空间有限 | 不同答案字符串只有数千个 | 分类式建模占优,生成式评测偏松 |
7.4 外部验证到什么程度
它能支撑的外部验证是有限的。可以验证的:同一份 Chest ImaGenome 关系表上重放答案,验证三十七万条答案与 answer 字段一致;按 subject_id 分组后做跨患者评测,验证泛化。不能被它自己验证的:训练标签本身的正确性、人群外推、以及模型在真实临床提问上的表现。这三样需要靠别的资源补。
官方页面引用了大量前期医学 VQA 工作作为背景(VQA-Med、SLAKE、VQA-RAD 等),也给出了下游用途的引用(医学 VLM 指令微调、多模态病历问答),但这些是「有人这样用」的证据,不是「这样用效果好」的证据。
7.5 为什么它仍然值得用
因为三件事它同时做到了,而且别的资源没有同时做到:规模足够大到能训深层模型、结构足够规整到能按模板切分评测、答案足够可复核到能逐条验证。这三条加起来,使它成为一个「可以把结论做细」的基准——不只是报一个总分,而是能说出模型在哪一类运算上失手。
把话说得更直接一点:它的价值不在于「又多了一个数据集」,而在于它把医学 VQA 的评测从一维变成了三维。一维的评测只回答「模型对不对」;三维的评测可以回答「模型在哪一类问法上对、在哪一类问法上不对、以及这是否因为它根本没学会合成推理」。后面这两个问题,在小规模、单条件、答案不可复核的资源上是无法提出的——样本不够切、问法不够分、答案不够信。
当然,这份价值是有条件的。它要求使用者愿意按 subject_id 分组、愿意区分银标与金标、愿意按模板而不是按问题做聚合。跳过这三步直接跑一个总准确率,等于把这件三维量具当成一把直尺用,得到的是一个既不好解释也不好比较的数字。
§8 生态位与历史
8.1 沿革
| 阶段 | 时间 | 内容 |
|---|---|---|
| 前期基础 | 2015 起 | 通用 VQA、GQA 建立模板与合成推理的范式 |
| 医学迁移 | 2018–2021 | VQA-Med、SLAKE、VQA-RAD 等建立医学 VQA 任务 |
| 本数据集的起点 | 2023-10 | EHRXQA 论文公开模板体系 |
| 会议报告 | 2023-12 | NeurIPS 2023 Datasets and Benchmarks Track 海报 |
| 独立发布 | 2024-07 | v1.0.0 上 PhysioNet,至今未更新 |
医学 VQA 的第一波资源解决的是「有没有」的问题:有没有一个可跑的任务。它们规模小、问法简单,但正因为小,才让第一批方法有了共同的起跑线。本数据集属于第二波:它承认第一波的资源不足以撑起现代多模态模型,于是把规模、问法复杂度与可复核性同时拉高。
第二波的另一个特征是生成方式的转向。第一波的问题由人来写,第二波的问题越来越多地由程序与生成模型来写。这个转向带来了明显的效率收益——三十七万条问题不可能靠人工写完——也带来了一个新问题:数据集开始带有生成模型的风格印记。本数据集对此的处理是诚实的:它在页面与仓库里都写明了复述策略基于 GPT-4,并把原始模板一并公开,让使用者至少知道「哪些措辞是模板本来的、哪些是模型改出来的」。这种透明度在第二波资源里并不普遍。
8.2 与 EHRXQA 的关系
| 项 | MIMIC-Ext-MIMIC-CXR-VQA | EHRXQA |
|---|---|---|
| 形态 | 独立发布的数据集 | 论文提出的多模态问答数据集 |
| 模态 | 图像 + 问题 + 答案 | 图像 + 结构化病历 + 问题 + 答案 |
| 模板 | 48 个种子模板,794 个复述 | 以本数据集的模板作为影像侧种子 |
| 时间 | 2024-07 发布 | 2023-10 上 arXiv,NeurIPS 2023 |
| 引用 | 数据集 DOI 10.13026/deqx-d943 | arXiv:2310.18652,NeurIPS 36 |
两者的关系是「种子与扩展」而不是「两个独立数据集」。仓库 README 明确写着:把本数据集的问题模板作为影像侧的种子模板,用来构造多模态病历问答数据集 EHRXQA。因此做多模态病历问答的项目,通常需要同时引两者。
8.3 生态位
它占据的生态位是「影像侧问题模板的供给者」。这条定位解释了两件事:为什么它的字段里保留了完整的模板与参数(因为下游要复用这些模板去接别的模态),以及为什么它强调与 MIMIC-IV 的连接(因为下游就是这么用的)。
在这个生态位上,它的直接竞争者是「报告改写类语料」——把 MIMIC-CXR 的自由文本报告改写成指令。两者的差别是:报告改写得到的答案更自然、更贴近真实表述,但不可复核、不可按运算类型切分;本数据集的答案更机械,但可复核、可切分。做指令微调时两者常常互补。
8.4 谁在用
| 角色 | 怎么用 | 需要什么前置 |
|---|---|---|
| 医学 VQA 方法研究者 | 当主基准,按模板分组报结果 | credentialed 账号 + DUA |
| 医学多模态大模型工程师 | 当指令微调语料 | 同上,另需图像 |
| 多模态病历问答研究者 | 当影像侧问题源 | 另需 MIMIC-IV 的 DUA |
| 评测方法研究者 | 用可重放答案研究评测口径 | 只需三份 JSON |
| 影像报告方向 | 辅助验证模型是否真的看到了某处 | 同上 |
§9 使用指引
9.1 三种角色的路径
| 角色 | 第一步 | 第二步 | 第三步 |
|---|---|---|---|
| 医学 VQA 研究者 | 下载三份 JSON + 图像子集 | 按 subject_id 分组,跑官方切分基线 |
按 template 分组出能力剖面 |
| 指令微调工程师 | 只取 train.json | 剔除 answer 为空的样本 |
转成 instruction/response 对 |
| 多模态病历问答 | 下载 JSON + MIMIC-IV | 用 subject_id 连接两侧 |
参照 EHRXQA 的问题组织方式 |
9.2 最短流程
import json
from collections import defaultdict
#-- 1. 载入测试集(金标,是唯一可当准绳的一档)
test = json.load(open('test.json'))
print('样本数', len(test))
#-- 2. 核对规模:图像数与官方表一致
print('图像数', len({s['image_id'] for s in test}))
print('问题数', len({s['question'] for s in test}))
#-- 3. 按语义类型分组,只做规模核对不做比例推断
by_sem = defaultdict(int)
for s in test:
by_sem[s['semantic_type']] += 1
print(dict(by_sem))
#-- 4. 找出没有答案的样本(choose/query 类可能为空)
empty = [s for s in test if not s.get('answer')]
print('空答案样本', len(empty))
#-- 5. 用 subject_id 做分组切分,避免同患者泄漏
subjects = sorted({s['subject_id'] for s in test})
print('患者数', len(subjects))
第 2、3 步的用途是核对,不是分析:如果这里打印出来的数字与官方统计表对不上,说明文件版本或读取方式有问题,先解决它再往下走。
9.3 引用方式
| 用途 | 引什么 | 内容 |
|---|---|---|
| 使用数据集 | PhysioNet 引用 | Bae 等 11 人,2024,version 1.0.0,DOI 10.13026/deqx-d943 |
| 方法来源 | 原始论文 | EHRXQA,NeurIPS 36,arXiv:2310.18652 |
| 平台 | PhysioNet 平台引用 | PhysioNet 平台论文(官方页面给出) |
| 上游 | 三个父项目 | Chest ImaGenome v1.0.0、MIMIC-CXR-JPG v2.0.0、MIMIC-IV v2.2 |
官方页面在 citation 区块里明确要求「除引用本资源外,请一并引用原始论文」,页面另把三个上游列为 Parent Projects 并要求一并引用。漏引上游在 PhysioNet 的使用条款下是不合规的。
§10 AI 使用声明
| 项 | 说明 |
|---|---|
| 文本生成 | 全文由 AI 起草,结构与文风遵循千方病案医数集写作规范 |
| 数字来源 | 全部规模、结构、边界数字取自 PhysioNet 官方项目页与官方 GitHub 仓库 README |
| 文件核验 | 官方项目页与 v1.0.0 版本页已直接访问核对;PhysioNet 文件目录在本机网络环境下返回区域限制提示,三个 JSON 文件未逐字节下载核验 |
| 与派发描述的一致性 | 派发给出的 slug 与官方页一致,无差异 |
| 论文信息 | EHRXQA(arXiv:2310.18652,NeurIPS 36)为官方页面与仓库共同指认的原始论文 |
| 未核验内容 | 三个 JSON 的实际字节大小、逐模板的样本计数、答案字符串的具体取值集合、图像下载后的实际可用比例 |
| 图像 | 封面图为风格化生成图,非数据集真实影像,不含任何患者信息 |
| 免责 | 本文为数据资源评介,不构成医学建议;使用数据须遵守 PhysioNet 数据使用协议 |
常见误读
| 说法 | 实际 | 证据 |
|---|---|---|
| 它包含胸片图像 | 只包含 image_path,图像在 MIMIC-CXR-JPG |
官方字段字典;仓库 README 需另下图像 |
| 答案是医生写的 | 由与模板对应的程序在关系表上执行得出 | 官方「VQA Dataset Generation」段 |
| 37.7 万是问题数 | 是(图像、问题、答案)三元组数;问题数为 132,387/31,148/7,565 | 官方 Table 3 |
| 48 个模板就是 48 种问法 | 复述后是 794 个模板 | 官方「Data Description」段 |
| 训练集标签可靠 | 训练与验证用银标,只有测试用金标 | 官方「Methods」段 |
| 可以随机切分 | 同患者跨样本,必须按 subject_id 分组 |
subject_id、study_id、image_id 三级结构 |
| 中文可用 | 全英文,翻译后不可声称原生 | 官方示例与模板均为英文 |
| 能做纵向对比 | 每 study 只取一张代表性正位 | 官方「Data Preprocessing」段 |
| 与 MIMIC-Ext-CXR-QBA 是同一个 | 姊妹资源,后者带框定位 | 库内两个 slug 各自独立 |
| 签一份 DUA 就够 | 复现脚本另需三个上游的 DUA | 仓库 README Prerequisites |
FAQ
Q1:377,391 这个数字到底指什么?
它是(图像、问题、答案)三元组的总数,官方写作 377,391 unique triples。它与另外三组数字不是一回事:图像数是 133,687/8,610/500,问题数是 132,387/31,148/7,565,答案(不同答案字符串)数是 6,628/2,508/700。写论文时如果只引「约 37.7 万」,建议明确写成「三元组数」,避免与图像数混淆。
Q2:为什么训练集和验证集的图像数相差那么大,样本数却只差几倍?
因为两个切分取自同一个银标集合、按 95:5 切分,而每个切分里每张图像可以配多条问答。训练切的样本数是验证切的四倍左右,图像数却是十几倍,说明训练侧每张图的平均问题数更低、图像覆盖更广。这是切分策略的自然结果:验证集用较少的图像承载较多的问题,以便在固定标注成本下拿到更多评测样本。
Q3:能不能只下载 JSON 不下载图像?
可以,而且这是常见做法。三份 JSON 里的问题、模板、参数、答案、患者与图像标识都是完整的,只缺像素。做评测方法研究、做问题侧分析、做模板分组设计,都不需要图像。只有训练或评测视觉模型时才需要按 image_path 取图像子集。
Q4:测试集只有 500 张图像,够用吗?
作为整体比较够用,做单类细分不够。13,793 条样本摊到 3 种语义类型、7 种内容类型、48 个模板之后,每个格子里的样本数已经小到置信区间很宽。合理的做法是:报整体分数,并把按类型或模板拆开的结果作为探索性发现而不是结论。
Q5:它和同系列的 MIMIC-Ext-CXR-QBA 该怎么选?
看你要不要框。需要模型指出「异常在图像的哪个位置」时,选带 bounding box 的那一支;只需要模型回答「是什么、有没有、有哪些」时,用本数据集,因为它规模更大、模板体系更完整且答案可重放。两者同源于 MIMIC-CXR 与同一团队的工作,引用时不要互相替代。
术语表
| 术语 | 解释 |
|---|---|
| 视觉问答(VQA) | 给模型一张图与一句自然语言问题,要求用自然语言回答的任务 |
| 语义类型 | 本数据集对答案形态的分类:verify 是/否、choose 选择、query 开放式检索 |
| 内容类型 | 本数据集对问题所问信息的分类,共七类 |
| 模板 | 带 ${...} 槽位标记的问句骨架,48 个种子模板 |
| 复述 | 用 GPT-4 对同一模板改写出多种说法,平均每个模板 16.5 个 |
| 模板程序 | 与模板一一对应、用于在关系表上算出答案的程序,如 program_5 |
| 场景图 | 把图像内容表示为「对象—属性—关系」的结构化图 |
| 银标 | 由机器从报告自动生成的标注 |
| 金标 | 由放射科医师手工修订的标注 |
| 心胸比(CTR) | 心影宽度与胸廓宽度之比,模板 47 的判断依据 |
| 纵隔胸廓比(MTR) | 上纵隔宽度与胸廓宽度之比,模板 48 的判断依据 |
| 体位(plane) | 投照方向,PA 为后前位,AP 为前后位 |
| credentialed access | PhysioNet 的受控访问机制,需完成培训与身份核验 |
| DUA | 数据使用协议,签署后方可下载受控数据 |
| CITI 培训 | PhysioNet 要求的研究伦理与数据保护课程 |
附录 A:核心数字核对表
| 项 | 值 | 来源 | 来源层级 |
|---|---|---|---|
| 三元组总数 | 377,391 | 官方页面 Data Description | 官方页面 |
| 训练/验证/测试样本数 | 290,031 / 73,567 / 13,793 | 官方页面 Table 3 | 官方页面 |
| 训练/验证/测试图像数 | 133,687 / 8,610 / 500 | 官方页面 Table 3 | 官方页面 |
| 训练/验证/测试问题数 | 132,387 / 31,148 / 7,565 | 官方页面 Table 3 | 官方页面 |
| 训练/验证/测试答案数 | 6,628 / 2,508 / 700 | 官方页面 Table 3 | 官方页面 |
| 种子模板数 | 48 | 官方页面 Abstract 与模板表 | 官方页面 |
| 复述后模板数 | 794 | 官方页面 Data Description | 官方页面 |
| 平均每模板复述数 | 16.5 | 官方页面 Abstract | 官方页面 |
| 语义类型数 | 3 | 官方页面 Methods | 官方页面 |
| 内容类型数 | 7 | 官方页面 Methods | 官方页面 |
| 解剖对象数 | 36 | 官方页面 Data Preprocessing | 官方页面 |
| 属性数 | 68 | 官方页面 Data Preprocessing | 官方页面 |
| 关系数 | 563 | 官方页面 Data Preprocessing | 官方页面 |
| 属性类别数 | 5 | 官方页面 Data Preprocessing | 官方页面 |
| 银标切分比例 | 95:5 | 官方页面 File and Structure | 官方页面 |
| 金标修订人数 | 4 名放射科医师 | 官方页面 Known Limitations | 官方页面 |
| 作者数 | 11 | 官方页面作者区块 | 官方页面 |
| 上游父项目数 | 3 | 官方页面 Parent Projects | 官方页面 |
| 文件数 | 3 个 JSON | 官方页面 Directory Structure | 官方页面 |
| 字段数 | 13 | 官方页面 File Format and Contents | 官方页面 |
| 参数子字典数 | 5 | 官方页面字段字典 | 官方页面 |
| 版本与日期 | 1.0.0,2024-07-19 | 官方页面版本列表与 datePublished | 官方页面 |
| DOI | 10.13026/deqx-d943 | 官方页面 Discovery 区 | 官方页面 |
| 许可 | PhysioNet Credentialed Health Data License 1.5.0 | 官方页面 Access 区 | 官方页面 |
| 页面浏览量 | 1,047 | 官方页面 Project Views | 官方页面 |
| VQA-RAD 规模 | 315 图像 / 3,515 问答对 | 公开综述与论文转引 | 第二层 |
| SLAKE 英文部分规模 | 642 图像 / 7,032 问答对 | 公开综述与论文转引 | 第二层 |
| PathVQA 规模 | 4,998 图像 / 32,795 问答对 | 公开综述与论文转引 | 第二层 |
附录 B:数字的来源分层
第一层:官方页面与官方仓库。 三元组总数、三个切分的图像/问题/答案/样本数、模板与复述数、语义与内容类型数、对象/属性/关系/类别数、银标切分比例、金标修订人数、作者与机构、版本与日期、DOI、许可、文件与字段结构。这些来自 PhysioNet 项目页 v1.0.0 的摘要、方法、数据描述、文件结构、使用说明各段,以及 baeseongsu/mimic-cxr-vqa 仓库 README。
第二层:公开综述与论文转引。 VQA-RAD、SLAKE、PathVQA 的三个规模数字来自公开综述与论文中的一致表述,未经本文直接核验其原始发布页,仅用于量级对照。
第三层:未核验。 三个 JSON 文件的实际字节大小、逐模板的样本计数、按语义类型与内容类型的逐类样本数与占比、答案字符串的具体取值集合、图像下载后的实际可用比例、每张图像的平均问题数。其中「逐类样本数与占比」虽在官方 Table 4 与 Table 5 中给出,但属分布性统计,按本文库的数字纪律不予收录。
附录 C:完整参考文献
| 编号 | 文献 | 链接 | 用途 |
|---|---|---|---|
| 1 | MIMIC-Ext-MIMIC-CXR-VQA v1.0.0 项目页 | https://physionet.org/content/mimic-ext-mimic-cxr-vqa/1.0.0/ | 全部规模、结构、边界数字 |
| 2 | 项目文件目录 | https://physionet.org/content/mimic-ext-mimic-cxr-vqa/1.0.0/files/ | 目录结构、许可与父项目 |
| 3 | 官方 GitHub 仓库 | https://github.com/baeseongsu/mimic-cxr-vqa | 复现脚本、预发布文件说明、示例样本 |
| 4 | EHRXQA 原始论文 | https://arxiv.org/abs/2310.18652 | 方法来源与模板体系的首次公开 |
| 5 | Chest ImaGenome v1.0.0 | https://physionet.org/content/chest-imagenome/1.0.0/ | 标注来源 |
| 6 | MIMIC-CXR-JPG v2.0.0 | https://physionet.org/content/mimic-cxr-jpg/2.0.0/ | 图像来源 |
| 7 | MIMIC-IV v2.2 | https://physionet.org/content/mimiciv/2.2/ | 结构化病历来源 |
| 8 | PhysioNet 平台综述(Nature Health) | https://doi.org/10.1038/s44360-026-00096-z | 托管模式与引用规范 |
附录 D:任务代码
任务一:按模板分组的评测骨架
import json
from collections import defaultdict
#-- 载入测试集(金标)
test = json.load(open('test.json'))
#-- 按模板分组,pred 是模型输出,与 test 同序
def eval_by_template(pred):
bucket = defaultdict(lambda: [0, 0]) #-- [正确数, 总数]
for s, p in zip(test, pred):
gold = set(s.get('answer') or [])
hit = set(p) if isinstance(p, (list, set)) else {p}
ok = (hit == gold) if gold else False
b = bucket[s['template']]
b[0] += int(ok)
b[1] += 1
return {k: (v[0], v[1]) for k, v in bucket.items()}
#-- 打印每个模板的正确数与总数,只做分组展示
for tpl, (c, n) in sorted(eval_by_template(pred).items(), key=lambda x: -x[1][1])[:10]:
print(f'{n:>5} {c:>5} {tpl[:70]}')
这段代码的关键在 s['template'] 而不是 s['question']:按模板分组才能把「同一种运算的多种说法」聚到一起,按问题分组则会被 794 个复述打散。
任务二:答案重放
import json
#-- 载入图像关系表(需自行从 Chest ImaGenome 构造):
#-- relations[image_id][(object, attribute)] = 0 或 1
relations = json.load(open('relations.json'))
#-- 重放模板 5:两个属性是否同时存在于同一对象
def program_5(image_id, args):
obj = args['object']['0']
a1 = args['attribute']['0']
a2 = args['attribute']['1']
rel = relations[image_id]
return 'yes' if rel.get((obj, a1), 0) and rel.get((obj, a2), 0) else 'no'
test = json.load(open('test.json'))
mismatch = 0
for s in test:
if s['template_program'] == 'program_5':
got = program_5(s['image_id'], s['template_arguments'])
if [got] != list(s.get('answer') or []):
mismatch += 1
print('program_5 不一致条数', mismatch)
第二段代码是「可复核性」的直接体现:给定同一份关系表,任何人都能独立重放答案并数出不一致的条数。这是它相对多数问答资源最硬的一点。
附录 E:如果只记五件事
| 序号 | 记住什么 | 为什么 |
|---|---|---|
| 1 | 377,391 组三元组,48 个模板撑成 794 个 | 这两个数字定义了它的规模与问法广度 |
| 2 | 训练验证是银标,只有测试是金标 | 决定了哪些分数可以写进结论 |
| 3 | 答案由 template_program 生成,可逐条重放 |
这是它最难被复制的一点 |
| 4 | 必须按 subject_id 分组切分 |
同患者跨样本泄漏会让成绩虚高 |
| 5 | 它不带图像,图像要另下 MIMIC-CXR-JPG | 决定了拿到手之后第一步做什么 |
编辑说明
本文的核验时间为 2026 年 10 月 28 日。核对方式为直接访问 PhysioNet 项目页与 v1.0.0 版本页,逐段确认摘要、方法、数据描述、文件结构、使用说明、已知限制、许可与父项目信息;并直接访问了官方 GitHub 仓库 README,确认复现脚本、预发布文件说明与示例样本。PhysioNet 的文件目录页在本机网络环境下返回「数据在当前区域不可用」的提示,因此三个 JSON 文件未逐字节下载核验,正文中凡涉及文件实际形态的地方均标注为「官方页面给出」或「仓库给出」。未覆盖的内容包括:三个文件的字节大小、逐模板的样本计数、按语义与内容类型的逐类计数与占比、答案字符串的具体取值集合、以及图像下载后的实际可用比例。其中逐类计数虽见于官方 Table 4 与 Table 5,但属分布性统计,按本文库的数字纪律不予收录。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- chest-imagenome — 共享标签:影像数据集 / 胸片 / 结构化标注
- mimic-cxr-jpg — 共享标签:影像数据集 / 胸片 / 多模态
- mimiciv — 共享标签:多模态 / 电子病历
- ehrxqa — 共享标签:视觉问答 / 多模态 / 电子病历
- mimic-ext-cxr-qba — 共享标签:影像数据集 / 视觉问答 / 胸片
- mimic-ext-synnotes — 共享标签:多模态 / 合成语料
- vqa-evaluation-mimic-cxr — 共享标签:视觉问答 / 胸片 / 基准评测
- medical-diff-vqa — 共享标签:影像数据集 / 视觉问答 / 胸片
- llava-rad-mimic-cxr-annotation — 共享标签:影像数据集 / 多模态 / 胸片
- ehr-ds-qa — 共享标签:多模态 / 电子病历 / 问答
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

