PMC-OA — 百万级生物医学图文对数据集 AI-Ready Wikipedia

165 万图文对,文献级生物医学多模态预训练语料,细粒度子图-子图注对齐

来源 上海交通大学 Cooperative Medianet Innovation Center / 上海人工智能实验室(数据托管于 HuggingFace) url: https://huggingface.co/datasets/axiong/pmc_oa发布时间: 2026-09-13最后更新: 2026-09-25 阅读 45
PMC-OA — 百万级生物医学图文对数据集 AI-Ready Wikipedia

信息速览

数据集名称PMC-OA — 百万级生物医学图文对数据集 AI-Ready Wikipedia
数据类型1,646,592 图文对,1,003,911 子图-子图注对齐对,381,096 复合图注级对,覆盖约 240 万篇 PMC 论文,JSONL + 图像压缩包,免费直接下载
规模不适用(文献挖掘图像,非患者队列,未按患者计数)
接入方式上海交通大学 Cooperative Medianet Innovation Center / 上海人工智能实验室(数据托管于 HuggingFace) url: https://huggingface.co/datasets/axiong/pmc_oa
AI 就绪度

数据集封面

PMC-OA — 百万级生物医学图文对数据集 AI-Ready Wikipedia


INFOBOX

字段 内容
数据集名称 PMC-OA(生物医学图文对数据集)
英文全称 PMC-OA: A Large-Scale Biomedical Figure-Caption Dataset(随 PMC-CLIP 论文发布)
别名/简称 PMC-OA-Beta(复合图注版本)、pmc_oa(HuggingFace 仓库名)
疾病分类(ICD-11) 多疾病谱覆盖,无单一归属;代表性编码见 §2.1(如 COVID-19 RA01、肺炎 CA40)
SNOMED CT 影像程序代表性映射见 §2.1b(如 CT 77477000)
数据模态 医学论文插图(CT/MRI/超声/病理/内镜/显微/示意图等)+ 英文图注文本
AI 任务类型 图文对比预训练、跨模态检索、零样本/微调图像分类、MedVQA 预训练语料
样本总数 1,646,592 图文对(其中 1,003,911 为子图-子图注细粒度对齐对)
数据大小 图像压缩包(images.zip)+ 2 个 JSONL 元数据文件(总体积达数十 GB 级,以官方页面为准)
数据格式 JPEG/PNG 图像 + JSONL(image/caption 两字段)
许可证 数据逐篇沿用 PMC 源文章 CC 许可(含 BY-ND/BY-SA 变体);官方代码 MIT License
访问级别 开放(HuggingFace 直接下载,无需注册申请)
DUO 标签 NRES(无限制)/ GRU(通用研究使用)
语言 英文(图注文本)
首发日期 2023-03-13(arXiv:2303.07240 随 PMC-CLIP 发布)
最后更新 2023-08-20(HuggingFace 加载脚本与配置更新)
发布机构 上海交通大学 Cooperative Medianet Innovation Center、上海人工智能实验室
官方主页 https://weixionglin.github.io/PMC-CLIP/
下载地址 https://huggingface.co/datasets/axiong/pmc_oa
DOI 10.48550/arXiv.2303.07240
引用次数 380+(Google Scholar,截至 2026-09)
AI 就绪度评分 ⭐⭐⭐(3/5)— 规模大、格式统一、有社区预训练权重可直接复用;但官方划分文件已从 README 移除、细粒度对齐仅 73% 准确率、需自行下载解压并对齐图像路径(扣分项)
页面状态 published

§0 E-E-A-T 审核与免责声明

  • 医学审核:千方病案医学编辑部交叉审核:§2 医学背景(ICD-11 与 SNOMED CT 映射、临床任务定义)、§7 偏倚分析(文献选择偏倚、性别分布、泛化性失效风险)。
  • 数据工程审核:[千方病案医学编辑部交叉审核] 医疗 AI 数据工程师,审核范围:§4 DAIMS 数据字典、§5 数据划分策略、§6 预处理 Pipeline 和坑点。
  • 审核日期:2026-09-05。

医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。

技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。

数据使用合规声明:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。PMC-OA 图像逐篇继承 PMC 源文章的 Creative Commons 许可(含 CC BY-ND、CC BY-SA 等限制性变体),官方代码仓库为 MIT License。使用者再分发图像或商用前须逐篇核查源文章许可条款。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。

证据优先级说明:本页所有规模、日期、许可与基准数字按以下优先级核实——① 官方论文(arXiv:2303.07240,MICCAI 2023)与项目主页;② HuggingFace 数据集卡片与加载脚本;③ 同行评审的第三方论文(PMC-VQA/Nature Communications Medicine、ROCOv2、Med-Flamingo、BiomedCLIP、BIOMEDICA)。无法核实的字段一律省略而非估算。动态信息标注"截至 2026-09"。

§1 数据集概览

§1.0 📌 30 秒速览

这是什么? PMC-OA 是一个包含 1,646,592 对"医学图片 + 描述文字"的数据集,全部素材自动挖掘自 PubMed Central(美国国立卫生研究院维护的开放获取生物医学文献库)中约 240 万篇论文的插图与图注。其中约 100 万对做到了"子图-子图注"级别的精细对齐——即把一张由 (a)(b)© 多面板拼成的复合图拆开,让每个小图精确对应到图注里描述它的那一句话。

为什么重要? 训练医学版 CLIP 这类"看图识字"模型,最大的瓶颈不是算法而是数据:临床影像受隐私保护难以共享,公开数据集往往只有几万到几十万对,且多局限于胸片单一模态。PMC-OA 把规模扩大到此前同类数据集的约 8 倍,并覆盖 CT、MRI、超声、病理、内镜等几乎全部诊断程序,让"文献级"预训练成为可能。它直接催生了 PMC-CLIP(MICCAI 2023),并被 Med-Flamingo、PMC-VQA 等后续里程碑工作沿用。

我能用它做什么? 典型用途包括:预训练生物医学图文对比模型(MedCLIP 类);医学图像-文本跨模态检索(用文字找图、用图找文字);为医学视觉问答(MedVQA)和医疗多模态大模型提供预训练语料;零样本或微调式医学图像分类。注意它不是患者队列,而是"文献插图百科",不能直接替代临床影像做部署级评估。

§1.1 技术摘要

PMC-OA 由上海交通大学与上海人工智能实验室团队(与 PMC-VQA、PMC-LLaMA 同一团队)于 2023 年发布,随 PMC-CLIP 论文(Lin et al., 2023)公开。构建管线完全自动化,分三个阶段:医学图收集——从 PMC 开放获取子集(截至 2022-09-16 覆盖 2,478,267 篇论文)抽取 12,211,907 个图-注对,先按 UMLS T060"Diagnostic Procedure"术语匹配图注关键词,再用 DocFigure 训练的 ResNet-101 分类器筛选,保留 381,096 张医学图;子图分离——人工抽检发现约 80% 为复合图,于是用 MedICaTSub(2,069 张手工分离复合图)训练 ResNet-34 骨干的 DETR 检测器(mAP@0.5 = 0.94),将复合图拆成 1,646,592 个子图;子图注分离与对齐——用图注分发器(caption distributor)将可拆分图注拆成 898,467 条子图注,再以 PMC-OA-Beta 预训练的 CLIP 模型经 MedICaTSub 微调后做子图-子图注匹配(对齐准确率 73%)。最终数据集由 642,681 个"子图-复合图注"对与 1,003,911 个"子图-子图注"对构成,共 1,646,592 对。团队同时用该数据预训练了 PMC-CLIP 模型,在 ROCO 检索、MedMNIST 分类与医学 VQA 上取得当时 SOTA。

整条管线最重要的设计判断有三个:第一,过滤发生在文本侧优先——图注中是否出现 UMLS 诊断程序术语比图像本身更可靠地指示"这是不是一张医学图",这使第一轮就能从 1,221 万对锐减到 38 万对;第二,复合图拆分被当作一等公民问题——团队没有回避"80% 医学插图是多面板"这一现实,而是用检测器+对齐器两级模型把它工程化,这是与 ROCO、MedICaT 等前作的本质区别;第三,质量自评内嵌于管线——检测器与对齐器都留有 held-out 测试集数字(0.94 与 73%),让使用者可以量化噪声预算。这三个判断使 PMC-OA 成为"文献挖掘类数据集"的方法学样板,其管线设计被 BiomedCLIP 的 PMC-Fine-Grained-46M 与 BIOMEDICA 先后继承改进。

§1.2 战略价值

维度一:规模与多样性的双重突破。 在 PMC-OA 之前,生物医学图文数据集普遍只有 7k-377k 对,且多数局限于胸片(如 MIMIC-CXR 377,110 对、CheXpert 224,316 对)。PMC-OA 以 1,646,592 对实现了约 8 倍的规模跃迁,并把模态覆盖从单一影像扩展到"从常见 CT、MRI 到罕见的有丝分裂图"的完整诊断程序谱系,疾病覆盖包括 COVID-19 等新发传染病。对资源有限的团队而言,它把"文献级预训练"的入场券从巨头实验室下放到了普通研究组。

维度二:细粒度对齐的开创性方法贡献。 医学论文中约 80% 的插图是复合图,"整图配整段图注"的粗放配对会给训练注入大量噪声。PMC-OA 是首个在百万量级上系统性解决"复合图拆分 + 子图注对齐"的公开数据集:DETR 检测器负责把面板切开,对比学习模型负责把每块面板连到图注中对应的那句话。这套"自动管线替代人工标注"的思路,直接影响了后续 BiomedCLIP 的 PMC-Fine-Grained-46M 管线与 BIOMEDICA(CVPR 2025)的分层标注体系,成为文献挖掘类数据集的方法范式。

维度三:生态位价值——PMC 系列的开山之作。 PMC-OA 是"PMC 系列"数据集群的第一块基石:PMC-VQA(22.7 万医学 VQA 对)取其第一阶段 381K 图注对生成问答;Med-Flamingo 用其中约 130 万对做继续预训练;微软 BiomedCLIP 的 PMC-15M(1,500 万对)是同源思路的规模化延伸。围绕它已形成"预训练语料 → VQA 指令数据 → 多模态大模型"的完整生态链,选型时可作为生物医学多模态预训练的事实标准起点。

§1.3 同类数据集横向对比

数据集 规模(图文对) 模态覆盖 对齐粒度 标注方式 与 PMC-OA 的差异
PMC-OA 1,646,592 全诊断程序谱系(CT/MRI/超声/病理/内镜等) 子图-子图注细粒度(1,003,911 对) 全自动管线 本体;对比学习对齐,73% 对齐准确率
ROCO 81,000 放射学为主 整图-图注 人工验证 早于 PMC-OA,无复合图拆分;PMC-OA 的检索评测基准
MedICaT 217,000 生物医学文献图 部分复合图手工分离 人工 + 自动 提供 2,069 张手工分离复合图,恰为 PMC-OA 拆分器的训练集
PMC-15M 15,000,000 全生物医学图像类型 整图-图注为主 全自动(PubMed Parser) 微软出品,规模更大但不做子图级对齐;BiomedCLIP 训练语料
BIOMEDICA 24,000,000 全生物医学图像类型 整图-图注 + 分层概念标注 聚类传播 + 7 名专家 2025 年发布,元数据最丰富(许可、章节、概念),可按需过滤子集
MIMIC-CXR 377,110 胸片 整图-报告 临床真实 真实临床文本但受隐私凭证保护;PMC-OA 免申请
PMC-VQA 226,946 VQA 对 复用 PMC-OA 第一阶段 381K 图 图-问答对 ChatGPT 生成 + 双模型过滤 同团队下游衍生,面向 MedVQA 指令微调

§1.4 版本时间轴

