信息速览
一份出院小结写出来常常是一千多个词的长篇叙述,而真正决定 ICD 编码结论的,往往只是其中几十个片段。剩下的部分——既往史的复述、阴性结果的罗列、家族史、拟行检查、转科记录的重复粘贴——对编码几乎没有贡献,却实打实地占据着模型的输入长度与训练开销。这一现象在近年的文献里被直白地叫做 note bloat(病历臃肿)。主流自动编码模型的默认姿态是把整篇小结整段喂进去,于是算力花在了最不值钱的字上,噪声也跟着进来了。
另一头是标注语料的粒度问题。临床命名实体识别(Named Entity Recognition,NER)并不是新任务,i2b2 2010 共享任务语料把跨度分成 problem、test、treatment 三类,这套标签推动了整整一代临床信息抽取研究,但它回答不了编码员真正要问的事:这个“肺炎”是本次住院的现症还是既往史,是确诊还是待排,在左侧还是右侧,是患者本人的还是家属的。ICD-10-CM/PCS 的编码规则恰恰卡在这些修饰语上——少一个侧别,编码就落到了另一条。
MIMIC-IV-Ext-EntityCoding 是想同时撬动这两头的一次尝试。它不发布新的病历文本,而是给 MIMIC-IV-Note(2.2 版)里随机抽出的 400 份出院小结打上两层标注:85,328 条实体跨度,分六类;其中 10,922 条再带上五类断言状态。实体跨度被明确要求把急性度、侧别、解剖部位这类影响编码的修饰语一并包进跨度内部。这套标注由悉尼大学与 CSIRO Data61、Beamtree 的作者团队在 2026 年 9 月放到 PhysioNet 上,完整继承 MIMIC-IV-Note 的凭证访问制度。它的定位不是“更大的训练集”,而是“把整篇小结压成实体序列”这条路线上第一份公开的、按 ICD 编码需求设计的语料。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 全名 | MIMIC-IV-Ext-EntityCoding: Clinical Named Entity Recognition and Assertion Classification Dataset for ICD Coding |
| 发布方 | PhysioNet(标注由悉尼大学团队完成,原始数据来自贝斯以色列女执事医疗中心) |
| 首次发布 | 2026 年 9 月 23 日,版本 1.0.0 |
| 最近改动 | 即首个版本,官方未列出修订历史 |
| 文档数 | 400 份出院小结(自 MIMIC-IV-Note v2.2 随机抽样,按就诊类型分层) |
| 实体标注数 | 85,328 条 |
| 断言标注数 | 10,922 条(为上述实体的一个子集) |
| 实体类别 | 6 类:normal_finding / abnormal_finding / disorder / procedure / health_context / medication |
| 断言类别 | 5 类:present / absent / possible / hypothetical / not_associated_with_patient |
| 标注一致性 | 约 1,500 个实体的双标注子集上,精确跨度 F1 为 0.77,Cohen’s kappa 为 0.81 |
| 标注方式 | 单人主标注(标注者具医学学位),Label Studio v1.15;未由专业编码员复核 |
| 预处理 | medspaCy v1.2.0 + spaCy v3.7.6,清理冗余空白、去除硬换行、按句切分 |
| 文件格式 | CSV 为主,另有两个纯文本 ID 清单与一份 Markdown 标注指南 |
| 文件数 | 8 个(4 个 CSV、2 个 TXT、1 个 MD 指南、1 个 README) |
| 许可与访问 | PhysioNet Credentialed Health Data License 1.5.0 + 同名数据使用协议 1.5.0,需 CITI 培训与凭证审批 |
| 典型用途 | 临床 NER 与断言分类建模、实体驱动的 ICD 编码、可解释性研究、病历信息抽取与队列识别 |
§1 它要解决的具体麻烦
1.1 编码只需要小结的一小部分,模型却被迫读全部
出院小结是一种缝合体:它同时承担临床交接、法律记录与报销依据三种职能。写的人要交代前因后果,读的人——尤其是编码员——只在其中若干处停留。这句话在 NLP 侧的直接后果是,把整篇文本当输入既浪费又引入噪声:阴性描述、家属史、会诊意见里的推测性表述,从编码角度看都是应当被剔除的内容,但在序列模型眼里它们和阳性现症没有区别,一样占用注意力、一样参与梯度。
官方页面在 Background 里把这条逻辑讲得很清楚:神经编码模型通常处理整份出院小结,而后者“往往包含冗余或外围信息”,这种冗余被称作 note bloat,会抬高算力需求并在训练中引入噪声。本库的设计目标不是训一个端到端编码模型,而是提供一个“筛子”:先找出临床实体,再判断每个实体的断言状态,最后只把筛出来的东西交给下游。
1.2 现有临床 NER 语料的粒度卡在编码门槛之外
i2b2 2010 的三类标签(problem、test、treatment)在概念抽取层面足够好用,但它把“疾病”和“疾病的表现”压进了同一个 problem 桶。编码员不能这么做:ICD-10-CM 的许多条目要求区分基础疾病与其临床表现,同一段“呼吸困难”在心衰与在慢阻肺下会落到不同编码。官方页面专门点出了这一点:既有临床 NER 资源“往往缺乏准确 ICD 编码所需的粒度”。
本库的六类实体就是照着这个缺口设计的:把 Disorder 与 Abnormal Finding 分开,把 Procedure 与 Medication 单列,并额外设一个 Health Context 去接住 ICD-10-CM 的外部原因编码(V00–Y99)与影响健康状态的因素编码(Z00–Z99)。这三类之外的 normal_finding 看似“无用”,它的存在恰恰是为下游过滤服务的——正常发现通常不映射到 ICD-10-CM 编码,压掉它可以显著缩短输入。
1.3 三条常见的错误期待
第一条,期待它是“自动 ICD 编码的完整基准”。它只有实体与断言两层标注,没有 ICD 编码标签。想做编码任务,需要自己把标签接上去,或者沿用官方页面指向的那篇论文 [11] 的做法:先训练 NER 与 AC 模型,再把筛出的实体串成压缩文档,喂给已有的编码模型。编码侧的标签仍来自 MIMIC-IV 自身。
第二条,期待断言标注覆盖全部实体。85,328 条实体里只有 10,922 条带断言标签,且官方明确说明这个子集是被“刻意偏斜”的:稀有的假设、可能、非本人三类在标注时被优先照顾。把断言子集当成自然分布来训练或评估,得到的会是一个偏乐观的分类器。
第三条,期待它的字符偏移能直接用于原始 MIMIC-IV-Note 文本。不能。偏移是相对随库发布的 mimic-iv_notes_subset.csv 里的“处理后文本”定义的,而不是相对 MIMIC-IV-Note 原始内容。官方把这一点写进了 Known Limitations。
1.4 它能给到的与给不到的
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 临床 NER 模型的训练与评测 | 85,328 条跨度、六类、含修饰语 | 够,且类别口径与编码需求对齐 |
| 断言分类器的训练与评测 | 10,922 条五类标签 + 现成的句子切分与句内偏移 | 够做模型,不够做患病率类推断 |
| “实体序列替代全文”的压缩实验 | 实体跨度 + 类别 + 断言,可直接拼装压缩文档 | 够,这正是它配套论文的用途 |
| 端到端 ICD 自动编码 | — | 不够,库内无 ICD 标签 |
| 与 i2b2 2010 合并训练以扩类别覆盖 | 官方 Usage Notes 明确鼓励 | 够,但两套标签的边界规则要自己对齐 |
| 可解释性研究的证据锚点 | 人工标出的完整实体跨度可与注意力对齐 | 够,跨度级证据比词元级更可核对 |
| 跨机构泛化验证 | 单一美国学术医疗中心的文本 | 不够,只能做跨语料,不能做跨机构 |
| 非英文临床文本 | — | 不够,全部标注都在英文文本上 |
1.5 你的处境与它能帮到的事
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 你的编码模型输入太长、训练太慢 | 提供一套人工标注,可训练“先筛后编”的实体抽取器 | 先训 NER 与 AC,再按论文口径拼压缩文档,报告保留的内容比例 |
| 你在做临床 NER,但 i2b2 的三类标签不够用 | 六类 ICD 对齐标签可直接补充粒度 | 合并训练时先对齐边界规则,尤其是修饰语是否入跨度 |
| 你要证明模型输出“有据可查” | 实体跨度是天然的证据单位 | 把注意力或梯度映射回完整跨度,再与人工跨度比对 |
| 你要从出院小结里抽问题列表或做表型识别 | 实体与断言两层可直接过滤掉否定与假设 | 用断言列做过滤,注意断言子集并非全覆盖 |
| 你在教临床 NLP,需要一份带完整指南的语料 | 随库发布 annotation_guidelines.md,含定义、边界规则与样例 |
直接把指南当教材,让学生复标若干份再比对 |
| 你想做跨语料迁移 | 与 i2b2 2010 的断言五类口径一致 | 断言侧可合并,实体侧需要类别映射 |
1.6 一句话判断
它不是一份“编码答案集”,而是一把“编码前的筛子”——把出院小结里真正需要被编码的东西挑出来,并顺手标出每一条到底算不算数。
1.7 不适合谁:四条边界
不适合拿它直接做 ICD 编码的评测基准。 库里没有任何 ICD 编码标签,编码侧的评价必须挂到 MIMIC-IV 自带的诊断编码上,那是另一套数据、另一套访问流程。
不适合拿断言子集做流行病学或患病率推断。 官方明确说这个子集被刻意偏向稀有类别,分布不反映临床文本中的自然分布。
不适合拿它当多人共识的“金标准”。 全部发布标签来自一位有医学训练的主标注者,另一位作者只复标了约 1,500 个实体用于一致性度量,分歧没有事后仲裁,也没有专业编码员复核。
不适合跳过凭证直接下载。 它继承 MIMIC-IV-Note 的访问制度:需要 PhysioNet 凭证、签署数据使用协议,并完成 CITI 的“数据或标本仅用于研究”培训。
§2 数据构成与规格
2.1 八个文件分成三层
随库发布的八个文件可以分成三层来读。第一层是“标注层”,三个 CSV:entity_annotations.csv 给实体跨度与类别,assertion_annotations.csv 给带断言的实体的状态,assertion_sentences.csv 把断言实体所在的整句与句内偏移一并给出。第二层是“文本层”,只有一个 mimic-iv_notes_subset.csv,存放 400 份经过轻量预处理的小结正文,是全库字符偏移的基准文本。第三层是“辅助层”:entity_ids.txt 与 assertion_ids.txt 是两个纯文本 ID 清单,annotation_guidelines.md 是标注指南,README.md 是快速上手说明。
三层的依赖关系是单向的:标注层靠 note_id 指向文本层,靠 entity_id 互相指向。这意味着文本层不能省——没有它,字符偏移就是一堆没有参照物的整数。
| 文件 | 层 | 作用 | 格式 |
|---|---|---|---|
entity_annotations.csv |
标注层 | 85,328 条实体跨度与六类标签 | CSV,5 列 |
assertion_annotations.csv |
标注层 | 10,922 条断言状态与对应跨度 | CSV,5 列 |
assertion_sentences.csv |
标注层 | 断言实体所在整句 + 句内偏移 | CSV,7 列 |
mimic-iv_notes_subset.csv |
文本层 | 400 份处理后小结正文,偏移基准 | CSV,2 列 |
entity_ids.txt |
辅助层 | 全部实体 ID 清单,便于过滤与分片 | 纯文本,一行一个 |
assertion_ids.txt |
辅助层 | 带断言的实体 ID 清单 | 纯文本,一行一个 |
annotation_guidelines.md |
辅助层 | 类别定义、边界规则、样例 | Markdown |
README.md |
辅助层 | 文件速查 | Markdown |
官方文件目录在本次核验时因地域与凭证限制无法直接列出大小,因此上表不给出体积数字,只给出结构;这一点在 §10 与附录 B 中一并说明。
2.2 字段字典:四张表逐列展开
本库的“字段”就是四个 CSV 的列。下表逐列列出,含取值形态与使用注意。
| 表 | 列名 | 类型 | 含义 | 使用注意 |
|---|---|---|---|---|
entity_annotations.csv |
entity_id |
int | 实体唯一标识,跨表连接键 | 三张标注表共用同一套 ID |
entity_annotations.csv |
note_id |
str | MIMIC-IV-Note 中的小结标识 | 遵循 MIMIC-IV-Note 命名约定,可回连其他模块 |
entity_annotations.csv |
start |
int | 跨度起始字符下标(含) | 相对处理后文本,非原始文本 |
entity_annotations.csv |
end |
int | 跨度结束字符下标(不含) | 与 start 同一坐标系 |
entity_annotations.csv |
entity_label |
str | 六类之一,小写蛇形 | 官方文档用 Title Case 描述,文件里是蛇形 |
assertion_annotations.csv |
entity_id |
int | 同上 | 与实体表一一对应 |
assertion_annotations.csv |
note_id |
str | 同上 | 与实体表一致 |
assertion_annotations.csv |
start / end |
int | 同上 | 与实体表同一坐标,便于不连表也能取跨度 |
assertion_annotations.csv |
assertion_label |
str | 五类之一,小写蛇形 | 仅覆盖部分实体 |
assertion_sentences.csv |
entity_id / note_id |
int / str | 同上 | 句子表多带一列正文 |
assertion_sentences.csv |
text |
str | 实体所在整句 | 官方已分好句,省去重新分句 |
assertion_sentences.csv |
entity_text |
str | 实体在该句内的表层文本 | 应与切片结果逐字符相等 |
assertion_sentences.csv |
entity_start / entity_end |
int | 句内字符偏移(含 / 不含) | 相对 text 列,不是相对整篇 |
assertion_sentences.csv |
assertion_label |
str | 五类之一 | 与断言表的值一致 |
mimic-iv_notes_subset.csv |
note_id |
str | 小结标识 | 与标注表的连接键 |
mimic-iv_notes_subset.csv |
text |
str | 处理后的小结正文 | 已按句切分,句间以换行分隔 |
这里有个容易忽略的设计:assertion_annotations.csv 重复携带了 start 与 end。它的好处是断言建模时不必回连实体表就能拿到跨度,代价是两处偏移必须一致——如果自己做二次标注或修正,两边都要改。
2.3 标签取值的两套写法
官方在描述里用 Title Case 写类别名(如 Abnormal Finding、Not associated with patient),而发布文件里的标签串统一用小写蛇形(abnormal_finding、not_associated_with_patient)。官方明确说明这个映射是一一对应的。写数据处理代码时不要按描述里的大小写去匹配,否则会全量落空。
| 描述里的写法 | 文件里的取值 | 含义 |
|---|---|---|
| Normal Finding | normal_finding |
生理上正常的观察或检验结果,通常不映射到 ICD-10-CM 编码 |
| Abnormal Finding | abnormal_finding |
病理性或非典型的观察、检验结果或症状 |
| Disorder | disorder |
导致临床表现的基础病理或病因 |
| Procedure | procedure |
诊断性或治疗性干预,含干预中使用的具名器械 |
| Health Context | health_context |
与 V00–Y99、Z00–Z99 相关的情境因素,如社会经济状况、过敏、抢救代码、受伤情境、个人既往史 |
| Medication | medication |
药物提及(商品名或通用名),最好连同动作或给药途径 |
断言侧同理:
| 描述里的写法 | 文件里的取值 | 判断口径 |
|---|---|---|
| Present | present |
明确陈述为患者当前存在 |
| Absent | absent |
被明确否定,如“no evidence of pneumonia”“denies chest pain” |
| Possible | possible |
不确定或很可能,如“probable pneumonia” |
| Hypothetical | hypothetical |
推测或面向未来,如“if pneumonia were to occur”“considering intubation” |
| Not associated with patient | not_associated_with_patient |
提及属于患者以外的人,如“family history of diabetes” |
六类实体的边界判定有几个容易反复的地方。同样一句“慢性咳嗽”,若上下文把它当作本次住院需要处理的症状,标 abnormal_finding;若它指向已经确诊的慢阻肺,慢阻肺标 disorder、咳嗽标 abnormal_finding。同一次置管操作,器械名若属于操作的一部分则并入 procedure 跨度,不单列。药物那一类官方建议连同动作或给药途径一起标,比如“started”“held”“titrated”——这条建议的作用是把剂量调整与停药也纳入可编码的视野,而不仅仅是把药名列出来。真正决定这些边界的是随库发布的 annotation_guidelines.md,官方页面只给了定义,完整规则与样例在指南里。
这五个断言类别与 i2b2 2010 共享任务使用的断言类别是同一套口径:present、absent、possible、hypothetical、not associated with someone else。这是本库能被直接用于跨语料合并训练的原因之一,也是它与多数只标“是否否定”的语料最大的区别。
2.4 一条实体的完整解剖
取一条 assertion_annotations.csv 里的记录来读。它有 entity_id、note_id、start、end、assertion_label 五个值。要把它还原成可见的文字,需要三步:先用 note_id 到文本层取正文,再用 start:end 切片,最后用 entity_id 到实体表取类别。
import pandas as pd
#-- 四个文件全部读进来;note_id 是文本层与标注层之间的桥
ent = pd.read_csv('entity_annotations.csv')
asr = pd.read_csv('assertion_annotations.csv')
sen = pd.read_csv('assertion_sentences.csv')
notes = pd.read_csv('mimic-iv_notes_subset.csv').set_index('note_id')
row = asr.iloc[0]
txt = notes.loc[row['note_id'], 'text']
#-- 切片结果应当与句子表里的 entity_text 完全一致
print(repr(txt[row['start']:row['end']]))
print(ent.set_index('entity_id').loc[row['entity_id'], 'entity_label'])
print(row['assertion_label'])
如果 txt[start:end] 与句子表里的 entity_text 对不上,九成是坐标系搞错了:句子表里的 entity_start / entity_end 是相对 text 列的句内偏移,而两张标注表里的 start / end 是相对整篇处理后文本的偏移。官方把这条不变式写成了等式:text[entity_start:entity_end] == entity_text,逐行成立。
2.5 主键映射:两个键、三条路径
| 键 | 出现在 | 用途 | 注意 |
|---|---|---|---|
note_id |
四张表全有 | 把标注连回小结正文,也可连回 MIMIC-IV 其他模块 | 要拿原始未处理文本需另申请 MIMIC-IV-Note 凭证 |
entity_id |
三张标注表 + 两个 ID 清单 | 把 NER 标签与断言标签拼到同一个实体上 | 断言表里的 ID 是实体表的真子集 |
| 字符偏移 | 两张标注表(篇内)、句子表(句内) | 定位实体在文本中的位置 | 两套坐标系不可混用 |
两个 ID 清单的存在是有实际用处的:做分片训练时,可以先读 assertion_ids.txt 拿到全部带断言的 ID,再按这个集合过滤实体表,不必解析整个 CSV。entity_ids.txt 同理,等于实体全集的一个轻量索引。
2.6 与同类语料的字段差异
| 维度 | 本库 | i2b2 2010 共享任务语料 | 多数仅标否定的语料 |
|---|---|---|---|
| 实体类别数 | 6 | 3(problem / test / treatment) | 视任务而定,常为 1–2 |
| 是否区分疾病与表现 | 是(Disorder 与 Abnormal Finding 分开) | 否,同归 problem | 通常否 |
| 修饰语是否入跨度 | 是(急性度、侧别、解剖部位) | 视标注细则而定,通常只标核心概念 | 通常否 |
| 断言类别数 | 5 | 5,口径相同 | 常为 2(肯定 / 否定) |
| 偏移坐标系 | 处理后文本(随库发布) | 原始语料文本 | 原始文本 |
| 是否随库发指南 | 是(含边界规则与样例) | 是(任务指南另行发布) | 视项目而定 |
| 编码体系对齐 | ICD-10-CM/PCS | 未对齐 | 通常未对齐 |
这张表最该被记住的是第三行。修饰语入跨度这一条决定了本库能不能直接用于编码:如果跨度只标“pneumonia”而不带“left lower lobe”,下游仍要回到原文去找部位;本库把这些一并包进去,实体串起来就能独立成立。
§3 它是谁的数据:悉尼大学团队压在 MIMIC-IV-Note 上的一层标注
3.1 贡献者与机构
四位作者分别是 James C Douglas(悉尼大学)、Yidong Gan(悉尼大学、CSIRO Data61)、Ben Hachey(悉尼大学、Beamtree Pty Ltd)、Jonathan Kummerfeld(悉尼大学)。主标注者由其中一位具医学学位的作者担任,第二标注者也是论文作者之一。工作得到澳大利亚研究委员会 Discovery Early Career Researcher Award 的部分资助。
这个作者构成解释了语料的两个性格:标注质量靠的是单人医学背景,而不是多人仲裁;标注指南的编写思路来自编码框架,而不是来自语言学本体。前者意味着一致性的上限受制于一个人,后者意味着标签的可用性直接指向编码任务。
3.2 时间线
| 时间 | 事件 |
|---|---|
| 2023 年 1 月 | 父项目 MIMIC-IV-Note 2.2 版发布(该版本只改元数据) |
| 2025 年 7 月 | 配套论文《Less is more: explainable and efficient ICD code prediction with clinical entities》发表于 ACL 2025(第 30835–30847 页) |
| 2026 年 9 月 23 日 | 数据集 1.0.0 在 PhysioNet 发布,DOI 10.13026/58h9-pm85 |
论文在前、数据在后的顺序值得留意:它不是先把语料放出来等人用,而是方法先跑通、结论先发表,语料作为可复现性的一部分随后公开。这带来一个实际影响——围绕它的第一批用法已经由作者本人定义好了,后来者如果沿用同一口径,可比性最好;如果换口径,就要在方法节里明说。
3.3 采集场景:从三十三万份里分层抽出四百份
抽样框是 MIMIC-IV-Note 2.2 版,它的出院小结部分共有 331,794 份,来自 145,915 名在波士顿贝斯以色列女执事医疗中心住院或急诊就诊的患者。本库从这三十多万份里随机抽出 400 份,并按就诊类型(encounter type)分层,以便让不同临床场景都有代表。
分层抽样这个动作说明作者在意的是覆盖面而不是统计效率:400 份相对于三十三万份,任何按比例的精确估计都无从谈起;但当目的是让标注器见到尽量多样的写法时,分层比简单随机更划算。理解这一点,就不会误用它去做“MIMIC-IV 出院小结整体特征”的推断。
预处理是轻量的三步:整理冗余空白、去除硬换行(hard-wrapped formatting)、按句切分。工具链是 medspaCy 1.2.0 与 spaCy 3.7.6,其中分句用的是 medspaCy 的分句组件。官方强调除了这些格式改动,每份小结的文字内容没有被改写。
3.4 数据来源的三个层次
| 层次 | 内容 | 谁负责 |
|---|---|---|
| 第一层:临床现场 | 波士顿贝斯以色列女执事医疗中心住院与急诊的出院小结 | 原医院 |
| 第二层:去标识与发布 | MIMIC-IV-Note v2.2,按 HIPAA 安全港条款去除受保护健康信息,被替换处用三个下划线标记 | MIT 计算生理实验室 / PhysioNet |
| 第三层:标注 | 400 份上的实体跨度与断言状态,以及标注指南 | 悉尼大学团队 |
三层的许可与责任也是分层的。本库不产生新的受保护健康信息——官方在 Ethics 一节里说得很直接:发布的产物只有类别标签、字符偏移、取自已去标识文本的实体文本,以及这些文本的句级摘录。但它继承了 MIMIC-IV-Note 的访问制度、许可与使用协议,这一点没有任何松动。
§4 它最独特的东西:修饰语被写进了跨度
4.1 ICD 对齐的实体模式为什么稀缺
多数临床 NER 语料的设计目标是“把临床概念找全”,因此类别划分贴着语言学或本体学的边界走。编码任务的目标不一样:它要的是“把能被分配编码的那部分找出来,并且找出来的东西自带足够信息”。这两个目标的差别在标签集上表现为三条——
第一,疾病与表现必须分开,因为 ICD-10-CM 很多条目按病因与表现分别编码。第二,必须有一个类别专门接住“不映射到疾病编码、但影响编码”的信息,这就是 Health Context 的来历:外部原因编码 V00–Y99 与影响健康状态的因素编码 Z00–Z99 都要靠它。第三,修饰语必须与核心概念绑定,否则抽出来的片段不足以支撑编码。
官方页面在 Abstract 里把第三条当作与既往资源的主要区别来写:schema 是“以 ICD-10-CM/PCS 编码框架为念”开发的,在实体跨度内捕获急性度、侧别与解剖部位等编码相关修饰语。
4.2 一个具体案例:否定与假设的分岔
设想一句常见的出院小结表述:“no evidence of pneumonia”。在只标实体的语料里,pneumonia 会被标成一个 problem;在只标否定的语料里,它会被标成 negated。本库的处理是两条信息并存:跨度标为 abnormal_finding(若上下文指向症状或影像发现)或 disorder,断言标为 absent。下游要过滤时,按断言列把 absent、hypothetical、not_associated_with_patient 三类剔除即可。
再看“considering intubation if worsening”。intubation 属于 procedure,断言是 hypothetical——它既不是已发生的操作,也不该被编码。只标实体的语料会把它和真实做过插管混在一起;本库在断言层把它分开。这就是为什么官方把 NER 与 AC 说成一对:单有 NER,压缩后的文档里仍塞满否定与假设;加上 AC,才谈得上“筛”。
第三例是家族史。“family history of diabetes”里的 diabetes 仍要被标成实体——它是文本里真实出现的临床概念——但断言要标 not_associated_with_patient。这一条最容易被漏标,因为许多标注规范会把家族史直接排除在标注范围之外。本库选择保留实体、在断言层区分,好处是下游想做家族史相关的抽取时不必重新标注。
修饰语入跨度可以对照着看:同样一个“肺炎”,跨成 pneumonia 与跨成 acute left lower lobe pneumonia,下游能不能直接决定编码是不同的。官方把急性度、侧别、解剖部位列为要在跨度内捕获的修饰语,正是为了让实体串起来之后能独立支撑编码判断,而不必回到原文找上下文。
4.3 官方公布的类别规模
下表是官方页面 Entity Statistics 与 Assertion Statistics 两个表的原值,逐字搬运,未作任何加工。这是官方明确写出的规模数字,可作为核对基线。
| 实体类别 | 条数 | 官方给出的占比 |
|---|---|---|
| Normal Finding | 14,362 | 16.8% |
| Abnormal Finding | 26,463 | 31.0% |
| Disorder | 11,197 | 13.1% |
| Procedure | 7,665 | 9.0% |
| Health Context | 7,275 | 8.5% |
| Medication | 18,366 | 21.5% |
| 断言类别 | 条数 | 官方给出的占比 |
|---|---|---|
| Present | 5,180 | 47.4% |
| Absent | 2,187 | 20.0% |
| Possible | 1,152 | 10.5% |
| Hypothetical | 1,796 | 16.4% |
| Not associated with patient | 607 | 5.6% |
读这两张表要注意分母不同:实体表的分母是 85,328,断言表的分母是 10,922。断言表描述的是那个被刻意偏斜的子集,不是全量实体的自然状态——官方在同一节后面紧接着就提醒了这一点。
4.4 标注的两层与一致性数字
全部发布标签出自一位主标注者,逐篇单遍完成:一边划跨度一边定断言,遵循随库发布的书面指南。质量保障做了两件事:指南本身以 ICD-10-CM/PCS 框架为依据;另一位作者独立复标了一个含约 1,500 个实体的随机文档子集,用同一份指南。两者的一致程度为精确跨度 F1 0.77、Cohen’s kappa 0.81,官方说这与早期临床 NER 研究报道的标注者间一致性相符。
关键在于后面两句:分歧没有事后仲裁,主标注者的标签作为唯一参考集发布,整个数据集未经专业临床编码员复核。0.77 的 F1 意味着每五个实体里大约有一个在边界或存在性上与另一位标注者不一致——这不是“错误率”,但是使用时必须记住的噪声量级。
4.5 边界条件:什么情况下它不再适用
超出出院小结的文类。 全部标注都在出院小结上,放射报告、手术记录、门诊病程的写法不同,直接迁移没有保障。
超出英文。 官方明确写:全部标注都在英文临床文本上。
需要自然分布的断言。 见 §4.3,断言子集被刻意偏向稀有类别。
需要原始未处理文本。 偏移定义在预处理后的文本上;要拿原文,必须另行取得 MIMIC-IV-Note 的凭证。
需要专业编码员口径。 标注者具医学训练但不是编码员,标签也没有经过编码员复核。用它训练出来的“编码前筛子”,与真实编码员的取舍之间仍有距离。
§5 怎么拿到:从凭证到可训练表
5.1 目录结构与访问面
PhysioNet 上这类凭证项目的文件目录是扁平的:版本号目录下直接放全部文件,没有按文类或年份分的子目录。本库只有八个文件,不存在目录遍历问题。
路径(相对 /files/mimic-iv-ext-entitycoding/1.0.0/) |
内容 | 体积 |
|---|---|---|
entity_annotations.csv |
85,328 条实体标注 | 未获取(凭证与地域限制,见 §10) |
assertion_annotations.csv |
10,922 条断言标注 | 未获取 |
assertion_sentences.csv |
断言实体所在句与句内偏移 | 未获取 |
mimic-iv_notes_subset.csv |
400 份处理后小结正文 | 未获取 |
entity_ids.txt |
实体 ID 清单 | 未获取 |
assertion_ids.txt |
断言实体 ID 清单 | 未获取 |
annotation_guidelines.md |
标注指南 | 未获取 |
README.md |
文件速查 | 未获取 |
体积一栏留空是刻意的。本次核验时文件目录对当前网络环境返回“因法律或政策限制不可用”,无法读取响应头或目录清单,因此不写任何体积数字,也不做估算。按结构推断体积毫无疑义——四个 CSV 的行数量级已知(8.5 万、1.1 万、1.1 万、400),真正决定体积的是 text 列与 entity_text 列的长度,那正是拿不到的部分。
5.2 凭证与批量下载
访问顺序是固定的三步:先完成 CITI 的“数据或标本仅用于研究”培训,再在 PhysioNet 上申请凭证并签署 Credentialed Health Data Use Agreement 1.5.0,获批后才能下载。
#-- 第一步:登录并保住会话 cookie(用户名与口令换成你自己的)
wget --keep-session-cookies --save-cookies cookies.txt \
--post-data 'username=YOUR_NAME&password=YOUR_PASS' \
--delete-after https://physionet.org/login/
#-- 第二步:递归取回 1.0.0 目录下的全部文件
wget --load-cookies cookies.txt -r -N -c -np -nH --cut-dirs=2 \
https://physionet.org/files/mimic-iv-ext-entitycoding/1.0.0/
两个细节。其一,-np(no parent)必须保留,否则会顺着父目录爬到别的项目去。其二,PhysioNet 对凭证项目的目录有时会按地域返回不可用;如果第二步拿到的是一段 HTML 提示而不是 CSV,先确认账号所在地区是否在允许范围内,再联系官方,而不是反复重试。
5.3 读表的最小流程
import pandas as pd
#-- 一次性读入,指明类型避免 note_id 被推断成别的类型
ent = pd.read_csv('entity_annotations.csv', dtype={'note_id': str})
asr = pd.read_csv('assertion_annotations.csv', dtype={'note_id': str})
sen = pd.read_csv('assertion_sentences.csv', dtype={'note_id': str})
notes = pd.read_csv('mimic-iv_notes_subset.csv', dtype={'note_id': str})
for name, df in [('entity', ent), ('assertion', asr),
('sentence', sen), ('notes', notes)]:
print(name, df.shape, list(df.columns))
打印列名的那一行不能省。四个文件的列名相似但不等价,start 在两张标注表里是篇内偏移,在句子表里没有同名列——句子表用的是 entity_start。混用这两套偏移是最常见的错误。
5.4 用 entity_id 把 NER 与 AC 拼起来
#-- 左连接:保留全部实体,断言缺失的行为 NaN
merged = ent.merge(asr[['entity_id', 'assertion_label']],
on='entity_id', how='left')
#-- 有断言的实体数应当与 assertion_ids.txt 的行数一致
ids = [int(x) for x in open('assertion_ids.txt').read().split()]
print(len(ids), merged['assertion_label'].notna().sum())
上面那个等式是一次自检:如果两边对不上,说明读文件时丢了行或 ID 类型被改过(例如被读成浮点数导致连接失败)。
5.5 按偏移还原实体文本并做不变式校验
idx = notes.set_index('note_id')
def surface(row):
#-- 篇内偏移:直接对处理后正文切片
return idx.loc[row['note_id'], 'text'][row['start']:row['end']]
sample = ent.head(5)
for _, r in sample.iterrows():
print(r['entity_id'], r['entity_label'], repr(surface(r)))
#-- 句内偏移不变式:text[entity_start:entity_end] == entity_text
ok = all(t[a:b] == e for t, a, b, e in
zip(sen['text'], sen['entity_start'], sen['entity_end'], sen['entity_text']))
print('sentence offsets consistent:', ok)
这个校验应该对每一行都成立。如果某行不成立,优先怀疑 CSV 里含换行或逗号的字段被切坏——读文件时给 text 类字段留足引号处理,别用朴素的分行解析。
5.6 五个最容易出错的地方
| 位置 | 错误写法 | 后果 | 正确做法 |
|---|---|---|---|
| 标签匹配 | 按文档里的 Abnormal Finding 匹配 |
全量落空 | 用 abnormal_finding 等小写蛇形取值 |
| 偏移坐标 | 拿句子表的 entity_start 去切整篇正文 |
取到无关文字 | 句子表偏移切 text 列,标注表偏移切处理后正文 |
| 偏移基准 | 拿偏移去切 MIMIC-IV-Note 原始文本 | 系统性错位 | 偏移只相对 mimic-iv_notes_subset.csv |
| 断言覆盖 | 把 10,922 当成全部实体在做的事 | 结论偏乐观 | 断言是子集且被刻意偏斜 |
| 数据集划分 | 按行随机切分 | 同一份小结的实体散落两侧 | 按 note_id 分组划分 |
最后一行是所有病历级标注语料共同的坑。实体不是独立样本,同一份小结里的实体共享同一位书写者、同一次住院、同一套措辞习惯。按实体行随机切分等于让模型在测试时见到训练时那篇文书的兄弟片段,分数会虚高。
§6 与库内条目的关系
6.1 关系图谱
把本库放在“临床文本标注”这一类里看,它的坐标是:文类最窄(只做出院小结)、标签最贴编码(六加五类并带修饰语)、规模中等(8.5 万条跨度)、访问最严(凭证制)。
| 站内数据集 | 与本库的关系 | 分工 |
|---|---|---|
| MIMIC-IV-Note | 直接父项目,本库的全部文本来自它 | 要原文、要更大文本量,用它 |
| MIMIC-IV 临床数据库 | 祖项目,提供结构化诊疗与诊断编码 | 编码侧的标签在这里 |
| i2b2/n2c2 NLP 共享任务语料 | 断言口径相同、实体更粗的前辈语料 | 合并训练时补类别覆盖 |
| MIMIC-III-Ext-Notes 概念标注 | 同为小规模人工标注的 MIMIC 笔记语料 | 护理记录场景的对照 |
| MIMIC-IV 药物抽取标签集 | 同样处理出院小结,只盯药物一类 | 药物细粒度任务用它,全面抽取用本库 |
| SOAP 标注与问题列表摘要 | 同为病程记录的人工标注 | 段落结构任务用它 |
| MIMIC-IV-Ext-BHC 简要住院病程标注 | 同为 MIMIC 文本上的扩展标注 | 摘要类任务用它 |
| SNOMED CT 到 ICD-10-CM 映射 | 术语体系侧的编码桥梁 | 概念标准化与编码落位 |
| MIMIC-Ext-SynNotes 合成笔记语料 | 另一端:用合成文本换规模 | 预训练语料用它,人工标注用本库 |
6.2 检索路径
| 你要找的东西 | 检索词 | 会落到哪里 |
|---|---|---|
| 本库全部文本的来源 | mimic-iv-note、discharge |
§3.4 的三个层次 |
| 编码侧的标签 | mimic-iv、ICD、diagnoses_icd |
§1.7 第一条边界 |
| 更粗但更老的实体语料 | i2b2、n2c2、shared task |
§2.6 的字段差异表 |
| 断言分类的前辈口径 | assertion、negation、ConText |
§2.3 的断言表 |
| 药物抽取的专项标注 | medication、drug extraction |
§6.1 |
| 标注一致性的通用基线 | inter-annotator、kappa |
§4.4 |
6.3 与其他语料的分工判据
| 任务 | 主粮仓该用什么 | 本库的位置 | 原因 |
|---|---|---|---|
| 临床 NER 预训练 | 大规模合成或弱监督笔记语料 | 微调与评测 | 8.5 万条跨度够微调,不够预训练 |
| 断言分类 | 本库 + i2b2 合并 | 主力之一 | 五类口径与 i2b2 一致,可互补 |
| 实体驱动的 ICD 编码 | 本库 + MIMIC-IV 编码标签 | 主力 | 唯一按 ICD 框架设计的公开跨度标注 |
| 端到端编码模型对比 | MIMIC-IV 全文基准 | 不参与 | 库内无编码标签 |
| 可解释性证据评估 | 本库 | 主力 | 人工跨度是可核对的证据单位 |
| 病历级长文本建模 | MIMIC-IV-Note 全量 | 不参与 | 只有 400 份 |
| 非英文临床 NLP | 其他语种的语料 | 不适用 | 全英文 |
§7 质量评估与局限性
7.0 阅读本节前的一个前置校正
先纠正一个容易下的判断:看到“单人标注”就认定为质量差。这个判断混淆了两件事——标注过程是否严谨,与标注结果是否经过多人仲裁。本库的指南随库发布、类别定义贴着编码框架、一致性有量化数字并如实公布,这些都指向“过程严谨”。真正的问题不在严谨与否,而在可复现性的边界:没有仲裁,意味着 0.77 的 F1 就是这套标签的一致程度上限,下游模型的天花板也大致被它框住。
把这个校正放到五维评分里读,就会明白下面这张表为什么“规模”一栏给低分而“任务唯一性”一栏给高分——两者衡量的不是同一件事。
7.1 五维评分
按常见的数据质量维度打分,每项 1–5 分,分数针对“作为临床 NER 与断言分类研究数据”这个用途。
| 维度 | 分数 | 理由 |
|---|---|---|
| 规模 | 3 | 8.5 万条跨度、400 份文档,够微调不够预训练 |
| 标注质量 | 3 | 单人主标注,双标子集 F1 0.77、kappa 0.81,无仲裁 |
| 文档完备度 | 5 | 逐文件逐列说明,随库发布完整标注指南与不变式 |
| 任务唯一性 | 5 | 公开语料里少见地把修饰语写进跨度并对齐 ICD |
| 可获得性 | 2 | 凭证审批 + CITI 培训 + 数据使用协议,门槛明显高于开放库 |
7.2 标注质量的两层
第一层是指南层。类别定义、边界规则与样例都在 annotation_guidelines.md 里,这套指南是围绕 ICD-10-CM/PCS 写的,因此“为什么这么切”是可追溯的——这一点直接决定了别人能不能复标。
第二层是执行层。主标注者单遍完成,两位标注者的分歧未做仲裁。官方给出了量化的不一致程度,但没有给出分歧的类型构成(是边界长短之争,还是类别判断之争)。想复现或改进的人,只能自己重跑双标实验。
7.3 已知的、可枚举的偏差
| 偏差 | 机制 | 对下游的影响 |
|---|---|---|
| 单人标注偏差 | 全部发布标签出自一人 | 系统性偏好无法被平均掉 |
| 断言子集偏斜 | 稀有类别在标注时被优先照顾 | 断言分布不反映自然文本 |
| 单机构来源 | 全部文本来自波士顿一家学术医疗中心 | 跨机构泛化无从验证 |
| 文类单一 | 只有出院小结 | 迁移到其他文书无保障 |
| 预处理改写 | 空白整理、去硬换行、按句切分 | 偏移只在处理后文本上成立 |
| 英文单一 | 全部标注在英文文本上 | 多语言能力无从评估 |
这份清单的价值在于它是“可枚举”的:官方把每一条都写出来了,使用者不需要猜。相比之下,很多语料的偏差只能靠自己挖。
7.4 外部验证矩阵
| 说法 | 支持它的证据在哪 | 强度 |
|---|---|---|
| 六类实体能支撑编码前的筛选 | 配套论文在 MIMIC-IV 上报告:只使用 22% 的内容即可达到与全文基线近似的编码性能,训练时间减少一半以上 | 论文摘要自述,非独立复现 |
| 断言层能剔除否定与假设 | 断言五类与 i2b2 2010 口径一致,官方鼓励合并训练 | 口径层面成立,效果层面需自测 |
| 标注一致性可接受 | 双标子集精确跨度 F1 0.77、kappa 0.81 | 官方数字,有量化但不分类型 |
| 跨机构可用 | 无任何证据 | 不成立 |
| 编码员口径一致 | 官方明确说未经专业编码员复核 | 明确否定 |
7.5 它为何值得持续关注:稀缺的不是文本量,是那个对齐
MIMIC 系谱上并不缺文本,缺的是“为某件事专门标过”的文本。三十三万份出院小结随时可以拿来跑语言模型,但要训练一个能把急性度、侧别、解剖部位连同概念一起抽出来的抽取器,此前没有公开语料可用。本库补的正是这一格,而且补得克制:不夸大覆盖、不隐藏偏斜、把指南和不变式一并交出来。这种克制让它的可复用期比单纯的规模更长。
§8 生态位与历史
8.1 历史沿革
自动 ICD 编码这条线走过了三个阶段。早期是基于规则与词典的匹配;2018 年前后随着可解释的注意力编码模型出现,端到端神经模型成为主流,默认输入是整份出院小结;2022 年之后,两条反思同时出现——一条指出临床文本存在大量冗余,另一条指出冗余会损害深度模型的预测。这两条反思共同催生了“先筛后编”的路线。
本库是这条路线上的产物:它不是为“证明筛法更好”而造的评测集,而是为“让筛法可训练”而造的训练集。配套论文发表于 2025 年 7 月的 ACL,数据集 2026 年 9 月发布,中间隔了一年多——这段时间差里,语料本身还在按指南打磨。
8.2 与共享任务的关系
本库不是任何共享任务的官方数据,没有排行榜,也没有测试集金标。真正与它血脉相连的是 i2b2 2010 的概念、断言与关系任务:断言五类沿用同一套口径,实体粒度则比那届三类的划分更细。官方在 Usage Notes 里直接建议把它与 i2b2 2010 合并使用,用本库的细粒度类别去补早期语料的粗粒度类别。
对使用者来说,这意味着两件事:一是没有官方排行榜可刷,评测口径要自己定并写清楚;二是跨语料合并是本库作者认可的既定用法,不必担心“混数据”被视为不严谨。
8.3 生态位:编码前的那一层
按“文本规模 × 标注贴合度”两个轴摆,本库的位置很清楚:
| 位置 | 代表资源 | 特点 |
|---|---|---|
| 大规模 + 无标注 | MIMIC-IV-Note 全量、合成笔记语料 | 适合预训练,不适合监督评测 |
| 大规模 + 弱标注 | 由规则或远程监督生成标签的语料 | 噪声高,覆盖广 |
| 小规模 + 人工精标 | 本库、i2b2 2010 及其他人工标注扩展集 | 适合监督训练与评测 |
| 小规模 + 人工精标 + 编码对齐 | 本库 | 目前只有它 |
最后一行就是它的生态位。它不是要取代前面三格,而是补上了从“抽概念”到“能编码”之间缺的那一层。
8.4 谁在用它,用来做什么
按官方列出的用途,四类人各自能拿到东西:做临床 NER 的人拿到一套带指南的细粒度标签;做断言分类的人拿到五类标签与现成的句子级输入;做编码自动化的人拿到“压缩输入”的构造依据;做可解释性的人拿到可与注意力对齐的人工跨度。此外,信息抽取、队列识别、问题列表构建、表型识别与病历检索也被官方列为适用方向。
由于发布尚早、且需要凭证,围绕它的第三方复现还不成规模。判断一份成果是否可信时,先看它是否说明了三件事:用的是 1.0.0 版本、断言子集是如何处理的、划分是否按 note_id 分组。
§9 使用指引
9.1 三种角色的路径
| 角色 | 最短路径 | 要避开的坑 |
|---|---|---|
| 临床 NLP 研究者 | 读指南 → 按 note_id 分组划分 → 训 NER 与 AC → 与 i2b2 合并做对照 |
按实体行随机划分;断言当全覆盖 |
| 病案编码与医疗信息工程人员 | 读指南 → 关注修饰语入跨度的规则 → 用它评估“筛后编”的压缩比 | 直接用它当编码准确率基准 |
| 医学信息学教学人员 | 发指南给学生 → 复标若干份 → 与发布标签比对并讨论分歧 | 把发布标签当唯一正解 |
9.2 一条最短的可用流程
import pandas as pd
#-- 1 读表
ent = pd.read_csv('entity_annotations.csv', dtype={'note_id': str})
asr = pd.read_csv('assertion_annotations.csv', dtype={'note_id': str})
notes = pd.read_csv('mimic-iv_notes_subset.csv', dtype={'note_id': str})
idx = notes.set_index('note_id')
#-- 2 拼 NER + AC,并按 note_id 分组做划分的键
df = ent.merge(asr[['entity_id', 'assertion_label']], on='entity_id', how='left')
df['surface'] = [idx.loc[n, 'text'][s:e]
for n, s, e in zip(df['note_id'], df['start'], df['end'])]
#-- 3 按文档分组划分:同一份小结的实体只进一侧
doc_ids = df['note_id'].drop_duplicates()
train_docs = set(doc_ids.sample(frac=0.8, random_state=0))
train = df[df['note_id'].isin(train_docs)]
test = df[~df['note_id'].isin(train_docs)]
print(len(train), len(test), train['note_id'].nunique(), test['note_id'].nunique())
第三步是整套流程里最不该省的一步。按实体行随机切分会让同一份小结的实体同时出现在两侧,模型只要记住文书风格就能拿分。分组键用 note_id,不用 entity_id,也不用行号。
9.3 引用方式
| 引用对象 | 内容 |
|---|---|
| 数据集 | Douglas JC, Gan Y, Hachey B, Kummerfeld JK. MIMIC-IV-Ext-EntityCoding: Clinical Named Entity Recognition and Assertion Classification Dataset for ICD Coding (version 1.0.0). PhysioNet. 2026. doi:10.13026/58h9-pm85 |
| 原始论文 | Douglas JC, Gan Y, Hachey B, Kummerfeld JK. Less is more: explainable and efficient ICD code prediction with clinical entities. ACL 2025:30835-30847. doi:10.18653/v1/2025.acl-long.1489 |
| 父项目 | Johnson A, Pollard T, Horng S, Celi LA, Mark R. MIMIC-IV-Note: Deidentified free-text clinical notes (version 2.2). PhysioNet. 2023. doi:10.13026/1n74-ne17 |
| 平台 | PhysioNet 平台综述论文(2026 年 Nature Health),按官方页面 Cite 按钮生成 |
写论文时建议同时注明:使用的版本号(1.0.0)、断言子集的处理方式、以及划分是否按 note_id 分组。
§10 AI 使用声明
| 项目 | 声明 |
|---|---|
| 文本生成 | 本文由 AI 辅助撰写,编辑把关结构与事实 |
| 数字来源 | 规模、结构、边界三类数字来自 PhysioNet 官方页面的 Abstract / Methods / Data Description / Usage Notes / Known Limitations 各节 |
| 文件核验 | 官方页面可读,File Structure 与各 CSV 的列定义逐条核对;文件目录因地域与凭证限制未能列出,体积数字未获取 |
| 官方统计表 | §4.3 两张表为官方页面 Entity Statistics 与 Assertion Statistics 的原值搬运,未作加工 |
| 论文信息 | 仅读 ACL Anthology 页面摘要与官方页面给出的题录,未读全文 |
| 未核验内容 | 八个文件的实际体积;每份小结的实体条数分布;边界分歧的类型构成;句切分在不同文书上的稳定性 |
| 图像 | 无配图;封面为生成式提示词,不含真实病历内容 |
| 免责 | 本文不构成临床或编码建议;数据使用须遵守 PhysioNet 凭证访问制度与数据使用协议 |
常见误读(避坑清单)
| 说法 | 实际 | 证据 |
|---|---|---|
| 「它带着 ICD 编码标签」 | 只有实体与断言两层标注,没有任何 ICD 标签 | 官方 File Structure 里没有编码列 |
| 「八万五千条实体都有断言」 | 只有 10,922 条带断言,且是刻意偏斜的子集 | 官方 Known Limitations 第三条 |
| 「偏移可以直接切原始 MIMIC-IV-Note 文本」 | 偏移相对随库发布的处理后文本定义 | 官方 Character Offsets 小节 |
| 「标签是 Abnormal Finding 这种写法」 | 文件里是小写蛇形 abnormal_finding |
官方 Label Naming Conventions |
| 「它是多人仲裁的金标准」 | 单人主标注,双标子集 F1 0.77 且分歧未仲裁 | 官方 Quality Control 与 Known Limitations |
| 「断言五类的比例就是临床真实比例」 | 稀有类别被优先照顾,分布被刻意偏斜 | 官方 Known Limitations |
| 「句子表的 entity_start 能切整篇正文」 | 那是句内偏移,切的是 text 列 |
官方对 assertion_sentences.csv 的列说明 |
| 「按实体行随机划分就行」 | 同一份小结的实体会泄漏到两侧 | 实体以 note_id 聚簇,官方以 note_id 作为文档级连接键 |
| 「四百份就能代表三十三万份」 | 是按就诊类型分层的小样本,不做总体推断 | 官方 Methods 的 Data Selection |
| 「凭证拿到后可以随便分发」 | 继承数据使用协议,受协议约束 | 官方 Ethics 与 Access 段 |
FAQ
Q1:它到底标了多少东西?
400 份出院小结,85,328 条实体跨度标注,10,922 条断言标注。实体分六类,断言分五类。断言是实体的子集,不是每个实体都有。这三个数字都来自官方页面的 Abstract 与 Data Description。
Q2:能不能直接用它做自动 ICD 编码?
不能直接做。库里没有任何 ICD 编码标签,它提供的是编码之前的那一层——实体与断言。要做编码,需要把 ICD 标签从 MIMIC-IV 侧接进来,或者沿用配套论文的做法:先训 NER 与 AC,再把筛出的实体拼成压缩文档交给已有的编码模型。
Q3:断言子集为什么只有八分之一左右?
官方说得很明确:在这个子集里,稀有的假设、可能、非本人三类被优先标注,目的是让下游分类器见到更多样的表达模式。后果是这个子集的分布不反映临床文本中的自然分布。如果你的研究需要贴近自然分布,官方建议与其他来源的标签合并。
Q4:标注可信吗?
过程可信,边界要说清。全部发布标签来自一位有医学学位的标注者,另一位作者复标了约 1,500 个实体,精确跨度 F1 为 0.77、Cohen’s kappa 为 0.81。分歧没有事后仲裁,也没有专业编码员复核。把它当“一位受过医学训练的标注者的最佳判断”来用,而不是当“多人共识”。
Q5:字符偏移为什么对不上原始病历?
因为偏移是相对预处理后的文本定义的。预处理做了三件事:整理冗余空白、去除硬换行、按句切分。经过这三步之后,字符位置与原始文本必然不同。官方把处理后的 400 份文本随库发布在 mimic-iv_notes_subset.csv 里,就是为了给偏移提供一个稳定基准。
Q6:和 i2b2 2010 语料怎么配合?
断言侧可以直接合并,因为两类语料用的是同一套五类口径。实体侧要做映射:i2b2 的 problem、test、treatment 是粗粒度,本库的六类是细粒度,合并时需要先把边界规则对齐,尤其是修饰语是否计入跨度。官方在 Usage Notes 里明确鼓励这种合并。
Q7:怎么划分训练集和测试集?
按 note_id 分组。实体不是独立样本,同一份小结里的实体共享书写者、住院事件与措辞习惯。按实体行随机切分,测试集里会出现训练时那篇文书的兄弟片段,分数虚高。按文档分组切,同一份小结的所有实体只进一侧。
Q8:下载要办哪些手续?
三步:完成 CITI 的“数据或标本仅用于研究”培训;在 PhysioNet 申请凭证并签署 Credentialed Health Data Use Agreement 1.5.0;获批后登录下载。许可为 PhysioNet Credentialed Health Data License 1.5.0。它完整继承 MIMIC-IV-Note 的访问制度。
Q9:它有没有排行榜或官方测试集划分?
没有。官方没有给出训练、开发、测试的标准划分,也没有排行榜。评测口径需要使用者自己定义,并在方法节写清楚;这一点与有官方划分的共享任务语料不同。
Q10:它能不能用于非出院小结的文本?
没有保障。全部标注都在出院小结上完成,放射报告、手术记录、门诊病程的写法差异很大。官方在 Known Limitations 里把“仅限英文临床文本”写明,文类与语言的双重限制都要在论文里交代。
术语表
| 术语 | 解释 |
|---|---|
| NER | 命名实体识别,从文本中找出概念并标出跨度与类别 |
| AC | 断言分类,判断一个已识别的概念在文本中是存在、被否定、可能、假设还是属于他人 |
| 实体跨度 | 概念在文本中占据的字符区间,本库以起始与结束下标表示 |
| 断言状态 | 概念在本篇文书中的认识论状态,共五类 |
| ICD-10-CM/PCS | 美国使用的疾病诊断编码与手术操作编码体系 |
| V00–Y99 | ICD-10-CM 中外部原因编码区间,记录受伤与外因情境 |
| Z00–Z99 | ICD-10-CM 中影响健康状态的因素编码区间 |
| 修饰语 | 影响编码的属性,如急性度、侧别、解剖部位 |
| note bloat | 病历臃肿,指临床文本中与任务无关的内容占比过高 |
| note_id | MIMIC-IV-Note 中小结的唯一标识,由主体编号、文书域缩写与序号组成 |
| entity_id | 本库中实体的唯一标识,三张标注表共用 |
| 字符偏移 | 以整数下标表示的位置,起始含、结束不含 |
| 精确跨度 F1 | 要求边界完全一致的 F1,比宽松匹配更严格 |
| Cohen’s kappa | 校正随机一致后的标注者间一致性系数 |
| Label Studio | 开源标注工具,本库标注使用其 1.15 版 |
| medspaCy | 面向临床文本的 spaCy 扩展,本库用于预处理与分句 |
| HIPAA 安全港 | 美国去标识标准之一,要求移除十八类标识符 |
| 凭证访问 | 需审批与签署协议后方可下载的数据访问制度 |
| 文档级划分 | 同一文档派生的样本只进一侧的数据集切分方式 |
附录 A:核心数字核对表
| 项 | 值 | 出处 |
|---|---|---|
| 文档数 | 400 份出院小结 | 官方 Abstract / Data Description |
| 实体标注总数 | 85,328 条 | 官方 Abstract |
| 断言标注总数 | 10,922 条 | 官方 Abstract |
| 实体类别数 | 6 | 官方 Methods / Label Naming Conventions |
| 断言类别数 | 5 | 官方 Methods / Label Naming Conventions |
| 发布文件数 | 8 | 官方 File Structure 段 |
entity_annotations.csv 列数 |
5 | 官方 File Structure 段 |
assertion_annotations.csv 列数 |
5 | 官方 File Structure 段 |
assertion_sentences.csv 列数 |
7 | 官方 File Structure 段 |
mimic-iv_notes_subset.csv 列数 |
2 | 官方 File Structure 段 |
| 双标子集规模 | 约 1,500 个实体 | 官方 Quality Control |
| 精确跨度 F1 | 0.77 | 官方 Quality Control |
| Cohen’s kappa | 0.81 | 官方 Quality Control |
| 父项目出院小结总量 | 331,794 份,145,915 名患者 | MIMIC-IV-Note v2.2 官方 Abstract |
| 预处理工具版本 | medspaCy v1.2.0 / spaCy v3.7.6 | 官方 Document Preprocessing |
| 标注工具版本 | Label Studio v1.15 | 官方 Annotation Process |
| 发布日期 | 2026 年 9 月 23 日 | 官方页面版本区 |
| 版本 | 1.0.0 | 官方页面版本区 |
| DOI(本版本) | 10.13026/58h9-pm85 | 官方 Discovery 区 |
| 许可 | PhysioNet Credentialed Health Data License 1.5.0 | 官方 Access 区 |
| 所需培训 | CITI 数据或标本仅用于研究 | 官方 Access 区 |
附录 B:数字的来源分层
第一层:官方页面。 文档数、实体总数、断言总数、类别数、文件与列的定义、双标一致性数字、许可与访问要求、发布日期与 DOI,全部来自 PhysioNet 项目页的 Abstract、Methods、Data Description、Usage Notes、Known Limitations 与 Access 各段。§4.3 两张统计表是页面原值搬运。
第二层:父项目页面。 331,794 份出院小结与 145,915 名患者来自 MIMIC-IV-Note v2.2 的 Abstract;四张表与 note_id 的构成来自其 Data Description。
第三层:论文摘要。 “只使用 22% 的内容”“训练时间减少一半以上”来自配套论文的公开摘要,属作者自述的方法效果,未经独立复现。
第四层:未获取。 八个文件的实际体积、每份文档的实体条数、边界分歧的类型构成。文件目录在本次核验环境不可用,体积数字一律不写、不估。
附录 C:完整参考文献
| 编号 | 文献 | 链接 | 用途 |
|---|---|---|---|
| 1 | MIMIC-IV-Ext-EntityCoding v1.0.0 | https://physionet.org/content/mimic-iv-ext-entitycoding/1.0.0/ | 全部规模、结构、边界数字与文件定义的来源 |
| 2 | Douglas JC, Gan Y, Hachey B, Kummerfeld JK. Less is more. ACL 2025:30835-30847 | https://doi.org/10.18653/v1/2025.acl-long.1489 | 配套方法与效果自述 |
| 3 | MIMIC-IV-Note v2.2 | https://doi.org/10.13026/1n74-ne17 | 父项目规模与 note_id 约定 |
| 4 | PhysioNet 平台综述(2026,Nature Health) | https://doi.org/10.1038/s44360-026-00096-z | 托管模式与引用规范 |
| 5 | Uzuner Ö 等. 2010 i2b2/VA challenge on concepts, assertions, and relations | https://doi.org/10.1136/amiajnl-2011-000203 | 断言五类口径的来源 |
| 6 | Searle T 等. Estimating redundancy in clinical text | https://doi.org/10.1016/j.jbi.2021.103938 | note bloat 的出处 |
| 7 | Liu J 等. “Note bloat” impacts deep learning-based NLP models | https://doi.org/10.1016/j.jbi.2022.104149 | note bloat 影响的出处 |
| 8 | Eyre H 等. Launching into clinical space with medspaCy | AMIA Annu Symp Proc. 2021 | 预处理工具链 |
附录 D:任务代码
任务一:把实体与断言拼成压缩文档
import pandas as pd
ent = pd.read_csv('entity_annotations.csv', dtype={'note_id': str})
asr = pd.read_csv('assertion_annotations.csv', dtype={'note_id': str})
notes = pd.read_csv('mimic-iv_notes_subset.csv', dtype={'note_id': str})
idx = notes.set_index('note_id')
df = ent.merge(asr[['entity_id', 'assertion_label']], on='entity_id', how='left')
df['surface'] = [idx.loc[n, 'text'][s:e]
for n, s, e in zip(df['note_id'], df['start'], df['end'])]
#-- 只保留存在与可能的实体:压掉否定、假设、他人相关
KEEP = {'present', 'possible'}
df['keep'] = df['assertion_label'].isin(KEEP)
#-- 未带断言的实体如何处理要写进方法节,此处按保留处理
compressed = (df[df['keep'] | df['assertion_label'].isna()]
.sort_values(['note_id', 'start'])
.groupby('note_id')
.apply(lambda g: ' ; '.join(
f'[{r.entity_label}] {r.surface}' for r in g.itertuples())))
print(compressed.head(2).to_string())
“未带断言的实体怎么处理”是这段代码里唯一需要使用者自己决策的地方。保留、丢弃、还是单独打标,三种选择会让压缩比完全不同,必须在方法节写明。
任务二:按文档分组的 NER 交叉验证骨架
import pandas as pd
from sklearn.model_selection import GroupKFold
ent = pd.read_csv('entity_annotations.csv', dtype={'note_id': str})
docs = ent['note_id'].drop_duplicates()
#-- 分组键是 note_id:同一份小结的实体只进一侧
gkf = GroupKFold(n_splits=5)
for k, (tr, te) in enumerate(gkf.split(docs, groups=docs)):
tr_docs = set(docs.iloc[tr])
m_tr = ent['note_id'].isin(tr_docs)
print(k, int(m_tr.sum()), int((~m_tr).sum()), len(tr_docs))
这个骨架只解决切分问题,不解决序列标注的编码问题。把实体跨度转成 BIO 标签序列时,要注意两点:一是跨度按 start 排序后再编码,二是重叠跨度在 BIO 下无法完整表达——本库的六类是扁平标注,若发现重叠,说明读表环节出了问题。
附录 E:如果只记五件事
| 序号 | 记住什么 | 为什么 |
|---|---|---|
| 1 | 400 份出院小结、85,328 条实体、10,922 条断言 | 这三个数字定义了它的全部用法边界 |
| 2 | 修饰语被写进了实体跨度 | 这是它与既往临床 NER 语料最实质的区别 |
| 3 | 断言子集被刻意偏斜,不是自然分布 | 拿它做患病率类推断会出错 |
| 4 | 偏移只对随库发布的处理后文本成立 | 切原始文本必然错位 |
| 5 | 划分要按 note_id 分组 |
按实体行随机切分会让分数虚高 |
需要更高工程化程度或合规出域的商业版本?
当前展示的公开版本适用于学术研究与原型验证。千方医数集依托三甲医院直采网络,提供经专家标注、符合伦理合规的专病数据集交易服务。
前往商城查看可交易产品 →
