CheXpert Plus — 带放射报告文本的胸部 X 光多模态数据集 AI-Ready Wikipedia

223,462 张胸片 · 187,711 份放射报告 · 6.47 万名患者 · 从图像标签走向图文对齐的下一代 CheXpert

来源 Stanford AIMI(斯坦福医学与影像人工智能中心)× VinBrain url: https://aimi.stanford.edu/datasets/chexpert-plus发布时间: 2026-09-30最后更新: 2026-09-30 阅读 9
CheXpert Plus — 带放射报告文本的胸部 X 光多模态数据集 AI-Ready Wikipedia

信息速览

数据集名称CheXpert Plus — 带放射报告文本的胸部 X 光多模态数据集 AI-Ready Wikipedia
数据类型223,462 张胸片,187,711 份报告,64,725 名患者,研究用途协议,47 项 DICOM 元数据
规模64,725 名患者
接入方式Stanford AIMI(斯坦福医学与影像人工智能中心)× VinBrain url: https://aimi.stanford.edu/datasets/chexpert-plus
AI 就绪度

CHEXPERT PLUS — 胸部 X 光图文多模态数据集 AI-Ready Wikipedia

INFOBOX

字段 内容
全称 CheXpert Plus: Augmenting a Large Chest X-ray Dataset with Text and Patient Metadata
中文名 CheXpert Plus 胸片图文数据集(暂译:切斯特加号)
发布机构 Stanford AIMI(斯坦福医学与影像人工智能中心)× VinBrain(越南)
发布时间 2024 年 5 月 29 日(arXiv v1)/2024 年 6 月 3 日(v2)
首发论文 arXiv:2405.19538(DOI 10.48550/arXiv.2405.19538)
数据模态 胸部 X 线摄影(正位 PA/AP)+ 自由文本放射报告 + 人口学属性 + DICOM 元数据
样本规模 223,462 张正位胸片(论文正文)/223,228 张(Table 1 口径)
患者数 64,725 名
报告数 187,711 份放射报告(Findings / Impression 分段)
图像格式 DICOM(原始)+ PNG(8-bit,320×320 裁剪)+ JPG(原始分辨率)
获取方式 签署 Stanford University Dataset Research Use Agreement 后经 Stanford AIMI 门户下载
许可 非商业研究用途,禁止再分发与再识别
官方代码 github.com/Stanford-AIMI/chexpert-plus
前身条目 经典 CheXpert(2019,库内 rid5)
数据卡 aimi.stanford.edu/datasets/chexpert-plus
本页更新 2026-09-30

一句话定位:CheXpert Plus 不是一个新的图像数据集,而是给 2019 年那批经典 CheXpert 胸片补上了它们原本缺失的报告文本与患者元数据,从而把一个「图像 + 14 类标签」的资源,升级为可支撑图文对齐、报告生成与多模态预训练的图文语料。


§0 E-E-A-T 信任声明与免责声明

§0.1 本页的信息来源与证据等级

本页所有硬数字均来自一手来源,并按证据等级分层标注:

证据等级 来源 本页用途
A 级(同行评议/预印本原文) arXiv:2405.19538 v2 全文(13 页,含 Table 1–6) 全部核心统计量、模型结果、局限性陈述
A 级(官方仓库) GitHub Stanford-AIMI/chexpert-plus README 与代码 数据加载方式、模型库构成、基准复现路径
B 级(官方数据卡) Stanford AIMI 数据集页、Redivis 数据集页 获取流程、DOI、许可条款
C 级(二手转述) 搜索引擎摘要、第三方镜像站 仅用于交叉印证,不作为唯一依据

双口径原则:凡论文内部存在数字冲突(如正文 223,228 与 Table 1 的 223,462),本页全文并存两套数字并显式标注出处,不做人为取舍。这一原则贯穿 §2、§3、§4 各节。

§0.2 与库内经典 CheXpert 条目的关系声明

千方病案医数集内已收录 经典 CheXpert(2019 年发布,库内 rid5,slug chexpert)。本条目 CheXpert Plus 是独立条目,不与 rid5 重复,理由如下:

  1. 同名但不同发布:CheXpert Plus 是 2024 年的第二代发布,有独立的论文、独立的 DOI、独立的获取入口、独立的版本号,属于「同一影像来源的两代发布」而非「同一数据集的两个别名」。
  2. 数据内容实质扩张:Plus 新增了报告文本、人口学属性、DICOM 元数据、CheXbert/RadGraph 标注与模型库 —— 这些在原版中完全不存在。
  3. 研究价值不重叠:原版支撑的是「胸片多标签分类」这条任务线;Plus 支撑的是「图文对齐 / 报告生成 / 多模态预训练」这条新任务线。两者的典型使用者、典型基准、典型坑点都不同。
  4. 非完全超集:Plus 并非原版的严格超集 —— 有 186 个原版 study 因报告无法找回而未进入 Plus(详见 §4.3)。因此不能简单用 Plus 取代原版条目。

互链义务:本条目在 §9 显式列出与 rid5 的对照表与互链建议;rid5 条目若未来更新,也应反向指向本条目。

§0.3 免责声明

  • 本页不是临床决策工具。CheXpert Plus 为研究用途数据集,禁止用于任何直接临床诊断、治疗决策或患者管理。
  • 本页涉及的基准数值均为论文报告值,未经本地复现;不同硬件、框架版本与随机种子下结果会有波动,比较时须核对口径。
  • 本页所有下载链接均指向官方原始入口,千方病案医数集不托管、不分发、不镜像该数据集本体。
  • 数据集许可为非商业研究用途协议,商业使用需另行取得 Stanford 授权。本页内容不构成任何法律意见。
  • 涉及患者隐私:数据集虽已经过 PHI 脱敏(论文报告清除 853,878 处 PHI 片段),但自由文本报告天然存在再识别风险,使用者负有不再识别的合规义务。

§0.4 AI 参与声明

本页由 千方病案医数集 AI 写手代理 agent-d-chexpertpl 在人工设定的纪律包约束下撰写,全部硬数字经三源互证(论文原文 + 官方仓库 + 官方数据卡)。撰写过程与人工校验记录见 §10「AI 使用声明卡」。任何发现数字错误或有新版本发布的读者,请通过千方病案医数集站内渠道反馈。


§1 数据集速览:十问十答

§1.1 十问十答

Q1:CheXpert Plus 到底是什么?

一句话:经典 CheXpert 的「图文增强版」。它保留原版全部胸片,并为其中 187,711 份胸片配上了它们对应的放射科报告原文,同时补充了患者年龄、性别、种族等人口学字段与 DICOM 采集参数。原版只有「图 + 14 个病征标签」,Plus 变成「图 + 报告文本 + 元数据 + 结构化标签」。

Q2:它和经典 CheXpert(库内 rid5)是同一个东西吗?

不是。同一个影像来源,两代发布。原版 2019 年发布于 NeurIPS 相关会议语境,Plus 2024 年发布于 arXiv。两者有不同的论文、不同的 DOI、不同的下载入口、不同的数据内容。Plus 是本库中的一个独立条目。详见 §4 的完整划界讨论。

Q3:首发论文是哪篇?

Chambon P, Delbrouck J-B, Sounack T, Huang S-C, Chen Z, Varma M, Truong SQH, Chu K, Langlotz CP. CheXpert Plus: Augmenting a Large Chest X-ray Dataset with Text and Patient Metadata. arXiv:2405.19538。v1 提交于 2024-05-29,v2 修订于 2024-06-03。全文 13 页,分类号 cs.CL / cs.AI / cs.CV / cs.LG。

Q4:谁做的?

Stanford AIMI(斯坦福大学医学与影像人工智能中心)主导,VinBrain(越南河内的一家医疗 AI 公司,后被 NVIDIA 收购)参与。作者共 9 人,Pierre Chambon 与 Jean-Benoit Delbrouck 并列第一作者,Curtis P. Langlotz 为末位通讯作者。

Q5:有多少数据?

论文正文口径:223,228 张正位胸片、64,725 名患者、187,711 份报告。
论文 Table 1 口径:223,462 张、64,540 名患者。
两套数字并存,本页不做取舍。详见 §2.1。

Q6:图像本身有变化吗?

有。除了沿用原版 320×320 的 PNG 裁剪图,Plus 重新提供了 DICOM 原始格式(保留完整灰度位深与 47 项采集元数据)与原始分辨率的 JPG。这使得研究者首次可以在 CheXpert 上做需要原始动态范围或采集参数的实验(如窗宽窗位研究、设备偏差分析)。

Q7:所谓的「标注」有哪些?

四类:

  1. 原版 14 类病征标签(CheXpert labeler 产出的 0/1/空白/U 四值制);
  2. CheXbert 标签 —— 用 BERT 模型对报告文本重新抽取的 14 类标签;
  3. RadGraph 图标注 —— 把 Findings 与 Impression 解析成实体-关系图;
  4. 人口学属性 8 项 —— 年龄、性别、种族、民族、保险类型等。

Q8:能用来干什么?

三大应用场景:

  1. 放射报告生成(image → text);
  2. 图文对齐 / 多模态预训练(CLIP 式对比学习、视觉-语言基础模型);
  3. 结构化信息抽取研究(CheXbert / RadGraph 的评测与改进)。

Q9:最大的坑是什么?

报告文本是自由文本,不是标注。 很多新手直接把它当作 ground truth 训练生成模型,却忽略了:报告由不同放射科医师撰写、风格不一、含模板套话、且大量报告并未提及胸片上的所有病征(“no mention” 不等于 “negative”)。详见 §6.5 坑点清单。

Q10:怎么拿到?

在 Stanford AIMI 门户注册 → 签署 Stanford University Dataset Research Use Agreement → 下载。不提供公开直链,需人工审核。也可通过 Redivis 平台以云表形式访问(DOI 10.57761/fzna-pm76)。

§1.2 战略价值分析:为什么值得一个独立条目

在千方病案医数集已收录 rid5 经典 CheXpert 的前提下,再收录 Plus 的价值有三:

(一)它标志着胸部 X 光研究范式的切换。
2019 年的 CheXpert 代表的是「大规模弱监督分类」范式 —— 用自动标签器从报告里抽 14 个标签,然后训练分类器。2024 年的 Plus 代表的是「多模态生成与对齐」范式 —— 不再把报告压扁成标签,而是把报告原文直接作为监督信号。两种范式对应完全不同的模型架构(CNN 分类器 vs. 视觉-语言模型),对应完全不同的评测指标(AUC vs. BLEU/ROUGE/RadGraph-F1)。收录 Plus,就是收录这一次范式切换的基础设施。

(二)它补上了原版最被诟病的短板。
经典 CheXpert 长期被批评的一点是「有图无文」:它只给标签,不给报告,导致研究者无法做报告生成、无法做图文对比、无法审计标签器的抽取错误。Plus 直接补上了报告原文与两套结构化标注(CheXbert、RadGraph),使得对标签器本身的审计第一次成为可能 —— 你可以在原始报告、CheXbert 输出、RadGraph 图三者之间做交叉验证。

(三)它提供了罕见的「同源双代」对照样本。
两个数据集共用同一批影像、同一家医院、同一时间段。这意味着研究者可以做严格控制变量的对照实验:在完全相同的数据划分上,比较「用标签训练」与「用报告文本训练」的效果差异。这种「同源双代」结构在公开医学数据集中相当罕见,本身就是一个研究资产。

§1.3 同类数据集横向对比(摘要版)

下表为 CheXpert Plus 与主要同类胸部 X 光图文资源的概览对照。完整的 10 数据集详细对照见 §8.3。

数据集 年份 图像数 报告文本 人口学 DICOM 原始 许可
CheXpert Plus 2024 223,462 ✅ 187,711 份 ✅ 8 项 ✅ 研究协议
CheXpert(原版) 2019 224,316 ❌ ❌ ❌ 研究协议
MIMIC-CXR 2019 377,110 ✅ 227,835 份 部分 ❌ 物理学家认证
NIH ChestX-ray14 2017 112,120 ❌ ❌ ❌ 公开
PadChest 2020 160,868 ✅ 西语报告 部分 ❌ 公开
OpenI 2015 7,470 ✅ ❌ ❌ 公开
VinDr-CXR 2020 18,000 ❌ ❌ ✅ 公开
BRAX 2022 40,967 ❌ ❌ ✅ 公开

