信息速览
胸部 X 光报告里最常见的一句话是「与既往相比,病灶增大」。这句话描述的不是当前影像,而是两次影像之间的差异。可是公开数据在做去标识时把日期抹掉了,既往检查的编号也一并消失,于是「增大」这个词失去了参照物——它究竟是相对三个月前还是三年前,无从得知。
若把这样的报告直接拿去训练生成模型,模型会学到一个错误的映射:看到某处模糊影,就写出「增大」。因为训练样本里凡是这种影像都配着「增大」这个词,而模型没有渠道知道「增大」本不属于当前影像。这不是数据噪声,而是标注方案与任务不匹配造成的系统性问题。
这套数据的出发点就是解决它。做法是把 RadGraph 的实体关系方案扩一层,让「相对既往的变化」变成一个可以单独抽取、单独剥离的属性,而不是混在观察描述里。
§1 它是什么:一份为生成任务改造的标注方案
1.1 一句话定义与三条边界
这是一套以 RadGraph 为起点、以处理对照叙述为核心动机、以实体属性为扩展手段的胸部 X 光报告结构化标注。
「以 RadGraph 为起点」意味着方案不是另起炉灶。四种实体类型(解剖、存在的观察、缺失的观察、不确定的观察)与三种关系类型(提示、位于、修饰)全部沿用,标注的原点也是 RadGraph 已经标好的报告。这个选择让两套数据可以对齐比较。
「以处理对照叙述为核心动机」是它区别于其他结构化工作的关键。多数信息抽取工作关心的是「抽出有哪些发现」,这套关心的是「抽出的发现里哪些属于当前影像、哪些属于相对既往的描述」。前者是抽取任务,后者是数据清洗任务。
「以实体属性为扩展手段」说明扩展的方式不是加实体类型,而是给已有实体挂属性。属性是可选的,不挂就表示默认值。这个设计控制了标注成本——绝大多数实体不需要挂属性,只有少数需要。
1.2 实体与关系的完整清单
| 类别 | 名称 | 允许的主体与客体 | 含义 |
|---|---|---|---|
| 实体 | 解剖(ANAT) | — | 与某观察对应的身体部位 |
| 实体 | 存在的观察(OBS-P) | — | 可识别的病理过程、诊断或所见,默认类型 |
| 实体 | 缺失的观察(OBS-A) | — | 上下文含否定修饰的观察 |
| 实体 | 不确定的观察(OBS-U) | — | 上下文含不确定修饰的观察 |
| 实体 | 位置属性(LOC-ATT) | — | 特殊空间关系的补充,如「终止于上方二点三厘米」 |
| 关系 | 提示(Suggestive-Of) | 观察对观察 | 主体的存在可推断或继发于客体 |
| 关系 | 位于(Located-At) | 观察到解剖 | 观察与部位的空间关系 |
| 关系 | 修饰(Modify) | 同类对同类 | 大小、变化、程度、范围等修饰 |
| 关系 | 部分(Part-Of) | 同类对同类 | 主体是客体的一部分或属性 |
比 RadGraph 多出来的有三处:位置属性这个实体类型、部分这个关系类型,以及下面要讲的三个实体属性。
位置属性的存在理由值得单独说。RadGraph 里「位于」只能表达「观察在某个部位」,但报告里还有更细的空间描述,比如「膈下游离气体,位于右膈下约二点三厘米处」。这里的「二点三厘米」不是解剖部位,也不是观察,而是一个量化的位置修饰。原方案没有合适的位置安放它,只能丢掉。把它单独成一类实体,并用「观察—位于—位置属性—位于—解剖」这条链表达,信息就保住了。
部分关系是从修饰关系延伸出来的。区别在于:修饰说的是「这个观察有多大、多严重」,部分是「这个观察属于哪个更大的结构」。举例来说,「血管」与「肺」之间是部分关系,「轮廓」与「肺门」之间也是部分关系。多这一层的好处是让「位于」的客体更准确——一旦引入部分关系,同一个观察的「位于」目标可能就与 RadGraph 不同了。
1.3 三个实体属性
属性是这套方案的核心,也是使用难度最高的部分。
正常性取两个值:正常、异常。标在存在的观察与缺失的观察上。
关键在于它默认不标。设计上假定:存在的观察默认描述异常,缺失的观察默认描述正常。这两种默认情形占绝大多数,若每条都标,标注量会翻几倍而信息增量很小。只有当出现非默认情况时才标——比如「双肺清晰」里的「清晰」是一个存在的观察,但它描述的是正常,所以要挂上「正常」。
这个默认值设计有一个副作用:读数据时若看到某实体没有正常性属性,不能推断它「未标注」,只能推断「取默认值」。两种理解在语义上不同,写代码时若把缺失当未知来处理,会引入错误。
动作取两个值:可删、不可删。只标在观察上。
它回答的问题是:把这个实体连同指向它的关系一起删掉,整组观察的意思会不会变。「心影轮廓稳定」里的「稳定」不可删,删了这句话就没了核心意思;「心影增大,但稳定」里的「稳定」可删,删了「心影增大」仍然成立。
这个区分直接服务于数据清洗。可删的实体携带的是间隔信息,应当在训练生成模型前剥离;不可删的实体携带的是当前影像的信息,必须保留。有了这个属性,剥离就从「凭规则猜」变成了「按标注删」。
变化取三个值:正向、负向、不变。也只标在观察上。
它表示相对某次既往检查的进展。典型例子是「稳定」标为不变、「增大」标为正向、「缩小」标为负向。变化属性通常与动作属性同时出现——一个描述间隔变化的词,往往也正是可删的。
三个属性合起来,构成了一条从「报告文本」到「当前影像描述」的转换路径:找到所有可删的实体,连同其变化属性一起剥离,剩下的就是纯粹描述当前影像的部分。这条路径是这套数据最实用的产出。
1.4 为什么不去改 RadGraph 而要另立一套
这是一个合理的问题,答案在条目页的叙述里。
RadGraph 的设计目标是「以一致的方式捕捉报告里最具临床相关性的信息」,它服务的是信息抽取与知识图谱构建,不是报告生成。对生成任务来说,缺的不是「有哪些发现」,而是「哪些发现属于当前影像」。
在 RadGraph 上直接改会遇到两个问题。第一,改动会破坏与原有标注的兼容性,已有的大量下游工作会受影响。第二,RadGraph 的标注已经完成,重新标注的成本极高。
另立一套、并明确声明「兼容版本可以达到多少一致率」,是一个折中:既保住了可迁移性(把新方案降级就能与旧方案比),又不必受旧方案的表达力限制。
条目页给出的兼容性数字是:降级后与 RadGraph 的实体类型一致率 92.7%,关系类型 77.3%。前一个数字说明两套方案对「什么是实体、是什么类型」的判断高度一致;后一个数字明显低,说明关系层的分歧较大,这也在预期之内——毕竟新方案多了一个关系类型,且部分关系的引入改变了「位于」的客体。
1.5 与前后两代工作的位置
往上看,RadGraph 是它的直接基础,提供了实体关系的基本框架与全部标注起点。
往下看,它的产出被用于报告生成。条目页的定位是「用信息抽取规范化训练数据」,即把非结构化的报告转成结构化表示,再用这个表示去训练或约束生成模型。
旁边还有一条线是纯生成侧的评测工作,关心的是「生成得好不好」。这套数据不解决评测,只解决输入侧的规范化。两者的关系是:输入规范化做好了,评测才有意义;否则模型学到的是被去标识污染的目标。
1.6 三个规模数字的口径
同一套数据有三个规模,混用会出错。
六百份是人工标注总量:四百二十五训练、七十五验证、五十 MIMIC-CXR 测试、五十 CheXpert 测试。前四项加起来正好六百。
二百二十七千八百三十五份是模型自动标注的 MIMIC-CXR 报告数。这一批没有人审。
两套测试指的是 test.json 里五十加五十,另有 test_mimic.json 与 test_chexpert.json 把这两部分单独拆出来。所以「测试集有多大」这个问题有两个答案:整体一百份,分来源各五十份。
还有一处容易混淆:训练与验证全部来自 MIMIC-CXR,CheXpert 只出现在测试里。这意味着「跨机构泛化」的检验只用了五十份样本,且这五十份从未参与训练。数字虽小,方向是对的——比在同源数据上自评要诚实。
§2 数据构成:五个文件与两种键名
2.1 文件树
cxrgraph
├── manual_data
│ ├── train.json
│ ├── dev.json
│ ├── test.json
│ ├── test_mimic.json
│ └── test_chexpert.json
├── inference.json
├── examples.pdf
├── data_dictionary.md
└── README.md
结构很简单:一个目录放人工标注,一个文件放模型推理,三个辅助文件。
examples.pdf 值得一看——它把同一句话在 RadGraph 与本方案下的标注并排画出来,是理解扩展点最直观的材料。很多方案文档写十页不如一张对照图。
2.2 一行标注的五个键
人工标注的每一行是一份报告,五个键。
doc_key 是标识。MIMIC-CXR 的报告用相对路径,形如 p10/p10001884/s58196907.txt;CheXpert 的报告用一个数字,形如 17。两种标识格式完全不同,写跨数据源的脚本时必须分支处理。
sentences 是分词结果,两层嵌套:第一层是句子,第二层是词。分词来自 RadGraph,句子按句号切分。这意味着句子边界完全依赖句号,遇到缩写(如 vs. 表示 versus)可能误切。
ner 是实体,三层嵌套的语义:句子、句内实体、实体的三个元素(起止下标、类型)。下标是相对整份报告的字符偏移,不是相对句子。这一点极易搞错——若按句子解析下标,全部会错位。
relations 是关系,五个元素:主体起止、客体起止、关系类型。同样用报告级字符偏移。
entity_attributes 是属性,五个元素:实体起止、正常性、动作、变化。三个属性取值中,未赋值的一律写 NA。若三个都是 NA,这个实体不出现在列表里。
最后这一条对统计有直接影响。若你想数「有多少实体挂了属性」,不能数列表长度再除以三,也不能假设每个实体都出现。正确做法是先按实体下标去重,再看哪些下标在属性列表里出现。
2.3 推理文件的键名差异
inference.json 的结构与人工标注平行,但键名前缀不同:pred_ner、pred_rel、pred_attr。
这个设计的用意很清楚——防止把模型输出与人工标注混在一起。写代码时若用同一套解析函数读两类文件,会因键名不同而报错。稳妥做法是写一个包装函数,按文件类型决定键名映射。
还有一处差异在 doc_key:推理文件里的路径把斜杠换成了下划线,形如 p10_p10001884_s58196907.txt。这样处理后,一个路径就变成了一个不含分隔符的字符串。代价是无法再直接按目录结构去关联原库文件,需要把下划线还原成斜杠(而文件名本身也可能含下划线,还原会有歧义)。
sentences 的来源也不同:人工标注的分词来自 RadGraph,推理文件的分词用 RadGraph 提供的正则表达式重新分词。两者可能产生细微差异,做严格对齐时要留意。
下划线还原到底难在哪,值得具体说一遍。MIMIC-CXR 的报告文件路径形如 files/p10/p10001884/s58196907.txt,按一级目录、二级目录、三级目录、文件名拆成四段,段内本身不含斜杠。把斜杠换成下划线之后得到的字符串里有三个下划线,它们的位置恰好对应三段分隔。问题出在别处:MIMIC-CXR 的二级目录名与三级目录名本身可能在内部出现下划线(患者编号与检查编号的拼接方式在不同版本里改过),CheXpert 那一侧的文件命名也不完全统一。一旦某一段内部包含下划线,就无法从字符串反推哪几个下划线是分隔符、哪几个是名字的一部分。
可行的替代做法有两个,都不依赖还原。第一种是把人工标注文件里的 doc_key 与报告原路径建立一张查找表,用查找表把推理文件对应回原路径;前提是两张表的患者检查编号集合一致。第二种是不还原,直接用三段编号做连接键——从 p10_p10001884_s58196907 里取中间两段拼接成 p10001884_s58196907,只要这个组合在两侧唯一,就足以完成匹配,且不受下划线歧义影响。后一种更稳,代价是丢失目录层级信息,对需要按患者聚合做分析的场景要另外补一步。
这里有一个容易被忽略的连带影响:如果研究者打算把人工标注的六百份当作推理文件的子集去核对,那么匹配失败的报告会被静默丢弃,而不是报错。一个只匹配上五百八十份的连接操作看起来完全正常,结果是四百多份推理数据悄悄退出了评估。做这类连接时应始终打印两侧的记录数与匹配率,匹配率低于预期就要回头查键名,不要先怀疑标注本身。
2.4 标注范围的两段
条目页明确写:标注范围限于检查所见与结论两段。
这与 RadGraph 一致,理由是这两段对报告生成最重要。但这个选择有一个实际后果:报告里的对照部分、病史部分、适应证部分都不在标注内,而这些部分恰恰是「变化」属性最常出现的地方。
换句话说,若一份报告在「对照」段写「与三个月前片相比」,在「所见」段写「病灶增大」,那么标注只覆盖后者——「增大」被标为正向变化,但「三个月前」这个时间跨度不在标注里。
这个切法合理(生成模型主要学生成所见与结论),但它意味着不能用这份标注去研究时间跨度与变化幅度的关系。
2.5 划分与 RadGraph 一致的含义
条目页说数据划分与 RadGraph 完全相同。
这一句话的价值比看上去大。它意味着:同一条报告在两套数据里落在同一个划分(训练或测试),因此可以直接在同一批测试报告上比较两个方案的模型成绩,而不必担心划分差异带来的偏差。
但它也带来一个限制:不能用自己的划分重做实验,否则与作者的成绩不可比。若要交叉验证,只能另做一套并声明。
还有一处:条目页说「报告对应的患者在三套划分之间不重叠」。这是患者级划分,比报告级划分严格。这一点值得肯定——若按报告划分而不按患者划分,同一患者的多次检查会分散到训练与测试,导致性能虚高。
2.6 标注工具的痕迹
标注用 BRAT 完成,但发布的是 JSON,不含 BRAT 的原生格式。
这意味着中间产物没有保留。若想复查某条标注在标注时的原始形态(比如标注者是否犹豫过、是否有删除重标),无从查起。数据里只有最终结果。
这不算缺陷,但影响可追溯性。对想研究「标注困难在哪」的人来说,这些中间痕迹才是最有价值的材料。
§3 怎么拿到:受限访问与它的门槛
3.1 获取路径
受限访问,两层手续。
第一层是账号注册。第二层是签署 PhysioNet Restricted Health Data Use Agreement 1.5.0。
与多数凭证式条目不同的是,这一条目不要求 CITI 培训。这个差别值得注意:凭证式(credentialed)与受限式(restricted)是 PhysioNet 的两种不同等级,前者门槛更高,后者只需签署协议。很多人以为凡是拿不到直接下载的都是凭证式,其实不然。
门槛更低带来一个后果:使用者更需要对条款有自觉。因为少了培训这一道强制环节,「不得再分发」「不得尝试重识别」这些约束只能靠使用者自己遵守。
3.2 许可的具体约束
受限健康数据许可的核心约束有三条。
不得再分发。包括同机构的其他课题组,每人单独申请。
不得尝试重识别。上游的 MIMIC-CXR 已做过去标识,CheXpert 用假数据替换过隐私信息,本数据继承这些处理,但使用者仍不得做交叉匹配。
仅用于研究。商业使用需另议。
三条之外还有一条常被忽略的:成果发表时须同时引用本数据集、MIMIC-CXR 与 RadGraph。后者容易被漏,因为数据包里不含 RadGraph 的任何文件,只有标注方案沿用了它。
3.3 版本与 DOI
| 类型 | DOI |
|---|---|
| 版本 DOI(v1.0.0) | 10.13026/p7kf-t860 |
| 最新版 DOI | 10.13026/f2sv-v647 |
只有一个版本,2025 年 2 月 3 日发布。版本号写作 v1.0.0。
3.4 上游依赖的三层
| 层 | 内容 | 与本数据的关系 |
|---|---|---|
| 第一层 | MIMIC-CXR v2.0.0 | 报告原文来源,提供训练、验证与部分测试 |
| 第二层 | CheXpert | 仅提供五十份测试报告 |
| 第三层 | RadGraph v1.0.0 | 提供标注方案基础与标注起点 |
三层的依赖性质不同。第一层是内容依赖——报告文本直接来自它,没有它就无法核对;第二层是有限的测试依赖;第三层是方案依赖——不需要它的数据,但需要它的定义,否则无法理解新方案改了什么。
这个区分在做引用声明时有用:三层都要引,但引的理由不同。
3.5 存储与加载
条目页没有给出文件体积。这一点需要自己在下到数据后统计。
从规模估算:六百份手工标注的报告,每份含分词、实体、关系、属性四组嵌套结构,单份的 JSON 大概几 KB 到十几 KB;二十二万余份推理文件,按每份几 KB 算,总量在 GB 级。
加载这类嵌套 JSON 有几个实操要点。第一,不要一次全读进内存——推理文件太大,应当流式逐行处理。第二,下标是报告级的字符偏移,取文本片段时要用原始报告文本而不是分词后的列表。第三,句子切分可能丢失原文的空格,若要把实体拼回原句,需自己保留空白信息。
§4 质量与已知问题
4.1 官方披露的三项
条目页在「使用说明」里列了三条局限。
第一,标注者构成:一名跨学科数据专家、一名有医学背景的专家,标注时不参考影像,不确定时沿用 RadGraph 标签。
第二,模型在两类上明显偏弱:不确定观察的实体 F1 约七十八,提示关系的 F1 约六十九。作者给的解释是自然语言表达偏置,且这两类在原始 RadGraph 里的标注不一致更突出;同时承认长距离上下文与训练样本不足不能排除。
第三,标注不含对照与病史部分,且只覆盖胸部 X 光。
三条都写得实在,尤其第一条。承认「不参考影像」是诚实,因为这直接限定了数据的用途——它不能用来判断报告与影像是否一致。
4.2 一致性检验只在五十份上做过
条目页的流程是:两人先各自独立标五十份 MIMIC-CXR 测试报告,测出一致性;然后改为两人联合标注全量、讨论解决分歧。
一致性数字是:实体类型 97.2%、实体属性 87.3%、关系类型 91.0%。
这三个数字要看清楚适用范围。它们来自五十份试点报告,不是全量。全量数据是联合标注的产物,没有独立的双人盲标结果,因此无法从数据本身估计全量的标注噪声。
联合标注的好处是质量高、分歧被充分讨论;坏处是无法量化标注者的独立判断差异。这个取舍在人工标注项目里很常见,通常也合理——但使用时必须知道,数据里只有共识,没有分歧分布。
属性层的一致性 87.3% 是三组里最低的。这符合直觉:属性判断比实体边界判断更依赖语境理解。它也提示了一个风险——属性层的标注噪声比实体层大,而这套数据最核心的扩展恰恰在属性层。
三个属性各自的难点并不相同,笼统说「属性层最难」会掩盖真正的问题所在。按标注规范的写法逐项推演,可以大致排出难度次序。
正常性看起来最简单——实体分两类,存在的观察取异常,缺失的观察取正常,理论上一条规则就能覆盖绝大多数情形,一致性应该很高。但它有两个具体的争议面。其一,边界实体。像「肺野清晰」这样的表述,清晰究竟是「异常属性的否定形式」还是「一个正常的观察」,两种理解都能自圆其说,标注者若无明确约定就会分岔。其二,复合句。「未见气胸或胸腔积液」是一句否定了两个观察,两个实体都取正常,这没问题;但「不能除外少量积液」里,积液这个实体到底取不确定还是取异常,取决于标注者把「不能除外」理解成对观察存在性的弱肯定还是弱否定。规范里若只给了「不确定观察」这一类而没有给出判定门槛,这类句子的分歧会持续存在。
变化属性的分歧来自三分法本身。正向、负向、不变这三档在语义上是清晰的,落到具体措辞却不总是。最典型的难点是「较前相仿」与「较前无明显变化」——两者都指向不变,但严格说前者是比较结论、后者是对变化幅度的否定,若标注规范要求标注者对「变化」给出一个确定取值,两者都归不变没有争议;真正的麻烦在于「略有好转」这类带程度副词的表述,正向是确定的,但它与「明显好转」在取值上是否应当有差别,规范若只有三档就无法表达。标注者在遇到这类句子时,要么强行压进三档之一,要么留空,两种处理都会引入噪声。
动作属性的一致性最容易高估。它的取值只有可删与不可删两个,看似二分类最简单,实际判断依赖一个外部标准:删掉之后句子是否还成立。这个标准不是句法层面的,而是临床层面的。「右肺下叶实变,较前吸收」里的「较前吸收」删掉以后句子完整,语义也完整,可以删;「右肺下叶实变范围较前吸收」里的「较前吸收」若是单独成一个实体,删掉「较前」会留下「吸收」,而「吸收」本身在影像报告里是一个描述当前状态而非相对状态的词,删与不删的界线就模糊了。这意味着标注者实际上在做一次小规模的句子改写实验,而改写是否成立带有主观性。
把这三点合起来看,属性层的 87.3% 并不均匀分布在三个属性上。更可能的情形是正常性与变化相对稳定,动作因为依赖句子改写判断而拉低了整体数字。条目页没有给出分属性的一致性,所以这只是推断,无法验证。使用者的应对方式应当是把属性层噪声当作不均匀的:在用到动作属性的任务里(比如第 5.2 节那套相对观察转直接观察的流程),要预留更大的人工复核比例。
4.3 与 RadGraph 的兼容性只在两层上检验
把新方案降级成 RadGraph 兼容版本后比对,实体类型一致率 92.7%,关系类型 77.3%。
两个数字的差距说明什么。实体层的一致性高,表示两套方案对「这是不是一个实体、属于哪一类」的判断大体相同,扩展没有破坏基础。关系层的 77.3% 明显低,原因在方案设计上可以预期:新增的部分关系会改变某些「位于」关系的客体,新增的位置属性实体会插入原本直连的链条。
属性层没有比对数字,因为 RadGraph 没有属性。这意味着「这套方案在保留旧信息的同时新增了多少」这个问题,只能从实体与关系两层的数字间接推断,属性层的增量质量没有参照。
27.3 个百分点的关系层差异不算小。若有人要把 RadGraph 上训练的模型直接迁移到本数据,关系抽取部分需要重训,不能指望迁移。
4.4 自动标注没有抽检报告
二十二万余份推理数据,条目页没有给出任何人工抽检结果。
可用的替代信息只有测试集成绩:五十份 MIMIC-CXR 上实体类型 96.6%、属性 94.0%、关系 89.5%;五十份 CheXpert 上是 96.1%、89.8%、86.6%。
这些数字说明模型在同源测试集上可用。但它们不能直接推广到二十二万份,原因有三。
第一,测试集只有五十份,且是从与训练同源的数据里抽的,长尾表达未必覆盖。第二,模型在最难的几类上(不确定观察、提示关系)明显偏弱,而这几类在二十二万份里的占比未知。第三,测试集成绩是平均值,平均值掩盖了分布——可能九成的报告标得很好,一成长尾标得很差。
要判断二十二万份能用到什么程度,最实际的做法是自己抽一两百份人工核一遍,按报告复杂度分层。这件事条目页没做,是使用者该补的第一步。
4.5 属性默认值带来的读取陷阱
前面提过,属性的默认值不标。这个设计在标注阶段省了大量工作,在读数据阶段却是一个持续的陷阱。
具体表现:某实体没有正常性属性,可能是「默认正常」(缺失的观察),也可能是「默认异常」(存在的观察),还可能是「标注者认为不适用」。三种情况在数据里长得一样。
代码里若写「没有正常性就当作未标注」,统计出的缺失率会虚高。若写「没有就当默认值」,又会在真正不适用的实体上出错(比如位置属性实体本就不该有正常性)。
稳妥处理是分实体类型判断:存在的观察无属性取异常,缺失的观察无属性取正常,其他类型不适用。这个规则要写进代码常量,不能靠记忆。
4.6 分词与句子切分的隐性问题
分词来自 RadGraph,句子按句号切。
这一条带来两个可预见的问题。
第一,缩写误切。「vs.」「approx.」「Dr.」这类词里的句号会被当句子边界,导致一句话被切成两句。切分错误本身不影响实体下标(下标是报告级的),但会影响「句内关系」的统计——同一关系的主体与客体被切到不同句,就统计不到。
第二,分词与原文的空白不一一对应。多数分词会去掉多余空格,若要从分词列表拼回原文,空格数量会变。做实体文本还原时必须以原始报告为准,不能拼分词。
4.7 训练验证测试的患者级划分与它的边界
条目页说三套划分对应的患者不重叠,这是好实践。
但仍有一处需要自己确认:MIMIC-CXR 里同一患者常有多次检查,若某患者只在训练集出现一次、另一次检查落在测试集,就构成泄漏。条目页的表述是「与报告对应的患者在三套划分之间不重叠」,按字面理解应当已经避免。
实际使用时可自检:取训练集与测试集的 doc_key,抽出患者号(路径里的 p 开头那一段),求交集。若为空,说明划分干净。这一步很便宜,值得做。
§5 能做什么:五类任务与实现要点
5.1 任务一:实体关系抽取的领域适配
这是最直接的用法:用六百份标注训练一个抽取模型,在测试集上评估。
条目页给的参照成绩是:MIMIC-CXR 测试集上实体 96.6、属性 94.0、关系 89.5;CheXpert 测试集上 96.1、89.8、86.6。
实现要点有三。第一,评测要用严格匹配——实体的起止与类型都对才算对,关系的主体客体起止与类型都对才算对。宽松匹配会让数字虚高十几点,失去可比性。第二,要分层报。整体 96.6 会掩盖「不确定观察只有七十八」这个事实,而后者才是模型的真实短板。第三,跨机构测试要单独报,不能与同源测试混在一起。
模型结构上,条目页给的是一个流水线:实体用 PURE,关系用 PL-Marker,初始化权重来自 PubMedBERT。这个组合不算新,但流水线结构简单、可控,适合作为基线。
5.2 任务二:把相对观察转成直接观察
这是这套数据最独特的能力,也是它的设计初衷。
做法分三步。第一步,从标注里取出所有带「变化」属性的实体。第二步,按「动作」属性把它们分成可删与不可删。第三步,删掉可删的那些,连同指向它们的关系,剩下的就是对当前影像的直接描述。
第三步之后得到的文本,可以直接作为生成模型的训练目标,不必担心模型学到「凭空说增大」。
这个转换有一个前提需要验证:删掉可删实体后,句子是否仍然通顺、语义是否完整。举例来说,「心影增大,但稳定」删掉「稳定」后是「心影增大」,通顺;但「病灶较前缩小」里若把「较前缩小」整体当作可删,删完可能只剩「病灶」,语义大幅丢失。这类边界情形需要人工抽检一批转换结果,看转换规则是否成立。
条目页没有给出转换后的示例集,这是一个空缺。要评估这个能力,只能自己写转换脚本再抽检。
5.3 任务三:结构化监督下的报告生成
把标注当作额外的监督信号,约束生成模型输出的内容。
一种做法是两阶段:先生成文本,再抽取实体关系,与金标准图比对,用差异作为损失的一部分。另一种做法是图到文的生成:直接把结构化图作为输入,生成报告。
两种做法都需要把图转成可计算的形式。图的节点是实体(含类型与属性),边是关系。转成序列时要注意顺序——关系的方向性在序列化后容易丢失,需要用显式的方向标记。
这套数据提供的价值在于「图中含变化与动作属性」,这是其他结构化标注没有的。有了它们,模型可以学会「哪些内容属于当前影像、哪些属于间隔描述」,从而在生成时区分处理。
5.4 任务四:对照叙述的识别与规范化
单独把「对照」这一件事拿出来做,也是一个有价值的任务。
输入是一句报告文本,输出是「这句话是否含相对既往的描述」「相对的是什么」「变化方向如何」。这套数据的标注可以直接转成这个任务的训练数据。
这个任务在临床上也有独立价值。医院做质量检查时,常需要统计「多少报告含无依据的对照描述」——即报告说「与既往相比」但系统里查不到既往检查。用这套标注训练一个识别器,就能自动筛出这类报告。
5.5 任务五:中文报告的结构化改造
这套方案最值得迁移的是思路:把「相对既往」这件事从观察描述里分离出来,作为独立属性。
中文报告的对照叙述更常见,也更难处理。中文里「与某年某月片比较」「较前片」「较前」都是常见说法,且时间信息常被省略成「较前」。去标识后,这些说法会变成无指代的悬空描述。
移植需要做四件事。定义中文的实体类型(大体可沿用解剖与观察两分,但位置属性在中文里的表述更依赖量词,需要单独设计)。定义属性的取值(变化可以沿用正向、负向、不变三分,动作的两分也适用)。建立中文的不确定表达清单(「可能」「不除外」「待排」「考虑」「符合」各自的确定性程度需要重新锚定)。以及最费工的一项——标注一批中文报告,验证方案是否够用。
四件事里,第三件最容易被低估。「考虑」在中文报告里几乎等于倾向性诊断,「符合」几乎等于确定,「待排」几乎等于存疑。这三者与英文的 may、suggest、consistent with 不是一一对应,直接翻译会错。
5.6 可复现的最小路径
按官方材料,复现抽取模型的成绩需要:
- 取得受限访问权限,签署协议
- 下载 manual_data 下五个文件
- 按 train/dev 训练流水线模型(PURE 加 PL-Marker,PubMedBERT 初始化)
- 在 test_mimic 与 test_chexpert 上分别用严格匹配算微平均 F1
第四步要分开报,这是关键——把两套测试合起来算一个数,会掩盖跨机构下降。
条目页还提到代码在 GitHub 上公开。这意味着模型部分可直接复用,省掉重写的成本。但代码仓库不含数据,仍需自己申请。
5.7 DAIMS 24 项检查
| 维度 | 项 | 判定 |
|---|---|---|
| 文档 | 数据字典 | 是(data_dictionary.md 随包提供) |
| 文档 | 采集协议 | 是(标注流程、工具、人员构成都写明) |
| 文档 | 设备规格 | 不适用(无影像) |
| 文档 | 标注规范 | 是(实体、关系、属性定义完整,含示例文件) |
| 文档 | 版本历史 | 部分(仅一版,有发布说明但无变更记录) |
| 文档 | 许可说明 | 是 |
| 文档 | 引用格式 | 是(含上游两层) |
| 文档 | 局限披露 | 是(三项,写得实在) |
| 质量 | 缺失披露 | 是(属性 NA 规则明确) |
| 质量 | 信号质量说明 | 不适用 |
| 质量 | 一致性检验 | 部分(仅五十份试点,全量为联合标注) |
| 质量 | 金标准对照 | 是(人工标注作为金标准) |
| 质量 | 异常值处理 | 否(未讨论标注中的异常模式) |
| 质量 | 隐私处理 | 是(继承上游去标识,含具体替换方式) |
| 可得性 | 开放程度 | 否(受限访问) |
| 可得性 | 下载方式 | 是 |
| 可得性 | 文件校验 | 否(页面未提校验和) |
| 可得性 | 数据体量 | 否(未给文件体积) |
| 可得性 | 格式说明 | 是(JSONL,逐键说明) |
| 可得性 | 工具支持 | 是(GitHub 公开代码与模型) |
| 伦理 | 伦理批准 | 是(说明上游两项均已获伦理批准) |
| 伦理 | 知情同意 | 是(沿用上游豁免) |
| 伦理 | 试验注册 | 不适用 |
| 伦理 | 去标识化说明 | 是(MIMIC-CXR 用连续下划线替换,CheXpert 用假数据) |
二十四项中「是」十六项、「部分」两项、「否」四项、不适用两项。
未通过的四项集中在可得性与质量细节:没有校验和、没有体积、没有异常值讨论、没有全文一致性系数。前三项都是低成本可补的,第四项需要重做标注。
§6 常见误读与引用陷阱
6.1 误读一:把二十二万份当人工标注
二十二万七千八百三十五份是模型输出,不是人工标注。
人工标注只有六百份。这个比例是三百八十分之一。引用时若只写「二十二万份标注数据」,读者会以为全部有人工审核,这是实质性的误导。
准确表述应当分开:六百份人工标注加二十二万余份模型推断。
6.2 误读二:把属性缺失当未标注
前面详细说过,属性的默认值不标。缺失不等于未标注。
这个陷阱在统计上最容易出事。若算「有多少观察被标为异常」,直接数正常性属性等于异常的数量,会漏掉所有取默认值的。正确做法是按实体类型套默认规则。
6.3 误读三:以为标注能判断报告对错
标注不参考影像。这是条目页明说的。
这意味着标注只反映「报告里写了什么」,不反映「影像里实际有什么」。用这套数据训练出来的模型能判断报告是否自洽、是否符合书写规范,不能判断报告是否准确。
把两者混淆,会得出「模型能评估报告质量」的错误结论。它评估的是文本结构,不是临床正确性。
6.4 误读四:把跨机构测试的五十份当充分证据
CheXpert 只有五十份测试报告,且从未参与训练。
五十份的成绩(实体 96.1、属性 89.8、关系 86.6)说明模型在两家的书写习惯之间迁移得还行,但不构成「泛化良好」的强证据。五十份样本的置信区间很宽,且这五十份是如何从 CheXpert 里挑的、是否代表其分布,条目页未说明。
6.5 误读五:认为关系层 77.3% 一致率是失败
与 RadGraph 的关系层一致率 77.3%,看起来比实体层的 92.7% 差很多。
但这个数字的解读要看方向。本方案的关系层多了一个类型、改变了部分「位于」关系的客体,因此「不一致」中有一部分是设计意图,不是标注错误。真正该问的是:这些不一致里,有多少是新方案更准确、多少是标注分歧?条目页没有拆开这个数字。
6.6 引用时必须写清的五件事
规模分层:六百份人工加二十二万余份推断,不可合并表述。
标注不看影像:这限定了数据的用途边界。
一致性范围:97.2 与 87.3 与 91.0 都来自五十份试点,不是全量。
测试集构成:一百份测试里五十份来自另一家机构,跨机构成绩要单独报。
上游引用:本数据集、MIMIC-CXR、RadGraph 三者都要引。
§7 在生态中的位置
7.1 结构化报告的三条路线
第一条是纯实体抽取,只标「有哪些发现」,代表是各类命名实体识别工作。
第二条是实体加关系,构成图,代表是 RadGraph。
第三条是实体加关系加属性,本方案属于这一条。它的增量在于「同一个实体在不同语境下的角色不同」这一层。
三条路线的成本递增:第一条每份报告标注几分钟,第二条十几分钟,第三条更久。收益也递增:属性层提供的信息是前两条给不了的。
7.2 与报告生成评测工作的分工
同一个领域里还有一类工作在做「生成得好不好」的评估,做法是请医师逐条数错误、判显著性。
两类工作的方向相反:这一类在输入端做规范化,那一类在输出端做评估。两者互补——输入不规范,评估会被污染;输出不评估,规范化做得对不对无从验证。
实际研究中,把两者结合是自然的:用规范化后的数据训练,用医师评估的数据检验。这条链目前还没有完整走通的公开工作。
7.3 长期可用性判断
受限访问、单一版本、依赖上游三项数据,这三点决定了可用性中等。
风险有三。第一,上游依赖多:MIMIC-CXR、CheXpert、RadGraph 任一修订,本数据的对应关系都可能失效,尤其是 doc_key 里的路径。第二,CheXpert 的访问条款独立于 PhysioNet,若其政策变化,那五十份测试报告可能无法继续提供。第三,无更新:2025 年发布后未修订,而报告生成模型迭代很快。
7.4 适合谁用
| 使用者 | 适合做的事 | 不适合做的事 |
|---|---|---|
| 信息抽取研究者 | 实体关系属性联合抽取、跨机构泛化 | 影像-文本一致性研究 |
| 报告生成开发者 | 结构化监督、相对观察剥离 | 直接生成(需自己写转文本模块) |
| 放射科质控 | 对照叙述的自动识别 | 判断报告临床准确性 |
| 方法学者 | 属性化标注方案的迁移设计 | 用它做多模态预训练 |
§8 总结
这套数据的价值不在规模,而在一处具体的设计:把「相对既往的变化」从观察描述里分离出来,变成可以单独处理的属性。
三件事决定了它的用法。第一,主体是六百份人工标注,二十二万余份是模型推断,两者不可混称。第二,属性有默认值,缺失不等于未标注,读数据时必须按实体类型套规则。第三,标注不参考影像,只能判断报告内部结构,不能判断临床准确性。
使用时守住三条:跨机构成绩单独报,一致性数字注明只来自五十份试点,上游三项数据都要引用。
它处理的是一个具体而普遍的问题——去标识让对照叙述失去参照,而训练数据里的这种失真是会被模型学进去的。这个问题的解法不止一种,但从标注方案入手是其中最扎实的一种。
§9 术语与口径速查
| 术语 | 全称 | 本文口径 |
|---|---|---|
| ARRG | Automatic Radiology Report Generation | 自动放射报告生成 |
| RadGraph | — | 前代标注方案,四实体三关系 |
| ANAT | Anatomy | 解剖部位实体 |
| OBS-P | Observation-Present | 存在的观察 |
| OBS-A | Observation-Absent | 缺失的观察 |
| OBS-U | Observation-Uncertain | 不确定的观察 |
| LOC-ATT | Location-Attribute | 位置属性实体,补充量化空间描述 |
| Suggestive-Of | — | 提示关系,主体可推断客体 |
| Located-At | — | 位于关系,观察到解剖 |
| Modify | — | 修饰关系 |
| Part-Of | — | 部分关系,主体是客体的一部分 |
| Normality | — | 正常性属性,取正常或异常 |
| Action | — | 动作属性,取可删或不可删 |
| Change | — | 变化属性,取正向、负向或不变 |
| PURE | — | 实体抽取模型 |
| PL-Marker | — | 关系抽取模型 |
| PubMedBERT | — | 生物医学领域预训练语言模型 |
| 微平均 F1 | micro-F1 | 汇总所有类别的计数后算的 F1 |
| 严格匹配 | strict evaluation | 边界与类型都对才算正确 |
§10 事实清单与附录
10.1 核心事实
| 项 | 值 |
|---|---|
| 人工标注总量 | 600 份 |
| 训练集 | 425 份(MIMIC-CXR) |
| 验证集 | 75 份(MIMIC-CXR) |
| 测试集 | 100 份(50 MIMIC-CXR + 50 CheXpert) |
| 模型推断 | 227,835 份(MIMIC-CXR) |
| 实体类型数 | 5(RadGraph 4 + 位置属性 1) |
| 关系类型数 | 4(RadGraph 3 + 部分 1) |
| 实体属性数 | 3(正常性、动作、变化) |
| 标注工具 | BRAT |
| 标注者 | 2 名,一名跨学科数据专家、一名有医学背景 |
| 实体一致性 | 97.2%(50 份试点) |
| 属性一致性 | 87.3%(50 份试点) |
| 关系一致性 | 91.0%(50 份试点) |
| 与 RadGraph 实体一致 | 92.7% |
| 与 RadGraph 关系一致 | 77.3% |
| 发布日期 | 2025-02-03 |
| DOI(v1.0.0) | 10.13026/p7kf-t860 |
| DOI(latest) | 10.13026/f2sv-v647 |
| 访问等级 | Restricted |
| 许可 | PhysioNet Restricted Health Data License 1.5.0 |
| 是否需 CITI 培训 | 否 |
10.2 模型成绩
| 测试集 | 实体类型 F1 | 属性 F1 | 关系 F1 |
|---|---|---|---|
| MIMIC-CXR(50 份) | 96.6% | 94.0% | 89.5% |
| CheXpert(50 份) | 96.1% | 89.8% | 86.6% |
两类短板:不确定观察的实体 F1 约 78.3%,提示关系的 F1 约 68.6%。
另有一处数字需要说明:条目页摘要段给出 MIMIC-CXR 上实体 96.6%、属性 94.0%、关系 89.5%,正文模型段给出 96.62%、94.04%、89.50%,两者一致,只是小数位不同。CheXpert 摘要给 96.1%、89.8%、86.6%,正文给 96.06%、89.79%、86.64%,同样一致。
10.3 三个属性的取值与默认
| 属性 | 取值 | 默认情形 | 挂载对象 |
|---|---|---|---|
| 正常性 | 正常、异常 | 存在的观察默认异常,缺失的观察默认正常 | 存在的观察、缺失的观察 |
| 动作 | 可删、不可删 | 无默认,出现即标 | 观察 |
| 变化 | 正向、负向、不变 | 无默认,出现即标 | 观察 |
属性未赋值时写 NA。三个属性全为 NA 的实体不出现在属性列表里。
10.4 附录 A:读一份标注的最短代码
import json
-- 逐行读,推理文件太大,不要一次全读进内存
def load(path, is_infer=False):
kn = 'pred_ner' if is_infer else 'ner'
kr = 'pred_rel' if is_infer else 'relations'
ka = 'pred_attr' if is_infer else 'entity_attributes'
with open(path) as f:
for line in f:
d = json.loads(line)
yield d['doc_key'], d['sentences'], d[kn], d[kr], d[ka]
-- 统计某类型实体的数量:下标是报告级偏移,需按元组去重
def count_entities(ner, etype):
seen = set()
for sent in ner:
for ent in sent:
start, end, t = ent
if t == etype:
seen.add((start, end, t))
return len(seen)
-- 属性默认值规则必须显式写,不能靠缺省
DEFAULT_NORMALITY = {'OBS-P': 'Abnormal', 'OBS-A': 'Normal'}
def attr_of(ent, attrs):
start, end, t = ent
for a in attrs:
if a[0] == start and a[1] == end:
return a[2:] # 正常性、动作、变化,NA 表示未赋值
return (None, None, None)
def effective_normality(ent, attrs):
n, _, _ = attr_of(ent, attrs)
if n and n != 'NA':
return n
return DEFAULT_NORMALITY.get(ent[2])
这段代码有四个前提。
第一,实体下标是相对整份报告的字符偏移,不是相对句子。按句子解析会全部错位。
第二,实体可能在不同句子里重复出现(同一区间被标两次),去重必须按区间加类型的三元组。
第三,属性列表里只有挂了属性的实体,未挂的不出现。查属性时要按区间匹配,匹配不到就套默认规则。
第四,推理文件的键名前缀不同,读两类文件要用不同的键名映射,否则取不到值。
10.5 附录 B:六个可立即验证的疑问
- 二十二万余份推断数据的人工抽检结果是多少?
- 六百份标注里,各实体类型的分布如何,属性挂载率是多少?
- 与 RadGraph 的 27.3 个百分点关系层差异,有多少是设计意图、多少是标注分歧?
- 五十份 CheXpert 测试报告是如何从 CheXpert 中抽取的,是否分层?
- 把相对观察转成直接观察后,有多少比例的句子语义仍完整?
- 属性层的一致性 87.3% 在哪些属性上最低?
这六个问题条目页均未回答。第一个与第五个对实际使用的影响最大。
10.6 附录 C:证据链
本文数字来自 PhysioNet 条目页 v1.0.0,包括:六百份人工标注及其四段划分、二十二万七千八百三十五份推断、五个实体类型与四个关系类型与三个属性的定义、属性的默认规则与 NA 写法、标注工具与两名标注者的构成、五十份试点的一致性三数字、全量联合标注的流程、与 RadGraph 的两层一致率、模型结构与初始化权重、两组测试成绩与两类短板、三项官方局限、两个 DOI、发布日、许可类型与是否需培训、文件树与五个键的定义。
凡条目页未给出而本文提及的结构性判断(文件体积、二十二万份的抽检质量、属性挂载率、转换后的语义完整度),均标注为待核实并列入附录 B,未作推断性填充。
编辑说明
核验时点:2026 年 10 月 19 日,依据 PhysioNet 条目页 v1.0.0。
核验方式:条目页逐段读,重点核对标注方案的定义、属性的默认规则、标注流程与一致性检验的范围、模型成绩的两组数字、三项局限原文。摘要与正文的同组成绩逐位比对,确认只有小数位差异,无实质矛盾。
口径处理:六百份与二十二万余份严格分开表述,不用「数据集含二十二万份标注」这类合并说法。一致性三数字一律注明「五十份试点」,不外推为全量。跨机构成绩单独列,不与同源测试混。属性缺失的三种含义在正文与附录中各说明一遍,避免被读成单一含义。
未覆盖内容:因条目为受限访问,未能下载数据核对实体分布、属性挂载率、文件体积。二十二万余份推断数据的人工质量未经验证,条目页也未提供。转换后文本的语义完整度无法从条目页确认。伦理批号未在条目页给出,未代为补充。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- radlex — 共享标签:影像-文本对齐 / 命名实体识别
- ms-cxr — 共享标签:影像-文本对齐 / X光影像
- radgraph — 共享标签:关系抽取 / 命名实体识别
- rad-eval-x — 共享标签:影像-文本对齐 / X光影像
- openi — 共享标签:影像-文本对齐 / X光影像
- bc5cdr — 共享标签:关系抽取 / 命名实体识别
- biored — 共享标签:关系抽取 / 命名实体识别
- thyme — 共享标签:关系抽取 / 命名实体识别
- genia — 共享标签:关系抽取 / 命名实体识别
- rexgradient-160k — 共享标签:影像-文本对齐 / X光影像
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

