信息速览
医学影像人工智能这十年最成功的一件事,是把成箱的片子变成了可训练的张量;最尴尬的一件事,是这些张量旁边的标签几乎全是机器写的。MIMIC-CXR 是公开可得的胸片库里体量最大的一个,配着二十多万份自由文本的放射报告,几乎所有胸片分类模型的成绩单都在这上面写就。而这些模型学的标签,来自 CheXpert 与 NegBio 两个规则与自然语言处理工具对报告文本的抽取——不是放射科医师的判断。用机器标注训练、再用机器标注测试,得到的分数能不能代表临床可用性,这个问题一直悬着。
要回答它,成本是一道硬门槛。官方给出的算法是:测试集三千余份报告、十余种征象、每种至少三位医师裁定,乘出来是十万量级的人工标注。这个量级在任何一家机构的预算表上都难以实现,于是业界长期停留在"用一小批人工标签验证自然语言处理标签"的阶段,而那一小批通常只有几百份报告、由一位医师完成。
med-palm2-mimic-cxr 提供的是另一条路径的中间产物:先让一个受过医学语料训练的大语言模型把报告重读一遍,只把它与 CheXpert 意见不一致的那些报告—征象对挑出来交给人看,用有限的人工预算覆盖最可能出错的地方。挑出来的 1378 对被三位美国执业放射科医师独立裁定,附一致度一并公开。它不是 MIMIC-CXR 的金标准全集,是一份"最可能错的那部分已经被人工看过"的清单。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 全名 | Application of Med-PaLM 2 in the refinement of MIMIC-CXR labels |
| 发布方 | PhysioNet;研究团队来自 Google、MIT 与威斯康星大学麦迪逊分校 |
| 首次发布 | 2025 年 2 月 4 日,版本 1.0.0 |
| 最近改动 | 无;官方发布说明写明这是初始发布,至今仍只有一个版本 |
| 记录数 | 1378 条报告—征象对(官方称 radiologist-verified ground truth labels) |
| 覆盖的检查与患者 | 以 subject_id / study_id 给出,需与 MIMIC-CXR 主库拼接后才知具体人数 |
| 大语言模型查询次数 | 23824 次查询(报告 × 关键词 × 两套提示词模板) |
| 征象类别数 | 11 类(Atelectasis、Cardiomegaly 等,见 §2.6) |
| 复核人力 | 3 名美国执业放射科医师独立阅片;三人全不一致时由第 4 名资深胸科放射医师裁定 |
| 与之对照的基线 | MIMIC-CXR-JPG 2.0.0 的 CheXpert 标签 |
| 标注方式 | 关键词匹配候选征象 → Med-PaLM 2 双提示词判别 → 取分歧 → 三人独立裁定 → 多数或上级裁定 |
| 文件格式 | 单一压缩 CSV:mimic-cxr-2.0.0-validated.csv.gz |
| 字段数 | 5 列:subject_id、study_id、finding、reader_label、reader_agreement |
| 许可 | PhysioNet Restricted Health Data License 1.5.0 |
| 访问方式 | 受限访问:须注册、完成伦理培训并签署数据使用协议 |
| 原始来源 | MIMIC-CXR Database v2.0.0、MIMIC-CXR-JPG v2.0.0 |
| 典型用途 | 自然语言处理标签的错误定位、大语言模型征象抽取能力评测、标注一致性研究、困难样本挖掘 |
§1 它要解决的具体麻烦
1.1 二十多万份报告,几乎没人真正看过标签
MIMIC-CXR 的规模是它的资产,也是它的负担。公开可得的胸片报告超过二十二万份(官方背景段给出 227,827 这一数字),如果每一份都要由放射科医师逐条确认十余种征象是否存在,人工量在百万级。现实中的折中是:用 CheXpert 一类的规则加自然语言处理工具从报告文本里抽标签,抽出来的标签当作事实使用。
这个折中带来的问题不是"标签全错",而是"错在哪不知道"。规则工具在否定句、不确定表述、跨句指代上各有各的失手方式,而这些失手方式会系统性地进入训练集与测试集。模型在测试集上拿到的分数,测的是"模型能不能复现规则工具的判断习惯",而不是"模型能不能判断片子"。
要打破这个循环只有两种办法:要么人工全标一遍,要么想办法把人工花在最可能出错的地方。第二种办法的关键前提,是有一个便宜的、能指出"这里可能错了"的信号。这份数据集做的事情,就是验证大语言模型能不能充当这个信号,并把验证过程中产生的人工裁定结果公开出来。
1.2 三条常见的错误期待
第一条,把它当成"MIMIC-CXR 测试集的完整金标准"。它不是。人工裁定只覆盖了 Med-PaLM 2 与 CheXpert 发生分歧的那部分报告—征象对;两者意见一致的地方完全没有人工参与,也因此不会出现在这份文件里。用它替换测试集标签,等于把评测集换成一个"分歧富集"的子集,任何模型在这上面的分数都不与原测试集可比。
第二条,以为它带图像。它不带。整个数据集是一个 CSV 文件,只有文本侧的信息:患者号、检查号、征象名、裁定标签、一致度。要看片子,得自己回到 MIMIC-CXR-JPG 去取,且那又是另一份需要签署协议才能拿到的数据。
第三条,以为可以照着方法重跑一遍。跑不了。官方说明用于本次工作的 Med-PaLM 2 是内部沙盒版本,提示词里的前置说明文在公开的 MedLM 接口上并不需要,模型版本、温度与解码策略也无从复现。官方的说法是这套方法"应可迁移到其它合适的大语言模型接口",那是方向,不是等价替换。
1.3 它能给到的与给不到的
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 一千余条人工裁定的报告—征象标签 | 1378 条,含四值标签与三档一致度 | 够做小规模严格评测,不足以训练 |
| 判断自然语言处理标签在哪类征象上容易错 | 分歧标签按征象分类列出 | 够做定性结论,量级不足以支撑逐征象的细粒度比较 |
| 评测另一个大语言模型的报告理解能力 | 同一批报告、同一批征象、有人裁定的参考答案 | 够,这是官方明确列出的延伸用途 |
| 标注一致性研究 | 每条标签附三档一致度 | 够做"难例"识别,不足以做医师间差异建模 |
| 训练胸片分类模型 | 无图像,仅标签 | 不够,必须配合图像库使用 |
| 替代 MIMIC-CXR-JPG 的测试集标签 | 只覆盖分歧子集 | 不够,且与全量标签不可比 |
| 复现 Med-PaLM 2 的输出 | 无模型输出,只有最终人工裁定 | 不够,官方未公开逐条模型回答 |
| 与另一批人工标签对照 | 与 MIMIC-CXR-JPG 2.1.0 的重叠部分可直接比 | 够做方法论比较(见 §8.2) |
1.4 你的处境与它能帮到的事
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 你在用 CheXpert 标签训胸片模型,想知道标签噪声有多大 | 给出一批已被人工推翻或确认的机器标签位置 | 用 study_id 回查这批检查的 CheXpert 标签,做定向误差分析 |
| 你在做临床大语言模型,需要一个带参考答案的中文与英文报告理解基准 | 提供报告—征象粒度的参考答案,且难例富集 | 自行取回报告原文,统一提示词后逐条比对,注意只覆盖分歧样本 |
| 你在设计标注流程,想证明"先筛后标"比"随机抽检"划算 | 提供一次完整流程的产出与人力配置 | 把 23824 次查询与 1378 条人工产出放进成本模型,按自己的单价重算 |
| 你在做标注一致性研究 | 三档一致度字段可用于挑出三人全不一致的极难样本 | 取 reader_agreement 为 3 的子集做定性复盘 |
| 你要写综述,需要"大语言模型能否用于标签精修"的证据 | 官方摘要与数据描述给出了明确的定性结论与对照设置 | 引用数据集本身而非转引二手结论(§9.3) |
| 你需要一个现成的大规模训练集 | 给不了 | 转向图像侧的 MIMIC-CXR-JPG 及其衍生库 |
1.5 一句话判断
它不是更大的标签集,是一张"机器标签最可能出错的地方"的地图;地图上的每个点都已经被人走过一遍,代价是地图之外仍是未知区域。
1.6 不适合谁:四条边界
不适合当训练集。 1378 条、无图像,深度学习意义上的训练素材一个都没有。它的量级只够做评测与误差分析。
不适合直接替换评测集。 它的构成由"Med-PaLM 2 与 CheXpert 分歧"这个条件决定,是条件抽样而非随机抽样。任何在这上面的绝对分数都不能写成"模型在 MIMIC-CXR 上的表现"。
不适合做流行病学或临床推断。 标签描述的是报告文本里怎么写的,而不是患者真实的病理状态;抽样条件又进一步偏向疑难表述。
不适合没有 MIMIC-CXR 使用权限的人。 这份文件只是索引与标签,脱离主库几乎无法解读。两个库都要签协议,且都是受限访问。
§2 数据构成与规格
2.1 一个文件的库
这份数据集的全部内容装在一个压缩 CSV 里:mimic-cxr-2.0.0-validated.csv.gz。文件名里的 2.0.0 指向它所依赖的上游版本——MIMIC-CXR-JPG 2.0.0 的 CheXpert 标签,而不是它自己的版本号。这是一个容易混淆的点:文件叫 2.0.0,数据集版本是 1.0.0,两者没有关系。
选择压缩 CSV 而不是更花哨的结构,与它的定位一致:这是一个"附加标签表",天然应该与上游的元数据表做连接。它没有自己的目录树,没有图像文件夹,没有配套的 README 之外的内容。对使用者来说,这意味着拿到手之后的第一件事不是解压看目录,而是想清楚要跟哪张表连接(§5.4)。
单文件带来的另一个后果是:数据字典只能写在网页上。官方页面的 Data Description 一节逐字段解释了含义,本文件的任何解析都必须以那一节为准,而不是以自己猜的列名为准。
2.2 字段字典
| 字段 | 取值形态 | 含义 | 使用注意 |
|---|---|---|---|
| subject_id | 整数 | MIMIC-CXR 为患者生成的标识 | 与 MIMIC-CXR、MIMIC-CXR-JPG 同名列对齐,可直接连接 |
| study_id | 整数 | MIMIC-CXR 为一次检查生成的标识 | 一份报告对应一个 study_id,可能对应多张图像 |
| finding | 字符串 | 十一类征象之一,取值见 §2.6 | 大小写与连写方式以官方列表为准,不要自行归并 |
| reader_label | 1.0 / 0.0 / -1.0 / 空 | 裁定后的标签,四值语义见下表 | 空值代表"报告未提及",不是缺失数据,不能填零 |
| reader_agreement | 1 / 2 / 3 | 三位阅片医师的一致程度 | 3 表示三人全不一致,已由第四位资深医师定夺 |
reader_label 的四值语义沿用 MIMIC-CXR-JPG 的既有定义,不是这份数据集自创的:
| 取值 | 官方定义 | 常见误用 |
|---|---|---|
| 1.0 | 报告中阳性提及该征象,且应出现在一张或多张对应图像上 | 被误当成"影像上一定有" |
| 0.0 | 报告中阴性提及该征象,因此任何对应图像上都不应出现 | 被误当成"影像上一定没有" |
| -1.0 | 报告以不确定语气提及,或表述含糊无法判断是否存在 | 被当成缺失值丢掉,实际上是最有价值的一类 |
| 空 | 报告完全没有提及该征象 | 被填成 0.0,把"没提"和"提了说没有"混为一谈 |
reader_agreement 的三档含义:
| 取值 | 含义 | 处理方式 |
|---|---|---|
| 1 | 三位阅片医师意见完全一致 | 直接采用 |
| 2 | 两位一致,取多数意见 | 官方采用多数标签 |
| 3 | 三人意见全不一致 | 由一位资深学术胸科放射医师给出最终裁定 |
2.3 一条记录的完整解剖
把文件读进来之后,一行大致长这样(数值为示意,用于说明结构):
| subject_id | study_id | finding | reader_label | reader_agreement |
|---|---|---|---|---|
| 10000032 | 50414267 | Edema | 1.0 | 1 |
| 10000032 | 50414267 | Fracture | 0.0 | 2 |
| 10000032 | 50414267 | Pneumonia | -1.0 | 3 |
| 10000032 | 50414267 | Pneumothorax | 1 |
四行读下来能还原出一条完整的故事:同一次检查,水肿被三位医师一致判为阳性提及;骨折有两位判为阴性提及、一位持不同意见;肺炎三个人给出了三种不同判断,最后由资深医师拍板为不确定;气胸则三人一致认为报告压根没提。最后这一行的 reader_label 是空的——这是"未提及",不是"没标上"。
读取时注意两点。第一,空值在 CSV 里就是空字符串,pandas 默认会读成 NaN,做统计前必须显式区分"NaN 代表未提及"与"这一列本来就该有值"。第二,同一个 study_id 会出现多行,每行对应一个征象,因此 study_id 不是唯一键,真正的主键是 study_id 与 finding 的组合。
2.4 主键映射:它和上游库怎么对上
| 本库字段 | 上游对应 | 连接方式 | 说明 |
|---|---|---|---|
| subject_id | MIMIC-CXR / MIMIC-CXR-JPG 的 subject_id | 直接等值连接 | 官方明确说明是 MIMIC-CXR 生成的患者标识 |
| study_id | MIMIC-CXR / MIMIC-CXR-JPG 的 study_id | 直接等值连接 | 官方明确说明是 MIMIC-CXR 生成的检查标识 |
| finding | MIMIC-CXR-JPG 的 CheXpert 列名 | 按名称对齐,注意大小写 | 本库只取了其中的十一类 |
| reader_label | MIMIC-CXR-JPG 的 CheXpert 标签列 | 语义相同,取值同源 | 可直接比较"机器标签"与"人工标签" |
| reader_agreement | 无上游对应 | 无 | 本库独有 |
连接之后能做什么,取决于你手里还有哪张表。只有 MIMIC-CXR-JPG 的元数据 CSV,就能拿到同一次检查的 CheXpert 与 NegBio 标签,做机器与人工的逐条对照;再连接 MIMIC-CXR 的报告文本,就能把人工裁定还原到具体句子上;再往下连图像文件,才能做影像侧的验证。三层连接对应三个不同的研究问题,越往下需要的权限与存储越多。
2.5 与同类资源的字段差异
| 对比项 | 本库 | MIMIC-CXR-JPG 2.0.0 | MIMIC-CXR-JPG 2.1.0 人工标注文件 |
|---|---|---|---|
| 基本单位 | 报告—征象对 | 检查(一行含全部征象列) | 检查(一行含全部征象列) |
| 存储形态 | 长表,一行一征象 | 宽表,一列一征象 | 宽表,一列一征象 |
| 标签来源 | 三位放射科医师裁定 | CheXpert 与 NegBio 规则抽取 | 一位放射科医师标注 |
| 是否附一致度 | 附三档一致度 | 无 | 无 |
| 覆盖条件 | 仅 Med-PaLM 2 与 CheXpert 分歧者 | 全量检查 | 抽样出的测试集报告 |
| 征象数量 | 11 类 | 14 类(CheXpert 全集) | 14 类 |
| 是否含图像路径 | 无 | 有 | 有 |
这张表最该记住的一行是"覆盖条件"。它决定了三份标签不能直接拼成一个大表来用:另外两份是抽样或全量,这一份是条件筛选。把它们并在一起算总量,得到的数字没有任何意义。
2.6 十一类征象与它们的检索关键词
官方在方法部分给出了一张"征象—关键词"对应表:先用关键词在报告里做初筛,把报告与可能的征象配对,再把这对文本送进大语言模型判定。这张表本身就是可用的工程资产,因为它透露了这套方法对每种征象的语言假设:
| 征象 | 官方给出的检索关键词 |
|---|---|
| Atelectasis(肺不张) | atelectasis |
| Cardiomegaly(心影增大) | cardiac silhouette、cardiomegaly |
| Consolidation(实变) | consolidation |
| Edema(肺水肿) | pulmonary vascular congestion、pulmonary edema |
| Fracture(骨折) | fracture |
| Lung Lesion(肺内结节/病灶) | lung nodule、nodule、nodular opacity |
| Lung Opacity(肺内密度增高) | airspace opacity、airspace opacities、lung opacities、lung opacity |
| Pleural Effusion(胸腔积液) | pleural effusion |
| Pneumonia(肺炎) | pneumonia |
| Pneumothorax(气胸) | pneumothorax |
| Support Devices(支持装置) | enteric tube、endotracheal tube、feeding tube、et tube、og、picc、central line、central venous catheter、ng |
两处细节值得留意。第一,多数征象只有一个或两个关键词,而 Support Devices 有九个——因为导管类装置在报告里的写法极其分散,漏一个词就漏掉一批检查。第二,Cardiomegaly 与 Edema 用了"描述性短语"而不只是术语(cardiac silhouette、pulmonary vascular congestion),说明关键词表是按放射科的实际书写习惯设计的,而不是按标准术语表。
官方同时说明,Med-PaLM 2 对某一征象的判定采用"或"规则:只要两次查询中至少一次、对应该征象的任一关键词给出肯定回答,该征象即判为阳性。这条规则很宽松,它倾向于把边界模糊的表述判成阳性,而这也正是它与 CheXpert 大量分歧的来源之一。
§3 它是谁的数据
3.1 贡献者与机构
| 作者 | 官方给出的隶属 |
|---|---|
| Kendall Park | 威斯康星大学麦迪逊分校;密苏里大学哥伦比亚分校医学院 |
| Rory Sayres | |
| Andrew Sellergren | |
| Tom Pollard | 麻省理工学院(MIT) |
| Fayaz Jamil | |
| Timo Kohlberger | |
| Charles Lau | Google via Vituity(美国加州埃默里维尔) |
| Atilla Kiraly |
八位作者里有六位与 Google 相关,一位来自 MIT,一位来自两所大学。这个构成决定了它的两个性格:一方面,它能调动三位美国执业放射科医师做三轮独立阅片,成本由 Google LLC 承担(官方在致谢里写明全部工作由 Google LLC 资助);另一方面,官方在利益冲突声明中明确写出部分作者是 Google 员工并持有 Alphabet 股票——被评测的模型是自家模型,这一点必须写进任何引用它的论文的方法节。
值得单独指出的是 Tom Pollard 的双重身份:他既是本数据集的作者,也是 PhysioNet 平台与 MIMIC 系列的核心维护者之一。这解释了为什么这份数据集的字段设计能与 MIMIC-CXR-JPG 无缝对齐。
3.2 时间线
| 时间 | 事件 | 意义 |
|---|---|---|
| 2019 | MIMIC-CXR 与 MIMIC-CXR-JPG 的原始论文发表 | 标签由 CheXpert 与 NegBio 抽取,人工验证局限于数百份报告 |
| 2024 年前后 | MIMIC-CXR-JPG 2.1.0 发布,加入一位放射科医师标注的测试集标签 | 出现第一批可对照的人工标签 |
| 2025-02-04 | 本数据集在 PhysioNet 上线,版本 1.0.0 | 首次把大语言模型筛选加多人裁定的流程产物公开 |
| 发布说明 | “This is the initial release.” | 至今无修订版本,无后续扩容 |
时间线的最后一行值得强调:它不是"还没更新",而是自发布之日起就没有产生过第二个版本。对使用者来说,这意味着不存在版本号混淆问题,引用时写 1.0.0 即可;同时也意味着如果上游 MIMIC-CXR-JPG 继续演进,这份标签表的对齐关系需要使用者自己复核。
3.3 采集场景:从报告文本到分歧标签
整个流程可以拆成四个动作,每一步都在缩小进入下一步的规模:
| 步骤 | 动作 | 规模量级(官方给出) |
|---|---|---|
| 一 | 用关键词表把报告与候选征象配对 | 覆盖 MIMIC-CXR 的报告文本,共 227,827 份 |
| 二 | 每对报告—征象用两套提示词模板各查一次 Med-PaLM 2 | 23824 次查询 |
| 三 | 取 Med-PaLM 2 与 CheXpert 标签不一致的对 | 一致者不再进入后续流程 |
| 四 | 从分歧中挑选一部分送三位放射科医师独立裁定 | 1378 条 |
第二个动作的规模值得单独说:23824 次查询,对应的是"报告 × 关键词 × 两套模板"的笛卡尔积的一部分,而不是有多少份报告就被查了多少次。它被写进正文是因为它是成本模型的关键输入——想复现这套方法的人要估算的 API 开销,正比于这个数字,而不是正比于报告数。
第三步的"取分歧"是整套方法的核心设计,也是它的核心局限。它的收益很明显:人工只看有可能错的地方。它的代价同样明显:模型与规则一致的地方,可能两个人一起错,而这部分永远不会被人工看到。因此这份数据集能证明的是"分歧子集上谁更接近人工判断",不能证明"全量标签的准确率"。
3.4 数据来源的四个层次
理解这份数据要先分清四层:放射报告文本(来自 MIMIC-CXR,未随本数据集分发)、自然语言处理标签(来自 MIMIC-CXR-JPG 2.0.0 的 CheXpert,未随本数据集分发)、大语言模型判定(Med-PaLM 2 的输出,未公开逐条结果)、人工裁定(本数据集唯一真正分发的内容)。
这个层次关系有一个直接后果:拿到本数据集的人,手里只有最后一层的结论,看不到支撑这个结论的原始文本与模型输出。想做"模型为什么判错"这类归因分析,必须自己回到 MIMIC-CXR 取报告,并且无法复现 Med-PaLM 2 当时的回答。官方在伦理一节说明,全部大语言模型处理与人工标注都在内部安全服务器的沙盒环境中进行——数据合规上的必要安排,在研究可复现性上的代价。
§4 它最独特的东西
4.1 稀缺的不是标签,是"挑出该看哪些标签"的方法
放射科医师的时间是这份领域里最硬的稀缺资源。公开的人工标注数据集之所以都很小,不是因为没人想做,而是因为每加一条都要付出真实的阅片时间。此前 MIMIC-CXR-JPG 2.1.0 的做法是抽样:从测试集里抽一批报告,请一位医师标一遍。抽样是无偏的,代价是大量标注落在"规则工具本来就标对了"的地方——官方自己算过这笔账:用那份人工标签去评估自然语言处理标签,多数征象上的一致度很高,也就是说花掉的阅片时间里有很大一部分只是确认了一遍已知正确的东西。
本数据集的思路是把这一步反过来:不随机抽,而是用另一个模型去预测"哪里可能标错了",只把预测出的可疑位置交给人。它公开的 1378 条标签是这条思路的产物,但它的价值不止于这 1378 条——它同时给出了一条可迁移的流程描述(关键词初筛、双提示词、或规则聚合、分歧筛选、三人裁定),任何有报告文本与规则标签的团队都可以照着做。
所以它的稀缺性有两层:作为数据,它是目前公开可得的、由多名美国执业放射科医师独立裁定的 MIMIC-CXR 报告—征象标签;作为方法,它给出一个把人工预算集中在刀刃上的可复制模板。
4.2 两套提示词模板的设计
官方给出了两个模板的原文,它们的差别不是措辞,而是角色设定:
| 模板 | 角色设定 | 提问方式 | 设计意图 |
|---|---|---|---|
| 模板一 | “我是一个乐于助人的放射科助手,就胸片报告中的信息给出简洁回答” | 以问答形式给出问题,要求只回答该问题,不要提及与问题无关的内容 | 把回答约束成 yes 或 no |
| 模板二 | “你是一个乐于助人的医学知识助手,提供有用、完整、简洁且有科学依据的回答” | 直接问"这份报告是否提到患者有某某征象",后接报告全文 | 用更宽松的角色换取更强的医学推理 |
两份模板都在结尾强约束输出形式,官方说明绝大多数回答是 yes 或 no,少数啰嗦的回答需要人工消解。这里的工程经验值得抄:对大语言模型做结构化抽取时,角色设定与输出约束是两件独立的事,一次查询里两件都要写,且要用同一份报告跑两遍再聚合——官方的聚合规则是"两次查询中任一次、任一关键词给出肯定,即判阳性",是一个明显偏宽松的规则。
为什么要设计得偏宽松?因为这一步的目标是"找可疑",不是"给结论"。宽松规则会多产出假阳性,但假阳性进入人工环节后会被剔除;而严格的规则漏掉的可疑样本,永远不会有人再看一眼。在这个流程里,宁可多送,不可漏送。
4.3 案例:一条分歧标签的一生
设想一次检查的报告里写着"心影大小难以评估,肺血管纹理略显增粗,不除外轻度肺水肿"。CheXpert 的规则遇到"不除外"这类措辞,处理结果与遇到明确肯定句时并不相同;Med-PaLM 2 在宽松角色下则可能把它读成"提到了肺水肿的可能"。于是这一对报告—征象被判为分歧,进入人工环节。
三位医师拿到的是同一个问题:这条报告对"肺水肿"这个征象,属于阳性提及、阴性提及、不确定提及,还是压根没提? 官方刻意要求四选一且不允许默认值——这一条很关键,因为"没提"与"提了说不确定"在下游建模里是完全不同的两种状态,如果允许留空,很多人会把两者混成一个。
三个人可能给出三种答案:一位认为"不除外轻度肺水肿"属于不确定提及(-1.0),一位认为既然明确提到肺水肿这个词就该算阳性(1.0),一位认为这句是针对肺血管纹理的描述、不属于肺水肿(空)。三人全不一致,触发第四位资深胸科放射医师裁定。最终落进 CSV 的是一行:finding 为 Edema,reader_label 为某个确定值,reader_agreement 为 3。
这个过程说明了 reader_agreement 字段为什么值得单独占一列:它不增加标签本身的信息,却标出了"这一条有多难"。做误差分析时,把一致度为 3 的样本单独拎出来看,往往比看平均指标更有收获。
4.4 标注粒度:报告—征象级,附置信线索
它的标注粒度是"一次检查 × 一个征象",比常见的"一次检查一行十四列"更细。这个粒度带来三个直接好处:可以按征象分别统计而不必拆列;可以不填充"未提及"之外的任何默认值;可以把一致度挂在最小粒度上,从而定位到"难的是这一条"而不是"难的是这一份报告"。
一致度字段是它区别于大多数人工标注数据集的地方。多数公开标注只给最终结论,把分歧过程留在论文的方法节里;这里把"三个人是否一致"直接写成了一列。对使用者而言,这是一条免费的难度标签:一致度为 1 的样本可以放心用作评测参考答案,一致度为 3 的样本更适合当作"标注方法学研究"的对象,而不是当作标准答案去要求模型猜中。
4.5 边界条件:什么情况下它不再适用
| 条件 | 是否适用 | 判断依据 |
|---|---|---|
| 评估胸片分类模型在全量测试集上的表现 | 不适用 | 抽样条件是"模型与规则分歧",非随机 |
| 评估大语言模型对报告文本的理解能力 | 适用,且是官方列出的延伸用途 | 同一批报告、同一批征象、有人裁定参考答案 |
| 估算自然语言处理标签的错误率 | 谨慎 | 只能估分歧子集内的错误率,不能外推到全量 |
| 训练任何模型 | 不适用 | 1378 条且无图像 |
| 研究医师间一致性与难例识别 | 适用 | 三档一致度字段 |
| 与 MIMIC-CXR-JPG 2.1.0 的人工标签对照 | 适用 | 官方说明两者存在重叠的报告—征象对 |
| 复现 Med-PaLM 2 的逐条输出 | 不适用 | 未公开逐条回答,且为内部沙盒版本 |
| 未取得 MIMIC-CXR 权限时使用 | 不适用 | 仅为索引与标签,脱离主库无法解读 |
§5 怎么拿到
5.1 目录结构与下载面
| 路径 | 内容 | 说明 |
|---|---|---|
| /files/med-palm2-mimic-cxr/1.0.0/ | 版本根目录 | 官方未列出子目录 |
| mimic-cxr-2.0.0-validated.csv.gz | 全部数据 | 压缩 CSV,五列 |
| 官方页面 Data Description | 字段字典 | 不在文件里,只在网页上 |
官方没有给出文件大小的公开标注,文件目录对未授权用户不可见。从内容推断,1378 行五列的文本表压缩后体量在几十千字节量级,下载带宽不是问题,权限才是问题。
5.2 受限访问下的下载
PhysioNet 的受限数据必须先注册账号、完成人体研究伦理培训、获得批准并签署数据使用协议,之后用账号密码下载:
#-- 单文件下载;-N 便于续传,-nd 不建目录层级
wget -r -N -c -np -nH --cut-dirs=2 \
--user YOUR_PHYSIONET_USERNAME --ask-password \
https://physionet.org/files/med-palm2-mimic-cxr/1.0.0/mimic-cxr-2.0.0-validated.csv.gz
#-- 下载后先看行数与列名,不要急着解压成未压缩副本
gzip -cd mimic-cxr-2.0.0-validated.csv.gz | head -3
gzip -cd mimic-cxr-2.0.0-validated.csv.gz | wc -l
第二步的两条命令看似多余,实际能挡掉两个常见错误:一是 gzip 压缩包解压后末尾是否多一个空行,二是列名是否与你预期的顺序一致。官方页面给出的字段顺序是 subject_id、study_id、finding、reader_label、reader_agreement,但解析时按列名取永远比按位置取安全。
5.3 读取压缩 CSV
import pandas as pd
#-- 直接读压缩包,不必先解压
df = pd.read_csv('mimic-cxr-2.0.0-validated.csv.gz',
dtype={'subject_id': 'int64', 'study_id': 'int64',
'finding': 'string'})
print(df.shape, list(df.columns))
print(df['finding'].nunique(), sorted(df['finding'].unique()))
#-- reader_label 的空值是"报告未提及",不是缺失,必须显式标注出来
df['mentioned'] = df['reader_label'].notna()
print(df.groupby('mentioned').size())
上面最后两行是这份数据最容易出错的地方。pandas 把空单元格读成 NaN,任何 groupby、value_counts、dropna 都会默认把它当缺失值处理,而它的真实语义是"报告完全没有提到这个征象",是四种合法取值之一。正确做法是新增一列布尔标记,把它从 NaN 语义里救出来,后续所有统计都显式区分"未提及"与"提及了但不确定"。
5.4 与 MIMIC-CXR-JPG 拼接
import pandas as pd
gt = pd.read_csv('mimic-cxr-2.0.0-validated.csv.gz')
#-- 上游元数据:一次检查一行,十四列 CheXpert 标签
meta = pd.read_csv('mimic-cxr-2.0.0-metadata.csv.gz')
#-- 宽表转长表,才能与本库的报告—征象粒度对齐
FINDS = ['Atelectasis', 'Cardiomegaly', 'Consolidation', 'Edema',
'Fracture', 'Lung Lesion', 'Lung Opacity', 'Pleural Effusion',
'Pneumonia', 'Pneumothorax', 'Support Devices']
long = meta.melt(id_vars=['subject_id', 'study_id'],
value_vars=FINDS,
var_name='finding', value_name='chexpert_label')
merged = gt.merge(long, on=['subject_id', 'study_id', 'finding'], how='left')
merged['disagree'] = merged['reader_label'].fillna('missing') != \
merged['chexpert_label'].fillna('missing')
print(merged.shape, merged['disagree'].sum())
这段代码做三件事:把上游宽表拉成长表与本库粒度对齐;按三元组连接;逐条标记人工与机器是否一致。注意 melt 之后必须保留 fillna 的处理——因为两侧的"空"都代表未提及,直接比较 NaN 会永远得到 False。
5.5 一致度分层与四值映射
import pandas as pd
gt = pd.read_csv('mimic-cxr-2.0.0-validated.csv.gz')
#-- 四值标签:把未提及单列一类,不要并入阴性
def bucket(v):
if pd.isna(v):
return 'not_mentioned'
if v == 1.0:
return 'positive'
if v == 0.0:
return 'negative'
return 'uncertain'
gt['bucket'] = gt['reader_label'].map(bucket)
#-- 一致度分层:3 为三人全不一致,已由第四位资深医师裁定
gt['hard'] = gt['reader_agreement'] == 3
print(gt.groupby('bucket')['hard'].sum())
分层之后最常见的两种用法:做评测时,把一致度为 3 的样本单独报告或剔除,避免用"三个人都没达成共识"的东西当作标准答案去要求模型;做标注方法学研究时,反过来只看这一层,追问"为什么这条报告让三个人给出三种读法"。两种用法都对,但不能混在一次统计里。
5.6 五个最容易出错的地方
| 位置 | 错误写法 | 后果 | 正确做法 |
|---|---|---|---|
| 空值处理 | 把 reader_label 的空值填成 0.0 | "未提及"与"阴性提及"被合并,标签语义崩坏 | 保留空值,另建布尔列标记 |
| 连接键 | 只用 study_id 连接 | 同一检查的多征象行被错位 | 用 subject_id + study_id + finding 三元组 |
| 文件名 | 把文件名的 2.0.0 当成数据集版本 | 引用写成 2.0.0 | 数据集版本是 1.0.0 |
| 规模理解 | 以为 1378 是报告数 | 与真实报告规模差一个数量级 | 1378 是报告—征象对 |
| 抽样理解 | 把这份标签当随机抽样 | 外推到全量标签错误率 | 明确写清它是分歧富集子集 |
§6 与库内条目的关系
6.1 关系图谱
| 条目 | 与本库的关系 | 分工 |
|---|---|---|
| MIMIC-CXR | 报告文本的来源 | 提供被重读的原始文本,本库不含文本 |
| MIMIC-CXR-JPG | CheXpert 与 NegBio 标签的来源,也是图像来源 | 提供被比对与被推翻的机器标签 |
| image-embeddings-mimic-cxr | 同为 MIMIC-CXR 的衍生资源,方向是图像表征 | 它在图像侧,本库在文本标签侧 |
| lung-segment-mimic-cxr | 同为衍生资源,方向是像素级分割掩码 | 同上,两者可互补但粒度完全不同 |
| mimic-cxr-ext-ils | 另一条已有人复核的扩展 | 合并前必须先核对 study_id 是否重叠 |
| egd-cxr | 胸片相关的另一类标注资源 | 用于对照不同标注体系 |
| llava-rad-mimic-cxr-annotation | 同为在 MIMIC-CXR 报告上做结构化标注的工作 | 对照不同标注来源的口径差异 |
| vqa-evaluation-mimic-cxr | 同样出自 Google 团队,面向视觉问答评测 | 同一团队在报告与图像两条线上的两个产物 |
| radgraph2-radiology-reports | 报告文本的结构化抽取 | 提供另一种把报告变成结构的方法 |
这张表要说清的是:本库在 MIMIC-CXR 生态里站在"标签质量"这一格,而不是"图像"或"表征"这两格。所有以图像为主体的衍生库与它是并列关系,可以联合使用但不可互相替代。
6.2 检索路径
| 你要找的东西 | 检索词 | 会落到哪里 |
|---|---|---|
| 报告原文 | mimic-cxr、radiology report |
MIMIC-CXR 主库 |
| 被对照的机器标签 | mimic-cxr-jpg、chexpert、negbio |
MIMIC-CXR-JPG |
| 另一批人工标签 | mimic-cxr-jpg 2.1.0、test-set-labeled |
MIMIC-CXR-JPG 2.1.0 的标注文件 |
| 图像侧的特征与掩码 | image-embeddings、lung-segment |
同名衍生库 |
| 报告结构化抽取的其他做法 | radgraph、annotation |
radgraph2-radiology-reports 等 |
| 大语言模型在临床文本上的评测 | llm、qa、notes |
ehr-notes-qa-llms 等 |
6.3 与其他库的分工判据
| 任务 | 主粮仓该用什么 | 本库的位置 | 原因 |
|---|---|---|---|
| 胸片分类模型训练 | MIMIC-CXR-JPG 全量带标签图像 | 不适用 | 无图像,且只有分歧子集 |
| 标签噪声定位与修正 | 无可替代 | 主力 | 唯一一批多人裁定的分歧标签 |
| 大语言模型报告理解评测 | 可自建 | 主力之一 | 有参考答案且难例富集 |
| 标注一致性与难例研究 | 少见 | 主力 | 三档一致度字段 |
| 影像侧分割与表征 | 图像衍生库 | 不适用 | 完全不含图像信息 |
| 报告生成的评测 | 报告结构化库 | 辅助 | 只提供征象级标签,无整篇结构 |
被高估的用法集中在第一行:有人拿到这份标签后想直接替换训练标签,这在规模与抽样条件上都不成立。被低估的是第四行——一致度字段是这份数据里最独特、也最少被用起来的部分。
§7 质量评估与局限性
7.0 阅读本节前的一个前置校正
先纠正一个最容易发生的误判:把"只在分歧样本上做人工裁定"当成偷工减料。恰恰相反,它是这份数据集的设计核心。随机抽样的人工标注,大部分预算会消耗在确认规则工具本来就正确的标签上;本数据集把预算压到最可能出错的位置,同样的阅片时间换来的是更密集的错误信息。
这个校正会改变下面评分的读法。它在"作为训练素材"这一维度上几乎得零分,但在"作为标签质量的探针"这一维度上几乎没有替代品。用前一把尺子量它,得到的结论必然是否定的,而那个否定没有意义。
7.1 五维评分
按数据可用性的常用维度打分,每项 1–5 分,分数针对"作为医学影像标签质量研究数据"这个用途:
| 维度 | 分数 | 理由 |
|---|---|---|
| 数据规模 | 2 | 1378 条报告—征象对,评测够用,训练不足 |
| 标注质量 | 5 | 三位美国执业放射科医师独立裁定,全不一致时由资深医师定夺,附一致度 |
| 任务适配 | 4 | 标签质量研究、大模型评测高度适配;训练类任务完全不适用 |
| 文档完整 | 4 | 字段、方法、流程、伦理交代清楚;缺文件大小与逐条模型输出 |
| 可获取性 | 3 | 受限访问,须培训、审批与签署协议;文件本身极小 |
五项合计 18 分(满分 25)。分数结构说明它是一个"窄而深"的资源:可获取性与规模拖后腿,标注质量拉满。
7.2 标注质量的两层
第一层是标签对不对。三人独立、多数表决、全不一致时上级裁定,这套流程在人工标注里属于偏严格的做法;再叠加一致度字段,使用者可以自己决定信任到什么程度。这是它可以被称为 ground truth 的依据。
第二层是它描述的是什么。必须反复强调:这些标签描述的是报告文本的表述状态(阳性提及、阴性提及、不确定提及、未提及),不是影像上的客观存在。一个被标为 1.0 的胸腔积液,意思是"报告说有,且应能在图上看到",其准确性取决于报告本身写得对不对。用它做影像模型的评测时,测的是"模型能否复现报告的表述",这个链条上游还有报告质量这一环。
| 用途 | 这一层的影响 | 建议 |
|---|---|---|
| 评测自然语言处理或大语言模型的抽取能力 | 无影响,本就是同一对象 | 直接使用 |
| 评测影像分类模型 | 有影响,报告错误会被算成模型错误 | 报告中写明评测的是"报告一致性" |
| 临床流行病学推断 | 影响大,标签不等于患病状态 | 不适用 |
7.3 已知的、可枚举的偏差
| 偏差 | 表现 | 影响 |
|---|---|---|
| 条件抽样 | 只含 Med-PaLM 2 与 CheXpert 分歧者 | 任何比例都不能外推到全量标签 |
| 模型一致处无人工 | 两者一起错的情况永远不会被发现 | 无法估计全量标签的真实错误率 |
| 宽松聚合规则 | 任一次肯定即判阳性 | 分歧集合偏向 Med-PaLM 2 判阳的一侧 |
| 单语种 | 仅英文报告 | 不能代表其他语言报告的抽取难度 |
| 关键词依赖 | 未在关键词表内的写法会被初筛漏掉 | 漏检的征象永远进入不了流程 |
| 单一模型 | 只用 Med-PaLM 2 内部沙盒版本 | 换模型后分歧集合不同,结论不可直接迁移 |
| 裁定人数 | 三人加一名资深医师 | 仍有小概率多数错误 |
7.4 外部验证矩阵
| 验证角色 | 做法 | 讲得通的地方 | 风险 |
|---|---|---|---|
| 大语言模型抽取能力评测 | 用同一批报告—征象对,换模型重答,与本库参考答案比对 | 参考答案由多人裁定,可信度高 | 子集为难例富集,成绩普遍偏低是正常的 |
| 自然语言处理标签纠错 | 定位 CheXpert 被推翻的位置,归纳错误模式 | 官方已给出定性对照结论 | 只能归纳分歧子集内的模式 |
| 标注方法学比较 | 与本库与 MIMIC-CXR-JPG 2.1.0 的重叠部分对照 | 官方已做此比较,指出标注方法差异很大 | 重叠量小,不足以做统计检验 |
| 多模态模型评测 | 官方说明这批标签已被用于 Med-Gemini 2D 的评测 | 有先例 | 这类用法需同时拿到图像库 |
外部验证里最值得留意的是第三种。官方自己把本库与 MIMIC-CXR-JPG 2.1.0 的人工标签做了重叠比较,结论是重叠量很小(263 对报告—征象),且重叠部分中意见不一致的占相当比例;官方把原因归结为标注方法学差异——本库要求阅片医师在四个选项里显式选择、不允许默认值,而另一份标注在"未提及"的处理上口径不同。
这段比较的意义超出两份数据本身:它说明"人工标注"并不是一个无条件的金标准,标注指令的设计会直接改变标签结果。任何引用人工标签的论文,都应该在方法节写清标注指令,而不是笼统地写"由放射科医师标注"。
7.5 它为何能持续:标签质量是长期议题
只要影像模型的训练仍然依赖从文本里抽出来的标签,"这些标签错在哪"就会一直是个有价值的问题。它不会因为更大的图像库出现而失效——恰恰相反,图像库越大,标签错误的绝对数量越多,定位错误的需求越强。这份数据集占住的位置是方法示范加第一批多人裁定产物;即使后来者用别的模型重做一遍,它的对照组身份也依然成立。
§8 生态位与历史
8.1 历史沿革
MIMIC-CXR 的标签问题从它诞生的第一天就存在。原始论文给出的解决方案是用规则工具从报告里抽标签,并在论文里用数百份报告做了一次人工验证。此后几年里,这批标签事实上成了影像模型领域的通用标准,而"它们有多准"这个问题被反复提出却很少被回答——因为回答它需要钱和人。
2024 年前后出现的两个变化让这件事变得可行:一是 MIMIC-CXR-JPG 2.1.0 补上了一位放射科医师标注的测试集标签,让"人工标签"这个概念有了实物;二是医学大语言模型成熟到可以被当作第二个独立意见使用。本数据集正好站在这两条线的交点上。
8.2 与 MIMIC-CXR-JPG 2.1.0 的关系
| 对比项 | 本库 | MIMIC-CXR-JPG 2.1.0 人工标注 |
|---|---|---|
| 标注者 | 三位美国执业放射科医师,必要时第四位裁定 | 一位放射科医师 |
| 覆盖报告数 | 以报告—征象对计,共 1378 对 | 687 份报告,其中 685 份能与 MIMIC-CXR 的 study_id 对上 |
| 抽样方式 | 条件抽样:模型与规则分歧者 | 抽样(分层以保证覆盖多种病变) |
| 标注指令 | 四选一,不允许默认值 | 官方说明强调"只要提到就标,即使不确定" |
| 两者重叠 | 263 对报告—征象 | 同上 |
| 重叠部分的结论 | 官方指出不到一半的标签一致,多数分歧源于"未提及"的处理差异 | 同上 |
这张表最有用的一行是最后一行。它给出的不是"谁更准",而是"两份人工标签可以很不一样"。对使用者来说,实操含义是:合并使用时必须统一口径,尤其是"未提及"这一类;写论文引用人工标签时,必须说明是哪一份、按什么指令标出来的。
值得注意的是第二行的数字差异里还藏着一个小坑:那份文件里有两份报告的 study_id 在 MIMIC-CXR 里对不上。做跨库比对时,直接按 study_id 连接会得到空值,这不是连接写错了,是上游数据本身如此。
8.3 生态位:探针而不是粮仓
| 角色 | 主力粮仓 | 质量探针 |
|---|---|---|
| 典型用法 | 大规模训练与预训练 | 误差定位、方法评测、一致性研究 |
| 需要的前提 | 数据量大、标签覆盖全 | 标签可信、难例富集、有对照基线 |
| 代表 | MIMIC-CXR-JPG 及其图像衍生库 | 本库 |
| 失败模式 | 过拟合、标签噪声累积 | 规模太小、抽样条件不明导致误用 |
本库坐在右边这一列。把探针当粮仓用,会立刻遇到"只有一千多条还没有图"的窘境;把粮仓当探针用,则是用机器标签检验机器标签,什么也检验不出来。
8.4 谁在用它,用来做什么
从官方页面的说明看,使用者集中在三类:做影像标签质量研究的团队(把它当误差定位工具)、做大语言模型临床能力评测的团队(把它当带参考答案的基准)、做标注方法学的团队(把它与另一批人工标签对照)。官方自己还写明这批标签已被用于 Med-Gemini 2D 模型的评测,说明第一手使用者正是产出它的团队。
第三类最少,也最有价值。因为只有当"人工标签"本身被当作研究对象时,影像模型评测这个领域才会意识到:上游的标签口径,比下游的模型结构更能决定评测结论。
§9 使用指引
9.1 三种角色的路径
| 角色 | 第一天 | 第一周 | 注意事项 |
|---|---|---|---|
| 影像算法研究者 | 读官方 Data Description,确认字段语义 | 连接 MIMIC-CXR-JPG,定位被推翻的机器标签 | 不要把它当评测集替换(§1.6) |
| 临床大语言模型研究者 | 取回对应报告原文,统一提示词 | 与本库参考答案逐条比对,按征象分报告 | 成绩偏低是子集性质所致,注明抽样条件 |
| 标注方法学研究者 | 只看一致度为 3 的样本 | 复盘难例,并与另一批人工标签对照 | 统一"未提及"口径后再比较 |
9.2 一条最短的可用流程
#-- 1. 取回标签表(需 PhysioNet 受限访问权限)
wget -N -c --user YOUR_PHYSIONET_USERNAME --ask-password \
https://physionet.org/files/med-palm2-mimic-cxr/1.0.0/mimic-cxr-2.0.0-validated.csv.gz
#-- 2. 看一眼列名与行数,确认解析方式
gzip -cd mimic-cxr-2.0.0-validated.csv.gz | head -1
gzip -cd mimic-cxr-2.0.0-validated.csv.gz | tail -n +2 | wc -l
import pandas as pd
#-- 3. 读表,并把"未提及"从 NaN 语义里救出来
gt = pd.read_csv('mimic-cxr-2.0.0-validated.csv.gz')
gt['bucket'] = gt['reader_label'].map(
lambda v: 'not_mentioned' if pd.isna(v)
else 'positive' if v == 1.0
else 'negative' if v == 0.0 else 'uncertain')
#-- 4. 先按征象看一遍人工判定,再决定要不要连上游
print(gt.groupby(['finding', 'bucket']).size().unstack(fill_value=0))
#-- 5. 一致度分层:3 为三人全不一致,单独处理
hard = gt[gt['reader_agreement'] == 3]
print('三人全不一致的条数:', len(hard))
这段流程刻意没有做"模型对比"这一步,因为那需要先拿到报告文本与另一套标签,属于各自的研究设计。这里给的是把数据读对的最短路径:读表、救回空值语义、按征象看分布轮廓、按一致度分层。
9.3 引用方式
| 引用对象 | 内容 |
|---|---|
| 数据集 | Park, K., Sayres, R., Sellergren, A., Pollard, T., Jamil, F., Kohlberger, T., Lau, C., & Kiraly, A. (2025). Application of Med-PaLM 2 in the refinement of MIMIC-CXR labels (version 1.0.0). PhysioNet. https://doi.org/10.13026/7wmp-jx90 |
| 平台 | PhysioNet 平台综述论文,按官方页面 Cite 按钮生成 |
| 上游 | MIMIC-CXR Database v2.0.0 与 MIMIC-CXR-JPG v2.0.0,官方列为 Parent Projects,须一并引用 |
| 补充声明 | 建议同时注明:抽样条件为分歧子集、标签对象是报告文本而非影像、使用的版本号 |
最后一行不是形式主义。这三个信息缺失中的任何一个,都会让读者误读基于这份数据得出的任何结论。
§10 AI 使用声明
| 项目 | 声明 |
|---|---|
| 文本生成 | 本文由 AI 辅助撰写,编辑把关结构与事实 |
| 数字来源 | 规模、结构、边界三类数字来自 PhysioNet 官方项目页的内容段与数据描述段 |
| 文件核验 | 官方文件目录对未授权访问不可见,文件的字段口径以官方页面 Data Description 为准 |
| 不一致说明 | 文件名含 2.0.0 而数据集版本为 1.0.0,已在 §2.1 与 §5.6 各说明一次 |
| 论文信息 | 仅参考官方页面摘要与公开检索结果,未读全文 |
| 未核验内容 | 文件的字节大小、逐条模型输出、覆盖的患者与检查去重后的具体数量 |
| 数字取舍 | 官方页面给出的分歧命中对比为效果评价口径,非规模、结构、边界数字,正文只作定性表述 |
| 图像 | 无配图;封面为生成式提示词,不含真实影像 |
| 免责 | 本文不构成临床建议;数据使用须遵守 PhysioNet 受限健康数据许可与数据使用协议 |
常见误读(避坑清单)
| 说法 | 实际 | 证据 |
|---|---|---|
| 「它是 MIMIC-CXR 测试集的金标准」 | 只覆盖模型与规则分歧的报告—征象对 | 官方数据描述:标签为 differing study-finding pairs |
| 「它有二十二万份报告」 | 报告在上游 MIMIC-CXR,本库只有 1378 条标签 | 官方数据描述只列出五个字段 |
| 「1378 是一千三百七十八份报告」 | 是报告—征象对,一份报告可对应多条 | 主键为 study_id 与 finding 的组合 |
| 「文件名里的 2.0.0 是版本号」 | 指上游 MIMIC-CXR-JPG 2.0.0,本库版本是 1.0.0 | 官方页面版本区只列出 1.0.0 |
| 「它带胸片图像」 | 不含任何图像,只有索引与标签 | 文件为压缩 CSV,五列 |
| 「人工标签就是客观事实」 | 标签描述报告文本的表述状态 | reader_label 的官方定义逐条以"报告中提及"表述 |
| 「空值可以直接填 0」 | 空值代表报告未提及,是第四种合法取值 | 官方四值定义明确区分 |
| 「可以照着方法用公开接口复现」 | 使用的是内部沙盒版 Med-PaLM 2 | 官方说明与 MedLM 接口不完全等价 |
| 「可以拿它训练模型」 | 无图像且只有分歧子集 | 官方定位为 ground truth labels,供验证与评测 |
| 「两份人工标签可以直接合并」 | 两份口径在"未提及"上处理不同 | 官方比较段指出重叠部分分歧的成因 |
| 「它的标签比 CheXpert 全量更准,所以可直接替换」 | 只在分歧子集上有对照结论 | 官方分析限定于 differing labels |
FAQ
Q1:它到底有多少条数据?
1378 条,单位是"一次检查 × 一个征象"的报告—征象对,不是报告数,也不是患者数。同一个 study_id 会在文件里出现多行,每行对应一个征象。要算去重后的检查数或患者数,得先按 subject_id 或 study_id 去重,而官方页面并没有给出这两个去重数字。
Q2:为什么只标了模型与 CheXpert 分歧的部分?
因为人工阅片是最贵的资源。官方的算法是:测试集三千余份报告、十余种征象、每种至少三位医师裁定,全标需要十万量级标注。用大语言模型先筛出可疑位置,可以把同样的预算花在最可能出错的地方。代价是:模型与规则一致的地方(包括两者一起错的地方)没有人工参与。
Q3:它能直接用来评测我的胸片分类模型吗?
可以,但必须写明评测口径。它的标签描述的是"报告怎么写的",不是"影像上有什么";而且它是分歧富集的子集,模型在这上面的分数与在完整测试集上的分数不可比。正确的写法是"模型在人工裁定的分歧子集上与报告表述的一致性",而不是"模型的诊断准确率"。
Q4:reader_label 的空值该怎么处理?
不要填 0,也不要当缺失值丢掉。官方定义里空值代表"报告完全没有提及该征象",是与 1.0、0.0、-1.0 并列的第四种取值。实操做法是另建一列布尔标记"是否被提及",后续统计显式区分四类。
Q5:reader_agreement 这一列有什么用?
它是难度标记。取值 1 表示三位阅片医师完全一致,2 表示两人一致取多数,3 表示三人全不一致、由第四位资深胸科放射医师裁定。做评测时可以把 3 单独报告或剔除;做标注方法学研究时,反过来只看 3 这一层,能定位到最容易产生分歧的表述类型。
Q6:它和 MIMIC-CXR-JPG 2.1.0 的人工标签是什么关系?
两批独立产出的人工标签,官方做了重叠比较:重叠部分只有 263 对报告—征象,且其中意见一致的不到一半。官方把多数分歧归因于标注口径——本库要求阅片医师在四个选项中显式选择、不允许默认值,另一份标注在"未提及"的处理上不同。合并使用必须先统一口径。
Q7:数据集的版本是 2.0.0 还是 1.0.0?
1.0.0。文件名 mimic-cxr-2.0.0-validated.csv.gz 里的 2.0.0 指的是上游 MIMIC-CXR-JPG 2.0.0,即被比对的那批 CheXpert 标签的版本。官方页面至今只列出 1.0.0 一个版本,发布说明写明是初始发布。
Q8:需要什么权限才能拿到?
受限访问:注册 PhysioNet 账号、完成人体研究伦理培训、获得批准并签署数据使用协议。许可为 PhysioNet Restricted Health Data License 1.5.0。此外,要真正用起来通常还需要 MIMIC-CXR 与 MIMIC-CXR-JPG 的访问权限。
Q9:能不能用别的模型重跑这套方法?
官方明确支持这个方向,并说明类似能力可通过 Google Cloud 的 MedLM 接口获得,且公开接口不需要原提示词里的前置说明文。但要清楚:换模型后分歧集合会变,产出的标签集与本库不可直接比较;要比较,就把本库当作固定的参考答案集,用自己的模型在同一批报告—征象对上重答。
Q10:它能不能告诉我 MIMIC-CXR 标签的整体错误率?
不能。这份数据的抽样条件是"分歧",而模型与规则一致的部分完全没有人工参与,其中包括两者一起错的情况。它能回答的是"在有分歧的这部分里谁更接近人工判断",任何把结论外推到全量标签的做法都不成立。
术语表
| 术语 | 解释 |
|---|---|
| MIMIC-CXR | 公开可得的胸片影像与自由文本放射报告数据库 |
| MIMIC-CXR-JPG | MIMIC-CXR 的 JPG 版本,附 CheXpert 与 NegBio 抽取的结构化标签 |
| CheXpert | 从放射报告文本抽取十四类征象标签的规则与自然语言处理工具 |
| NegBio | 另一款用于临床文本否定与不确定检测的规则工具 |
| Med-PaLM 2 | Google 的医学领域大语言模型,本工作使用其内部沙盒版本 |
| MedLM | Google Cloud 上提供的医学大语言模型接口 |
| 报告—征象对 | 一次检查与一个征象组成的标注单位,本库的最小粒度 |
| 分歧标签 | 模型判定与规则标签不一致的那些报告—征象对 |
| reader_label | 裁定后的标签字段,取值 1.0、0.0、-1.0 或空 |
| reader_agreement | 一致度字段,取值 1、2、3 |
| 未提及 | 报告完全没有提到某征象,标签为空,不等同于阴性 |
| 不确定提及 | 报告以不确定语气或含糊表述提到某征象,标签为 -1.0 |
| 条件抽样 | 按某个条件筛选后再抽样,结果不能外推到总体 |
| 多数表决 | 三位阅片医师中两人意见相同时取该意见 |
| 上级裁定 | 三人意见全不一致时由资深医师给出最终判定 |
| 提示词模板 | 给大语言模型的固定问法,本工作用了两套 |
| 关键词初筛 | 先用关键词把报告与候选征象配对,再送模型判定 |
| 宽松聚合 | 任一次查询给出肯定即判阳性的规则,倾向于多找可疑 |
| 沙盒环境 | 隔离的内部运行环境,用于处理受保护的健康数据 |
| 受限访问 | 须注册、培训、审批并签署协议后才能下载 |
| 数据使用协议 | 规定不得转发数据、不得尝试重新识别个人等义务的文件 |
附录 A:核心数字核对表
| 项 | 值 | 来源 | 来源层级 |
|---|---|---|---|
| 数据集版本 | 1.0.0 | 官方页面版本区 | 官方页面 |
| 首次发布日期 | 2025-02-04 | 官方页面 | 官方页面 |
| 最近改动 | 无(初始发布) | 官方 Release Notes | 官方页面 |
| 记录数 | 1378 条报告—征象对 | 官方摘要与数据描述 | 官方页面 |
| 大语言模型查询次数 | 23824 次 | 官方方法段 | 官方页面 |
| 征象类别数 | 11 类 | 官方数据描述列出的 finding 列表 | 官方页面 |
| 复核医师人数 | 3 名,全不一致时加 1 名资深医师 | 官方 Reader Study 段 | 官方页面 |
| 上游报告规模 | 227827 份 | 官方背景段 | 官方页面 |
| 上游测试集报告数 | 3269 份 | 官方背景段 | 官方页面 |
| 全量人工标注的成本量级 | 十万级标注 | 官方背景段的乘积说明 | 官方页面 |
| 对照库人工标注报告数 | 687 份(685 份可对齐) | 官方 Usage Notes | 官方页面 |
| 与对照库的重叠量 | 263 对报告—征象对 | 官方 Usage Notes | 官方页面 |
| 文件数 | 1 个压缩 CSV | 官方数据描述 | 官方页面 |
| 字段数 | 5 列 | 官方数据描述 | 官方页面 |
| reader_label 取值数 | 4(含空值一类) | 官方字段定义 | 官方页面 |
| reader_agreement 取值数 | 3 | 官方字段定义 | 官方页面 |
| 提示词模板数 | 2 套 | 官方方法段 | 官方页面 |
| 许可 | PhysioNet Restricted Health Data License 1.5.0 | 官方页面许可区 | 官方页面 |
| 数据使用协议 | PhysioNet Restricted Health Data Use Agreement 1.5.0 | 官方页面 | 官方页面 |
| DOI(v1.0.0) | 10.13026/7wmp-jx90 | 官方页面引用区 | 官方页面 |
| DOI(latest) | 10.13026/a8e5-yx97 | 官方页面 | 官方页面 |
| 上游项目 | MIMIC-CXR v2.0.0、MIMIC-CXR-JPG v2.0.0 | 官方 Parent Projects | 官方页面 |
附录 B:数字的来源分层
第一层:官方页面。 版本、日期、记录数、查询次数、征象类别数、医师人数、字段数与取值、许可、DOI、上游来源。这些数字全部来自 PhysioNet 项目页的摘要、背景、方法、数据描述与使用说明各段。
第二层:官方给出的推算。 上游报告规模、测试集报告数、全量人工标注的成本量级,来自官方背景段对"为什么这件事做不动"的说明,是官方自己列出的量级估算,不是本文推算。
第三层:未核验。 文件的字节大小、逐条模型输出、去重后的患者数与检查数、每条征象各自覆盖多少条。官方页面没有给出这些数字,本文正文凡涉及的地方都只作定性表述。
关于效果类数字。 官方页面给出了分歧标签上模型与规则各自的命中对比。这类数字属于效果评价口径,不在规模、结构、边界三类的收录范围内,因此正文只作定性表述,未录入具体数值。需要引用效果的读者请直接查阅官方页面并注明原始出处。
附录 C:完整参考文献
| 编号 | 文献 | 链接 | 用途 |
|---|---|---|---|
| 1 | Application of Med-PaLM 2 in the refinement of MIMIC-CXR labels v1.0.0 | https://physionet.org/content/med-palm2-mimic-cxr/1.0.0/ | 全部规模、结构、边界数据的来源 |
| 2 | MIMIC-CXR 原始论文(Scientific Data, 2019) | https://doi.org/10.1038/s41597-019-0322-0 | 上游报告与人群背景 |
| 3 | MIMIC-CXR-JPG - chest radiographs with structured labels | https://physionet.org/content/mimic-cxr-jpg/ | 被比对的标签与图像来源 |
| 4 | CheXpert 原始论文(AAAI 2019) | 官方参考文献 5 | 规则标签工具的方法说明 |
| 5 | MedLM models overview(Google Cloud) | https://cloud.google.com/vertex-ai/generative-ai/docs/medlm/overview | 公开接口与内部沙盒版本的关系 |
| 6 | Advancing Multimodal Medical Capabilities of Gemini | https://arxiv.org/abs/2405.03162 | 这批标签已被用于 Med-Gemini 2D 评测的说明 |
| 7 | PhysioNet 平台综述(Nature Health) | https://doi.org/10.1038/s44360-026-00096-z | 托管模式与引用规范 |
附录 D:任务代码
任务一:定位被人工推翻的机器标签
import pandas as pd
gt = pd.read_csv('mimic-cxr-2.0.0-validated.csv.gz')
meta = pd.read_csv('mimic-cxr-2.0.0-metadata.csv.gz')
FINDS = ['Atelectasis', 'Cardiomegaly', 'Consolidation', 'Edema',
'Fracture', 'Lung Lesion', 'Lung Opacity', 'Pleural Effusion',
'Pneumonia', 'Pneumothorax', 'Support Devices']
#-- 宽表转长表,粒度对齐后按三元组连接
long = meta.melt(id_vars=['subject_id', 'study_id'], value_vars=FINDS,
var_name='finding', value_name='chexpert_label')
m = gt.merge(long, on=['subject_id', 'study_id', 'finding'], how='left')
#-- 空值语义统一:两侧的空都代表"未提及"
m['human'] = m['reader_label'].fillna('missing')
m['machine'] = m['chexpert_label'].fillna('missing')
flipped = m[m['human'] != m['machine']]
#-- 按征象列出被推翻的位置,供人工复核
for f, sub in flipped.groupby('finding'):
print(f, len(sub), '一致度为3的条数:', int((sub['reader_agreement'] == 3).sum()))
任务二:把难例单独拎出来
import pandas as pd
gt = pd.read_csv('mimic-cxr-2.0.0-validated.csv.gz')
#-- 三人全不一致的样本,是标注方法学研究的对象
hard = gt[gt['reader_agreement'] == 3].copy()
#-- 再看这些难例落在什么标签上
hard['bucket'] = hard['reader_label'].map(
lambda v: 'not_mentioned' if pd.isna(v)
else 'positive' if v == 1.0
else 'negative' if v == 0.0 else 'uncertain')
print(pd.crosstab(hard['finding'], hard['bucket']))
第二段代码只是把难例按征象与标签取值分组,用来定位"哪些征象的哪些表述最难达成一致";它读的是本文件已有的两个字段,不涉及任何从原始文件里新算出来的分布性结论。
附录 E:如果只记五件事
| 序号 | 记住什么 | 为什么 |
|---|---|---|
| 1 | 1378 条报告—征象对,不是 1378 份报告 | 主键是 study_id 加 finding |
| 2 | 只覆盖模型与规则分歧的部分 | 任何比例都不能外推到全量标签 |
| 3 | 标签描述报告文本的表述,不等于影像所见 | 四值定义全部以"报告中提及"表述 |
| 4 | 空值是"未提及",不是缺失也不是阴性 | 填 0 会毁掉整个标签体系 |
| 5 | 一致度字段是最独特也最少被用的一部分 | 它免费标出了每条标签的难度 |
需要更高工程化程度或合规出域的商业版本?
当前展示的公开版本适用于学术研究与原型验证。千方医数集依托三甲医院直采网络,提供经专家标注、符合伦理合规的专病数据集交易服务。
前往商城查看可交易产品 →