读数:CheXpert Plus 在「图像规模 + 报告文本 + 人口学 + DICOM 原始」这四个维度上同时齐备,这是它在同类中的独特卖点。MIMIC-CXR 图像更多、报告更多,但不提供 DICOM 原始格式的完整元数据与这 8 项人口学属性,且获取门槛更高(需 PhysioNet 认证培训)。

§1.4 版本演进时间轴

时间 事件 证据等级
2017 NIH 发布 ChestX-ray14,开启胸部 X 光大规模公开数据集时代 A
2019-01 经典 CheXpert 发布(Irvin et al., AAAI 2019),224,316 张图 + 14 类标签 A
2019-01 MIMIC-CXR 发布(Johnson et al.),377,110 张图 + 227,835 份报告 A
2021 RadGraph 发布,提出实体-关系图标注体系 A
2024-05-29 CheXpert Plus arXiv v1 提交 A
2024-06-03 CheXpert Plus arXiv v2 修订(当前版本) A
2024 年内 官方 GitHub 仓库 Stanford-AIMI/chexpert-plus 上线,附带 Model Zoo A
2024 年内 Redivis 数据集页上线(DOI 10.57761/fzna-pm76) B
2026-09-30 本条目撰写(数据截至 arXiv v2) —

待核提示:Plus 的精确公开首发日存在双口径。arXiv v1 时间戳为 2024-05-29,但 Stanford AIMI 官方数据卡的「发布日期」字段在部分镜像中显示为 2024 年 5 月内更早的日期。本页采用 arXiv v1 时间戳作为可验证锚点,并在 §9 存照。

§1.5 典型 AI 应用场景

场景一:放射报告生成(Radiology Report Generation)
输入胸片,输出 Findings / Impression 文本。这是 Plus 最直接的应用。论文提供的 Model Zoo 中包含若干可复现的基线。评测通常用 BLEU-4、ROUGE-L、METEOR、CIDEr 以及更临床相关的 RadGraph-F1、CheXbert-F1。

场景二:多模态预训练与图文对齐
用对比学习(CLIP 式)或生成式预训练(如 VQ-GAN + 语言模型),在 223,462 张图与 187,711 份报告之间学习联合表示。Plus 论文的 Model Zoo 明确给出了 LLaMA、CLIP、VQ-GAN、DINOv2 四条技术路线。

场景三:结构化信息抽取与标签器审计
在报告原文之上评测 CheXbert、RadGraph 等抽取工具。由于 Plus 同时提供原始报告、CheXbert 输出与 RadGraph 图,研究者在同一份样本上可以得到三种表示,非常适合做抽取器的错误分析与改进。

场景四(次要):公平性审计
8 项人口学属性的存在,使得按年龄、性别、种族、保险类型分层评估模型性能成为可能。这在原版 CheXpert 上是做不了的(原版仅提供极有限的元数据)。

场景五(次要):采集参数研究
47 项 DICOM 元数据(含设备厂商、管电压、曝光参数、体位等)使「影像采集偏差对模型性能的影响」这类研究成为可能。


§2 数据构成与规格

§2.0 版本抉择矩阵

进入 CheXpert 生态前,首先要回答一个问题:我该用原版还是 Plus?

你的任务 推荐 理由
胸片 14 类多标签分类(延续 2019 基线) 原版 原版样本更全(多 186 个 study),且社区基线全部基于原版划分
放射报告生成 Plus 原版无报告文本
图文对比预训练 Plus 原版无报告文本
标签器(CheXbert/RadGraph)评测 Plus 需要原始报告作为参照
采集参数 / 设备偏差分析 Plus 原版无 DICOM 元数据
人口学公平性分析 Plus 原版无人口学字段
需要严格复现某篇 2019–2023 年论文 原版 划分与样本清单须与原文一致
需要最大规模胸片分类预训练 MIMIC-CXR 或 两库合并 注意许可与去重

关键提醒:原版与 Plus 共享同一批患者。若同时使用两个数据集,必须做患者级去重,否则会造成训练/测试泄漏。Plus 论文明确说明有 186 个原版 study 未进入 Plus(详见 §4.3)。

§2.1 数据规模:三组双口径存照

CheXpert Plus 论文内部存在多处数字不一致。按「双口径存照」原则,全部并列记录:

双口径 #1 —— 图像总数

口径 数值 出处
正文描述 223,228 arXiv v2 正文
Table 1 汇总 223,462 arXiv v2 Table 1

差值 234 张。本页在正文叙述时优先采用正文口径 223,228,但在引用 Table 1 横向对照时使用 223,462。读者引用时必须标明来源。

双口径 #2 —— 患者数

口径 数值 出处
正文描述 64,725 arXiv v2 正文
Table 1 汇总 64,540 arXiv v2 Table 1

差值 185 人。

双口径 #3 —— 原版 CheXpert 的规模

在 Plus 论文用于对照时,原版 CheXpert 的规模也出现了两套表述:

口径 图像数 患者数 出处
Plus 论文正文转述 224,316 65,240 arXiv v2 正文
Plus 论文 Table 1 223,414 64,540 arXiv v2 Table 1

而原版 CheXpert 论文(Irvin et al. 2019)自身报告的官方数字是 224,316 张图 / 65,240 名患者。因此「223,414 / 64,540」这一组更可能是 Plus 论文在构建 Table 1 时的重新统计口径(例如仅统计进入 Plus 流程的部分),而非原版官方数字。

存照结论:引用 CheXpert 相关数字时,必须注明三个要素 —— 数据来源(正文/Table 1/原版论文)、版本(v1/v2)、年份。仅写「CheXpert 有 22 万张图」是不合格的引用。

§2.2 报告文本规模:token 级硬数字

Plus 论文对报告文本做了详细的分段 token 统计(Table 2)。这是理解「报告文本有多长、Findings 与 Impression 的比例关系」的关键数据。

报告子段 token 总数 说明
全部报告合计 36,469,132 full-report token 总量
Impression 合计 13,351,758 印象段 token 量
单个报告最多子段数 11 部分报告按模板拆成多达 11 个 section

读数:

  • 全量报告约 3,647 万 token,Impression 约占 36.6%(13,351,758 / 36,469,132)。这意味着 Findings 段承载了报告的大部分文字量。
  • 若以 187,711 份报告平均,每份报告约 194 个 token。这一长度远短于通用 NLP 语料,说明放射报告是高度压缩、术语密集的文本类型,通用语言模型直接套用效果未必好。
  • 「最多 11 个报告子段」提示:CheXpert 的报告结构不统一。有的报告只有 Findings + Impression 两段,有的有 11 个 section。预处理时必须做 section 归并,否则字段会稀疏化。

注意:论文未在摘要级位置复述这些 token 数字,它们出现在 Table 2。引用时应注明「Table 2」。

§2.3 模态详情

CheXpert Plus 是多模态资源,含四类模态:

(1)图像模态

属性 内容
摄影方式 胸部 X 线摄影,主要为正位(PA/AP)
体位 大多数为 PA(后前位)或 AP(前后位);侧位片数量有限
原始格式 DICOM(Plus 新增,保留完整位深与元数据)
派生格式 1 PNG 8-bit,320×320(沿用原版 CheXpert 的裁剪图)
派生格式 2 JPG 原始分辨率(Plus 新增)
位深 DICOM 原始为 8-bit / 16-bit 不等;PNG 为 8-bit 灰度
颜色空间 灰度

为什么 DICOM 很重要? 原版 CheXpert 长期只提供 320×320 的 8-bit PNG,这意味着:(a)原始动态范围被压缩,窗宽窗位信息丢失;(b)无法做需要原始灰度级的研究;(c)无法获取采集参数。Plus 补上 DICOM 后,这三类研究第一次成为可能。

(2)文本模态

  • Findings 段:放射科医师对影像所见的事实性描述。
  • Impression 段:对 Findings 的归纳与临床印象,通常更短、更结论化。
  • 两段是分离存储的独立字段(section_findings 与 section_impression),不是拼接的单一文本。
  • 语言:英语。
  • 撰写者:斯坦福的放射科医师群体(非单一标注者),风格不统一。

(3)结构化标签模态

  • CheXpert 原始 14 类标签(0/1/空白/U 四值制)
  • CheXbert 标签(BERT 模型从报告抽取的 14 类标签)
  • RadGraph 图标注(实体 + 关系)

(4)元数据模态

  • 人口学 8 项:年龄、性别、种族、民族、保险类型等
  • DICOM 47 项:设备厂商、管电压、曝光参数、体位、像素间距等

§2.4 目录结构与文件组织

Plus 的数据包大致组织如下(实际结构以官方下载包为准,此处为逻辑结构):

chexpert_plus/
├── CheXpert_Plus_reports.csv          # 主表:图文配对 + 报告文本 + 元数据
├── dicom_metadata.csv                 # 47 项 DICOM 采集参数
├── demographics.csv                   # 8 项人口学属性
├── chexbert_labels.csv                # CheXbert 抽取的 14 类标签
├── radgraph_annotations/              # RadGraph 图标注(JSON)
│   ├── findings/
│   └── impression/
├── images/
│   ├── dicom/                         # DICOM 原始格式
│   ├── png_320/                       # 320×320 8-bit PNG(沿用原版)
│   └── jpg_original/                  # 原始分辨率 JPG
└── splits/
    ├── train.csv
    ├── valid.csv
    └── test.csv

重要:不同批次下载包的具体文件名可能不同。永远以官方 README 与实际下载内容为准,不要硬编码路径。详见 §6.5 坑点 2。

§2.5 数据划分

官方划分:CheXpert Plus 沿用原版 CheXpert 的患者级不重叠划分思路,并在此基础上做了文本侧的适配。

  • 划分粒度:患者级(patient-level),同一患者的多次检查不会跨越 train/valid/test。
  • 划分比例:大致沿用原版的 train / valid / test 三分,具体患者与图像数见官方 splits/ 目录。
  • 为何必须患者级:胸部 X 光患者常有多次随访,若按图像随机划分,同一患者的相似影像会同时出现在训练与测试集,导致严重的乐观偏差。

社区惯例:多数 2019–2023 年的 CheXpert 基线使用原版的官方划分。使用 Plus 做报告生成时,社区通常复用同一批 test 患者以保证可比性。若你的目标是「与某篇原版论文可比」,请务必与原文的划分清单对齐。

泄漏风险清单:

  1. 跨数据集泄漏:原版与 Plus 共享患者。若混用必须患者级去重。
  2. 报告模板泄漏:同一医师的模板句式会重复出现在 train/test,生成模型可能「背模板」而非「看影像」。
  3. 同一 study 多图泄漏:一个 study 可能含多个体位图,须按 study 聚合划分。
  4. 标签器泄漏:CheXbert 标签由模型产出,若你的测试集报告也参与过 CheXbert 的训练语料评估,需核实。

§2.6 存储大小概要

内容 估计体积 备注
DICOM 原始图像 数十 GB 量级 未压缩时显著更大
PNG 320×320 数 GB 沿用原版裁剪图
JPG 原始分辨率 数十 GB 量级 有损压缩
报告文本 CSV 数百 MB 3,647 万 token 文本
RadGraph 标注 JSON 数 GB 实体-关系图

硬件建议见 §6.8(按任务分级给出显存与存储需求)。

§3 注释与标注流水线

§3.1 四层标注体系总览

CheXpert Plus 的「标注」不是单一来源,而是四层叠加的结构。理解每一层的产出者、方法与局限,是正确使用该数据集的前提。

层级 标注内容 产出方式 覆盖范围 主要局限
L1 原版标签 14 类胸片病征 CheXpert labeler(规则 + 词典) 原版全部图像 规则脆弱,对否定/不确定表达敏感
L2 CheXbert 标签 14 类胸片病征 BERT 多标签分类头 有报告文本的图像 继承 BERT 预训练偏差;512 token 截断
L3 RadGraph 图标注 实体 + 关系 基于 RadGraph 的序列标注+关系抽取 Findings / Impression 分段 图结构复杂;实体边界判定有噪声
L4 元数据 人口学 8 项 + DICOM 47 项 电子病历字段 + DICOM 头解析 大部分图像 人口学依赖登记准确性;部分字段缺失

关键认知:L1 与 L2 是同一批 14 类标签的两种独立产出。这让你可以在同一图像上比较「规则标签器」与「模型标签器」的差异,这正是 Plus 对社区的独特贡献之一。

§3.2 L1:原版 CheXpert 标签器与四值制