时间 版本/事件 说明
2023-03-13 arXiv:2303.07240 v1 PMC-CLIP 论文与 PMC-OA 数据集首次公开
2023 年 MICCAI 2023 接收 论文被国际医学图像计算会议接收
2023-05 PMC-VQA 发布(arXiv:2305.10415) 同团队基于 PMC-OA 第一阶段 381K 图注对构建 226,946 个 VQA 对
2023-08-20 HuggingFace 加载脚本更新 axiong/pmc_oa 仓库整理为 pmc_oa / pmc_oa_beta 双配置(Version 1.0.0),早期 train/valid/test.jsonl 划分文件从 README 移除
2023 年 Med-Flamingo(ML4H 2023) 采用官方公开划分(约 1.3M 训练 / 0.16M 评估)做继续预训练
2024-09 PMC-VQA 期刊版 Nature Communications Medicine(DOI 10.1038/s43856-024-00709-2)确认 PMC-OA 为其源数据
2025 年 BIOMEDICA(CVPR 2025) 在 PMC-OA 基础上以 24M 对 + 专家分层标注实现规模与元数据双重升级

§1.5 典型应用场景

  1. 医学图文对比预训练(MedCLIP 类):以 1,646,592 对做 InfoNCE 对比学习,产出可迁移的医学图像/文本编码器,再微调至具体任务。官方 PMC-CLIP 即此范式的参考实现。
  2. 跨模态检索:文献影像检索系统(“用一句话找出对应 CT 图”)或图像语义搜索,ROCO 检索基准可直接评测。
  3. MedVQA / 多模态大模型预训练语料:先在 PMC-OA 上做图文对齐预训练,再在 PMC-VQA 等指令数据上微调(MedVInT、Med-Flamingo 均为此路径)。
  4. 零样本/微调医学图像分类:用预训练编码器在 MedMNIST 等基准上做线性探测或全量微调,官方报告较从零训练 +3.9%。
  5. 图注辅助文献理解:构建"论文插图语义检索/插图摘要"工具,把复合图的子图-子图注映射用于文献挖掘下游。

五类场景的数据准备差异显著,选型时对号入座:

场景 推荐配置 最小可行数据量 关键预处理
对比预训练 pmc_oa(细粒度版)+ 对齐过滤 全量或 >500K 对 面板标记清洗、置信度过滤
跨模态检索 pmc_oa + 外部 ROCO 评测 全量编码器 归一化、FAISS 索引
MedVQA 语料 第一阶段 381K(经 PMC-VQA) 全量 381K 问答对由 PMC-VQA 管线生成
图像分类骨干 任意版本 + MedMNIST 微调 全量预训练 + 小样本微调 标准图像增强
文献理解工具 细粒度版(保留子图映射) 按需抽样 PMCID 反查源论文

§2 医学背景

§2.1 ICD-11 编码映射

PMC-OA 是全疾病谱文献数据集,不对应单一 ICD-11 类目。下表按图注中高频出现的疾病/场景给出代表性 ICD-11 映射(非穷尽,仅示覆盖广度):

疾病/场景类别 ICD-11 编码 ICD-11 中文名 在 PMC-OA 中的体现
新发传染病 RA01 COVID-19(新型冠状病毒病) 官方明确列出覆盖 COVID-19 相关影像与病理插图
呼吸系统感染 CA40 肺炎 胸片/CT 图注高频类别,涵盖细菌性、病毒性肺炎等
乳腺肿瘤 2C60 乳腺癌 钼靶、超声、病理切片插图常见主题
内分泌与代谢 5A11 2 型糖尿病 视网膜病变、糖尿病足等并发症插图
系统性影像检查 不适用 诊断程序类内容 数据集过滤关键词即 UMLS T060"Diagnostic Procedure",覆盖 CT/MRI/超声等程序而非病种

§2.1b SNOMED CT 映射

以数据集内代表性影像程序与检查类型做 SNOMED CT 概念映射(代表性示例):

检查/内容类型 SNOMED CT 码 英文术语 中文对应
CT 检查 77477000 Computed tomography (procedure) 计算机体层摄影
X 线摄影 399208008 Plain X-ray (procedure) 普通 X 线检查
超声检查 16310003 Ultrasonography (procedure) 超声成像
病理组织学检查 无单一映射 Histopathology 相关概念族 病理切片类插图对应组织病理学概念族

§2.2 医学内容背景与流行病学

PMC-OA 的"医学背景"即其文献母体——PubMed Central 开放获取子集。截至 2022-09-16,该子集覆盖 2,478,267 篇论文,PMC-OA 从中抽取 12,211,907 个图-注对,经筛选后仅约 3.1% 的图像被保留为生物医学图。这一母体决定了数据集的疾病谱结构:基础科学与综述类文章占比高(开放获取的天然偏倚),临床影像分布于肿瘤学、感染性疾病(含 COVID-19)、心血管、消化、神经等主要系统。项目主页给出的统计显示:诊断程序覆盖从常见的 CT、MRI 到罕见的有丝分裂图(mitotic figure);受试者性别分布约 54% 男性,整体近似均衡。需要注意,PMC-OA 中的"患者"是文献插图中的受试者,同一患者可能出现在多篇论文插图中,数据集不提供患者级去重信息。

从漏斗视角理解疾病谱的形成过程:

漏斗层级 数量 筛选机制 对疾病谱的影响
PMC 开放获取子集 2,478,267 篇论文 NIH/NLM 收录政策 开放期刊的学科构成 = 基础科学偏重
图-注对抽取 12,211,907 对 版面解析 补充材料图一并进入
关键词过滤 + 分类 381,096 医学图(保留率 3.1%) UMLS T060 + ResNet-101 Top4 淘汰纯实验图表类内容
子图拆分后 1,646,592 对 DETR + 对齐模型 单张复合图放大为多个面板级样本

每一层筛选都是一次"分布塑形":最终数据集的疾病谱既不是 PMC 文献的疾病谱,更不是临床就诊的疾病谱,而是**"开放获取文献中愿意配图展示的诊断内容"的疾病谱**。使用任何基于模态/疾病比例的结论前,务必回看这张漏斗表。

§2.3 临床任务定义

PMC-OA 服务于四类 AI 任务而非直接的临床诊断任务:

  1. 图文对比预训练:将图像编码器与文本编码器拉入同一语义空间(InfoNCE 损失),使"图 A"与"描述 A 的那句话"相似度最高。这是所有下游任务的基础。
  2. 跨模态检索:给定文本查询返回最相关图像(T2I)或反之(I2T),评价指标为 Recall@K。对应真实场景为"文献影像检索"“教学病例检索”。
  3. 医学图像分类:以预训练编码器为骨干,微调或线性探测至具体分类任务(如 MedMNIST 系列的肺炎、乳腺癌、皮肤病变分类)。对应筛查/分诊类临床场景。
  4. 医学视觉问答(MedVQA):以 PMC-OA 为预训练语料,配合问答指令数据微调生成式模型,回答关于医学图像的临床问题。对应辅助诊断教育、报告问答场景。

上述任务的"金标准"属性均为弱监督自动生成(图注即标签),非人工临床标注,详见 §2.6。

§2.4 数据来源人群表

维度 说明
来源 PubMed Central 开放获取子集(NIH/NLM 维护),截至 2022-09-16 覆盖 2,478,267 篇论文
时间跨度 PMC 收录的开放获取文献(数据抽取时点为 2022-09-16)
受试者 文献插图中的受试者,约 54% 男性(近似性别均衡)
年龄/种族分布 项目主页展示跨年龄性别比统计图,但未公开逐层比例数字
就医类型 不适用(文献图像,非前瞻性队列)
特殊说明 文献插图常选取"典型病例"并辅以箭头等标注,比临床真实场景更"干净"

§2.5 临床价值定位

PMC-OA 的临床价值是间接的、基础设施性的。它不直接输出诊断,而是为下游临床 AI 提供预训练底座:其一,在标注稀缺的临床亚专科(如罕见病影像),文献预训练编码器可显著降低微调所需的标注量;其二,图文对齐能力支撑"影像-报告"类系统的语言侧理解;其三,作为免隐私申请的公开语料,它是教学系统、检索原型与算法对比实验的理想载体。但必须强调:文献插图与临床影像存在系统性分布差异(选择偏倚、标注箭头、典型化裁剪),基于 PMC-OA 的模型在进入临床前必须经过真实临床数据的外部验证(见 §7.3、§7.8)。

按受益的临床角色进一步拆解:

临床角色 受益方式 前提与边界
放射/病理科研究者 以文献预训练权重热启动,减少标注需求 需本院数据微调与验证
医学教育者 构建"图文互查"教学检索工具 内容为文献插图,非系统化课程
医疗 NLP 工程师 为报告生成/影像问答提供预训练底座 图注非临床报告,语言风格需适配
数据科学家 零隐私负担地复现/对比多模态算法 遵守源文章许可(§6.5 坑点 7)
医院信息科 内网文献影像检索原型 部署前评估文献-院内分布落差

§2.6 金标准参考表

项目 内容
标签性质 弱监督自动生成:图注文本即"标签",无人工疾病标注
标注方式 三段自动管线:UMLS 关键词过滤 + ResNet-101 分类 + DETR 拆分 + 对比学习对齐
标注者资质 无人工标注者;管线训练依赖 MedICaTSub(2,069 张手工分离复合图,MedICaT 团队人工制作)与 DocFigure(28 类科学图分类基准)
一致性评估 子图检测 mAP@0.5 = 0.94(precision 0.93 / recall 0.94,阈值 0.7);子图-子图注对齐准确率 73%(3:1 划分测试集)
与人工金标准的差距 对齐错误率约 27%,且无逐对人工核查;下游使用建议做抽样质检(见 §6.5 坑点 1)

§3 数据集规格

§3.0 版本抉择矩阵

你的需求 推荐版本 获取入口 理由
CLIP 类对比预训练(追求最干净监督) pmc_oa(图注已拆分) axiong/pmc_oa 的 pmc_oa.jsonl 复合图注经 ChatGPT 辅助分发器拆分,子图-子图注细粒度对应,噪声更低
复现官方 PMC-CLIP / 需要完整复合图注语义 pmc_oa_beta(保留复合图注) 同仓库 pmc_oa_beta.jsonl 图注不拆分,保持"一注对多子图"的原生结构,与官方预训练设置一致
快速调试 / 网页预览样本 pmc_oa_demo(抽样子集) axiong/pmc_oa_demo 百万行数据会使 HF 查看器失效,官方提供的演示子集可直接在网页浏览
医学 VQA 指令微调 PMC-OA 第一阶段 381K 图注对 经 PMC-VQA 间接使用 PMC-VQA 论文刻意选用未拆分的第一阶段版本以保持问答复杂度
极致规模、不要求子图级对齐 PMC-15M(同源扩展) BiomedCLIP 官方脚本 1,500 万对整图-图注,微软维护、含复现脚本

§3.1 模态详情

PMC-OA 的图像全部来自论文插图(figure),而非 DICOM 原始影像。模态构成由"图注关键词(UMLS T060 诊断程序术语)+ 分类器"双重过滤决定:

  • 放射学影像:CT、MRI、X 线、超声、PET/CT 等常见程序,为数据集主体;
  • 病理与显微图像:H&E 染色切片、免疫组化、显微镜图、有丝分裂图(罕见诊断程序代表);
  • 内镜与其他临床影像:消化内镜、眼底照相等;
  • 非影像医学图:经第二轮分类过滤后仍可能残留少量示意图、流程图类医学插图(Top4 类别约束下的允许范围)。

文本侧为英文图注(caption),长度从一句话到复合图注的数百词不等。官方统计以诊断程序与疾病发现两棵树状图呈现覆盖广度,未公开逐模态精确配比数字,故本页不列具体百分比。

从"诊断程序覆盖"角度,官方明确列举了两端代表:

覆盖维度 常见端 罕见端 官方说明
诊断程序 CT、MRI 有丝分裂图(mitotic figure) 项目主页:覆盖从常见到罕见,比以往数据集更多样
疾病与发现 常见慢性病、肿瘤影像 COVID-19(发布时的新发疾病) 项目主页:内容更新、覆盖新发疾病
受试者性别 男性约 54% —— 项目主页:跨年龄层近似性别均衡
数据时点 截至 2022-09-16 抽取 —— 论文 §2.1:快照发布,不随 PMC 增量更新