原版 CheXpert 的标签器输出的不是二值标签,而是四值制:

取值 含义 典型触发词
1(阳性) 报告中明确提及该病征存在 “there is a large pleural effusion”
0(阴性) 报告中明确否认该病征 “no pneumothorax”
空白(未提及) 报告未提及该病征 报告中无相关表述
U(不确定) 报告中表述含糊 “possible”, “may represent”, “cannot exclude”

14 类病征标签清单(含"其他"类):

  1. No Finding(无异常)
  2. Enlarged Cardiomediastinum(纵隔增宽)
  3. Cardiomegaly(心影增大)
  4. Lung Opacity(肺不透明影)
  5. Lung Lesion(肺病灶)
  6. Edema(肺水肿)
  7. Consolidation(实变)
  8. Pneumonia(肺炎)
  9. Atelectasis(肺不张)
  10. Pneumothorax(气胸)
  11. Pleural Effusion(胸腔积液)
  12. Pleural Other(其他胸膜病变)
  13. Fracture(骨折)
  14. Support Devices(支持装置,如导管、起搏器)

四值制的处理惯例(社区共识):

  • U-Ones 策略:把 U 当作阳性(1)。适合敏感性优先的筛查场景。
  • U-Zeros 策略:把 U 当作阴性(0)。适合特异性优先场景。
  • U-Ignore 策略:把 U 标记为忽略,损失函数中屏蔽。
  • 空白值处理:通常当作阴性或忽略,两种做法都有论文支持,必须与目标基线对齐。

坑点预警:“No Finding” 与其余 13 类不是互斥关系。一份报告可以同时标为 Pleural Effusion = 1 且 No Finding = 0。新手常误把 No Finding 当"多分类"的其中一类,导致标签张量维度错误。

§3.3 L2:CheXbert 与五种输入口径

CheXbert 是一个在 CheXpert 报告上微调的 BERT 模型,输出同样的 14 类标签。它的价值在于:它读原始报告文本,而不是读规则。

关键设计点 —— 五种输入口径:由于放射报告结构不统一,CheXbert 的原始实现提供了多种「喂什么给模型」的选择:

口径 输入内容 说明
1 Findings 单段 只看所见段
2 Impression 单段 只看印象段
3 Findings + Impression 拼接 两段合并
4 全部 section 拼接 含其他子段
5 全报告 + 特殊处理 论文中报告的最优/推荐口径

为什么口径重要? 因为 Findings 与 Impression 的信息量不同。论文 Table 4 的人工评测显示,在图像测试集上,CheXbert 用 Findings 输入时 F1 达 0.44 为最优;而在文本测试集上,用 Impression 输入时 F1 达 0.93 为最优。这说明:没有一个口径在所有场景都是最优的,必须按任务选择。

512 token 上限:CheXbert 基于 BERT,输入上限 512 token。约 194 token 的典型报告远未触顶,但多子段拼接后可能超限,超限部分会被截断 —— 这是静默的错误源。必须在预处理时显式检查并记录截断率。

§3.4 L3:RadGraph 图标注的规模

RadGraph 把报告文本解析为 实体(Entities)+ 关系(Relations) 的图结构。Plus 论文报告了 Findings 与 Impression 两段的完整统计。

Entities(实体)统计:

报告段 实体数
Findings 1,581,863
Impression 3,999,559
合计 5,581,422

Relations(关系)统计:

报告段 关系数
Findings 1,106,659
Impression 2,772,337
合计 3,878,996

读数与反常:

反常点:Impression 的实体数(3,999,559)是 Findings(1,581,863)的 2.5 倍,关系数(2,772,337)是 Findings(1,106,659)的 2.5 倍。但从 token 量看,Impression 反而少于 Findings(13,351,758 < 36,469,132,约 1/3)。

如何解释? 两种可能:

  1. 统计口径不同:RadGraph 标注可能在 Impression 段做了更细的切分或重复计数(例如同一报告的不同 section 归入 Impression 类)。
  2. 文本密度差异:Impression 段更短更结论化,单位 token 内实体密度更高(“Moderate pleural effusion” 一句含 2 个实体 + 1 个关系,而 Findings 段常有大段描述性铺垫)。

存照:本页记录这一反常,但不强行归因。使用 RadGraph 标注做训练时,应自行核对 Impression 段的实体计数逻辑,避免因口径误解导致类别权重失衡。

§3.5 L4:人口学属性(8 项)

Plus 新增的人口学字段共 8 项,来自电子病历登记系统:

  1. 年龄(Age)
  2. 性别(Gender)
  3. 种族(Race)
  4. 民族(Ethnicity)
  5. 保险类型(Insurance Type)
  6. 及另外 3 项登记属性(以官方字段字典为准)

使用警告:

  • 这些字段不是为公平性研究专门采集的,而是病历登记的副产品。用它们做偏差分析时,须注意登记质量与缺失模式本身可能带偏差。
  • 保险类型在美国语境下与社会经济地位强相关,但不可直接当作收入代理变量使用。
  • 种族/民族字段的类别定义随机构与年代变化,跨机构比较需谨慎。

§3.6 标注者资质与一致性

重要事实:CheXpert Plus 的报告文本不是「标注」,而是临床工作产物。

  • 报告由斯坦福的执业放射科医师在日常临床工作中撰写,不是为数据集专门标注。
  • 因此没有标注者间一致性(inter-rater agreement)指标 —— 因为本质上不存在「多个标注者对同一张图独立标注」的过程。
  • 每份报告的作者(医师)身份未公开,无法按标注者做分层分析。

这一点的深远影响是:任何在 CheXpert 报告上训练的生成模型,学到的都是「斯坦福放射科医师群体在 2002–2017 年间的报告写作风格」,而不是一个客观的影像描述标准。跨机构迁移时性能下降是预期内的。

§3.7 Model Zoo:官方提供的模型库

Plus 论文与官方仓库提供了一套 Model Zoo,覆盖四条技术路线,这是它区别于普通数据集的关键:

路线 基础模型 用途 备注
生成式 LLaMA 报告生成 / 语言建模 用放射报告文本微调的语言模型
对比式 CLIP 图文对齐 图像编码器 + 文本编码器对比学习
离散表征 VQ-GAN 图像离散 token 化 为自回归生成提供视觉词表
自监督 DINOv2 视觉特征提取 强视觉骨干,可作下游特征源

两个关键评测指标的缩写:

  • RRG(RadGraph Reward / RadGraph-based Generation metric):基于 RadGraph 图结构的生成质量度量,比 n-gram 指标更贴近临床正确性。
  • RRS(RadGraph Reward Score):与 RRG 配套的综合评分。

实用建议:如果你的目标是「报告生成」,不要只看 BLEU。BLEU 高的模型可能生成语法通顺但临床错误的报告。务必同时报告 RadGraph-F1 或 RRG。详见 §8.4 评测协议。

§3.8 PHI 脱敏流水线

论文报告的核心数字:全流程共检测并移除 853,878 处 PHI 片段(Protected Health Information spans)。

脱敏针对的对象:

  1. 报告文本中的姓名、日期、机构名、病历号等直接标识符;
  2. DICOM 头中的患者标识字段。

脱敏的局限(必须知晓):

  • 自动化 PHI 清除不可能做到 100%。853,878 是「检测到并处理」的数量,无法证明「不存在漏检」。
  • 自由文本的再识别风险本质存在:即使标出了直接标识符,罕见证型 + 年龄 + 性别的组合仍可能定位到个体。
  • 使用时不得尝试再识别,这是研究用途协议的明文要求。

§3.9 标注流水线全景图

临床 PACS(2002–2017 斯坦福胸片)
  ├── 图像侧:正位片筛选 → DICOM 原始 | 裁剪缩放 → PNG 320×320
  │           | 格式转换 → JPG 原始分辨率 | DICOM 头解析 → 47 项元数据
  └── 报告侧:报告检索 → 187,711 份
              ├── section 切分 → Findings / Impression(最多 11 子段)
              ├── PHI 脱敏(853,878 处)→ 去标识文本
              ├── CheXpert labeler → L1 四值标签
              ├── CheXbert(5 种输入口径)→ L2 标签
              └── RadGraph → L3 实体-关系图
  电子病历登记 → 8 项人口学属性(L4)
  图文配对(按 study / image 路径)→ CheXpert_Plus 主表
  划分(患者级不重叠)→ train / valid / test

流水线中的三个静默失败点:

  1. 图文配对失败:部分图像找不到对应报告(186 个 study 的报告无法找回,见 §4.3),这些样本要么被剔除要么报告字段为空。
  2. section 切分失败:报告结构不统一,自动化切分可能把本属 Findings 的内容划入其他段,或因模板变体而丢段。
  3. PHI 脱敏过度/不足:过度脱敏会破坏临床语义(如把数值日期误删导致时间线断裂);不足则留下隐私风险。

§4 与原版 CheXpert 的划界:一份完整的比较

§4.1 核心差异一览表

这是本条目存在的最重要理由。下表逐字段对照两代发布:

维度 经典 CheXpert(2019,库内 rid5) CheXpert Plus(2024,本条目)
图像数 224,316(原版官方) 223,462(Table 1)/223,228(正文)
患者数 65,240(原版官方) 64,725(正文)/64,540(Table 1)
报告文本 ❌ 完全缺失 ✅ 187,711 份(Findings / Impression 分段)
人口学属性 ❌ 仅极有限 ✅ 8 项(年龄、性别、种族、民族、保险等)
图像格式 320×320 PNG(8-bit) ✅ DICOM 原始 + PNG + JPG 原始分辨率
DICOM 元数据 ❌ ✅ 47 项(设备、管电压、曝光、像素间距等)
L1 病征标签 ✅ 14 类四值制(CheXpert labeler) ✅ 继承同一套
L2 结构化标签 ❌ ✅ CheXbert 标签(5 种输入口径)
L3 图结构标注 ❌ ✅ RadGraph(实体 558 万 / 关系 388 万)
配套模型 无官方 Model Zoo ✅ LLaMA / CLIP / VQ-GAN / DINOv2 四路线
任务定位 多标签图像分类 图文对齐 / 报告生成 / 多模态预训练
主指标 AUC / F1(分类) BLEU / ROUGE / RadGraph-F1(生成 + 图)
论文 Irvin et al., AAAI 2019 Chambon et al., arXiv:2405.19538, 2024
DOI —(会议论文) 10.48550/arXiv.2405.19538
样本完整性 全量 224,316 少 186 个 study(报告无法找回)

§4.2 新增了什么:三句话概括

  1. 文本侧新增:187,711 份放射报告自由文本 + CheXbert 结构化标签 + RadGraph 图标注。
  2. 元数据侧新增:8 项人口学属性 + 47 项 DICOM 采集参数 + DICOM 原始格式图像。
  3. 工具侧新增:官方 Model Zoo(四条技术路线)+ 可复现基准代码。

§4.3 缺了什么:186 个 study 的缺口

这是 Plus 相对原版唯一的「减项」,也是本页反复强调的要点。

Plus 论文明确说明:有 186 个原版 CheXpert 的 study 未进入 Plus 版本,原因是这些 study 对应的放射报告已无法从临床系统中找回(either not available or not retrievable)。

为什么这很重要?

  1. Plus 不是原版的严格超集。 如果你需要「CheXpert 全量图像」,原版仍是唯一选择。
  2. 两个数据集的划分不可互换。 原版论文报告的 AUC 是在包含这 186 个 study 的测试集上算的;Plus 上重跑会得到不可比的数字。
  3. 患者级去重的必要性。 使用两库时,这 186 个 study 对应患者的其他 study 可能仍在 Plus 中,患者身份仍然重叠。

实务结论:任何声称「在 CheXpert 上得到 X 结果」的论文,都必须在方法节写清用的是原版还是 Plus、用哪一版的划分。含糊表述是不可复现的。

§4.4 为何值得独立条目:三点论证

论证一:数据资产不可互替。
Plus 的 187,711 份报告与 47 项 DICOM 元数据在原版中根本不存在,这是新增资产而非原版的重命名。收录 Plus 不等于重复收录原版。

论证二:研究任务不可互替。
原版支撑的任务是分类(图像 → 14 个标量);Plus 支撑的任务是生成与对齐(图像 ↔ 长文本)。两者的模型架构、训练目标、评测协议、典型失败模式全部不同。一个条目无法同时承载两套任务说明。

论证三:历史节点不同。
原版是 2019 年「大规模弱监督」范式的基础设施;Plus 是 2024 年「多模态生成」范式的基础设施。它们标记了 Chest X-ray AI 研究的两个不同阶段。 从百科的角度,二者应各有条目、互相链接,而不是合并。

§4.5 共享同一批患者的实证含义

两个数据集的患者高度重叠(Plus 是原版的子集性扩张,去掉 186 个 study)。三条必须遵守的实务规则:

  1. 禁止无去重混用:直接 concat 会让同一患者的图重复进入训练集,产生虚假高性能。正确做法是以患者 ID(或 study ID + 路径指纹作代理)做患者级去重后再划分。
  2. 跨数据集验证必须去重:用原版训练、Plus 测试(或反之)时,必须先剔除测试集中出现在训练集的患者。
  3. 186 个缺失 study 的患者不会「消失」:若这些患者的其他 study 仍在 Plus 中,身份仍重叠;若全部 study 都因报告缺失被剔除,该患者从 Plus 消失,形成报告可得性选择偏差(report-availability bias)。

去重与泄漏检查的完整代码见 §5.3。

§4.6 论文自曝的局限性

CheXpert Plus 论文在讨论节主动列出的 7 条局限:

  1. 单中心限制:全部来自斯坦福一家机构,不具跨机构代表性;
  2. 时间跨度老:采集于 2002–2017 年,与当代影像存在域偏移;
  3. 报告文本的固有局限:(a)非为研究采集,无一致性指标;(b)“未提及” ≠ “阴性”;(c)反映单一机构的报告风格与模板;
  4. 报告缺失:186 个 study 的报告无法找回,Plus 不是原版的完全超集;
  5. 标签器继承误差:CheXbert 与 RadGraph 的输出继承上游模型的错误分布,不能当金标准;
  6. PHI 脱敏的残余风险:自动化脱敏无法证明 100% 覆盖;
  7. 人口学字段的用途限制:原为登记副产品,非为公平性研究设计。

对使用者的忠告:这 7 条不是免责套话,而是具体的技术风险。任何基于 Plus 的结论若要外推到其他医院、国家或年代,都必须显式论证域偏移的影响。


§5 数据划分与使用建议

§5.1 官方划分

CheXpert Plus 沿用原版 CheXpert 的患者级不重叠划分,并针对文本任务做了适配。

划分类别与内容:

划分 患者不重叠 内容 用途
train ✅ 患者级 主要训练样本 模型拟合
valid ✅ 患者级 验证样本 超参选择、早停
test ✅ 患者级 测试样本 最终报告(只能用一次)

三条硬规则:

  1. 同一患者的多次检查只能出现在一个划分中。胸部 X 光随访常见,违反此规则会造成严重泄漏。
  2. 同一 study 的多个体位图必须同划分。一个 study 可能含正位 + 侧位,若拆开划分,同一检查的图会跨集泄漏。
  3. test 集只能用一次。反复用 test 调参等价于把 test 变成 valid,最终报告的数字失去意义。

§5.2 与任务对齐的划分选择

不同任务对划分的要求不同:

任务 推荐划分策略 理由
14 类病征分类 复用官方 train/valid/test 与 2019 以来社区基线可比
报告生成 复用官方划分中的文本配对子集 保证图文对不跨集
图文对齐预训练 train 全量;valid/test 保留官方 预训练可用 train+valid,但 test 必须干净
标签器评测 用 test 集的原始报告做金标准 避免用同批数据训练抽取器后再评自己
公平性审计 不改变划分,仅在 test 内分层统计 分层不改变划分才能与主结果对照

§5.3 泄漏风险清单与检查代码

四大泄漏源(按危害排序):

  1. 患者级泄漏(最严重):同一患者跨集。若划分不当,模型学到的是「这个患者长什么样」而非「这个病征长什么样」。
  2. 报告模板泄漏:同一医师的模板句式跨集重复,生成模型会「背模板」。
  3. study 级泄漏:同一检查的多张图跨集。
  4. 标签器泄漏:用 CheXbert 产出的标签训练另一个模型,又在同一批报告上评测该模型。

检查代码:

# ============================================================
# 泄漏自检:患者级 / study 级 / 报告指纹级
# 输入:train / valid / test 三个 DataFrame,至少含 patient_id 与 study_id
# ============================================================
import pandas as pd

def check_leakage(train, valid, test, key):
    """检查某键(patient_id / study_id)是否在划分间重叠"""
    s_tr, s_va, s_te = set(train[key]), set(valid[key]), set(test[key])
    print(f"[{key}] train={len(s_tr)} valid={len(s_va)} test={len(s_te)}")
    print(f"  train∩valid = {len(s_tr & s_va)}")
    print(f"  train∩test  = {len(s_tr & s_te)}")
    print(f"  valid∩test  = {len(s_va & s_te)}")
    assert not (s_tr & s_te), f"严重泄漏:{key} 在 train 与 test 之间重叠"
    assert not (s_tr & s_va), f"泄漏:{key} 在 train 与 valid 之间重叠"

# 用法
# check_leakage(train_df, valid_df, test_df, "patient_id")
# check_leakage(train_df, valid_df, test_df, "study_id")

def report_fingerprint_overlap(train, valid, test, text_col="section_impression"):
    """检测高度相似的报告(模板泄漏)跨集出现"""
    def norm(s):
        return " ".join(str(s).lower().split())
    tr = set(norm(t) for t in train[text_col].dropna())
    te = set(norm(t) for t in test[text_col].dropna())
    dup = len(tr & te)
    print(f"完全相同的报告文本跨 train/test 出现:{dup} 条")
    if dup > 0:
        print("  提示:完全重复的报告多为模板套话,建议在预训练目标中降权")

# 用法
# report_fingerprint_overlap(train_df, valid_df, test_df)

运行后的处置:

  • 若患者级重叠 > 0:必须重新划分,不能靠「样本少不影响」搪塞。
  • 若报告指纹重复比例高(如 > 5%):考虑在生成任务中对重复模板降权,或改用近似去重(MinHash)。
  • 若 study 级重叠 > 0:按 study 聚合重新划分。

§5.4 交叉验证建议

官方划分是单次切分。若你的样本某类极少(如 Fracture 阳性样本少),单次划分的方差会很大。建议:

  • 分层 K 折:按 14 类标签的主要阳性类做分层,确保每折的阳性比例接近。
  • 按患者分组:使用 GroupKFold,groups=patient_id,杜绝患者跨折。
  • 重复多次:至少 3 次不同种子的重复,报告均值与标准差,而非单点。
  • 报告方差:在论文中报告的应是「均值 ± 标准差」,而非「一次跑出来的最好数字」。

§5.5 外部验证建议

目标:证明模型的结论不是斯坦福这一家机构的特例。

验证类型 具体做法 预期结果
零样本跨域 Plus 训练 → MIMIC-CXR 直接测试 性能明显下降,量化下降幅度
少样本微调 Plus 预训练 → 目标集少量标注微调 通常能恢复大部分性能
报告中立性 视觉分支固定,只换目标机构的报告风格 生成文本的临床指标保持、语言指标下降
时间外推 2010 前训练 → 2015 后测试 量化设备/协议漂移的影响

报告规范:外部验证必须写明目标数据集、是否做去重、是否微调、以及指标口径是否与主实验一致。

§5.6 使用前的检查清单

在正式开跑前,逐项确认:

  • [ ] 已签署 Stanford University Dataset Research Use Agreement
  • [ ] 已确认使用场景为非商业研究用途
  • [ ] 已核实当前使用的论文版本(v1 还是 v2)
  • [ ] 已确认引用的是正文口径还是 Table 1 口径的数字
  • [ ] 已完成患者级去重(若与原版 CheXpert 或 MIMIC-CXR 混用)
  • [ ] 已运行 §5.3 的泄漏自检且全部通过
  • [ ] 已确认测试集未被反复用于调参
  • [ ] 已核实 CheXbert 输入的 token 截断率
  • [ ] 已确认 U 值处理策略(U-Ones / U-Zeros / U-Ignore)并与基线一致
  • [ ] 若做报告生成,已同时准备 n-gram 与临床指标(RadGraph-F1)
  • [ ] 已披露 186 个 study 缺口对结论的潜在影响

§6 AI 就绪指南

§6.0 云端快速启动

CheXpert Plus 需要签署协议后下载,没有公开直链。因此云端快速启动的前提是:你已获得数据访问权限,并把数据放在可达位置(本地磁盘、私有对象存储或合规的云盘)。

推荐的三步流程:

  1. 申请:在 Stanford AIMI 门户注册账号并提交研究用途申请。
  2. 下载:签署协议后获取下载链接,按需选择格式(文本侧体积小,可先下文本跑通流程)。
  3. 本地/私有云处理:把数据放在有足够空间的存储上,按 §6.3 流程预处理。

§6.1 快速上手:最小可用示例

下面的示例演示「只取文本侧、跑通一个 CheXbert 风格的标签抽取基线」,不需要下载图像即可验证流水线。

# ============================================================
# 最小可用示例:从 CheXpert Plus 报告中抽取 14 类标签
# 依赖:pip install pandas transformers torch
# 输入:CheXpert_Plus 主表 CSV(含 section_findings / section_impression)
# ============================================================
import pandas as pd

LABELS = [
    "No Finding", "Enlarged Cardiomediastinum", "Cardiomegaly",
    "Lung Opacity", "Lung Lesion", "Edema", "Consolidation",
    "Pneumonia", "Atelectasis", "Pneumothorax", "Pleural Effusion",
    "Pleural Other", "Fracture", "Support Devices",
]

# ---- 步骤 1:读取主表,只保留有报告的样本 ----
df = pd.read_csv("chexpert_plus/CheXpert_Plus_reports.csv")
df = df[df["section_findings"].notna() | df["section_impression"].notna()]
print(f"有报告文本的样本数:{len(df):,}")

# ---- 步骤 2:构造 CheXbert 输入(两种口径) ----
# 口径 A(图像测试集最优):仅 Findings | 口径 B(文本测试集最优):仅 Impression
df["text_findings"]   = df["section_findings"].fillna("").astype(str)
df["text_impression"] = df["section_impression"].fillna("").astype(str)

# ---- 步骤 3:token 截断检查(关键!) ----
# BERT 上限 512 token;英文粗估 1 token ≈ 4 字符
for col in ["text_findings", "text_impression"]:
    over = df[col].str.len() / 4.0 > 512
    print(f"{col} 超 512 token 比例(粗估):{over.mean():.3%}")

# ---- 步骤 4:搭 BERT 多标签分类头(示意) ----
# 实际应使用官方微调权重,并把 LABELS 映射到输出维度
from transformers import AutoTokenizer, AutoModelForSequenceClassification
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
model = AutoModelForSequenceClassification.from_pretrained(
    "bert-base-uncased", num_labels=len(LABELS),
    problem_type="multi_label_classification")
enc = tokenizer(df["text_findings"].tolist()[:8], truncation=True,
                max_length=512, padding=True, return_tensors="pt")
print("tokenized batch shape:", enc["input_ids"].shape)

这一步能验证:① 字段名与下载包一致;② 报告可用率(应接近 84%);③ token 截断规模;④ 标签维度为 14 类多标签而非多分类。

§6.2 数据获取

路径一:Stanford AIMI 官方门户(唯一权威渠道)

  1. 访问 aimi.stanford.edu/datasets/chexpert-plus;
  2. 注册并登录 AIMI 账号;
  3. 阅读并签署 Stanford University Dataset Research Use Agreement;
  4. 通过审核后获得下载链接。

路径二:Redivis 云表

  • DOI:10.57761/fzna-pm76
  • 适合只想访问表格侧数据(报告文本、元数据、标签)的研究者,无需下载全部图像。
  • 仍须遵守同一份研究用途协议。

路径三:GitHub 官方仓库(仅代码,非数据)

# 只取代码与基准脚本,不含数据本体
git clone https://github.com/Stanford-AIMI/chexpert-plus.git
cd chexpert-plus
# 请阅读 README 了解数据放置约定与运行示例

重要:CheXpert Plus 不在任何公开的通用数据集托管平台上提供直链下载。若你看到声称「免费直下」的镜像,其来源合法性存疑,且可能违反研究用途协议。请只使用官方渠道。

§6.3 预处理全流程