与临床影像数据的模态语义差异需要注意:论文插图中的"CT 图"是经过作者挑选、裁剪、加注的排版产物,可能叠加箭头、圆圈、字母面板标记;而临床 CT 数据(如 LIDC-IDRI)是完整断层序列。因此 PMC-OA 学到的"CT 概念"是插图级而非序列级,做序列级任务(如 3D 分割)时不能直接迁移。

§3.2 按子集样本数表

子集 对数 构成说明
子图-子图注对(细粒度) 1,003,911 239,905 个可拆分图注拆出 898,467 条子图注,经对比模型与子图对齐
子图-复合图注对(未拆分图注) 642,681 对应拆分失败或保持复合状态的图注
PMC-OA 合计 1,646,592 = 1,003,911 + 642,681
其中:PMC-OA-Beta 口径 1,646,592 子图 378,717 张复合图拆出,每图注平均对应 4.3 个子图
参照:第一阶段医学图 381,096 未做子图拆分的整图-图注对(PMC-VQA 采用此版本)

§3.3 数据格式表

组成 格式 说明
图像文件 JPEG/PNG(打包于 images.zip) 文件名形如 PMC212319_Fig3_4.jpg,前缀为源论文 PMCID
元数据(pmc_oa 配置) JSONL(pmc_oa.jsonl) 每行 {"image": ..., "caption": ...},图注已拆分
元数据(pmc_oa_beta 配置) JSONL(pmc_oa_beta.jsonl) 每行同构,图注保留复合形态
加载脚本 pmc_oa.py(HuggingFace datasets) Version 1.0.0,2023-08-20 更新;PR 分支含 alignment_type/alignment_score 字段(未进主干)

§3.4 存储大小

官方仓库未在数据卡片标注 images.zip 的确切压缩体积(以 HuggingFace 文件页 实测为准)。经验量级为:160 余万张论文插图解压后占据数十 GB 级磁盘;两个 JSONL 元数据文件合计在 GB 级以下。规划存储时建议预留 100 GB 以上工作空间,并注意 PMC-15M 等更大规模同源数据集的需求(30 TB 级的完整 PMC FTP 镜像属于另一个量级,勿混淆)。

§3.5 标注方式

PMC-OA 完全依赖自动弱监督标注,无逐对人工标注:

  1. 关键词级标注(元数据级):图注按 UMLS T060"Diagnostic Procedure"术语集做布尔匹配,匹配失败即剔除——这是"是否为诊断相关图"的第一道判据;
  2. 分类器级标注:DocFigure 训练的 ResNet-101 将图像分为 28 类,仅保留"Medical"类预测得分 Top4 的图像,第二轮(子图级)复用同一分类器;
  3. 检测器级标注:DETR(ResNet-34 骨干)输出复合图内各面板的边界框,实现"子图"切分;
  4. 对齐级标注:CLIP 式模型(PMC-OA-Beta 预训练 + MedICaTSub 微调)为每个子图在子图注集合中选配语义最近的一条。

其中唯一的人工参与是上游 MedICaTSub 的 2,069 张手工分离复合图(来自 MedICaT 数据集),以及官方抽检约 300 张图得出的"约 80% 为复合图"经验估计。

四级标注的质量预算一览:

标注级 自动化组件 质量锚点 残余误差去向
关键词级 UMLS T060 术语匹配 无公开逐级数字(整体保留率 3.1%) 图注缺关键词的医学图被漏掉
分类器级 ResNet-101(DocFigure 28 类) 同上 Top4 阈值外的边界样本
检测器级 ResNet-34 DETR mAP@0.5 = 0.94;P 0.93 / R 0.94(阈值 0.7) 漏检面板并入邻板、误检切割
对齐级 PMC-OA-Beta 预训练 CLIP + MedICaTSub 微调 对齐准确率 73% 约 27% 细粒度对文本错位

由此可得全链路的噪声预算直觉:每一步都是"大概率正确"的自动决策,但四级串联后单条记录完全无误的比例必然低于任何单级准确率。这就是 §6.5 坑点 1 建议做置信度过滤的原因,也是"PMC-OA 适合预训练、不适合当评测金标准"的量化根据。

§3.6 标注者资质与一致性

无逐对人工标注者,故无标注者间一致性(IAA)指标。质量锚点为两个自动指标:子图检测 mAP@0.5 = 0.94(以 MedICaTSub 3:1 划分测试),子图-子图注对齐准确率 73%(同一划分方式)。两个数字都意味着数据并非无噪声:检测器漏检/误检约 6-7%,对齐错误约 27%。这是本数据集区别于人工标注数据集(如 VQA-RAD 有医生标注)的根本特征,使用策略必须内建噪声容忍(见 §6.5、§7.2)。

§3.7 采集周期

数据抽取于 2023 年初完成,上游快照时点为 2022-09-16(该日 PMC 开放获取子集覆盖 2,478,267 篇论文、12,211,907 个图-注对)。数据集为一次性快照,官方未提供随 PMC 更新的持续增量维护。

§3.8 地域与语言覆盖

数据来自全球投稿至开放获取期刊的生物医学文献,无地域限制(spatialCoverage 为全球文献库);文本语言为英文。期刊学科分布决定基础医学与转化研究内容占比偏高,纯临床(尤其非英语地区临床)内容相对不足。

§3.9 图像技术规格

  • 图像类型:论文排版用插图(位图导出),非 DICOM/原始影像,无医学影像元数据(窗宽窗位、层厚、设备型号等一概缺失);
  • 分辨率:随源论文排版质量浮动,无统一下限;官方 Model Zoo 提供的社区 ViT-L-14 权重与 CLIP 类用法通常按 224×224 或更高中心裁剪处理;
  • 复合图占比:约 80%(官方抽检估计),子图切分后单条记录对应一个面板。

§3.10 深度溯源链

层级 溯源信息
顶层来源 PubMed Central Open Access Subset(NIH/NLM)
论文级 图像文件名前缀 PMCID(如 PMC212319_...),可反查源论文
图级 文件名内嵌图序号(如 Fig3)与子图序号(如 _4)
对齐级 细粒度对由对比模型自动分配,主干文件未显式存储对齐得分(PR 分支字段可参考)
许可级 数据集卡片未逐篇标注源文章许可;ROCOv2 论文证实其中含 CC BY-ND / CC BY-SA 许可图像

§4 数据结构

§4.0 目录树

数据解压后的典型本地组织如下(目录名为社区惯例,JSONL 与图像包均来自官方仓库):

pmc_oa/
├── images.zip                        # 官方图像压缩包(下载后解压)
│   └── images/
│       ├── PMC212319_Fig3_4.jpg      # 文件名 = {PMCID}_{FigN}_{子图序}.jpg
│       ├── PMC212319_Fig3.jpg        # 未拆分/单面板图
│       └── ...
├── pmc_oa.jsonl                      # 细粒度对齐版(图注已拆分)
├── pmc_oa_beta.jsonl                 # 复合图注版(图注未拆分)
└── pmc_oa.py                         # 官方 HuggingFace datasets 加载脚本

JSONL 单行样例(来自官方 README):

{"image": "PMC212319_Fig3_4.jpg", "caption": "A. Real time image of the translocation of ARF1-GFP to the plasma membrane ..."}

§4.1 DAIMS 字段字典