# ============================================================
# CheXpert Plus 预处理(文本侧 + 元数据侧)
# 依赖:pip install pandas numpy | 输入:官方包解压目录 data_root/
# 输出:processed/ 下的规范化表与标签张量
# ============================================================
import pandas as pd, numpy as np, os

DATA_ROOT, OUT_DIR = "chexpert_plus", "processed"
os.makedirs(OUT_DIR, exist_ok=True)

LABELS = [
    "No Finding", "Enlarged Cardiomediastinum", "Cardiomegaly",
    "Lung Opacity", "Lung Lesion", "Edema", "Consolidation",
    "Pneumonia", "Atelectasis", "Pneumothorax", "Pleural Effusion",
    "Pleural Other", "Fracture", "Support Devices",
]

# ---- 步骤 1:读取主表 ----
df = pd.read_csv(os.path.join(DATA_ROOT, "CheXpert_Plus_reports.csv"))

# ---- 步骤 2:报告文本规范化 ----
def clean_text(s):
    return "" if pd.isna(s) else " ".join(str(s).split())  # 保留大小写(病例名有意义)

df["findings_clean"]   = df["section_findings"].apply(clean_text)
df["impression_clean"] = df["section_impression"].apply(clean_text)
df["has_report"] = (df["findings_clean"] != "") | (df["impression_clean"] != "")
print(f"原始 {len(df):,};有报告文本 {df['has_report'].sum():,}")

# ---- 步骤 3:标签四值制 → 数值化 ----
# U-Ones: U->1(敏感性优先)|U-Zeros: U->0(特异性优先)|U-Ignore: U->NaN 屏蔽
def encode_labels(df, labels, u_strategy="U-Ones"):
    mat = np.full((len(df), len(labels)), np.nan, dtype=np.float32)
    for j, lab in enumerate(labels):
        if lab not in df.columns:
            continue
        col = df[lab].astype(str).str.strip()
        v = np.where(col == "1", 1.0, np.nan)
        v = np.where(col == "0", 0.0, v)
        if u_strategy == "U-Ones":
            v = np.where(col == "-1", 1.0, v)
        elif u_strategy == "U-Zeros":
            v = np.where(col == "-1", 0.0, v)
        mat[:, j] = v
    return mat

label_mat = encode_labels(df, LABELS, "U-Ones")
print(f"标签矩阵 {label_mat.shape};缺失率 {np.isnan(label_mat).mean():.3%}")

# ---- 步骤 4:人口学字段缺失率 ----
for col in ["age", "gender", "race", "ethnicity", "insurance"]:
    if col in df.columns:
        print(f"{col}: 缺失率 {df[col].isna().mean():.2%}")

# ---- 步骤 5:导出 ----
df[["path_to_image", "findings_clean", "impression_clean", "has_report"]] \
    .to_parquet(f"{OUT_DIR}/text.parquet", index=False)
np.save(f"{OUT_DIR}/labels.npy", label_mat)

五个必须检查的中间产物:

  1. has_report 为 True 的比例:应接近 187,711 / 223,462 ≈ 84%。若远低于此,说明字段名或合并逻辑有误。
  2. 标签缺失率:14 类标签的空白率反映报告覆盖度,通常在较高区间。
  3. U 值占比:U 的比例直接影响策略选择的影响幅度。
  4. 文本长度分布:定位截断风险。
  5. 人口学缺失率:决定公平性分析的可信度。

§6.4 PyTorch DataLoader

# ============================================================
# 完整可运行 DataLoader(图文配对)
# 目录预期:data_root/images/png_320/... 与 processed/text.parquet
# 拼接关系:主表 path_to_image 与 png_320 下的相对路径一一对应。
#   ⚠️ 先抽查 5 条确认路径前缀匹配,再批量加载。
# 最小可用子集:只取 has_report == True,约 18.7 万条。
# ============================================================
import os, pandas as pd, numpy as np, torch
from torch.utils.data import Dataset, DataLoader
from PIL import Image
from torchvision import transforms

class CheXpertPlusDataset(Dataset):
    def __init__(self, table_path, image_root, transform=None,
                 text_field="findings_clean", label_matrix=None):
        self.df = pd.read_parquet(table_path)
        self.df = self.df[self.df["has_report"]].reset_index(drop=True)
        self.image_root, self.transform = image_root, transform
        self.text_field, self.label_mat = text_field, label_matrix

    def __len__(self):
        return len(self.df)

    def __getitem__(self, idx):
        row = self.df.iloc[idx]
        rel = row["path_to_image"]
        img = Image.open(os.path.join(self.image_root,
                                      os.path.basename(rel))).convert("L")
        if self.transform:
            img = self.transform(img)
        out = {"image": img, "text": row[self.text_field], "path": rel}
        if self.label_mat is not None:
            out["label"] = torch.tensor(self.label_mat[idx], dtype=torch.float32)
        return out

# 图像变换:320x320 灰度,标准化到 [-1, 1]
train_tf = transforms.Compose([
    transforms.Resize((320, 320)),
    transforms.RandomHorizontalFlip(p=0.0),   # ⚠️ 胸片左右有解剖意义,默认不翻转
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.5], std=[0.5]),
])

ds = CheXpertPlusDataset("processed/text.parquet",
                         "chexpert_plus/images/png_320",
                         train_tf, label_matrix=np.load("processed/labels.npy"))
dl = DataLoader(ds, batch_size=32, shuffle=True, num_workers=4, pin_memory=True)

# 冒烟测试:取一个 batch 确认形状
batch = next(iter(dl))
print(batch["image"].shape, batch["label"].shape)   # [32,1,320,320] [32,14]
print("text[0][:120]:", batch["text"][0][:120])

关键提示:胸部 X 光的左右方向有解剖意义(心脏在左侧)。RandomHorizontalFlip 在胸片任务中默认应关闭,除非你明确论证翻转在解剖上等价。这是胸片任务中最常见的增强错误。

§6.5 坑点清单

以下是使用 CheXpert Plus 时最常踩的坑,按「坑 N:」编号。每一条都对应真实的研究事故类型。

坑 1:把「报告未提及」当作「阴性」。
报告里没写 “pneumothorax” 并不意味着没有气胸,只能说明医师没提。原版 labeler 用「空白」表示未提及、用「0」表示明确否认,这一区分是刻意设计的。若你把空白当 0 训练,模型会学到大量假阴性监督。正确做法:显式选择 U 值/空白处理策略,并在论文中说明。

坑 2:硬编码文件路径与字段名。
不同下载批次的文件名、列名可能有差异(例如报告字段可能叫 section_findings 也可能有其他命名变体)。硬编码路径会导致代码在他人机器上直接崩溃。正确做法:先 df.columns 打印字段、先 os.listdir 确认目录结构,再写处理逻辑。

坑 3:不做患者级去重就与原版 CheXpert 混用。
两个数据集共享同一批患者。直接 concat 会让同一患者的图同时进入训练与测试,产生虚假的高性能。正确做法:见 §5.3 的 check_leakage。

坑 4:用 BLEU 作为报告生成的主指标。
BLEU 高的模型可以生成「语法完美但临床全错」的报告。例如把 “left pleural effusion” 写成 “right pleural effusion”,BLEU 只掉一点,但临床上左右搞反是严重错误。正确做法:必须同时报告 RadGraph-F1 或 CheXbert-F1。

坑 5:忽略 CheXbert 的 512 token 截断。
典型报告约 194 token,看似安全;但若你把多个 section 拼接后喂入,很容易超 512,而 transformers 默认静默截断,你会丢失报告尾部信息且毫无察觉。正确做法:显式统计截断率(见 §6.3 步骤 4),必要时分段或分层池化。

坑 6:把 CheXbert / RadGraph 的自动标签当人工金标准。
它们是模型产出,继承上游模型的误差分布。用它们评测你自己训练的抽取器,等于用「另一个不完美的模型」做裁判。正确做法:至少抽样做一次人工核验,并报告人工一致率。

坑 7:在胸片任务中随意使用水平翻转增强。
心脏位于左侧,翻转后的影像在解剖上是「右位心」,与标签对应的语义会发生冲突。正确做法:默认关闭水平翻转,或论证翻转的等变性后谨慎使用。

坑 8:只在一份划分上报告一次结果。
单次划分的方差可能很大,尤其在阳性样本稀少的类别(如 Fracture)上。正确做法:至少 3 次重复,报告均值与标准差;对小类别考虑分层抽样。

坑 9:把 186 个缺失 study 当作不存在。
Plus 不是原版的超集。若你声称「Plus 覆盖了原版全部数据」,这是事实性错误。正确做法:显式披露 186 个 study 的缺口(见 §4.3)。

坑 10:忽略报告的时间跨度与协议变更。
数据跨 2002–2017 年,期间设备与报告模板都可能改版。直接按时间随机划分会掩盖漂移。正确做法:先做 §7.6 的年度分布检查,必要时按阶段切分。

坑 11:把人口学字段直接用作模型输入。
种族、保险类型等受保护属性若作为特征,可能让模型学到歧视性关联。正确做法:默认不输入模型,仅用于事后分层评估;若必须输入,须做消融与合规论证。

坑 12:用同一份报告既训练抽取器又评测它。
在有报告的数据上训练 CheXbert 风格模型,又在同一批报告上评测,会得到严重乐观的结果。正确做法:确保评测报告从未参与训练(包括预训练语料的污染)。

坑 13:忽视测试集的「一次性」属性。
反复用 test 结果调参、选模型、改超参,等价于把 test 污染成 valid。正确做法:所有决策在 valid 上做,test 只在最终一次使用。

坑 14:不做合规审查就投入商业场景。
研究用途协议明确禁止商业使用。正确做法:商业场景须另行取得 Stanford 授权,并完成合规审查。

§6.6 数据增强策略

增强 是否推荐 说明
水平翻转 ❌ 默认禁用 胸片左右有解剖意义
垂直翻转 ❌ 禁用 解剖上无意义
小角度旋转(±10°) ✅ 可谨慎使用 模拟体位差异,但避免过大
随机裁剪缩放 ✅ 推荐 模拟不同缩放,注意保留肺野
亮度/对比度抖动 ✅ 推荐 模拟曝光差异,映射到真实采集差异
高斯噪声 ✅ 推荐 模拟不同探测器噪声
Cutout / Random Erasing ⚠️ 谨慎 可能遮挡关键病灶,需评估
MixUp / CutMix ⚠️ 谨慎 在医学影像上的可解释性争议较大
文本侧同义词替换 ✅ 推荐用于生成任务 用医学术语表做同义改写

重要提醒:增强必须是有临床依据的。任何不能用「真实采集差异」解释的增强,都是在引入虚假先验。

§6.7 模型推荐

任务 推荐架构 理由
14 类病征分类 DenseNet-121 / ConvNeXt / 医学预训练 backbone 与 2019 基线可比;医学预训练 backbone 通常更优
报告生成 编码器-解码器(ViT + Transformer)或视觉-语言大模型 生成任务需要语言解码能力
图文对齐 CLIP 式双塔 检索与零样本分类的标配
结构化抽取 BERT / RoBERTa 微调 CheXbert 一脉
图结构预测 序列标注 + 关系分类(RadGraph 式) 与 L3 标注对齐
多模态大模型微调 LLaVA 式架构 + LoRA/QLoRA 显存友好,迭代快

§6.8 硬件需求

场景 最低 推荐
文本-only 微调(BERT 级) 1×16GB GPU 1×24GB GPU
分类模型训练(DenseNet 级) 1×24GB GPU 1×48GB GPU
图文对比预训练 4×24GB GPU 8×40GB GPU
报告生成大模型微调 1×80GB(LoRA) 多卡 80GB
全量 DICOM 存储 200GB 500GB+ SSD

§6.9 评估指标代码

# ============================================================
# 分类任务评估指标:AUC(宏平均/加权)是 CheXpert 系列主指标
# 必须与论文口径一致:按 14 类分别算 AUC 再平均,
# 还是只算若干主要病征,二者不可混用。
# ============================================================
import numpy as np
from sklearn.metrics import roc_auc_score, average_precision_score

def multi_label_auc(y_true, y_pred, labels=None):
    """y_true/y_pred: [N, C],NaN 表示该样本该标签缺失,需屏蔽"""
    C = y_true.shape[1]
    aucs = []
    for j in range(C):
        m = ~np.isnan(y_true[:, j])
        yt = y_true[m, j]
        if len(np.unique(yt)) < 2:    # 该类别在当前子集只有一种取值,AUC 未定义
            aucs.append(np.nan)
            continue
        aucs.append(roc_auc_score(yt, y_pred[m, j]))
    aucs = np.array(aucs, dtype=np.float32)
    return {
        "auc_per_class": aucs,
        "auc_macro": float(np.nanmean(aucs)),
        "auc_valid_classes": int(np.sum(~np.isnan(aucs))),
    }

# 用法:
# metrics = multi_label_auc(y_true, y_pred, LABELS)
# print(f"AUC(macro) = {metrics['auc_macro']:.4f}  "
#       f"(有效类别 {metrics['auc_valid_classes']}/14)")
# ============================================================
# 生成任务评估:临床指标优先于 n-gram
# RadGraph-F1 需调用 RadGraph 模型对生成文本与参考文本分别抽图,
# 再计算实体/关系集合的 F1。此处给出骨架与 n-gram 部分。
# ============================================================
from nltk.translate.bleu_score import corpus_bleu
from nltk.translate.meteor_score import meteor_score

def generation_ngram_metrics(hyps, refs):
    """hyps: List[str] 生成; refs: List[List[str]] 参考(每条可多参考)"""
    tok_h = [h.split() for h in hyps]
    tok_r = [[r.split() for r in rs] for rs in refs]
    return {
        "bleu4": corpus_bleu(tok_r, tok_h, weights=(0.25, 0.25, 0.25, 0.25)),
        "meteor": float(np.mean([meteor_score([r.split() for r in rs], h.split())
                                 for h, rs in zip(hyps, refs)])),
    }

# 骨架:RadGraph-F1(需先安装官方 radgraph 包)
# from radgraph import RadGraph
# rg = RadGraph(); g_h = rg(hyps); g_r = rg([r[0] for r in refs])
# # 逐样本比较实体集合与关系集合,算 P/R/F1 后平均

报告规范提醒:报告生成的结果表必须同时包含 n-gram 与临床指标两栏,并明确说明 RadGraph-F1 的实现版本与实体/关系口径。

§6.10 MLOps 与工程笔记

数据版本管理:

  • 记录你使用的下载批次的时间戳与文件哈希。
  • 记录论文版本(v1/v2),因为 v2 可能调整了统计口径。
  • 把预处理脚本与配置文件一并纳入版本控制(但不包含数据本体)。

实验可复现:

  • 固定随机种子,并在报告中给出种子值。
  • 保存数据划分的哈希指纹,确保后续实验用的是同一份划分。
  • 记录环境(CUDA、PyTorch、transformers 版本)。

监控指标:

  • 训练时的标签缺失率变化(数据管道 bug 的早期信号)。
  • 生成任务的临床指标而不仅是 loss。
  • 推理阶段的分布漂移(输入影像的像素统计与训练集的差异)。

常见工程动作:

  • 图像侧用 LMDB/WebDataset 打包,避免小文件 I/O 瓶颈。
  • 文本侧用 Arrow/Parquet 加速随机访问。
  • 大模型微调用梯度检查点与混合精度。

§7 质量评估与局限性

§7.1 已知偏倚清单

偏倚类型 具体表现 影响 缓解建议
单中心偏倚 全部来自斯坦福一家学术医疗中心 跨机构迁移性能下降 用外部数据集(MIMIC-CXR、PadChest、VinDr-CXR)做外部验证
选择偏倚 仅纳入有正位片且有报告的检查 不代表全体胸片检查人群 报告纳入标准,做敏感性分析
报告可得性偏倚 186 个 study 因报告缺失被排除 Plus 非原版超集;缺失非随机 跨库研究时显式披露该缺口
时间偏倚 2002–2017 采集,设备协议过时 与当代影像存在域偏移 按年份分层分析,报告漂移
风格偏倚 报告由斯坦福医师群撰写,模板化 生成模型学到机构文风 跨机构测试;避免用报告风格做评估主轴
人群偏倚 急诊/住院患者被正位片筛选富集 疾病谱偏向急性重症 按就诊场景分层
标注器偏倚 CheXbert/RadGraph 自动产出 继承上游模型误差 抽样人工核验;不把自动标签当金标准
词汇偏倚 英语报告,西方医学术语体系 非英语场景不可直接迁移 跨语言场景需另行适配

§7.2 标注质量评估:论文 Table 4 的两组人工评测

论文对**两套自动标注器(原版 CheXpert labeler vs. CheXbert)**做了人工评测,结论按测试集不同而不同,这是理解「哪个标签器更好」的关键证据。

评测设计:

评测组 测试集 样本量 n 评测对象
图像测试集 基于图像的标注 n = 154 以图像所见为准,评估标签器的影像一致性
文本测试集 基于报告的标注 n = 339 以报告文本为准,评估标签器的文本抽取准确性

评测结果:

测试集 最优方法 最优输入 F1
图像测试集 CheXbert Findings 段 0.44
文本测试集 CheXbert Impression 段 0.93

三个必须理解的读数:

  1. 0.44 vs 0.93 的巨大差距:这个差距不是因为标注器在文本上特别强、在图像上特别弱,而是因为评测任务本身难度不同。文本测试集考的是「从报告文本抽标签」,报告里白纸黑字写着 “pleural effusion”,抽出来当然准;图像测试集考的是「从影像推标签」,影像与报告之间本来就存在不一致(这是放射学的常识 —— 报告的"所见"有时并不在图上),因此 F1 天然低得多。

  2. CheXbert 在两个测试集上都优于原版 labeler:这说明基于 BERT 的抽取总体上比规则词典更鲁棒,尤其是在处理否定、不确定表述与同义表达时。

  3. 输入口径影响结果:图像测试集最优用 Findings,文本测试集最优用 Impression。这印证了 §3.3 的结论 —— 没有万能口径。

引用警告:不要把 0.93 当作「CheXbert 的准确率」。它是在文本测试集上、用 Impression 输入、对特定标签集的 F1。脱离这些限定条件的引用是误导。

§7.3 泛化性讨论

内部泛化:在 Plus 自身的 test 划分上,模型表现通常远好于跨机构场景,因为训练与测试共享同一批患者群体、设备与报告风格。不要把内部测试结果当作泛化能力的证据。

跨机构泛化的三个障碍:

  1. 设备域偏移:不同厂商的 X 光机在灰度映射、锐化、噪声特性上不同。
  2. 人群域偏移:斯坦福的患者构成(美国西海岸学术医疗中心)与目标机构可能差异很大。
  3. 报告风格偏移:生成模型的输出会被目标机构的医师认为"文风不对"。

推荐的泛化评估协议:

  • 外部测试:在 MIMIC-CXR / PadChest / VinDr-CXR 上直接测试,不微调。
  • 留一机构:若有多个来源,做 leave-one-site-out 交叉验证。
  • 时间外推:用 2010 年前的图训练,2015 年后的图测试,量化时间漂移。

§7.4 伦理考量

(1)隐私与再识别

数据集含 187,711 份自由文本报告。尽管已清除 853,878 处 PHI 片段,自由文本的再识别风险仍本质存在。使用者须遵守研究用途协议的不再识别条款。

(2)知情同意的边界

这些影像是常规临床检查的回顾性数据,多数情况下按机构政策以去标识方式用于研究,不是为数据集专门采集的知情同意。使用时须理解这一同意基础的差异。

(3)生成模型的临床风险

报告生成模型若被误用为「自动出具报告」,会放大错误。Plus 的 Model Zoo 输出不具备临床可用性,任何部署前必须经过本地验证与监管审查。

(4)公平性

8 项人口学属性的存在使公平性审计成为可能,但也意味着模型可能学到受保护属性与疾病之间的虚假关联。训练时应考虑是否移除这些字段作为特征。

§7.5 公平性评估方法

Plus 提供了做公平性评估的字段基础。推荐的评估框架:

# ============================================================
# 公平性评估框架(示意,需接入你的模型与数据)
# 目标:量化模型在不同人口学亚组间的性能差异
# 前提:Plus 提供年龄、性别、种族、民族、保险类型等 8 项字段
# ============================================================
def subgroup_performance(df, y_true, y_pred, group_col, metric_fn):
    """group_col: 'gender'/'race'/'insurance' 等;metric_fn: (y_true,y_pred)->标量"""
    results = {}
    for g, sub in df.groupby(group_col):
        if len(sub) < 30:          # 小样本组不报点估计,避免噪声
            results[g] = {"n": len(sub), "metric": None}
            continue
        results[g] = {"n": len(sub),
                      "metric": metric_fn(sub[y_true].values, sub[y_pred].values)}
    vals = [v["metric"] for v in results.values() if v["metric"] is not None]
    results["_spread"] = max(vals) - min(vals) if vals else None
    return results

# 用法:for col in ["gender", "race", "ethnicity", "insurance"]:
#           print(col, subgroup_performance(df, "y_true", "y_pred", col, auc_fn))

评估要点:

  1. 组间极差(spread) 是核心数字,比单组绝对值更能揭示不公平;
  2. 小样本组(n < 30)不报点估计,避免过度解读噪声;
  3. 除性能外还应报告各组的阳性率(base rate),以区分「性能差异」与「患病构成差异」;
  4. 保险类型与年龄常与就诊场景混淆,建议做多因素分层而非单因素。

§7.6 数据漂移提示

漂移来源 表现 检测方法
设备漂移 影像灰度分布随年代变化 KS 检验 / MMD 比较年度像素直方图
协议漂移 曝光参数、体位偏好变化 统计 47 项 DICOM 字段的年度分布
报告风格漂移 模板改版、术语更新 报告长度、词频的时间序列
疾病谱漂移 某病种阳性率随时间变化 按年份统计 14 类标签阳性率

建议:在做任何跨年分析前,先画一遍上述四个维度的年度分布图。若发现明显台阶(某年协议换了),必须按阶段切分而非线性外推。

§7.7 DAIMS 24 项质量评估

DAIMS(Data And AI Model Sheet)是本库对所有条目统一施行的质量档案。以下 24 项按 CheXpert Plus 的实际情况逐项评估。

# 维度 评估 说明
1 数据集名称 通过 CheXpert Plus,命名清晰无歧义
2 版本标识 通过 arXiv v1(2024-05-29)/v2(2024-06-03)可追溯
3 负责人/维护方 通过 Stanford AIMI 明确,通讯作者 Langlotz
4 许可类型 通过 Stanford 研究用途协议,明文非商业
5 数据来源 通过 单中心斯坦福,2002–2017,可追溯
6 采集方法 通过 胸片正位摄影,DICOM 保留采集参数
7 标注方法 部分 报告为临床产物非专门标注,无一致性指标
8 标注者身份 不通过 医师身份未公开,无法做标注者分层
9 标注一致性 不通过 无 inter-rater agreement(本质不存在该过程)
10 样本量 通过 22 万余图,规模充足
11 类别平衡 部分 14 类病征阳性率高度不均
12 划分规范 通过 患者级不重叠划分
13 外部验证 部分 论文提供横向对照,但无独立外部验证集
14 文档完整度 通过 论文 + 数据卡 + GitHub README 齐备
15 可复现性 通过 Model Zoo + 基准代码开源
16 元数据丰富度 通过 47 项 DICOM + 8 项人口学,同类领先
17 隐私保护 部分 已清 853,878 处 PHI,但自由文本残余风险
18 伦理审查 通过 有 IRB 语境与使用协议
19 偏见披露 通过 论文讨论节主动披露主要偏倚
20 更新维护 部分 2024 年后更新情况待核
21 互操作性 通过 CSV / DICOM / JSON 标准格式
22 数据体积 通过 分格式提供,可按需下载
23 引用规范 通过 arXiv DOI + BibTeX 齐备
24 任务定义清晰度 通过 分类 / 生成 / 对齐任务边界明确

汇总:24 项中 通过 18 项、部分通过 5 项、不通过 2 项。两项「不通过」集中在标注者身份与一致性 —— 这是 Plus 的结构性限制(报告来自临床而非受控标注),不是可修复的缺陷,使用者必须接受这一前提。

§7.8 外部验证矩阵

目标数据集 用途 注意事项
MIMIC-CXR 跨中心胸片图文验证 需 PhysioNet 认证;图像更多
PadChest 跨语言(西语)报告验证 语言域差异显著,仅验证视觉侧
VinDr-CXR 跨国家(越南)验证 标注体系不同(含病灶框)
NIH ChestX-ray14 纯图像分类对照 无报告,仅能验证视觉分支
原版 CheXpert 同源对照 必须患者级去重
BRAX 巴西人群验证 有 DICOM 元数据,可做采集参数对照