字段 类型 说明 示例值 AI 用途 观测误差 信息性缺失编码 取值范围
image string 图像相对路径(含 PMCID 与图/子图序号) PMC212319_Fig3_4.jpg 定位图像文件;解析 PMCID 做论文级分组 拆分器可能把多面板残留为单文件 无缺失(路径即主键) `PMC\d+Fig\d+(\d+)?.(jpg\
caption string 与该图配对的图注文本(英文) A. Real time image of the translocation of ARF1-GFP... 对比学习文本侧;检索查询;报告生成参考 约 27% 细粒度对存在错配(对齐准确率 73%) 无 自由文本,一句话至数百词
(派生)pmcid string 从 image 文件名解析的论文标识 PMC212319 论文级去重/分组划分,防泄漏 解析规则依赖命名稳定性 无 PMC\d+
(派生)panel_idx int 文件名末尾子图序号(无后缀则为 0) 4 复合图内子图计数、面板级分析 仅对拆分图有效 无后缀=0 ≥0
(派生)is_compound_caption bool caption 是否仍为复合图注(含 A./B. 等面板标记) true 过滤文本噪声;区分两种监督粒度 启发式判断可能误判 无
(PR 分支)alignment_type string 对齐类型标记(未进主干,见加载脚本 PR) - 质量分层训练 字段定义未在主干文档化 无 文档缺失
(PR 分支)alignment_score float 对齐相似度得分(未进主干) - 低置信对过滤 同上 无 文档缺失

§4.2 标签分布

PMC-OA 无结构化标签列,分布信息来自官方统计图(论文图 1 与项目主页):

  • 诊断程序:从常见(CT、MRI)到罕见(有丝分裂图)全覆盖,呈长尾分布;官方以树状图展示但未公开逐类精确计数;
  • 疾病与发现:覆盖主要系统疾病,官方明确列出 COVID-19 为已覆盖的新发疾病;
  • 受试者性别:约 54% 男性,跨年龄层近似均衡;
  • 对齐类型比例:1,003,911(61%)细粒度对 vs 642,681(39%)复合图注对,这是唯一有精确数字的"分布"。

§4.3 关键统计

统计项 数值 来源
图文对总数 1,646,592 论文 §2.1
子图-子图注细粒度对 1,003,911 论文 §2.1
子图-复合图注对 642,681 论文 §2.1
源复合图数 378,717 论文 §2.1
第一阶段医学图 381,096 论文 §2.1
上游图-注对(PMC 全量) 12,211,907 论文 §2.1(截至 2022-09-16)
上游论文数 2,478,267 论文 §2.1
平均每图注对应子图数 4.3 论文 §2.1
子图检测 mAP@0.5 0.94 论文 §2.1
子图-子图注对齐准确率 73% 论文 §2.1
男性占比 约 54% 项目主页

§4.4 数据层级

PMC-OA 的自然层级为论文 → 复合图 → 子图 → 对:

论文(PMCID,如 PMC212319)
└── 复合图(Fig3,381,096 张之一)
    ├── 子图 _1 ── 子图注 A(细粒度对 1,003,911 之一)
    ├── 子图 _2 ── 子图注 B
    └── 子图 _3 ── 复合图注整体(粗粒度对 642,681 之一)

注意:层级关系在发布文件中未被显式保留——同一复合图的子图在 JSONL 中是彼此独立的平行记录,只能靠文件名前缀(PMCID + FigN)重新聚合。这一设计对划分策略有直接影响(见 §5.3)。

§4.5 缺失值与信息性缺失编码

  • 数据集不设信息性缺失编码体系:无 NaN 哨兵值、无"未标注"标记列;
  • 主干字段(image/caption)为非空结构,缺失主要表现为语义层面:对齐错误(文本描述的并非图中内容)、复合图注残留在细粒度对中、非医学子图未被完全过滤;
  • 主干未提供逐对置信度。若需质量分层,可自行用 CLIP 式模型重算图文相似度,或关注加载脚本 PR 分支中的 alignment_score 字段(文档化程度低,采用需自担风险)。

语义层"缺失"的三类检测起点:

缺失形态 直观表现 低成本检测方法
图文错配 caption 描述 (a) 而图为 (b) CLIP 相似度分位数过滤(坑点 1)
面板残留 caption 仍含多面板句子 面板标记计数 > 1 的记录抽检
非医学残留 图为凝胶图/流程图 DocFigure 类别模型重打分(坑点 6)

§5 数据划分与使用建议

§5.1 官方划分现状

早期 README 曾列出 train/valid/test.jsonl 三个划分文件,但在 2023-08-20 的仓库整理中已被移除(官方 README 中以删除线标注)。当前官方发布不携带预定义划分,pmc_oa 与 pmc_oa_beta 两个配置均只输出 TRAIN 单一 split。

§5.2 社区惯例划分

学界沿用的事实标准来自官方早期公开划分:约 1.3M 对训练 / 0.16M 对评估(Med-Flamingo, ML4H 2023 明确采用该 public split 复现)。若需与历史文献对比,建议按此口径并在论文中注明。PMC-CLIP 官方代码中另含 --test-2000 评测入口,用于其论文实验设置。

§5.3 泄漏风险与划分策略建议 ⭐

这是 PMC-OA 使用中最重要的工程决策:

  1. 一对多重复:PMC-OA-Beta 口径下每图注平均对应 4.3 个子图;即便在细粒度版中,同一图注拆出的多条子图注也共享上下文。若随机打散划分,"同一复合图的兄弟子图"会分居训练/评估两侧,模型可凭版式与配色捷径作答,检索与分类指标系统性虚高。
  2. 建议策略:以文件名解析出的 PMCID(论文级)为单位分组划分,确保同一论文的所有图/子图只出现在一侧;进一步可在论文级内再做复合图(FigN)级分组。分组划分后指标绝对值会下降,但更接近真实泛化能力。
  3. 对照参考:Med-Flamingo 团队在下游 MedVQA 评测中实测发现 VQA-RAD 官方划分存在严重数据泄漏(同患者/同图像跨侧),并因此弃用官方划分做对比——文献类图文数据的"划分卫生"必须当作一等公民对待。

§5.4 交叉验证建议

百万量级下全量 K 折代价过高。推荐:固定训练集,从评估侧抽 5×2,000 对做 5 折Bootstrap;或仅在抽样子集(如 100K)上做 K 折超参搜索,再一次性上全量。

§5.5 使用角色与任务适配矩阵

使用者 推荐子集 必做动作 明确不建议
预训练研究者 pmc_oa 细粒度版 对齐过滤 + 论文级划分 直接全量裸训后报 SOTA
复现党 pmc_oa_beta + 官方代码 按 PMC-CLIP 原设置 混用两版本对齐口径
VQA 玩家 PMC-VQA(经 PMC-OA 381K) 用其官方指令集 自己从 PMC-OA 重复造问答
教学演示 axiong/pmc_oa_demo 网页浏览或小样本下载 下载全量图包占用存储
产品团队 任意版本 + 许可审计 逐篇许可白名单(坑点 7) 整体再分发衍生数据集
综述/基准作者 外部基准链路 声明零样本/微调口径(坑点 8) 跨协议数字同表排名

§5.6 外部验证建议

目标场景 推荐外部数据 说明
放射学检索 ROCO(81k) PMC-OA 不含 ROCO 数据,官方检索成绩即外部验证性质
胸片分类 CheXpert / MIMIC-CXR 真实临床分布对照文献分布,检验选择偏倚影响
病理分类 NCT-CRC-HE-100K / PatchCamelyon 文献病理插图 → 临床病理全片的质量落差评估
医学 VQA VQA-RAD / SLAKE 注意 VQA-RAD 官方划分已知存在泄漏,建议用其清洗划分复测

§6 AI 就绪指南 ⭐

§6.0 云端快速启动

HuggingFace 托管即开即用,无需特殊云端凭证:

# 依赖:python >= 3.8, datasets, huggingface_hub
pip install "datasets" "huggingface_hub[cli]"

# 元数据先下(小),图像包后下(大)
hf download axiong/pmc_oa --repo-type dataset \
  --include "pmc_oa.jsonl" "pmc_oa_beta.jsonl" "pmc_oa.py" --local-dir ./pmc_oa
hf download axiong/pmc_oa --repo-type dataset \
  --include "images.zip" --local-dir ./pmc_oa
unzip ./pmc_oa/images.zip -d ./pmc_oa

§6.1 快速上手:加载与首条样本

代码块的目录结构假设:你已按 §6.0 把仓库内容下到 ./pmc_oa/,并把 images.zip 解压为 ./pmc_oa/images/。data_root 拼接关系:JSONL 中 image 字段是相对路径(如 PMC212319_Fig3_4.jpg),需与解压后的图像目录拼接成完整路径。最小可用子集:先只下载 pmc_oa.jsonl(不下载图像)即可完成元数据分析与文本侧实验;图像侧实验必须等 images.zip 解压完成。

import json, os
from PIL import Image

# 目录预期:
#   ./pmc_oa/pmc_oa.jsonl        ← 细粒度对齐版元数据
#   ./pmc_oa/images/             ← 解压后的图像目录
# data_root 拼接关系:full_path = os.path.join(image_dir, row["image"])
DATA_ROOT = "./pmc_oa"
IMAGE_DIR = os.path.join(DATA_ROOT, "images")

rows = []
with open(os.path.join(DATA_ROOT, "pmc_oa.jsonl"), "r", encoding="utf-8") as f:
    for line in f:                      # 百万行文件,建议流式读取
        rows.append(json.loads(line))
        if len(rows) >= 5:
            break

for row in rows:
    img_path = os.path.join(IMAGE_DIR, row["image"])
    img = Image.open(img_path).convert("RGB")
    print(row["image"], "|", row["caption"][:60], "| size:", img.size)

§6.2 数据获取

渠道 地址 内容 申请流程
HuggingFace(主渠道) axiong/pmc_oa images.zip + pmc_oa.jsonl + pmc_oa_beta.jsonl + 加载脚本 无需注册申请,直接下载
HuggingFace 预览子集 axiong/pmc_oa_demo 抽样演示数据 网页直接浏览
早期镜像 axiong/pmc_oa_beta Beta 配置独立仓库(历史) 直接下载
项目主页 weixionglin.github.io/PMC-CLIP 统计图、管线说明、结果表 网页浏览
代码仓库 WeixiongLin/PMC-CLIP 训练/评测代码(MIT) 直接克隆
# 方式一:命令行整仓下载(约数十 GB,耐心等待)
hf download axiong/pmc_oa --repo-type dataset --local-dir ./pmc_oa

# 方式二:datasets 自动加载(首次运行会下载全部文件)
from datasets import load_dataset
ds = load_dataset("axiong/pmc_oa", "pmc_oa_beta", trust_remote_code=True)
print(ds["train"][0])

大文件下载的实操建议:

  1. 先元数据后图像:JSONL 只有 GB 级以下,先下载并完成全部元数据分析(统计、清洗、划分设计);images.zip 确认磁盘充裕后再拉取;
  2. 断点续传:hf download 自带断点续传,失败重跑同一命令即可,不要手动删除已下载的临时目录;
  3. 校验完整性:解压后抽查若干 JSONL 记录对应的图像文件是否都存在(§6.3 的 is_valid_image 全量校验更稳);
  4. 磁盘余量:解压会产生与压缩包同量级的文件,预留至少两倍于压缩包的空间。

§6.3 预处理全流程

从原始 JSONL 到训练就绪的三步:清洗(去重、面板标记处理)→ 标准化(图像尺寸与归一化)→ 质量分层(可选,重算图文相似度)。

import json, re, os
from PIL import Image

# ── 第 1 步:清洗 ────────────────────────────────────────────────
# 坑点背景(§6.5 坑点 2/6):
#  1) 细粒度版 caption 可能残留 "A." "B." 等面板标记;
#  2) 同一图注可能对应多个子图,需按 PMCID+FigN 聚合做论文级划分。
PANEL_MARK = re.compile(r"^\s*\(?[A-J][.)]\s+")   # 匹配 "(A) " / "A. " 开头

def clean_caption(text: str) -> str:
    text = text.strip()
    text = PANEL_MARK.sub("", text)               # 去面板标记(保守做法:仅去行首)
    text = re.sub(r"\s+", " ", text)
    return text

def parse_pid(fname: str) -> str:
    return fname.split("_")[0]                    # "PMC212319_Fig3_4.jpg" -> "PMC212319"

records, seen = [], set()
with open("./pmc_oa/pmc_oa.jsonl", "r", encoding="utf-8") as f:
    for line in f:
        r = json.loads(line)
        if r["image"] in seen:                    # 精确重复行过滤
            continue
        seen.add(r["image"])
        records.append({
            "image": r["image"],
            "caption": clean_caption(r["caption"]),
            "pmcid": parse_pid(r["image"]),
        })

# ── 第 2 步:图像校验 + 标准化(Transform 阶段处理更佳,此处先剔除坏图) ──
def is_valid_image(path: str) -> bool:
    try:
        with Image.open(path) as im:
            im.verify()                           # 只读头信息,开销低
        return True
    except Exception:
        return False

records = [r for r in records
           if is_valid_image(os.path.join("./pmc_oa/images", r["image"]))]

# ── 第 3 步:论文级划分(防泄漏,见 §5.3) ──────────────────────
import hashlib
def bucket(pmcid: str, n_buckets: int = 100) -> int:
    return int(hashlib.md5(pmcid.encode()).hexdigest(), 16) % n_buckets

train = [r for r in records if bucket(r["pmcid"]) < 90]   # 论文级 90/10 划分
eval_  = [r for r in records if bucket(r["pmcid"]) >= 90]
print(f"train={len(train)}, eval={len(eval_)}")

with open("./pmc_oa/train_clean.jsonl", "w", encoding="utf-8") as f:
    f.writelines(json.dumps(r) + "\n" for r in train)
with open("./pmc_oa/eval_clean.jsonl", "w", encoding="utf-8") as f:
    f.writelines(json.dumps(r) + "\n" for r in eval_)

§6.4 PyTorch DataLoader 完整代码

CLIP 式双塔训练的最小可运行数据管线(Dataset 类 + transform + DataLoader 实例化):

import json, os
import torch
from PIL import Image
from torch.utils.data import Dataset, DataLoader
from torchvision import transforms

class PMCOADataset(Dataset):
    """PMC-OA 图文对数据集(CLIP 风格)。

    目录预期:
        root/
          images/            ← 解压后的图像目录
          train_clean.jsonl  ← §6.3 产出的清洗后元数据
    """
    def __init__(self, root: str, split: str = "train", image_size: int = 224):
        self.image_dir = os.path.join(root, "images")
        path = os.path.join(root, f"{split}_clean.jsonl")
        self.rows = [json.loads(l) for l in open(path, encoding="utf-8")]

        # CLIP 惯用增强:训练随机裁剪+翻转;评估中心裁剪
        if split == "train":
            self.tf = transforms.Compose([
                transforms.RandomResizedCrop(image_size, scale=(0.8, 1.0)),
                transforms.RandomHorizontalFlip(),
                transforms.ToTensor(),
                transforms.Normalize(mean=[0.485, 0.456, 0.406],
                                     std=[0.229, 0.224, 0.225]),
            ])
        else:
            self.tf = transforms.Compose([
                transforms.Resize(int(image_size * 1.14)),
                transforms.CenterCrop(image_size),
                transforms.ToTensor(),
                transforms.Normalize(mean=[0.485, 0.456, 0.406],
                                     std=[0.229, 0.224, 0.225]),
            ])

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

    def __getitem__(self, idx):
        r = self.rows[idx]
        img = Image.open(os.path.join(self.image_dir, r["image"])).convert("RGB")
        return {"image": self.tf(img), "text": r["caption"]}

def collate_fn(batch):
    # 文本 tokenize 需对接你的文本编码器(如 HuggingFace tokenizer)
    return {
        "image": torch.stack([b["image"] for b in batch]),
        "text": [b["text"] for b in batch],
    }

ds = PMCOADataset(root="./pmc_oa", split="train")
loader = DataLoader(ds, batch_size=256, shuffle=True,
                    num_workers=8, pin_memory=True, collate_fn=collate_fn,
                    persistent_workers=True, drop_last=True)

for step, batch in enumerate(loader):
    images, texts = batch["image"], batch["text"]   # 送入双塔模型
    if step >= 2:
        break

评估侧 DataLoader 的两点差异(完整对比训练管线):

# 1) 划分文件换成 eval_clean.jsonl(§6.3 产出),关闭 shuffle
eval_ds = PMCOADataset(root="./pmc_oa", split="eval")
eval_loader = DataLoader(eval_ds, batch_size=512, shuffle=False,
                         num_workers=8, pin_memory=True, collate_fn=collate_fn)

# 2) 抽特征后再算 R@K(§6.9),而非逐 batch 算指标——
#    检索的候选库是"整个评估集",必须先离线抽取全部特征:
#    img_feats = torch.cat([model.encode_image(b["image"]).cpu() for b in eval_loader])
#    txt_feats = torch.cat([model.encode_text(b["text"]).cpu() for b in eval_loader])

性能调优速查:

瓶颈 症状 处置
图像解码 I/O GPU 利用率忽高忽低 num_workers 提至 CPU 核数;图像预先统一 resize 落盘
tokenizer 卡顿 collate 阶段 CPU 100% 预 tokenize 离线存盘,Dataset 直接返回 token id
batch 过小 对比学习收敛慢 梯度累积(如 8×32 模拟 256);或用大显存卡
worker 崩溃 分段错误 检查损坏图像(§6.3 第 2 步);限制 PIL 线程

§6.5 坑点 8 个

⚠️ 坑点 1:细粒度对齐约 27% 错配——“细粒度对"不等于"正确对”(分类:标签理解)

问题:子图-子图注对齐由对比模型自动完成,官方测试集准确率为 73%,意味着约四分之一的细粒度对的文本描述与图像内容错位。直接把细粒度版当"干净监督"训练,会向模型注入系统性图文噪声,尤伤害检索与零样本迁移。
症状:训练收敛后检索 R@K 远低于官方同类报告;抽查样本发现 caption 描述的是 (b) 面板而图像是 (a) 面板;文本侧模型"背下"高频模板句而非理解图像。
解决:

  1. 简单方法:抽样质检——随机抽 500-1,000 对人工核查对齐正确率,按此估计噪声率决定是否使用细粒度版;
  2. 进阶方法:用现成 CLIP 模型(如官方 PMC-CLIP 权重)给每对重算图文余弦相似度,过滤低分位(如底部 20%)样本后再训练;
  3. SOTA 方法:置信度分层训练——高置信对全程参与,低置信对降权或仅用于后期 epoch;或借鉴 BIOMEDICA 的概念级过滤思路做语义一致性校验。
    参考:Lin et al., 2023(论文自述对齐准确率与 limitation)

⚠️ 坑点 2:面板标记残留——caption 开头的 “(A)”/“B.” 是切分残渣(分类:预处理陷阱)

问题:图注分发器按面板标记切分图注,但切分边界不完美,细粒度对的 caption 常以 "(A) "、“B.” 等标记开头,或仍含其他面板的句子片段。这些残渣会被 tokenizer 编码为无语义 token,浪费文本容量并干扰对比学习。
症状:高频 token 面板字母(A-J)占据词表头部;t-SNE 可视化时文本簇按面板字母而非语义聚团。
解决:

  1. 简单方法:正则去行首面板标记(见 §6.3 的 PANEL_MARK);
  2. 进阶方法:按句号+标记双重规则全句级清洗,并对超短(<5 词)caption 丢弃;
  3. SOTA 方法:干脆改用 Beta 版复合图注,用图注内句级对齐工具重建切分,或用 LLM 重写规范化图注。
    参考:axiong/pmc_oa README(PMC-OA 与 PMC-OA-Beta 的图注处理差异)

⚠️ 坑点 3:一对多映射与兄弟子图泄漏——随机划分会虚高指标(分类:数据泄漏)

问题:同一复合图拆出的兄弟子图高度相似(同配色、同版式),且部分子图共享同一(未拆干净的)图注。随机打散划分会让"近重复样本"分居训练/评估两侧,检索与分类指标系统性虚高,外部数据上性能骤降。
症状:随机划分的 R@10 比论文级分组划分高出明显一截;模型对"同论文不同面板"样本给出接近满分,对其他论文同类影像则显著掉分。
解决:

  1. 简单方法:从 image 文件名解析 PMCID,按论文级哈希分桶划分(见 §6.3 第 3 步);
  2. 进阶方法:论文级 + 复合图级(FigN)两级分组;评估前对评估集做图像感知哈希(pHash)近重复扫描;
  3. SOTA 方法:按 PMCID 分组外,再在文本侧做 MinHash/TF-IDF 近重复图注聚类,跨簇划分。
    参考:Med-Flamingo(ML4H 2023)实测 VQA-RAD 官方划分严重泄漏的教训

⚠️ 坑点 4:官方划分文件已移除——别再找 train.jsonl(分类:工程陷阱)

问题:早期 README 列出的 train/valid/test.jsonl 已于 2023-08-20 仓库整理时移除,当前配置只输出 TRAIN 单一 split。不少教程与老博客仍按三文件写加载逻辑,直接报 FileNotFoundError。
症状:load_dataset 后发现 split 只有 train;按老教程找 valid.jsonl 失败。
解决:

  1. 简单方法:接受无官方划分的现实,按 §5.3 自行论文级划分;复现历史工作用社区事实标准(约 1.3M 训练 / 0.16M 评估);
  2. 进阶方法:从仓库 git 历史或 Wayback Machine 找回早期划分文件,并与自建划分做重叠审计;
  3. SOTA 方法:固定一份"论文级划分 + 清洗记录"的快照并版本化(DVC/git-lfs),全组统一,实验可复现。
    参考:axiong/pmc_oa README(划分文件删除线标注)、Med-Flamingo 采用的 public split

⚠️ 坑点 5:HF datasets 查看器与加载脚本版本问题(分类:工程陷阱)

问题:百万行规模会使 HuggingFace datasets viewer 直接失效(官方 README 明确说明);同时仓库使用 trust_remote_code 加载脚本(pmc_oa.py),新版 datasets 库对远程脚本加载策略收紧后,老脚本可能报错。
症状:网页端 viewer 卡死或空白;load_dataset("axiong/pmc_oa") 报 trust_remote_code 或脚本兼容性错误;下载中途 images.zip 校验失败。
解决:

  1. 简单方法:不用 viewer,改用官方 demo 仓(axiong/pmc_oa_demo)网页预览;数据用 CLI(hf download)按文件下载;
  2. 进阶方法:跳过 load_dataset 远程脚本,直接 jsonlines 流式读取 + 手动拼图像路径(见 §6.1),对 datasets 库版本零依赖;
  3. SOTA 方法:把 JSONL 转成 Arrow/WebDataset 格式本地落盘,配 wds 管线做流式训练,彻底规避远程脚本与内存问题。
    参考:axiong/pmc_oa README(viewer 失效说明与 demo 链接)

⚠️ 坑点 6:非医学子图混入——过滤是两道概率闸门,不是绝对边线(分类:标签理解)

问题:医学图判定依赖"图注含 UMLS T060 关键词 + 分类器 Top4"两道自动闸门。图注提及医学词汇但插图本身是实验装置照片、凝胶电泳、统计图表的情况会被保留;子图切分后混入的非医学面板虽经第二轮分类过滤,仍不可能 100% 清除。
症状:训练集中出现占比虽小但肉眼可辨的凝胶图、仪器照片、柱状图;图文检索时输入"chest X-ray"返回实验流程图。
解决:

  1. 简单方法:训练前用分类器对全库图像重打分,剔除医学置信度垫底的 1-2%;
  2. 进阶方法:用已训好的 CLIP 权重做"图像-模态短语"零样本分类(如 “a CT scan” vs “a bar chart”),按分数过滤;
  3. SOTA 方法:训练专用模态分类头(复用 DocFigure 28 类体系)做二阶段精筛,并把过滤策略写进数据卡随模型发布。
    参考:Lin et al., 2023(两轮分类过滤设计)、ROCOv2 对文献挖掘类数据集质量问题的系统讨论

⚠️ 坑点 7:图像许可混合——ND/SA 条款禁止再分发(分类:偏倚陷阱 / 合规)

问题:PMC-OA 逐篇继承源文章的 CC 许可,其中混有 CC BY-ND 与 CC BY-SA 许可图像(ROCOv2 论文明确指出该数据集未做许可过滤)。将数据集整体再分发、或把处理后版本上传公开仓库,可能违反 ND(禁止演绎)条款;商用则需逐篇核查 NC 变体。
症状:自身衍生数据集被平台下架或收到版权投诉;论文投稿时数据合规声明无法自洽。
解决:

  1. 简单方法:仅在本地训练使用,不整体再分发衍生数据集,发布模型权重与代码即可;
  2. 进阶方法:用 BIOMEDICA 的思路——不搬运图像,发布"源文章 PMCID + 图序"清单与重建脚本,让用户自行从 PMC FTP 拉取;
  3. SOTA 方法:接入 PMC 官方许可元数据(oa_package / oa_file 清单),训练前按许可白名单过滤,留存逐样本许可审计日志。
    参考:ROCOv2(PMC,对 PMC-OA 许可与过滤缺陷的分析)

⚠️ 坑点 8:把 ROCO 检索成绩当"微调 SOTA"比较——零样本与微调不可比(分类:评估误用)

问题:PMC-CLIP 在 ROCO 上的 I2T R@10 = 71.88%(+8.1%)是在"PMC-OA 不含 ROCO 数据"的前提下测得的,官方自述近似零样本评测。后续论文若在 ROCO 上做微调,数字与零样本直接同表比较会得出错误结论。
症状:综述/选型表中 PMC-CLIP 数字被误标为微调 SOTA;复现时微调后指标反而"下降"造成困惑。
解决:

  1. 简单方法:引用时标注"zero-shot retrieval on ROCO",与微调方法分行呈现;
  2. 进阶方法:统一协议复测——同一测试集上分别报告 zero-shot 与 linear-probe/full fine-tune 三个档位;
  3. SOTA 方法:采用 BIOMEDICA 提出的统一评测框架(固定 held-out 集与提示模板),并报告置信区间。
    参考:PMC-CLIP 项目主页(自述 zero-shot 性质)、BIOMEDICA 对评测协议碎片化的批评

§6.6 数据增强:安全与危险清单

操作 判定 说明
RandomResizedCrop(scale 0.8-1.0) ✅ 安全 CLIP 标配,保留主体
RandomHorizontalFlip ✅ 安全 多数医学插图左右翻转不改变语义(病理/内镜等注意文字标注会被镜像)
ColorJitter(轻度) ⚠️ 谨慎 染色类病理图色调有诊断意义(H&E 深浅),建议限幅
图内文字区域裁剪保留 ✅ 安全 复合图面板标记(A/B)常含定位信息
大角度旋转(>30°) ❌ 危险 影像解剖方位有诊断含义
重度染色变换(H&E 色域乱抖) ❌ 危险 病理图像色彩即诊断特征
随机替换兄弟面板拼贴 ❌ 危险 破坏子图-子图注对应关系,等于制造错误标签
对 caption 做同义改写回灌 ⚠️ 谨慎 需保证医学事实不变,建议仅用于文本侧对比学习

§6.7 模型推荐表

模型 架构 预训练数据 适用场景 获取
PMC-CLIP(官方) ResNet-50(RN50_fusion4)+ 文本编码器,ITC+MLM PMC-OA 全量 复现基线、检索、分类骨干 GitHub
社区 ViT-L-14 OpenCLIP ViT-L/14 PMC-OA 更强表征的起步权重 ryanyip7777/pmc_vit_l_14
BiomedCLIP ViT-B/16 + PubMedBERT 文本编码器 PMC-15M(1,500 万对,同源扩展) 追求更强零样本/检索性能 aka.ms/biomedclip
Med-Flamingo OpenFlamingo-9B 继续预训练 PMC-OA 约 1.3M 对 + 医学教科书 少样本生成式 VQA ML4H 2023 论文
自训 CLIP 双塔 任意 ViT/RN + BERT 系 §6.4 管线 定制需求、教学 本页代码

§6.8 硬件需求表

阶段 最低配置 推荐配置 说明
数据下载与预处理 4 核 CPU / 16GB 内存 / 150GB 磁盘 8 核 / 32GB / 300GB SSD 图像解压与校验是 I/O 密集型
CLIP RN50 级预训练 1× 24GB GPU(梯度累积) 4-8× 32GB GPU(如 A100/V100 集群) 对比学习对 batch 敏感,小卡用梯度累积 + 大学习率预热;社区 ViT-L/14 复用可免自训
下游微调/线性探测 1× 16GB GPU 1× 24-32GB GPU MedMNIST 级任务单卡足够
评估(R@K 抽样) CPU 即可(小规模) 1× 16GB GPU 全库检索建议 FAISS 加速

§6.9 评估指标代码

import torch

@torch.no_grad()
def image_text_retrieval(img_feats, txt_feats, ks=(1, 5, 10)):
    """图文检索 Recall@K。
    img_feats: [N, d](L2 归一化后); txt_feats: [N, d](L2 归一化后)
    假设第 i 张图与第 i 条文本为正对。
    注意:全量矩阵为 N×N,百万库请配合 FAISS 分块检索。
    """
    img_feats = torch.nn.functional.normalize(img_feats, dim=-1)
    txt_feats = torch.nn.functional.normalize(txt_feats, dim=-1)
    sims = img_feats @ txt_feats.t()            # [N, N]

    i2t_ranks = sims.argsort(dim=1, descending=True)
    t2i_ranks = sims.argsort(dim=0, descending=True)

    metrics = {}
    for k in ks:
        metrics[f"I2T_R@{k}"] = (i2t_ranks[:, :k] ==
                                 torch.arange(len(sims)).unsqueeze(1)).any(1).float().mean().item()
        metrics[f"T2I_R@{k}"] = (t2i_ranks[:k, :].t() ==
                                 torch.arange(len(sims)).unsqueeze(1)).any(1).float().mean().item()
    return metrics

# 用法:在论文级划分的评估集上计算,杜绝兄弟面板泄漏(§6.5 坑点 3)
# m = image_text_retrieval(img_emb, txt_emb, ks=(1, 5, 10))

下游分类与生成任务的常用指标(与官方基准口径对齐):

from collections import Counter

def exact_match_accuracy(preds: list[str], golds: list[str]) -> float:
    """封闭式 VQA(如 VQA-RAD 单选)常用口径:归一化后完全匹配。"""
    def norm(s: str) -> str:
        return s.strip().lower().rstrip(".")
    return sum(norm(p) == norm(g) for p, g in zip(preds, golds)) / len(golds)

def bleu4_corpus(preds: list[str], golds: list[str]) -> float:
    """开放式生成(报告/答案句)的最小 BLEU-4 实现(演示级,
    严谨评测请使用 sacrebleu)。"""
    def ngrams(s: str, n: int) -> Counter:
        toks = s.lower().split()
        return Counter(tuple(toks[i:i + n]) for i in range(len(toks) - n + 1))
    total, clipped_total, length_ratio = 0, 0, 0
    for pred, gold in zip(preds, golds):
        p, g = ngrams(pred, 4), ngrams(gold, 4)
        clipped_total += sum(min(c, g[t]) for t, c in p.items())
        total += max(sum(p.values()), 1)
        length_ratio += len(gold.split()) / max(len(pred.split()), 1)
    brevity = min(1.0, length_ratio / len(preds)) if total else 0.0
    return (clipped_total / total) ** 0.25 * brevity if total else 0.0

# 提醒(§8.3):PMC-VQA 团队指出 ACC/BLEU 均不度量语序流畅性,
# 生成式评测建议补充语义级指标或人工评审。

评测纪律三条:① 检索与分类指标在论文级划分的评估侧计算;② 与历史工作对比前先确认零样本/微调口径一致(坑点 8);③ 报告多随机种子均值并附置信区间。

§6.10 MLOps 笔记

  • 数据版本化:百万图像不适配 git,用 DVC 或直接锁定 HuggingFace commit hash;JSONL 划分产物(train/eval_clean.jsonl)单独版本化并记录 PMCID 分组规则;
  • 噪声监控:训练前跑一遍图文相似度分布并落盘直方图,作为后续重训时的分布漂移基线;
  • 复现实验:固定 datasets 库版本与 trust_remote_code 脚本快照(或干脆绕开远程脚本,见坑点 5);记录 transform 随机种子;
  • 合规审计:训练用样本清单(PMCID 级)归档留存,以满足逐文章许可审计需求(坑点 7);
  • 评测卫生:评估集一次性固化 + 论文级分组,任何指标波动先查划分是否被无意破坏。

一个建议的目录级 MLOps 约定(可直接套用):

project/
├── data/
│   ├── raw/                     # 官方原文件,只读:images.zip / pmc_oa*.jsonl
│   ├── clean/                   # §6.3 产物:train_clean.jsonl / eval_clean.jsonl
│   └── audit/                   # 许可审计日志:pmcid_license.tsv
├── configs/
│   └── data_v1.yaml             # 锁定 HF commit hash + 划分哈希 + 过滤阈值
├── src/
│   ├── dataset.py               # §6.4 Dataset 类
│   └── metrics.py               # §6.9 指标
└── checks/
    └── caption_sim_hist.png     # 图文相似度分布基线(漂移监控起点)

配套的配置示例(记录"数据从哪来、怎么切、过滤了什么"三要素):

# configs/data_v1.yaml —— 数据版本快照(示例结构)
source:
  repo: axiong/pmc_oa            # HuggingFace 仓库
  revision: 2023-08-20-snapshot  # 锁定 commit hash(写入时取当次下载的 revision),防上游变动
  config: pmc_oa                 # 细粒度版;复现官方另配 pmc_oa_beta
split:
  method: pmcid_hash_bucket      # 论文级哈希分桶(§6.3 第 3 步)
  buckets: 100
  eval_buckets: 90-99
filter:
  drop_panel_marks: true         # 坑点 2:行首面板标记清洗
  drop_caption_min_words: 5      # 超短 caption 丢弃
  clip_sim_percentile_floor: 20  # 坑点 1:底部 20% 相似度对剔除(可选)

§6.11 与下游生态的衔接

PMC-OA 在真实项目里很少单独走到底,更常见的是"预训练 → 指令微调"接力。两条经过验证的路径:

路径 步骤 参考产出
CLIP 路线 ① PMC-OA 对比预训练 → ② ROCO/MedMNIST 上验证 → ③ 迁移到自有临床数据微调 PMC-CLIP(官方)
LLM 路线 ① PMC-OA 图文对齐预训练视觉编码器 → ② 接入 LLaMA 系 LLM → ③ PMC-VQA 22.7 万指令对微调 → ④ VQA-RAD/SLAKE 评测 MedVInT(PMC-VQA 团队)

接续时的接口注意:PMC-VQA 的图像来自 PMC-OA 第一阶段(未拆分复合图),其图像文件与 pmc_oa.jsonl 的子图级文件不是同一套命名;跨数据集衔接时以 PMCID + 图序重新对齐,勿假设文件名可直接互查。

§7 质量评估与局限性

§7.1 已知偏倚与质量问题表

偏倚/问题类型 描述 严重程度 缓解措施
文献选择偏倚 开放获取文献偏基础科学与综述,临床实践内容(尤其闭源期刊临床影像)占比不足 高 模型部署前必须在真实临床数据上外部验证;避免用文献分布外推临床流行率
典型病例偏倚 论文插图倾向展示典型/教学性病例,且常带箭头等辅助标注,比临床真实影像"干净" 高 混入真实临床数据微调;评估时报告临床集上的性能落差
对齐噪声 子图-子图注对齐准确率 73%,约 1/4 细粒度对错配 高 §6.5 坑点 1 的置信度过滤/分层训练
检测噪声 子图切分 mAP@0.5=0.94,存在漏检/误检与面板残留 中 图像校验 + 面板完整性启发式检查
一对多重复 Beta 口径每图注平均对应 4.3 子图;文本重复导致有效样本量缩水 中 论文级分组划分;文本去重统计有效多样性
性别/人群分布 约 54% 男性,整体近似均衡但无分层控制;无种族标注 中 下游做亚组评估;公平性敏感任务慎用
模态长尾 CT/MRI 等常见模态主导,罕见程序样本稀少 中 罕见模态任务用外部数据补充
许可异质性 混含 CC BY-ND/BY-SA 等限制性许可,未做许可过滤 中(合规) §6.5 坑点 7 的审计与白名单策略

§7.2 标注质量评估

PMC-OA 无人工标注,质量锚点是两个自动指标:子图检测 mAP@0.5 = 0.94、对齐准确率 73%。相比人工标注数据集(VQA-RAD 由医生标注、SLAKE 含双语专家标注),其"标注"本质是图注原文的自动重组——这带来两个结构性特点:一是文本完全忠实于作者原意(无标注者主观性),二是没有任何机制保证"图文语义对应"(对齐是模型猜的)。使用时建议把 PMC-OA 定位为预训练语料而非评测基准;如需评测用途,优先选其外部基准(ROCO、MedMNIST、VQA-RAD)。

自动弱监督与人工标注的系统性对照:

维度 PMC-OA(自动弱监督) VQA-RAD/SLAKE(人工标注)
标签来源 图注原文 + 模型对齐 临床医生/专家逐题标注
规模 1,646,592 对 数千题量级
标注者间一致性 不适用(无标注者) 可计算、通常较高
单条正确率 检测 0.94 / 对齐 0.73 以人类共识为准
文本忠实度 完全忠实作者原意 可能被问题改写
适合用途 预训练 评测
成本 近零(算力成本) 高(专家时间)

这张表的实际含义是:不要用人工标注数据集的标准去"修正"PMC-OA,也不要用 PMC-OA 的规模优势去贬低人工基准——两者在流水线里是上下游关系,不是竞争关系。

§7.3 泛化性失效风险表

目标场景 失效风险 证据/机制
临床真实影像诊断 高 文献插图典型化 + 辅助标注,与临床采集分布存在系统性差距(PMC-VQA 论文 limitations 明确讨论该机制)
非英语/低资源地区临床 高 文本全英文,图注风格为学术描述而非临床报告语言
文本-only 可答任务的抗性 高 图注即答案源,模型可凭文本先验"蒙对",PMC-VQA 团队实测需 LLaMA 过滤 150 万→85 万对
细粒度病灶定位 中-高 插图分辨率与裁剪由排版决定,无空间标注
罕见病/罕见模态 中 长尾分布,尾部样本量不足以支撑可靠泛化
跨模态检索(开放域查询) 中 学术图注词汇域窄,口语化查询召回差

§7.4 伦理考量

PMC-OA 的伦理负担显著低于临床数据集:内容来自已发表的开放获取文献,经期刊与 NIH/NLM 流程管理;官方明确说明图像在文献发布链路中"已被良好匿名化与去标识化",且 PMC-VQA 论文认定此类公开资源构建无需额外 IRB 或知情同意豁免。仍需注意三点:文献图像虽匿名,仍可能含可识别特征(纹身、面部解剖特写),二次发布时应保留原样不做增强放大;图注含药物/基因信息,文本侧应用需防内容被误用为临床建议;数据集用于生成式模型时,应评估模型复述源文献的版权边界。

§7.5 公平性说明

数据集无人口学标注列,公平性评估只能依赖官方统计图:约 54% 男性、跨年龄近似均衡。两点提醒:其一,文献插图的"患者选择"由论文作者决定,反映的是发表偏倚而非疾病流行率;其二,种族、地域、社会经济维度完全缺失,任何公平性结论都需要在带人口学标注的外部数据上验证。对公平性敏感的应用(如跨人群筛查),建议以 PMC-OA 仅作预训练、以多元人群临床数据做校准。

§7.6 数据漂移

PMC-OA 是 2022-09-16 时点的 PMC 快照,不随文献库更新。漂移风险主要来自三处:其一,医学实践演进(新设备、新影像协议)使旧文献插图风格过时;其二,COVID-19 等阶段性内容在快照中占比高于长期基线;其三,期刊开放获取政策变化会改变"开放子集"的学科构成——2022 年后 cOAlition S 推动的开放获取比例上升,意味着今天的 PMC 与快照时的分布已不同。长期维护的系统建议每 1-2 年用 PMC FTP 增量重建或切换到 BIOMEDICA 等持续维护的继承数据集。

可落地的漂移监控清单(与 §6.10 配合):

监控对象 信号 触发动作
输入文本分布 新查询/新报告的词表与快照图注重叠度下降 扩充词表或引入新语料微调
输入图像分布 图文相似度分布相对落盘基线整体偏移 复查预处理链,评估增量重建
输出质量 检索 R@K 或分类 ACC 在固定评估集上缓慢下滑 用近期文献数据做继续预训练
源库演进 PMC 开放获取子集规模/政策变化公告 评估切换 BIOMEDICA 等继承数据集

§7.7 DAIMS 数据质量评估

# 检查项 状态 说明
1 宽格式 ✅ 每行一条图文记录,image/caption 两列扁平结构
2 唯一标识 ⚠️ 无显式 ID 列;image 文件路径可充当主键,PMCID+FigN+序号需自行解析
3 特殊字符 ✅ JSONL 标准转义;caption 含括号/缩写但不破坏解析
4 重复行 ⚠️ 一对多映射致同一图注文本对应多图;精确重复行少,语义重复多
5 缺失编码 ⚠️ 无缺失值体系;缺失表现为语义层(错配、残留复合图注),需自行检测
6 标签标识 ❌ 无任何结构化标签列(模态/疾病/解剖部位均无),标签只能从文本挖掘
7 罕见类分组 ⚠️ 长尾模态无显式分组列;官方仅以统计图定性展示
8 偏倚评估 ⚠️ 官方给出性别比与模态覆盖图,但无正式偏倚审计;第三方(ROCOv2)补充了许可偏倚分析
9 数据字典 ✅ README 明确 image/caption 字段含义与两配置差异
10 信息性缺失解释 ❌ 无;对齐置信度未随主干发布,缺失机制无文档
11 设备记录 ❌ 完全缺失:插图非 DICOM,无设备/参数/窗宽窗位信息
12 共线性 ✅ 图文对形态,不存在表格特征共线性问题
13 编码映射 ⚠️ 过滤用 UMLS T060 术语集,但未发布"样本→术语"映射文件
14 时间戳处理 ❌ 无时间戳列;仅能通过上游论文发表时间间接推断
15 划分建议 ✅ 官方历史划分存在(社区沿用 1.3M/0.16M 口径)且泄漏风险有公开讨论
16 泄漏讨论 ✅ 本页 §5.3 与第三方(Med-Flamingo 对下游评测泄漏的实测)均有明确讨论
17 标签分布 ✅ 对齐类型分布有精确数字;模态/疾病分布有官方统计图
18 测量偏倚 ⚠️ 图像来源排版/设备异质,无采集协议控制;影响程度未量化
19 外部验证建议 ✅ ROCO/MedMNIST/VQA-RAD/SLAKE 外部基准链路完整(官方 + 第三方)
20 版本记录 ⚠️ HF 有 commit 历史(2023-08-20 整理),但无语义化版本 changelog;早期划分文件被静默移除
21 预处理脚本 ✅ 官方提供 datasets 加载脚本 pmc_oa.py(Version 1.0.0)
22 合规要求 ✅ 代码 MIT 明确;数据许可说明依赖 PMC 开放获取框架,限制可追溯
23 多模态对齐 ⚠️ 对齐是核心卖点亦是核心风险:73% 准确率,置信度未随主干发布
24 去标识化 ✅ 文献链路匿名化;无直接标识符,文件名仅含 PMCID

DAIMS 评分:14.5 / 24(✅ ×9 = 9 分;⚠️ ×11 = 5.5 分;❌ ×4 = 0 分)

评分解读:14.5/24 处于"可用的预训练语料,但不是即插即用的评测资产"区间。结构层(宽格式、数据字典、预处理脚本)与合规层(外部验证建议、去标识化)表现良好,这是大厂级自动管线的典型强项;失分集中在标注语义层——无结构化标签、无置信度发布、无设备与时间戳元数据,以及需要使用者自行处理的泄漏与重复问题。四项 ❌ 中"标签标识"与"设备记录"由数据本性(文献插图)决定,无法修复,只能靠文本挖掘或放弃相关用法绕开。

对你意味着什么:

  1. 若做对比预训练:可以放心起步(结构与脚本完备),但把对齐过滤(坑点 1)和论文级划分(坑点 3)写进流程再开训;
  2. 若做评测基准:不要直接用 PMC-OA 自评——改用 ROCO/VQA-RAD 等外部基准,PMC-OA 只当训练集;
  3. 若做标签依赖任务(分类/检测):接受"无标签列"现实,先跑文本挖掘(UMLS/MeSH 抽取)建伪标签,或改用带标注的同域数据集;
  4. 若做再分发/产品化:先做许可审计(坑点 7),发布权重与脚本而非数据本体;
  5. 若追求更干净的继承替代:评估 BIOMEDICA(含许可与概念标注)作为补充或升级路径。

§7.8 外部验证矩阵

外部数据集/场景 来源机构 评估任务 性能指标 相对内部变化 关键发现
ROCO 口腔医学领域开放数据(PeerJ 2019 首发) 图文检索 I2T R@10 = 71.88% 较前 SOTA +8.1%(零样本性质) PMC-OA 不含 ROCO 数据,成绩体现文献预训练的跨库迁移能力(PMC-CLIP 论文)
MedMNIST(2D 子集) 多中心开放基准 微调分类 较从零 ResNet-50 +3.9% 微调场景稳定增益 文献预训练表征可迁移至临床小图分类(PMC-CLIP 论文)
VQA-RAD / SLAKE 临床医生标注 VQA 基准 医学 VQA 6 项指标中 5 项超当时 SOTA M3AE 生成式微调后提升明显 细粒度对齐带来的表征增益可传导至问答任务(PMC-CLIP 项目主页)
USMLE 风格视觉问答 Med-Flamingo 自建评测 少样本生成 VQA 临床医师评分提升至多 20% 少样本场景相对基线显著改善 以 PMC-OA 约 1.3M 对继续预训练 OpenFlamingo 的效果(ML4H 2023)

§8 基准性能与生态

§8.1 排行榜:ROCO 图文检索(I2T R@10)

排名 模型 性能(I2T R@10) 年份 关键技术 完整引用 代码
1(发布时点) PMC-CLIP 71.88%(较前 SOTA +8.1%) 2023 双塔对比 + MLM 辅助损失;PMC-OA 预训练;零样本评测 Lin, W., Zhao, Z., Zhang, X., Wu, C., Zhang, Y., Wang, Y., & Xie, W. (2023). PMC-CLIP: Contrastive Language-Image Pre-training using Biomedical Documents. MICCAI 2023. DOI 10.48550/arXiv.2303.07240 GitHub

数值不可直接比较的原因:① PMC-CLIP 的成绩为零样本检索(PMC-OA 不含 ROCO 数据),与在 ROCO 上微调的方法不可同表比较;② BiomedCLIP(ViT-B/16,PMC-15M 预训练)发布时在检索与多项基准上"substantially outperformed prior approaches",但其检索评测集为 PMC-15M 自建 726k held-out 集而非 ROCO,协议不同;③ 各方法的图像分辨率、文本编码器与检索库规模不一致,跨论文数字仅作量级参考。

§8.2 SOTA 总结与选型建议

  • 要快速基线:直接用官方 PMC-CLIP 权重(RN50 级,轻量、复现路径清晰);
  • 要最强开源表征:社区 ViT-L-14(PMC-OA 预训练)或微软 BiomedCLIP(PMC-15M,1,500 万对预训练,发布时在检索/分类/VQA 全面刷新纪录,甚至超过放射学专用模型 BioViL);
  • 要生成式问答:PMC-OA 预训练 + PMC-VQA 指令微调(MedVInT 路径),或 Med-Flamingo 少样本路径;
  • 趋势判断:文献级预训练语料的竞争焦点已从"规模"(1.6M → 15M → 24M)转向"元数据质量与许可透明"(BIOMEDICA 路线),新项目选型建议优先带许可标注的继承数据集。

按研究阶段给出一张更细的选型决策表:

你的阶段 首选方案 备选 决策依据
立项调研 直接复用 BiomedCLIP / 社区 ViT-L/14 PMC-CLIP 官方权重 零训练成本验证任务可行性
方法学研究(对比学习本身) 用 §6.4 管线在 PMC-OA 自训 PMC-OA-Beta 口径复现 需要可控变量与消融
临床落地前置 预训练权重 + 本院数据微调 先在 MIMIC-CXR/CheXpert 试迁移 检验文献-临床分布落差
论文基准对比 固定 §8.3 协议 + 论文级划分 复用 Med-Flamingo public split 数字可比性与可复现性
长期产品 以 BIOMEDICA 做数据层替代评估 PMC-OA 仅作历史基线 许可透明与持续维护

§8.3 评测协议

  1. 检索:L2 归一化全库余弦相似度,报告 I2T/T2I R@1/5/10;PMC-OA 用法下必须声明"PMC-OA 不含 ROCO"的零样本属性;
  2. 分类:官方在 MedMNIST 2D 子集上微调报告;零样本分类需固定提示模板;
  3. VQA:VQA-RAD/SLAKE 上微调报告 closed-ended accuracy 与 open-ended 准确率/BLEU;注意 VQA-RAD 官方划分已知存在泄漏,建议用清洗划分复测;
  4. 通用纪律:所有评测在论文级分组划分的评估侧进行;报告随机种子均值±方差。
数据集 规模 关系 适用场景
PMC-VQA 226,946 VQA 对 / 149,075 图 直接下游(用 PMC-OA 第一阶段 381K 对构建) MedVQA 指令微调
MedICaT 217,000 图 上游(提供拆分器训练集 MedICaTSub 2,069 张) 复合图拆分研究
ROCO 81,000 图 同期同类(放射学) 检索评测外部基准
PMC-15M 15,000,000 对 同源扩展(微软) 极致规模预训练
BIOMEDICA 24,000,000 对 继承升级(2025,带许可/概念标注) 可控子集构建
MIMIC-CXR 377,110 对 互补(真实临床报告) 临床验证域

§8.5 关键论文 Top 8

  1. Lin, W., Zhao, Z., Zhang, X., Wu, C., Zhang, Y., Wang, Y., & Xie, W. (2023). PMC-CLIP: Contrastive Language-Image Pre-training using Biomedical Documents. MICCAI 2023, arXiv:2303.07240. DOI 10.48550/arXiv.2303.07240 —— PMC-OA 数据集与同名模型的原初论文,三阶段构建管线与全部核心数字来源。
  2. Zhang, X., Wu, C., Zhao, Z., Lin, W., Zhang, Y., Wang, Y., & Xie, W. (2024). Development of a large-scale medical visual question-answering dataset. Communications Medicine 4. DOI 10.1038/s43856-024-00709-2 —— PMC-VQA 期刊版,详述如何基于 PMC-OA 第一阶段构建 22.7 万 VQA 对。
  3. Zhang, X., Wu, C., Zhao, Z., Lin, W., Zhang, Y., Wang, Y., & Xie, W. (2023). PMC-VQA: Visual Instruction Tuning for Medical Visual Question Answering. arXiv:2305.10415 —— 视觉指令微调路线,含 ChatGPT 问答生成与双模型过滤细节。
  4. Zhang, S., Xu, Y., Usuyama, N., et al. (2023). BiomedCLIP: a multimodal biomedical foundation model pretrained from fifteen million scientific image-text pairs. arXiv:2303.00915(NEJM AI 期刊版 2024)—— PMC-15M/PMC-Fine-Grained-46M 管线,PMC-OA 同源思路的规模化。
  5. Moor, M., Banerjee, O., Abad, Z. S. H., et al. (2023). Med-Flamingo: a Multimodal Medical Few-shot Learner. ML4H 2023(PMLR)—— 用 PMC-OA 约 1.3M 对做继续预训练;实测下游 VQA 基准划分泄漏。
  6. Zhang, A., et al. (2025). BIOMEDICA: An Open Biomedical Image-Caption Archive, Dataset, and Vision-Language Models Derived from Scientific Literature. CVPR 2025, arXiv:2503.22727 —— 24M 对 + 专家分层标注,PMC 系语料的新一代继承者。
  7. Wu, C., Zhang, X., Zhang, Y., Wang, Y., & Xie, W. (2024). PMC-LLaMA: towards building open-source language models for medicine. JAMIA 31 —— 同团队医学 LLM 基座,PMC-VQA 过滤流程的文本侧基础。
  8. Pelka, O., Koitka, S., Rückert, J., Nensa, F., & Friedrich, C. M. (2019). Radiology Objects in Context (ROCO): A Multimodal Image Dataset. MICCAI IMIMIC Workshop —— PMC-OA 主要外部检索基准的母数据集;其 v2(2024)系统分析了 PMC-OA 的许可与过滤缺陷。

§8.6 社区活跃度

  • GitHub(WeixiongLin/PMC-CLIP):MIT 开源,训练/评测代码完整,issues 由作者回复;
  • HuggingFace(axiong/pmc_oa):数据集获社区点赞,PR 分支有社区贡献的对齐分数字段;Model Zoo 有第三方(ryanyip7777)预训练 ViT-L/14 权重,官方 README 收录致谢;
  • 学术影响:Google Scholar 引用 380+(截至 2026-09);作为 PMC-VQA、Med-Flamingo、BIOMEDICA 等高影响力工作的直接基础,实际生态辐射远超直接引用数;
  • 维护状态:数据集为一次性快照发布(2023-08-20 后无功能性更新),新问题多指向继承项目(BIOMEDICA)。

从引用轨迹看,PMC-OA 的影响力呈"漏斗形"扩散:第一层是直接使用者(PMC-CLIP 自身与 Med-Flamingo 等预训练工作);第二层是方法论继承者(BiomedCLIP 的细粒度管线、BIOMEDICA 的许可标注体系都明确以 PMC-OA 为对照基线);第三层是间接受益者——PMC-VQA 期刊版(Nature Communications Medicine 2024)列出的采用者名单(MathVista、RadFM、Qilin-Med-VL、SILKIE、CheXagent、Quilt-LLaVA 等)虽直接使用的是 PMC-VQA,但其图像源头均可回溯至 PMC-OA 的文献挖掘路线。对使用者的实际提示是:遇到 PMC-OA 本体的维护问题时,优先检查社区 issue 与继承项目,而非等待原仓库更新。

§8.7 生态快照表

资源 类型 链接 Star/热度截至 2026-09 推荐理由
PMC-CLIP 官方仓库 代码 github.com/WeixiongLin/PMC-CLIP MIT 开源、作者维护 复现与起步的第一入口
PMC-OA 数据仓库 数据 huggingface.co/datasets/axiong/pmc_oa 官方主渠道 images.zip + 双 JSONL 全量
PMC-OA Demo 数据预览 huggingface.co/datasets/axiong/pmc_oa_demo 官方 绕开 viewer 失效问题的浏览方式
社区 ViT-L/14 预训练权重 huggingface.co/ryanyip7777/pmc_vit_l_14 官方 README 收录 免自训的高质量视觉编码器
PMC-VQA 下游数据+模型 huggingface.co/datasets/xmcmic/PMC-VQA Nature Comms Med 发表 PMC-OA → VQA 的标准接续
BiomedCLIP 预训练权重 aka.ms/biomedclip 微软官方 更大规模同源语料的现成模型

§9 相关资源与引用

§9.1 官方资源列表

  1. 论文预印本:arXiv:2303.07240(2023-03-13);
  2. 项目主页:weixionglin.github.io/PMC-CLIP(管线图、统计图、结果表);
  3. 代码仓库:github.com/WeixiongLin/PMC-CLIP(MIT License);
  4. 数据仓库:huggingface.co/datasets/axiong/pmc_oa(含中文文档 README.zh);
  5. 预览子集:huggingface.co/datasets/axiong/pmc_oa_demo;
  6. 社区权重:huggingface.co/ryanyip7777/pmc_vit_l_14;
  7. 下游生态:PMC-VQA 仓库、PMC-LLaMA 仓库;
  8. 上游文献库:PMC Open Access Subset(NIH/NLM)。

§9.2 BibTeX 引用

@article{lin2023pmc,
  title={PMC-CLIP: Contrastive Language-Image Pre-training using Biomedical Documents},
  author={Lin, Weixiong and Zhao, Ziheng and Zhang, Xiaoman and Wu, Chaoyi and Zhang, Ya and Wang, Yanfeng and Xie, Weidi},
  journal={arXiv preprint arXiv:2303.07240},
  year={2023},
  doi={10.48550/arXiv.2303.07240}
}

@inproceedings{lin2023pmcclip,
  title={Pmc-clip: Contrastive language-image pre-training using biomedical documents},
  author={Lin, Weixiong and Zhao, Ziheng and Zhang, Xiaoman and Wu, Chaoyi and Zhang, Ya and Wang, Yanfeng and Xie, Weidi},
  booktitle={International Conference on Medical Image Computing and Computer-Assisted Intervention (MICCAI)},
  year={2023}
}

@article{zhang2023pmcvqa,
  title={PMC-VQA: Visual Instruction Tuning for Medical Visual Question Answering},
  author={Zhang, Xiaoman and Wu, Chaoyi and Zhao, Ziheng and Lin, Weixiong and Zhang, Ya and Wang, Yanfeng and Xie, Weidi},
  journal={arXiv preprint arXiv:2305.10415},
  year={2023}
}

§9.3 引用指南

  • 使用 PMC-OA 数据集或 PMC-CLIP 权重:引用 lin2023pmc(官方 HF 卡片指定格式);
  • 涉及 PMC-VQA 问答数据:追加引用 zhang2023pmcvqa 及其期刊版(DOI 10.1038/s43856-024-00709-2);
  • 使用社区 ViT-L/14 权重:请遵循该权重页面的作者要求并同步引用本条目;
  • 对比 Med-Flamingo/BIOMEDICA 等衍生工作:按 §8.5 列表逐条引用原始论文。

§9.4 新手常见问题(FAQ)

问题 简答 详见
PMC-OA 和 PMC-15M 什么关系? 同源思路的两条实现:PMC-OA(1.65M 对,上海交大,做子图级对齐);PMC-15M(15M 对,微软,整图-图注,为 BiomedCLIP 语料) §3.0、§8.4
需要注册或申请吗? 不需要,HuggingFace 直接下载 §6.2
官方的 train/test 划分去哪了? 已于 2023-08-20 从 README 移除;社区沿用约 1.3M 训练 / 0.16M 评估口径,建议自建论文级划分 §5.1-§5.3
为什么我的检索指标比论文低很多? 最常见原因是论文级泄漏未处理,或把零样本成绩当微调目标 §6.5 坑点 3、坑点 8
图注是英文的,能用于中文场景吗? 文本侧为英文;中文应用需翻译层或换用中文多模态数据 §3.8
能商用吗? 代码 MIT 可商用;图像逐篇继承源文章 CC 许可,NC/ND 变体受限,须逐篇审计 §3.10、坑点 7
想要"每个图配一句话"的数据怎么办? 这正是细粒度版(pmc_oa)的设计目标,但需接受约 27% 对齐噪声并做过滤 §6.5 坑点 1

§10 AI 使用声明卡

§10.1 AI 模型列表

模型 用途
大语言模型(CodeBuddy Code 内置 fast-model) 本条目初稿撰写(结构组织、文字生成、代码示例编写)

§10.2 AI 参与范围

AI 负责根据经核实的检索证据(FACTS.md)组织行文、生成代码示例与表格;所有事实性数字均溯源至 §10.3 所列输入来源;AI 不得也不曾编造无来源数字(如查无实据的规模数字一律省略)。

§10.3 输入来源列表

  1. Lin, W., et al. (2023). PMC-CLIP: Contrastive Language-Image Pre-training using Biomedical Documents. arXiv:2303.07240. DOI 10.48550/arXiv.2303.07240
  2. Lin, W., et al. (2023). PMC-CLIP 项目主页. https://weixionglin.github.io/PMC-CLIP/
  3. PMC-OA Dataset. HuggingFace 数据卡片与 README. https://huggingface.co/datasets/axiong/pmc_oa
  4. PMC-OA Dataset 加载脚本 pmc_oa.py(Version 1.0.0,2023-08-20 更新). https://huggingface.co/datasets/axiong/pmc_oa/blob/main/pmc_oa.py
  5. PMC-OA Dataset README 历史(blame 视图,含划分文件移除记录). https://huggingface.co/datasets/axiong/pmc_oa/blame/main/README.md
  6. WeixiongLin/PMC-CLIP GitHub 仓库(MIT License). https://github.com/WeixiongLin/PMC-CLIP
  7. Zhang, X., et al. (2024). Development of a large-scale medical visual question-answering dataset. Communications Medicine 4. DOI 10.1038/s43856-024-00709-2
  8. Zhang, X., et al. (2023). PMC-VQA: Visual Instruction Tuning for Medical Visual Question Answering. arXiv:2305.10415
  9. xiaoman-zhang/PMC-VQA GitHub 仓库. https://github.com/xiaoman-zhang/PMC-VQA
  10. Moor, M., et al. (2023). Med-Flamingo: a Multimodal Medical Few-shot Learner. ML4H 2023(PMLR). https://cs.stanford.edu/people/jure/pubs/med-pmlr23.pdf
  11. Zhang, S., et al. (2023). BiomedCLIP: a multimodal biomedical foundation model pretrained from fifteen million scientific image-text pairs. arXiv:2303.00915
  12. Zhang, A., et al. (2025). BIOMEDICA: An Open Biomedical Image-Caption Archive. CVPR 2025, arXiv:2503.22727
  13. ROCOv2: Radiology Objects in Context Version 2. PMC(2024). https://pmc.ncbi.nlm.nih.gov/articles/pmid/38926396/
  14. Google Scholar 引用记录(PMC-CLIP,截至 2026-09). https://scholar.google.ae/citations?citation_for_view=pbjw9sMAAAAJ%3AgsN89kCJA0AC
  15. MedVInT/Med-Flamingo 相关评测与生态信息汇总(bio.rodeo PMC-CLIP 页面). https://bio.rodeo/models/pmc-clip

§10.4 人工校验表

内容模块 审核者 审核方式 审核状态
§1 概览与规模数字(1,646,592 / 1,003,911 / 642,681 等) 千方病案医学编辑部 对照 arXiv:2303.07240 论文原文逐数核对 ✅ 已通过/已验证
§2 医学背景(ICD-11/SNOMED CT 代表性映射) 千方病案医学编辑部(医学编辑) 概念逐条复核,确认标注为"代表性示例" ✅ 已通过/已验证
§3-§4 规格与字段字典 千方病案医学编辑部(数据工程) 对照 HF README/加载脚本核对字段与配置 ✅ 已通过/已验证
§6 AI 就绪指南(8 坑点 + 代码) 千方病案医学编辑部(数据工程) 代码逻辑审读;坑点逐一溯源至论文/官方仓库/第三方论文 ✅ 已通过/已验证
§7 DAIMS 24 项评分 千方病案医学编辑部(数据工程) 逐项对照证据链复评 ✅ 已通过/已验证
§8 基准与生态数字 千方病案医学编辑部 对照论文/项目主页/Scholar 快照核对 ✅ 已通过/已验证
§9-§10 引用与声明 千方病案医学编辑部 引用格式与来源完整性核查 ✅ 已通过/已验证

§10.5 AI 生成章节标注

本条目全部章节由 AI 依据 §10.3 所列证据初稿生成;§0 审核声明、三段免责声明的框架文本沿用千方病案医数集标准模板;数字类内容(规模、日期、指标)100% 来自带 URL 的检索证据,无 AI 自行估计值。

§10.6 最后人工审核日期

2026-09-05(与 §0 审核声明一致)。

页面状态:published(全部内容已完成审核并发布)


相关数据集导航

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

  • medicat — 共享标签:多模态 / 医疗NLP / 影像-文本对齐 / 生物医学文献
  • open-pmc — 共享标签:多模态 / 医疗NLP / 生物医学文献
  • pmc-vqa — 共享标签:多模态 / 医疗NLP / 生物医学文献
  • reg2026 — 共享标签:多模态 / 医疗NLP / 影像-文本对齐
  • biomedica — 共享标签:多模态 / 影像-文本对齐 / 生物医学文献
  • ms-cxr-t — 共享标签:多模态 / 医疗NLP / 影像-文本对齐
  • pmc-oa-subset — 共享标签:医疗NLP / 生物医学文献
  • s2orc — 共享标签:医疗NLP / 生物医学文献
  • ncbi-disease — 共享标签:医疗NLP / 生物医学文献
  • jnlpba — 共享标签:医疗NLP / 生物医学文献

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

返回 AI-Ready 数据集