§8 基准性能与生态

§8.1 论文提供的基准与 Model Zoo

CheXpert Plus 论文与官方仓库提供的可复现基线覆盖四条技术路线:

路线 模型 任务 关键指标
生成式 LLaMA 系 报告生成 BLEU-4 / ROUGE-L / RRG
对比式 CLIP 系 图文对齐 / 零样本分类 检索 Recall@K / AUC
离散表征 VQ-GAN 图像 token 化 重建质量 / 下游生成
自监督 DINOv2 视觉特征 线性探测准确率

重要提醒:本页不转载具体数值,因为(a)论文 v1/v2 间的编号可能变化;(b)不同实现与硬件会导致数值波动;(c)二手转载的数值常见口径错误。请以官方仓库 README 与论文原表为准。

§8.2 报告生成任务的评测指标

(1)n-gram 重叠指标

指标 含义 局限
BLEU-1/2/3/4 n-gram 精确率几何平均 不考虑临床正确性;同义换词即失分
ROUGE-L 最长公共子序列 对长度敏感
METEOR 含同义词匹配 比 BLEU 温和
CIDEr 加权 n-gram,强调共识 需参考集,样本少时不稳定

(2)临床相关性指标(更重要)

指标 含义 优势
RadGraph-F1 比较生成文本与参考文本的实体-关系图 惩罚「语法通顺但临床错误」
CheXbert-F1 比较生成文本与参考文本的 14 类标签 贴近下游临床任务
RRG / RRS 基于 RadGraph 的奖励/评分 Plus 论文采用的核心指标

核心建议:报告生成论文必须同时报告 n-gram 与临床指标。只报 BLEU 已是过时的做法,且易被审稿人质疑。

§8.3 论文 Table 1:10 个胸片数据集的横向对照

Plus 论文用 Table 1 与 10 个同类资源做了对照,对照维度包括:图像数量、患者数量、是否有报告文本、是否有 DICOM 原始、是否有人口学、是否有结构化图标注、获取门槛(公开 / 注册 / 认证)。

Plus 的定位:在「报告文本 + 人口学 + DICOM 原始」三项同时具备的资源中,Plus 的图像规模位居前列;在「同时提供 CheXbert 与 RadGraph 双标注」这一点上,Plus 是当时独有的。

§8.4 社区活跃度与生态

官方资产:

资产 入口
论文 arXiv:2405.19538
代码 github.com/Stanford-AIMI/chexpert-plus
数据卡 aimi.stanford.edu/datasets/chexpert-plus
云表 Redivis 数据集页

§8.5 关键论文与引用链

论文 年份 关系
Irvin et al., CheXpert(AAAI) 2019 前身,Plus 的基座
Johnson et al., MIMIC-CXR 2019 同类竞品,报告规模更大
Jain et al., RadGraph 2021 标注工具来源,L3 层
Smit et al., CheXbert 2020 标注工具来源,L2 层
Bustos et al., PadChest 2020 同类竞品,西语报告
Nguyen et al., VinDr-CXR 2020 同类竞品,含病灶框
Chambon et al., CheXpert Plus 2024 本条目主论文

§8.6 生态快照

谁在用 CheXpert Plus? 报告生成研究者(标准 benchmark)、医学基础模型团队(预训练语料,常与 MIMIC-CXR 联合)、可解释性研究者(图文对齐分析)、公平性研究者(8 项人口学分层)、放射学教育工具开发者(参考文本)。

常见的失败用法:把报告当 ground truth 直接做分类监督(忽略「未提及」问题);只报 BLEU 不报临床指标;不做患者级去重就与原版混用;把 CheXbert 标签当人工金标准。

§8.7 相对于同类资源的选型建议

你的需求 首选 次选
最大规模胸片图文预训练 MIMIC-CXR CheXpert Plus
需要 DICOM 采集参数 CheXpert Plus BRAX
需要人口学公平性分析 CheXpert Plus MIMIC-CXR(部分)
需要图结构(实体-关系)监督 CheXpert Plus 独立 RadGraph 标注集
快速上手、门槛低 NIH ChestX-ray14 PadChest
跨语言(西语) PadChest —
病灶定位(框) VinDr-CXR —

§9.1 必链条目:经典 CheXpert(rid5)

项目 内容
库内 slug chexpert
库内记录 ID rid5
关系类型 前身(predecessor) —— 同一影像来源的第一代发布
互链方向 本条目 → rid5(说明基座);建议 rid5 → 本条目(说明后续演进)

为何必链:不链 rid5,读者会误以为 CheXpert Plus 是一个孤立的新数据集,无法理解「它是在什么基础上增补的」。反之,rid5 条目不链本条目,读者就不知道原版已有 2024 年的扩展版,可能重复劳动或误用旧数据。

建议的互链文案(供主会话参考):

本条目的 2024 年扩展版 CheXpert Plus 在保留原有影像的基础上补充了放射报告文本、人口学属性与 DICOM 元数据,详见《CheXpert Plus — 胸部 X 光图文多模态数据集》。

§9.2 强相关条目:胸片影像族

以下库内条目与 CheXpert Plus 共享同一医学领域(胸部 X 光),是读者最可能顺藤摸瓜的对象:

条目类型 典型库内 slug(示例) 关系说明
胸片分类数据集 nih-chestx-ray14 类条目 无报告文本,可作纯图像对照
胸片图文数据集 mimic-cxr-jpg、mimic-cxr-ext-ils 同类竞品/互补,报告规模不同
胸片定位/分割 chest-x-ray-segmentation、chexlocalize、chexmask-cxr-segmentation-data 空间监督资源,可与 Plus 联用
胸片结构化标注 radgraph、radgraph2 L3 层标注工具的直接来源
胸片报告文本 mimic-cxr-jpg、openi 报告文本的其他来源
胸片多标签分类 cxr-cardiomegaly、cxr-pro 类条目 特定病征的专项资源
胸片语言模型 chexstruct-cxreasonbench、radvlm 类条目 下游任务与模型资源

说明:上表的 slug 为建议检索方向,实际应以库内最新清单为准。主会话在做互链时应先在库内检索确认 slug 存在。

§9.3 方法论相关条目

主题 相关条目方向 关系
放射报告图结构标注 radgraph / radgraph2 Plus 的 L3 层
临床文本抽取 mtsamples、MedQuAD 类临床文本条目 抽取方法学同源
医学影像评估基准 medmnist 类条目 评测方法学参考
多模态医学数据 库内多模态类条目 同一范式家族
MIMIC 系列 mimiciii、mimiciv、mimic-cxr-jpg 同院系的叙事型资源,对比阅读有价值

§9.4 互链优先级建议

优先级 目标 理由
P0(必做) rid5 chexpert 划界关系的核心,缺此则条目语义不完整
P1(强烈建议) mimic-cxr-jpg / mimic-cxr-ext-ils 最主要的同类对照
P1(强烈建议) radgraph / radgraph2 标注工具来源,影响方法理解
P2(建议) 胸片分割族(chexlocalize、chexmask-*) 空间监督的互补资源
P2(建议) chexstruct-cxreasonbench 等下游基准 展示任务承接链
P3(可选) nih-chest-ray14 类、padchest、vindr-cxr 横向对照的远端链接

§10 避坑清单与快查手册

§10.1 十大高频错误(速查)

# 错误 后果 一句话纠正
1 「未提及」当阴性 大量假阴性监督 显式处理空白与 U 值
2 硬编码路径/字段名 代码在他机崩溃 先探查再写逻辑
3 与原版混用不去重 泄漏、虚假高性能 患者级去重
4 只报 BLEU 临床错误被掩盖 加 RadGraph-F1
5 忽视 512 token 截断 静默丢信息 统计截断率
6 自动标签当金标准 评测失真 抽样人工核验
7 胸片水平翻转增强 解剖语义错误 默认关闭
8 单次划分单次结果 方差被低估 多次重复报均值±std
9 忽视 186 个 study 缺口 事实性错误 显式披露
10 忽视时间漂移 结论不可外推 先做年度分布检查

§10.2 数字引用速查表

数字 含义 口径 必须随数字标注的限定
223,228 图像总数 论文正文 来源=正文;版本=v2
223,462 图像总数 论文 Table 1 来源=Table 1;版本=v2
64,725 患者数 论文正文 来源=正文
64,540 患者数 论文 Table 1 来源=Table 1
187,711 报告数 全文一致 无冲突
36,469,132 全报告 token 数 Table 2 来源=Table 2
13,351,758 Impression token 数 Table 2 来源=Table 2
853,878 PHI 清除片段数 论文报告 仅表示"检测到",非"全部"
47 DICOM 元数据项数 论文报告 —
8 人口学属性项数 论文报告 —
11 报告最多子段数 Table 2 来源=Table 2
14 病征类别数 沿用原版 含 No Finding
186 未进入 Plus 的原版 study 数 论文报告 Plus 非原版超集
0.44 CheXbert F1 图像测试集 n=154,Findings 输入 三项限定缺一不可
0.93 CheXbert F1 文本测试集 n=339,Impression 输入 三项限定缺一不可
1,581,863 RadGraph Findings 实体数 论文报告 —
3,999,559 RadGraph Impression 实体数 论文报告 注意与 token 量的反常
1,106,659 RadGraph Findings 关系数 论文报告 —
2,772,337 RadGraph Impression 关系数 论文报告 —

引用铁律:任何数字若涉及双口径或带测试集限定,必须在文中就地标注来源与限定条件。省略限定的引用视为不合格。

§10.3 开跑前 30 秒检查

□ 我签了研究用途协议了吗?
□ 我确认用的是 v1 还是 v2 了吗?
□ 我引用的数字标了正文/Table 1/Table 2 吗?
□ 我做了患者级去重吗(若混用其他数据集)?
□ 我检查了 token 截断率吗?
□ 我关了水平翻转增强吗?
□ 我准备了临床指标(不只是 BLEU)吗?
□ 我披露了 186 个 study 缺口吗?

§11 总结

CheXpert Plus 是胸部 X 光 AI 研究从「弱监督分类」走向「多模态生成与对齐」的标志性基础设施。它的价值不在于「更大的图像集」(它的图像数与原版基本相同),而在于为同一批影像补上了它们原本缺失的文本与元数据层:

  • 187,711 份放射报告,让图文对齐与报告生成第一次可以在 CheXpert 上做;
  • 8 项人口学 + 47 项 DICOM 元数据,让公平性审计与采集参数研究第一次成为可能;
  • CheXbert 与 RadGraph 双标注,让「对标签器本身的审计」第一次有了参照;
  • 四路线 Model Zoo,让复现基线不再是负担。

对使用者的三条核心忠告:

  1. 它是一个独立条目,不是原版的别名。 两代发布有不同论文、不同 DOI、不同内容、不同任务线;且 Plus 少 186 个 study,并非超集。
  2. 报告文本是临床产物,不是受控标注。 没有一致性指标、没有标注者信息、“未提及"不等于"阴性”——这三条决定了你必须谨慎对待每一份文本监督信号。
  3. 数字必须带限定引用。 223,228 与 223,462、0.44 与 0.93,脱离口径与限定条件的数字就是错误信息。

常见问题 FAQ

Q:CheXpert Plus 和 CheXpert 是同一個数据集的两个名字吗?
不是。它们是同一影像来源的两代发布。原版(2019)是「图 + 标签」,Plus(2024)是「图 + 报告 + 元数据 + 结构化标注 + 模型库」。本库将它们作为两个独立条目收录。详见 §4。

Q:Plus 是原版的超集吗?
不是。有 186 个原版 study 因报告无法找回而未进入 Plus。若要「原版全量图像」,只能用原版。详见 §4.3。

Q:为什么图像数在论文里有 223,228 和 223,462 两个值?
前者出现在论文正文,后者出现在 Table 1。本页按双口径原则同时记录,不擅自取舍。引用时必须注明来源。详见 §2.1。

Q:CheXbert 的准确率是 0.93 吗?
不能这样表述。0.93 是「在文本测试集(n=339)上、以报告文本为准、用 Impression 段作为输入」条件下的 F1。换任何一项条件,数值都会变。详见 §7.2。

Q:报告里的空白标签该怎么处理?
三种主流策略:U-Ones(U 当阳性)、U-Zeros(U 当阴性)、U-Ignore(屏蔽)。空白(未提及)与 U(不确定)是两个不同的状态,不应混为一谈。详见 §3.2。

Q:可以用于商业项目吗?
不可以。许可是 Stanford University Dataset Research Use Agreement,明确为非商业研究用途。商业使用须另行取得授权。详见 §6.1 与 §0.3。

Q:我需要下载全部 DICOM 吗?
不一定。若只做文本任务(报告生成、抽取),只需文本侧 CSV(数百 MB)。DICOM 与 JPG 是给影像任务的,体积达数十 GB。详见 §2.2 与 §2.6。

Q:RadGraph 的 Impression 实体数比 Findings 多,是错了吗?
这是一个真实存在的反常:Impression 的 token 量约为 Findings 的 1/3,但实体数却是其 2.5 倍。可能源于统计口径差异或文本密度差异。本页记录该反常但不强行归因,使用者应自行核对。详见 §3.4。

Q:能把它和 MIMIC-CXR 混合训练吗?
可以,但必须(a)确认两份许可都允许;(b)做患者级去重(两者可能有交叉患者);(c)注意两者的标注体系与报告风格差异。详见 §5.5。


事实清单(逐条可核)

# 事实 来源
1 论文 arXiv 编号 2405.19538 arXiv abs 页
2 v1 提交 2024-05-29,v2 修订 2024-06-03 arXiv 版本历史
3 DOI 10.48550/arXiv.2405.19538 arXiv 页
4 全文 13 页 arXiv PDF
5 分类号 cs.CL / cs.AI / cs.CV / cs.LG arXiv 页
6 作者 9 人,Chambon 与 Delbrouck 并列一作 论文题名页
7 通讯作者 Curtis P. Langlotz 论文题名页
8 发布机构 Stanford AIMI × VinBrain 论文与数据卡
9 图像数 223,228(正文)/223,462(Table 1) 论文
10 患者数 64,725(正文)/64,540(Table 1) 论文
11 报告数 187,711 论文
12 全报告 token 36,469,132 Table 2
13 Impression token 13,351,758 Table 2
14 报告最多 11 个子段 Table 2
15 PHI 清除 853,878 处 论文
16 DICOM 元数据 47 项 论文
17 人口学属性 8 项 论文
18 病征类别 14 类 沿用原版
19 186 个原版 study 未进入 Plus 论文
20 CheXbert 图像测试集 F1 0.44(n=154,Findings) Table 4
21 CheXbert 文本测试集 F1 0.93(n=339,Impression) Table 4
22 RadGraph Findings 实体 1,581,863 论文
23 RadGraph Impression 实体 3,999,559 论文
24 RadGraph Findings 关系 1,106,659 论文
25 RadGraph Impression 关系 2,772,337 论文
26 Model Zoo 含 LLaMA/CLIP/VQ-GAN/DINOv2 论文与仓库
27 官方仓库 github.com/Stanford-AIMI/chexpert-plus GitHub
28 Redivis DOI 10.57761/fzna-pm76 Redivis
29 数据采集年份 2002–2017 论文
30 单一学术医疗中心(斯坦福) 论文

术语表

术语 英文 释义
正位胸片 Frontal chest radiograph PA(后前位)或 AP(前后位)胸部 X 光摄影
PA / AP Posteroanterior / Anteroposterior 射线穿过人体的方向:后→前 / 前→后
所见段 Findings 报告中对影像的事实性描述部分
印象段 Impression 报告中对所见的归纳与临床结论部分
四值制 Quad-value labeling 0 阴性 / 1 阳性 / 空白未提及 / U 不确定
U 值 Uncertainty 报告中表达不确定的标注意向
CheXpert labeler — 原版基于规则与词典的 14 类标签抽取器
CheXbert — 基于 BERT 的报告文本标签抽取模型
RadGraph — 把报告解析为实体-关系图的标注体系
实体 / 关系 Entity / Relation 图标注的基本单元:医学概念节点与它们之间的连边
PHI Protected Health Information 受保护的健康信息,即需脱敏的直接/间接标识符
DICOM Digital Imaging and Communications in Medicine 医学影像的通用文件格式与元数据标准
图文对齐 Vision-language alignment 学习图像与文本的联合表示空间
报告生成 Report generation 由影像自动生成放射报告文本
RadGraph-F1 — 基于图结构的生成质量指标,比 n-gram 更贴近临床
RRG / RRS RadGraph Reward / Score 基于 RadGraph 的生成奖励与评分
BLEU / ROUGE — 经典 n-gram 文本重叠指标
患者级划分 Patient-level split 保证同一患者不跨 train/valid/test
域偏移 Domain shift 训练与部署数据分布不一致导致性能下降
U-Ones / U-Zeros / U-Ignore — U 值的三种处理策略

附录 A:报告子段结构示例

CheXpert 报告的子段结构不统一,最多可达 11 个 section。典型结构示例:

EXAMINATION:  CHEST (PA AND LAT)
INDICATION:  ___ cough, fever
COMPARISON:  ___
FINDINGS:    The lungs are clear without focal consolidation...
             The cardiomediastinal silhouette is within normal limits...
IMPRESSION:  1. No acute cardiopulmonary process.
TECHNIQUE:   ___

处理要点:

  • FINDINGS → section_findings 字段;IMPRESSION → section_impression 字段;
  • 其余子段(EXAMINATION / INDICATION / COMPARISON / TECHNIQUE)通常不进入正文训练,但可用于上下文增强;
  • 部分报告缺段(如无 IMPRESSION),预处理须容忍缺失;
  • ___ 是被脱敏移除的内容占位符,代表 PHI 已被清除。

完整的两代对照表见 §4.1;14 类病征中英对照见 §3.2。

附录 B:许可与合规要点摘要

要点 内容
协议名称 Stanford University Dataset Research Use Agreement
用途限制 非商业研究用途
再分发 禁止
再识别 禁止
署名要求 使用须引用首发论文
适用法律 以协议文本为准
商业使用 需另行取得 Stanford 授权

非法律意见:以上为协议要点的通俗摘要,实际权利义务以协议原文为准。有任何疑问请咨询所在机构的合规或法务部门。

附录 C:BibTeX 引用

@article{Chambon2024CheXpertPlus,
  title   = {CheXpert Plus: Augmenting a Large Chest X-ray Dataset with Text and Patient Metadata},
  author  = {Chambon, Pierre and Delbrouck, Jean-Benoit and Sounack, Thomas
             and Huang, Shih-Cheng and Chen, Zhihong and Varma, Maya
             and Truong, Steven QH and Chu, Katherine and Langlotz, Curtis P.},
  journal = {arXiv preprint arXiv:2405.19538},
  year    = {2024},
  doi     = {10.48550/arXiv.2405.19538}
}

@article{Irvin2019CheXpert,
  title   = {CheXpert: A Large Chest Radiograph Dataset with Uncertainty Labels and Expert Comparison},
  author  = {Irvin, Jeremy and Rajpurkar, Pranav and Ko, Michael and others},
  journal = {Proceedings of the AAAI Conference on Artificial Intelligence},
  year    = {2019},
  doi     = {10.1609/aaai.v33i01.3301590}
}

@article{Jain2021RadGraph,
  title   = {RadGraph: Extracting Clinical Entities and Relations from Radiology Reports},
  author  = {Jain, Saahil and Agrawal, Ashwin and Saporta, Adriel and others},
  journal = {arXiv preprint arXiv:2106.14463},
  year    = {2021}
}

附录 D:官方资源速查

资源 链接
论文(arXiv) https://arxiv.org/abs/2405.19538
官方代码 https://github.com/Stanford-AIMI/chexpert-plus
数据卡 https://aimi.stanford.edu/datasets/chexpert-plus
Redivis(云表) https://redivis.com/datasets/
本条目页面 https://www.qianfanghub.com/ai-ready-dataset/chexpert-plus/740
库内前身条目 https://www.qianfanghub.com/ai-ready-dataset/chexpert/0

§10 AI 使用声明卡

§10.1 AI 模型使用

项目 内容
撰写代理 千方病案医数集 AI 写手代理 agent-d-chexpertpl
执行方式 在人工设定的纪律包约束下,由 AI 起草、按规则自检
证据采集 三源互证:arXiv 论文全文 + 官方 GitHub 仓库 + 官方数据卡
自动化校验 check_md.py(格式与结构)、preflight_check.py(标题重复与锚点冲突)

§10.2 AI 参与范围

环节 AI 参与 人工参与
论文阅读与硬数字提取 ✅ 全部 抽样核对
FACTS.md 事实底稿 ✅ 全部 校验
正文撰写 ✅ 全部 编辑与终审
数字双口径核对 ✅ 全部 抽验
结构合规自检 ✅ 全部(脚本) 结果审阅
最终发布 ❌ ✅ 全部(主会话串行负责)

§10.3 输入来源

来源 类型 用途
arXiv:2405.19538 v2 全文 一手论文 硬数字、方法、局限
github.com/Stanford-AIMI/chexpert-plus 官方仓库 模型库、复现路径
aimi.stanford.edu/datasets/chexpert-plus 官方数据卡 获取流程、许可
Redivis 数据集页 官方分发平台 DOI、云表入口
库内 scripts/check_md.py / preflight_check.py 内部校验脚本 结构合规(只读运行,未修改)

§10.4 人工校验表

校验项 状态
数据集存在性(三源互证) ✅ 已完成
与 rid5 的划界论证 ✅ 已完成(§4)
双口径数字并存 ✅ 已完成(§2.1)
坑点条目数 ≥ 5 ✅ 已完成(14 条)
DAIMS 表存在 ✅ 已完成(§7.7)
行数落在 1200–1900 ✅ 已完成
check_md.py PASS ✅ 已完成
preflight_check.py 0 ERROR / 0 WARN ✅ 已完成

注:本表最后两行由撰写流程末端的自检命令实测填写,命令输出见任务汇报的"成稿指纹三行"。

§10.5 AI 生成章节标注

本页全部章节均由 AI 代理在纪律包约束下起草。所有硬数字均带来源标注(正文/Table 1/Table 2),所有双口径冲突均并存记录。不存在未经来源支持的数字。

§10.6 最后审核

项目 内容
最后更新 2026-09-30
数据截止 arXiv v2(2024-06-03)及同期官方数据卡
审核方 千方病案医学编辑部
反馈渠道 千方病案医数集站内

尾注:关于本条目

关于与库内 rid5 的关系:本条目与库内经典 CheXpert 条目(rid5)为同一影像来源的两代发布,属于独立条目而非重复。两代差异的完整论证见 §4,逐项对照表见附录 A。建议双向互链。

关于数字引用:本条目对每一处双口径数字均就地标注了来源(正文 / Table 1 / Table 2)与版本(v1 / v2)。读者引用时应沿用同样的标注习惯,否则会导致跨论文的数字不可比。

关于缺失的第三方指标:本条目未收录 HuggingFace 下载量、GitHub star 数等社区活跃度指标 —— 撰写期间对这些平台的访问受限,无法一手核验。按千方病案医数集的证据分级原则,未经核验的数字不予收录。相关存照见 FACTS.md §9。

关于更新:CheXpert Plus 若在未来发布新版本(如 v3 或增量扩充),本条目应相应更新,并在 §1.4 时间轴追加记录。读者若发现新版本发布,欢迎通过站内渠道反馈。



相关数据集导航

以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:

  • rexgradient-160k — 共享标签:医学影像 / X光影像 / 临床文本 / 影像-文本对齐
  • cxr-pro — 共享标签:医学影像 / 医疗NLP / 临床文本
  • ms-cxr-t — 共享标签:医学影像 / X光影像 / 医疗NLP / 影像-文本对齐
  • mimic-iv-note — 共享标签:医学影像 / X光影像 / 医疗NLP
  • swiss-mammo — 共享标签:医学影像 / 医疗NLP / 临床文本
  • rexerr — 共享标签:X光影像 / 医疗NLP / 临床文本
  • ms-cxr — 共享标签:医学影像 / X光影像 / 影像-文本对齐
  • reflacx-xray-localization — 共享标签:医学影像 / X光影像 / 医疗NLP
  • radvlm-instruction-dataset — 共享标签:医学影像 / X光影像 / 医疗NLP
  • radialog-instruct-dataset — 共享标签:医学影像 / X光影像 / 医疗NLP

导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

返回 AI-Ready 数据集