MIMIC-IV-Ext-22MCTS:2,258 万条临床事件时间序列

26.7 万份出院小结 / 2,258 万事件 / 平均 84 条一份 / 无金标准

来源 https://physionet.org/content/mimic-iv-ext-22mcts/1.0.0/发布时间: 2026-10-26最后更新: 2026-10-26 阅读 12
MIMIC-IV-Ext-22MCTS:2,258 万条临床事件时间序列

信息速览

数据集名称MIMIC-IV-Ext-22MCTS:2,258 万条临床事件时间序列
数据类型衍生数据,结构化标签,时序数据
规模267,284 份出院小结,溯源至 145,915 名患者(MIMIC-IV-Note v2.2 口径)
接入方式https://physionet.org/content/mimic-iv-ext-22mcts/1.0.0/
AI 就绪度

MIMIC-IV-Ext-22MCTS 解决的是一个很具体的问题:出院小结里写着「三天前开始发热」「术后第二天拔管」「入院前两周停用华法林」,但机器读不出来。这个数据集把这些话拆成了一条条「事件 + 相对入院多少小时」的记录,一共 2,258 万条。

这个数据集由美国国家医学图书馆(NLM)院内研究部构建,2025 年 9 月 29 日发布在 PhysioNet,DOI 10.13026/dkj6-r828,配套论文是 arXiv:2505.00827。

它真正稀缺的地方不是「事件多」——事件多是靠 26.7 万份小结堆出来的。稀缺的是它把一段完全非结构化的叙事文本,强行对齐到了一根以入院为零点的时间轴上,而且把这条对齐是怎么做的、错在哪里、错多少,全写在了页面上。 用它必须先接受一件事:这里没有金标准。官方在 Limitations 里第一句就写了「No Ground Truth Labels」,并建议用于预训练、弱监督、半监督,而不是严格评测。任何把它当 ground truth 用的做法,都会在某个环节出问题——而单位写着小时、精度却只到天,是最容易踩的第一个坑。

INFOBOX — MIMIC-IV-Ext-22MCTS 一屏速览

维度 内容
全称 MIMIC-IV-Ext-22MCTS: A 22 Millions-Event Temporal Clinical Time-Series Dataset with Relative Timestamp
出处 NLM 院内研究部(NIH)/PhysioNet
版本 1.0.0,2025-09-29
DOI 10.13026/dkj6-r828
来源 MIMIC-IV-Note v2.2 出院小结
小结数 267,284 份(上游 331,794,保留 80.6%)
事件数 22,588,586 条
每份均值 84 条(区间 1–244)
事件长度 平均 3 token,最长 299 token
时间戳 相对入院小时,入院前负、入院后正
时间分布 入院前 36.99% / 住院中 51.19% / 出院后 11.80%
分箱 9 个区间,边界 -60/-30/-15/0/15/30/60/120 h
标注模型 Llama-3.1-8B(本地 HPC 推理)
检索 上下文 BM25 top 100 + BGE-Large-en @0.75
金标准 无(官方明示)
访问 Credentialed Access,需 CITI 培训 + DUA
许可 PhysioNet Credentialed Health Data License 1.5.0

§1 它到底解决什么问题

1.1 你的处境

如果你正在做下面任何一件事,这一节直接决定你该不该继续读:

你有一堆 EHR 结构化表,但发现关键信息不在里面。 chartevents 记了每一次心率,但没记「患者说胸痛是从昨天晚饭后开始的」。diagnoses_icd 记了诊断编码,但没记「这个诊断是什么时候第一次被怀疑的」。你想做的是「入院后 6 小时内是否会发生脓毒症」这类问题,而答案的线索藏在主诉和现病史里。

你想做临床语言模型,但通用语料里没有时间概念。 你用出院小结训练一个模型,它能学会「肺炎用抗生素」,但学不会「先发热三天,然后咳嗽加重,第四天才拍片」。时间关系是临床推理的主干,通用文本里几乎没有显式的时间标注。

你在做临床试验匹配,患者描述与 trial 纳入标准之间的时间约束对不上。 「过去 6 个月内未发生心梗」这种条件,需要知道事件发生在什么时候。

你要复现某个「LLM 抽取临床事件」的流程,想找一个已经跑完的参照。 22MCTS 的管线写得相当完整:切块大小、检索模型、相似度阈值、prompt 设计、后处理规则,全都公开了。

1.2 它能帮你什么

你的需求 它给的 够不够
事件文本 + 相对时间 2,258 万条,平均每份小结 84 条 够,这是它的主产品
事件类型分类 没有,全是自由文本 不够,需自己跑 NER
标准医学编码(ICD/SNOMED) 没有,刻意不映射 不够,需自己映射
绝对日历时间 没有,只有相对小时 不够,需回连 MIMIC-IV 的 admittime
金标准校验 没有,官方明写 不够,需自己抽样人工核验
患者级去重 未提供患者 ID 需通过 Hadm_id 回连 admissions 表
现成的训练/验证/测试划分 论文给了 80/10/10 的按小结划分做法 部分够,但要自己实现

1.3 一句话决策

你要的是「事件在时间轴上的大致位置」——用它。你要的是「事件发生的准确时刻」——不要用它,去 MIMIC-IV 结构化表里找,或者自己人工标。

1.4 不适合谁

这一节很重要,因为 22MCTS 的定位容易被误读成「MIMIC 的时间序列版本」。

需要精确时间戳的任务,它给不了。 官方 prompt 验证中,匹配事件的相对时间完全一致的比例只有 50–75%,70–85% 的事件误差在 24 小时以内。24 小时的误差对「入院后 6 小时预警」这类任务等于没有信息。要分钟级时间,必须回 MIMIC-IV 的 chartevents/labevents。

需要可辩护的评测集,它给不了。 没有金标准,意味着你在它上面报的任何「准确率」都是在跟 Llama-3.1-8B 的输出比,不是跟临床事实比。官方自己在 Limitations 里把这条列为第一条。

需要跨语言或中文临床文本,它给不了。 全部英文,来源是美国单一医学中心的出院小结。中文病历的主诉书写习惯、时间表达方式(「3 天前」「半月前」「自幼」)与英文差异大,迁移需要重做 prompt 与验证。

需要覆盖门诊、急诊、社区医疗,它偏了。 上游 MIMIC-IV-Note 只含 BIDMC 一家三级医院的住院与急诊记录,2008–2019。基层、慢病长期随访、护理院场景都不在里面。

需要事件之间的因果或时序依赖图,它只有并列。 它给的是「事件 → 时间点」的二元关系,不是「A 导致 B」「B 在 A 之后 3 小时且同一次病程内」这类结构化关系。要做病程图需要自己从时间轴上二次推断。

需要大样本患者级统计,样本量可能不够。 26.7 万份小结听起来多,但对应的是「最多 14.6 万名患者」的上界;罕见病、特殊人群的样本依然稀疏。而且上游按「含 100 字符以上简明病程」筛掉了近 20% 的小结,这个筛选本身可能带来偏倚——病程描述简短的小结往往对应简单病例。

§2 规格与构成:它到底长什么样

2.1 从 331,794 到 267,284:第一道筛选

上游 MIMIC-IV-Note v2.2 有 331,794 份去标识出院小结,来自 145,915 名患者,采集自波士顿 Beth Israel Deaconess Medical Center 的住院与急诊,时间跨度 2008–2019。

22MCTS 只用了其中 267,284 份。筛选条件有两条:

  1. 小结须落在患者某次就诊一年之内;
  2. 小结须包含「简明病程」(Brief Hospital Course)段落,且该段超过 100 个字符。

第二条是硬条件,因为整条管线的检索 query 就是这段简明病程。没有它,BM25 无从下手。

环节 份数 比例
上游 MIMIC-IV-Note v2.2 331,794 100%
22MCTS 实际使用 267,284 80.6%
被筛掉 64,510 19.4%

这 19.4% 不是随机丢失。简述病程写得短的小结,通常对应住院过程简单、并发症少的病例。也就是说,数据集在「复杂度」这个维度上有一个隐性下限——过于简单的住院记录在 22MCTS 里是缺失的。如果你的任务包含「区分简单与复杂病例」,这个偏倚会直接影响结果。

2.2 四条核心统计

指标 数值 出处
事件-时间戳对总数 22,588,586 PhysioNet 页面 + 论文
每份小结最少事件数 1 官方描述
每份小结最多事件数 244 官方描述
每份小结平均事件数 84 官方描述
每个事件平均 token 数 3 官方描述
单个事件最长 token 数 299 官方描述

把 22,588,586 除以 267,284 得到 84.51,与官方给的「平均 84 条」吻合。这说明两个数字是同一次统计口径下的结果,没有内部矛盾。

2.3 时间维度:入库前 37%,入库后过半

官方给出的时间分布是理解这份数据性格的关键:

时间段 占比 含义
入院前(负时间戳) 36.99% 既往史、院外病程、入院前用药
住院期间(非负) 51.19% 本次住院的事件主线
出院后(正时间戳,超出出院日) 11.80% 随访计划、出院带药调整、预后交代

三条加起来 99.98%,剩下 0.02% 是官方四舍五入残差。

这个分布本身就是一条重要提示:超过三分之一的「事件」不是本次住院发生的。它们是病史。如果你直接把整条时间轴当作「本次住院病程」输入模型,会把两年前的胆囊切除术和昨天的发热混在同一条序列里。

2.4 四个字段

官方页面原文说「There are five columns in the table」,然后只列出四个:Hadm_id、Event、Time、Time_bin。这是页面上的笔误,实际结构就是四列。

字段 类型 含义 注意
Hadm_id 整数 出院小结唯一标识 可回连 MIMIC-IV-Note 与 MIMIC-IV-Ext-BHC;不是 subject_id
Event 文本 临床事件短片段 自由文本,无实体类型、无标准编码
Time 浮点 相对入院小时数 入院为 0,入院前为负,出院后为正
Time_bin 整数 0–8 离散时间区间索引 左闭右开,见 §3.3

Hadm_id 不是患者 ID,这是最容易出错的一点。同一个 Hadm_id 对应一次住院的一份小结;同一位患者多次住院会有多个 Hadm_id。要做患者级划分,必须先 JOIN admissions 拿到 subject_id。跳过这一步直接按 Hadm_id 分训练测试集,就会让同一位患者的不同次住院分落两边,指标虚高。

2.5 版本与更新节奏

项目 内容
当前版本 1.0.0
发布日期 2025-09-29
更新说明(官方原文) “This is the initial release… Future updates may include additional records, further preprocessing improvements, and expanded metadata.”
数据现状 页面在部分地区显示 “Data Not Available — Data is not available in your region due to legal or policy restrictions.”
浏览量 337(当前版本 / 全部版本)

「1.0.0」意味着还没有经过一轮使用者反馈的修整。PhysioNet 上同类派生数据集的经验是:首版的事件边界与时间戳误差,往往在后续版本里会被重跑调整。如果你要在论文里引用具体数字,务必锁定版本号。

§3 那根时间轴是怎么造出来的

这是整份数据集最值得读的部分。理解了管线,才知道哪些事件可信、哪些不可信。

3.1 五步管线

出院小结(平均 2,267 ± 914 token)
   │
   ├─① 切块:每块 5 token,前 5 + 后 5 token 作上下文
   │        → 每份小结 200–400 块进入块池
   │
   ├─② 上下文 BM25:以「简明病程」为 query 取 top 100 块
   │        → 每份小结保留 100 块
   │
   ├─③ 语义检索:BGE-Large-en 计算相似度,阈值 0.75
   │        → 每份小结命中 200–400 块
   │
   ├─④ 合并去重:②与③的结果并集
   │        → 每份小结 200–400 块
   │
   └─⑤ Llama-3.1-8B 标注
            → 判定 50–100 块含事件
            → 清洗后常低于 50 块
            → 展开为事件-时间戳对,均值 84 条

第 ① 步的「5 token」需要特别说明:原文是 “Each discharge summary form is split into a list of chunks with 5 tokens, the previous 5 tokens and the following 5 tokens are treated as the context”。也就是滑动窗口切块,窗口 5 token,上下文各 5 token。5 token 在英文里大约是 3–5 个词,约半个短语。这个粒度极细,目的是让 LLM 能在极短片段上做判定,而不是在一整段里含糊取舍。

第 ③ 步的 0.75 阈值,论文说 “based on empirical evaluation”——是经验值,不是调优出来的最优点。

第 ⑤ 步的收缩很猛:从 200–400 块降到 50–100 块,再降到清洗后的不足 50 块。这意味着一份小结里只有很小一部分文本被认为含临床事件。 官方 Figure 3 的说明里有一句:「有大约 8,000 份小结在 Llama 标注后剩 20 块」。

3.2 为什么用 Llama-3.1-8B 而不是更大的模型

论文给的理由是三条的权衡:MIMIC 数据的访问限制、计算效率、标注质量。

第一条最关键。MIMIC 数据受 DUA 约束,不能送到第三方 API。官方页面在安全说明里写得很明确:

“The LLaMA-3.1-8B model was downloaded and executed locally in a firewalled, access-controlled, non-networked HPC cluster. No patient data or model outputs were transmitted to or processed on any third-party cloud or external server.”

所以这不只是技术选择,是合规约束下的唯一可行路径。28 万份小结 × 每份数百块,全部要本地推理,8B 是一个能在 NIH Biowulf 集群上跑完的规模。

3.3 九个时间分箱

Time_bin 把连续小时映射成离散区间,边界是 -60、-30、-15、0、15、30、60、120:

Bin 区间 左闭右开 临床含义
0 (-∞, -60) ✓ 入院前两个月以上,既往史
1 [-60, -30) ✓ 入院前 1–2 个月
2 [-30, -15) ✓ 入院前 2–4 周
3 [-15, 0) ✓ 入院前两周内
4 [0, 15) ✓ 入院后前 15 小时
5 [15, 30) ✓ 入院后第 1 天
6 [30, 60) ✓ 入院后 1–2.5 天
7 [60, 120) ✓ 入院后 2.5–5 天
8 [120, ∞) ✓ 入院后 5 天以上

官方给的例子:时间戳 -120 落在 Bin 0,时间戳 45 落在 Bin 6。

这个分箱的疏密是刻意设计的:在入院前后各 15 小时处切得最细。因为临床决策最密集的窗口就是入院当天。而 Bin 8 把 5 天以上的全部压成一类——对平均住院 4–5 天的 ICU 人群问题不大,对长住院(比如骨髓移植、严重创伤)就丢掉了内部时间分辨。

3.4 后处理:官方承认的四种脏数据

论文在 “Post processing for LLM based Annotation” 一节里列了 Llama-3.1-8B 的典型输出错误:

错误类型 具体表现 处理
非法时间戳 输出 “NaN” 或 “in” 而不是数字 剔除
重复事件 同一事件被输出多次 去重
列错位 事件写进 Time 列、时间戳写进 Event 列 交换或剔除
非文本内容 输出里混入非文本字符 剔除
空话填充 反复输出 “no acute process” 剔除

这段坦白很有价值:它告诉你数据的噪声来源是结构性的、可枚举的,不是随机的。你在使用时会遇到同样的模式——如果发现某份小结的 Event 列里出现纯数字,那就是列错位没清理干净。

3.5 Prompt 有效性验证:10 份病例、三个人工/模型对照

为了证明 prompt 设计合理,作者做了一次小规模验证:从公开病例报告中随机选 10 份(PMC4478313、PMC4818304、PMC5667582、PMC6030904、PMC6034490、PMC7337692、PMC7747049、PMC8127753、PMC9871993 等),由一位医生人工标注,再让 GPT-4 与 O1-preview 用同一套 prompt 跑,对比结果。

Table 4 原文数据(中位数 [区间]):

统计量 人工 GPT-4 O1-preview
事件数 32 [14, 70] 46 [20, 297] 39 [27, 58]
不同时间戳数 6 [2, 13] 6 [1, 16] 6 [3, 13]

三个方法给出的「不同时间戳数」中位数都是 6,这一点很关键——说明模型没有乱造时间点,它识别出的关键时间节点数量与医生一致。但事件数上,GPT-4 的上界 297 远高于人工的 70,说明模型会过度拆分。

一致性指标(原文):

指标 GPT-4 O1-preview
事件匹配率(cosine 距离阈值 0.1 起) 70–80% —
时间戳一致率(concordance) 0.912 0.951
相对时间完全一致比例 50–75% —
误差 < 24 小时比例 70–85% —

注意这里的口径差:一致率 0.912 与「完全一致 50–75%」不是矛盾,是两个不同指标。前者是相关性/一致性统计,后者是逐条严格比对。很多二手解读把这两个数混为一谈,说「模型准确率 91%」,这是错的。

Table 3 给出一个完整例子(病例 PMC4300884,腰椎神经根病):

事件 时间戳(小时)
右侧 L5 神经根病症状起病 -4320
到诊所就诊 -1440
影像(X 线 + CT)显示 L5-S1 前方大骨赘 -1440
选择性 L5-S1 神经根阻滞注射 -720
注射后症状暂时改善 -720
保守治疗穷尽,患者选择手术 -168
手术:L5-S1 前路椎间融合 + 骨赘切除 0
术后即刻腿痛缓解 0
术后六个月无症状,康复中 4320

这个例子把数据集的性格暴露得很清楚:-4320 小时是 180 天前,-1440 是 60 天前,-720 是 30 天前,-168 是 7 天前,0 是手术(这里把手术当作 pivot,不是入院),4320 是 180 天后。时间颗粒度是「天」级别,不是「小时」级别。虽然字段单位是小时,但实际推断精度到不了小时。

这条要用大字写在心上:单位是小时,精度是天。

§4 接口层:怎么把它读进来

4.1 访问申请

22MCTS 与 MIMIC-IV 使用同一套 PhysioNet 凭证体系。申请流程:

  1. 注册 PhysioNet 账号;
  2. 完成 CITI Program 的「Data or Specimens Only Research」课程并通过考核(通常 4–6 小时);
  3. 在 PhysioNet 上提交 Credentialed Access 申请,上传机构身份证明;
  4. 签署 PhysioNet Credentialed Health Data Use Agreement 1.5.0;
  5. 审核通过后,wget 或浏览器下载。

因为来源是 MIMIC-IV-Note,通常与 MIMIC-IV 主库一起申请,避免重复走流程。

4.2 加载与基本检查

import pandas as pd

df = pd.read_csv("clinical_event_timestamp.csv")

#--基本体检:行数应为 22,588,586
assert len(df) == 22_588_586, f"行数异常: {len(df)}"

#--四列结构
print(df.columns.tolist())
#--['Hadm_id', 'Event', 'Time', 'Time_bin']

#--每份小结的事件数分布
per_note = df.groupby("Hadm_id").size()
print("小结数:", per_note.size)          # 期望 267,284
print("均值:", per_note.mean())          # 期望约 84.5
print("最大:", per_note.max())           # 期望 244
print("最小:", per_note.min())           # 期望 1

这三个数与官方声明是对得上的——这是这份数据集的优点之一:核心统计量自洽。

4.3 时间轴的三个坑

坑一:负时间戳不是错误。 Time < 0 表示事件发生在入院前。直接 df[df.Time >= 0] 会丢掉 37% 的数据,而这里面恰恰包含了最重要的既往史信息。

坑二:Time = 0 不等于「入院那一刻发生」。 论文说 pivot「通常是入院事件」,但例子里 pivot 是手术。也就是说 0 点在不同小结里可能指代不同事件。要做跨小结对齐,必须先确认这份小结的 pivot 是什么——从 0 附近的事件文本可以大致判断。

坑三:Time_bin 是左闭右开,边界值归属要看清。 Time = 0 落在 Bin 4([0,15)),不是 Bin 3。Time = -15 落在 Bin 3([-15,0)),Time = -15.0 严格等于边界时归 Bin 3。用 pd.cut 复现时要显式设 right=False。

import numpy as np

BINS = [-np.inf, -60, -30, -15, 0, 15, 30, 60, 120, np.inf]

#--复现 Time_bin,注意 right=False 实现左闭右开
recomputed = pd.cut(df["Time"], bins=BINS, labels=False, right=False)
mismatch = (recomputed != df["Time_bin"]).sum()
print("分箱不一致行数:", mismatch)

如果 mismatch 不为 0,先查是不是 Time 有 NaN,或者 Time_bin 有越界值(0–8 之外)。

4.4 回连 MIMIC-IV 拿患者与时间

-- 在 MIMIC-IV 的 PostgreSQL 实例里执行
-- 目的:把 Hadm_id 换成 subject_id,并拿到真实入院时刻
SELECT
    e.hadm_id,
    a.subject_id,
    a.admittime,
    a.dischtime,
    a.admission_type,
    a.insurance
FROM your_22mcts_table e
JOIN mimiciv_hosp.admissions a
  ON a.hadm_id = e.hadm_id;

注意 hadm_id 在 MIMIC-IV 里是整数,在 22MCTS 的 CSV 里可能被读成 int64 或 object,join 前统一类型。

4.5 把事件序列拼成模型输入

论文里对 GPT-2 的做法是:词汇表新增 [TIME] 与 [EVENT] 两个特殊 token,序列化格式为:

[TIME]<timestamp>[EVENT]<description>

示例(按时间排序后):

[TIME]-72 [EVENT]fever
[TIME]-72 [EVENT]chills
[TIME]-48 [EVENT]presented to emergency department
[TIME]0   [EVENT]admission
[TIME]2   [EVENT]started on ceftriaxone
[TIME]6   [EVENT]blood culture positive for strep pneumoniae

最大序列长度 128 token,空样本丢弃。训练超参:batch size 8、学习率 1e-5、3 个 epoch。

这个序列化方式有个隐含问题:它按时间排序后就把事件当作序列,但同一时间点上的多条事件之间没有顺序。fever 和 chills 都在 -72 小时,模型无法从序列位置区分它们谁先出现。要建模同刻事件的关系,需要额外的位置编码或分组标记。

§5 三层:字段层、内容层、任务层

5.1 字段层:只有四个字段能给你什么

四个字段看起来单薄,但组合起来的信息量不小:

你能问的问题 用哪些字段 局限
这份小结讲了多少件事 groupby(Hadm_id).size() 受管线筛选影响,不代表文本真实信息量
事件大致发生在病程哪个阶段 Time 精度约到天
入院前后事件密度对比 Time 正负分组 需要区分病史与本次病程
有哪些高频反复出现的事件 Event 词频 同义写法未合并
事件的长尾程度 Event 去重计数 自由文本,长尾极重
时间分箱的临床节奏 Time_bin + Hadm_id Bin 8 内部无分辨

5.2 内容层:事件文本的性格

事件是「短文本片段」,平均 3 token。这意味着它通常是一个名词短语或极短的动宾结构:

  • fever
  • right lower lobe pneumonia
  • started on ceftriaxone
  • history of cholecystectomy
  • denies chest pain

Max tokens per event 达 299,说明存在极少数长片段——很可能是 LLM 把一整句甚至一段话当成一个事件输出了。这类超长事件在使用时应当单独处理,它们往往包含了多个可拆分的事件。

论文明确讲了拆分规则:「Separate conjunctive phrases into their component events, for example, convert ‘fever and rash’ to two events ‘fever’ and ‘rash’」。所以 fever and rash 会变成两条。但这条规则执行得不完全——299 token 的长事件就是证据。

事件不做 UMLS 归一化是刻意的设计选择,论文给了理由:cTAKES、MetaMap 这类工具依赖预设词表,新概念会漏;而临床事件之间的关联常是概念上的而非语义上的(举的例子是胺碘酮与心血管疾病——常被用于严重心律失常患者,但两者不可互换)。代价是同义写法无法自动合并,fever、febrile、elevated temperature 会是三条独立事件。

5.3 任务层:三类下游用法

任务类型 怎么用 22MCTS 需要额外什么 风险
预训练 / 继续预训练 直接把事件-时间序列当语料喂给编码器或解码器 无需额外标注 继承了标注噪声
弱监督微调 用它做中间任务,再在下游小样本上微调 下游标注 中间任务的错会传导
事件关系分类 用 Time 的大小关系构造因果/顺承标签 无(论文做法) 时间先后 ≠ 因果
临床试验匹配 用时间约束筛候选 trial 库 约束语义需另解
严格评测基准 不适用 无 无金标准

论文自己做的 BERT 微调就是「事件关系分类」:给定同一患者的两条事件 Ea、Eb,Ea 先出现。若 Ta = Tb 标为无关联(0);若 Tb > Ta,表示 Eb 是 Ea 的结果,标为正相关(1);若 Tb < Ta,表示 Eb 是 Ea 的可能原因,标为负相关(2)。

这个标签构造方式值得单独说一句:它把「时间先后」直接当作「因果关系」的代理。这在数据规模上可行,但逻辑上不成立——先发生不代表是原因。用这套标签训出来的模型,学到的是时间箭头,不是因果结构。如果你的目标是因果推断,这条路走不通。

§6 AI 就绪指南

6.1 五分钟跑通一个最小验证

import pandas as pd

df = pd.read_csv("clinical_event_timestamp.csv")

#--挑一份事件数接近均值的小结做样例
sizes = df.groupby("Hadm_id").size()
target = sizes[(sizes >= 80) & (sizes <= 90)].index[0]
sample = df[df.Hadm_id == target].sort_values("Time")

print(f"Hadm_id = {target},{len(sample)} 条事件")
print(sample.head(20).to_string(index=False))

看到输出后先问自己三个问题:这份小结的 pivot(Time=0)是入院还是手术?-1440 附近是院外病程还是既往史?Bin 8 里的事件是不是把出院后的随访混进来了?

6.2 坑点 1:把负时间戳当脏数据删掉

最常见的错误写法:

#--错误:直接过滤负值
clean = df[df.Time >= 0]

这样会丢掉 36.99% 的数据。而这 37% 里包含既往手术史、长期用药、症状起病时间——恰恰是临床推理最需要的背景。正确做法是保留,但在特征里显式区分「入院前/住院中/出院后」三段。

6.3 坑点 2:按 Hadm_id 随机划分训练测试集

#--错误:按小结划分,同一患者可能跨集
from sklearn.model_selection import train_test_split
train_ids, test_ids = train_test_split(df.Hadm_id.unique(), test_size=0.2)

论文里对 GPT-2 的做法确实是「收集唯一出院小结 id,随机打乱,按 80/10/10 划分」。但论文同时也说了这是按小结划分。如果你的下游任务是患者级预测(比如「这位患者明年会不会再入院」),按小结划分会造成同患者泄漏。

正确做法:

-- 先拿到患者映射,再按 subject_id 划分
SELECT hadm_id, subject_id FROM mimiciv_hosp.admissions;
hadm2subj = pd.read_sql(sql, conn).set_index("hadm_id")["subject_id"]
df["subject_id"] = df.Hadm_id.map(hadm2subj)

#--按患者划分
from sklearn.model_selection import GroupShuffleSplit
gss = GroupShuffleSplit(n_splits=1, test_size=0.2, random_state=42)
train_idx, test_idx = next(gss.split(df, groups=df.subject_id))

6.4 坑点 3:把「不同时间戳数」当成事件精度

一份小结只有 6 个不同时间戳是常态(人工标注、GPT-4、O1-preview 三者中位数都是 6)。这意味着同一天里的多件事共享同一个时间戳。你若按 Time 去重事件做统计,会把大量同刻事件合并掉。

#--每份小结的不同时间戳数,官方口径中位数约 6
per_note_ts = df.groupby("Hadm_id")["Time"].nunique()
print(per_note_ts.describe())

6.5 坑点 4:把 Time_bin 当连续特征

Bin 0 覆盖 (-∞, -60),它的「宽度」是无穷大;Bin 8 覆盖 [120, ∞),同样是无穷。把 Time_bin 当数值特征输入线性模型,等于假设 Bin 0 与 Bin 1 的距离和 Bin 4 与 Bin 5 的距离相同——这显然不对。

正确做法是用 one-hot,或者用 Time 的连续值配单调变换(如 sign(t) * log1p(|t|))。

6.6 坑点 5:忽略 Bin 8 的时间塌缩

对长住院(> 5 天),所有事件都进 Bin 8。一份住院 30 天的骨髓移植小结,第 6 天和第 29 天的事件在 Time_bin 上完全一样。

#--检查长住院的比例
long_stay = df[df.Time >= 120].groupby("Hadm_id").size()
print("含 Bin 8 事件的小结数:", long_stay.size)
print("Bin 8 事件总数:", long_stay.sum())

如果这部分占比高,而你的任务又关心住院后期的事件,Time_bin 就不能用,必须用连续 Time。

6.7 坑点 6:把事件文本直接当规范术语用

Event 是自由文本,同一概念多种写法。要统计「有多少患者发热」,直接 df.Event == "fever" 会严重低估。需要先做归一化:

#--最小限度的归一化:小写 + 去标点 + 去尾部空白
import re
def norm(s):
    s = str(s).lower().strip()
    s = re.sub(r'[^\w\s]', ' ', s)
    return re.sub(r'\s+', ' ', s).strip()

df["event_norm"] = df.Event.map(norm)

更彻底的做法是接一个 UMLS 映射或句向量聚类,但那是另一个工程量。

6.8 坑点 7:以为 22MCTS 能替代结构化查询

22MCTS 的事件时间精度是天级别。要做「入院后 6 小时内乳酸是否 > 2」这种查询,必须用 MIMIC-IV 的 labevents,那里有精确到分钟的 charttime。22MCTS 能用的是「乳酸升高这件事在这份小结的病程里被提到了,大致在第 1 天」。

两者是互补关系:结构化表给你精确的数值与时刻,22MCTS 给你叙事层面的因果链与背景。

6.9 坑点 8:跨小结直接拼接时间轴

不同小结的 Time = 0 可能指代不同事件(入院 vs 手术 vs 其他 pivot)。把同一患者多次住院的序列直接拼成一条时间轴,会导致轴上的零点语义漂移。

要拼必须先统一 pivot:

-- 用 admittime 做统一参考点
SELECT hadm_id, subject_id, admittime
FROM mimiciv_hosp.admissions;

然后 absolute_time = admittime + Time * interval '1 hour'。但要注意:如果某份小结的 pivot 是手术而非入院,这个换算会整体偏移。这个偏移没有官方修正方案,只能靠人工抽查估算。

§7 质量评估:DAIMS 框架

读这一节之前先纠正一个认知:22MCTS 的质量问题不是「数据脏」,而是「数据的不确定性没有被标注出来」。它每一行都没有置信度、没有来源块号、没有人工核验标记。你无法从数据本身判断某条事件的可靠性。

7.1 DAIMS 五维评分

维度 评分 依据
Data Collection(采集) ★★★☆☆ 上游 MIMIC-IV-Note 是成熟的去标识流程;但仅一家医院、仅住院与急诊、仅 2008–2019
Annotation(标注) ★★☆☆☆ LLM 单模型标注,无人工复核,无金标准;prompt 验证仅 10 份病例
Intrinsic Quality(内在质量) ★★★☆☆ 核心统计量自洽(84 条均值可复算);但存在列错位、超长事件等已知脏数据
Metadata(元数据) ★★★☆☆ 四字段定义清晰;但页面有「五列」笔误,未给患者数、文件大小、事件类型体系
Standardization(标准化) ★★☆☆☆ 未映射 UMLS/SNOMED/ICD;时间分箱自定义;无 schema 定义文件

7.2 为什么 Annotation 只给两星

不是因为 Llama-3.1-8B 不行,而是因为验证规模与数据规模严重不匹配:

指标 数值
数据集规模 267,284 份小结 / 22,588,586 条事件
Prompt 验证规模 10 份病例报告
验证中的人工标注者 1 位医生
验证集与数据集的关系 完全不同的来源(公开病例报告 vs MIMIC 出院小结)

10 份验证 267,284 份,比例是 0.0037%。而且验证用的是公开病例报告(PMC 系列),不是 MIMIC 小结——两者的写作风格、长度、术语密度都不同。这个验证能证明「prompt 设计是合理的」,不能证明「在 MIMIC 上的产出是准确的」。

这不是挑刺,官方自己在 Limitations 里承认了。这里只是把它的含义讲清楚:你在 22MCTS 上看到的任何统计现象,都要先假设它可能是标注伪影。

7.3 已知的、可枚举的偏差

偏差 来源 影响
简单病例缺失 上游按「简明病程 > 100 字符」筛选 19.4% 的小结被排除,模型对简单病例的覆盖不足
事件过度拆分 LLM 倾向于把短语拆细 事件数虚高,长尾被放大
时间精度天花板 文本本身只给「三天前」这类模糊表述 精度约到天,小时是伪精度
同刻事件无顺序 6 个时间戳承载 84 条事件 无法建模同日内的先后
缺失否定与不确定 prompt 未显式要求处理「否认」「疑似」 denies chest pain 可能被记为一条事件
单一机构 BIDMC 一家三级医院 术语习惯、记录风格、患者构成都有机构特征
时间跨度 2008–2019 上游数据截止 新冠时期、近五年新药与新术语缺失

「否认」这一类要特别提。denies chest pain 在文本里确实是「胸痛」相关的一段,但它的临床含义是「没有胸痛」。如果它被记成一条 Event,时间轴上就多了一个不存在的胸痛事件。论文的 prompt 指导里要求「尽可能多地收录事件」,这条要求会放大这个问题。

7.4 它凭什么还活着

一个没有金标准、验证规模只有 10 份病例的数据集,为什么值得用?

第一,它填了一个真空。 在此之前,公开的临床事件时间序列数据集基本没有万级别的,更没有千万级别的。要研究「怎么把叙事文本变成时间轴」,需要有一个够大的参照物。

第二,它的管线是可复制、可批评的。 切块大小、检索模型、阈值、LLM 型号、prompt 指导、后处理规则,全部写在论文与页面上。你可以完全照抄,也可以只替换其中一个环节做消融。这种透明度在派生数据集里并不常见。

第三,它的下游验证给出了真实增益。 不是刷分,是在 PubMedQA 与 TREC 两个公开基准上,用同一套 BERT 架构、同一套超参,只换预训练数据,得到可复现的提升。这至少证明标注里有真实信号。

第四,它承认自己的问题。 Limitations 一节写得比很多论文的正文还实在:明说没有金标准、明说可能幻觉、明说时间估计不精确、建议用户抽样人工验证。

第五,它把 LLM 标注的合规路径走通了。 本地部署、防火墙内推理、数据不出网——这套流程对任何要在受限数据上跑 LLM 的团队都是直接可用的模板。

7.5 与其他 MIMIC 派生集的关系

站内已有多个 MIMIC 派生条目,22MCTS 在其中的位置需要说清:

条目 派生自 产出物 与 22MCTS 的关系
MIMIC-IV-Ext-22MCTS MIMIC-IV-Note 事件-相对时间戳对 本文
MIMIC-IV-Ext-ECG-Glucose MIMIC-IV + MIMIC-IV-ECG ECG 与血糖时间配对 同为「时间配对」,但对象是信号与检验值
MIMIC-IV-Ext-PE MIMIC-IV(报告) CTPA 报告五类标签 同为文本标注,但无时间维度
MIMIC-Ext-SynNotes MIMIC-III/IV 笔记 改写后的合成语料 同为文本加工,但目标是隐私增强而非结构化
MIMIC-Ext-CXR-QBA MIMIC-CXR 视觉问答三元组 同为问答构造,但对象是影像

一句话区分:别的派生集在做「配对准不准」,22MCTS 在做「时间对不对」。

§8 基准与生态

8.1 PubMedQA:10 折均值,47.77% → 54.07%

论文用 PubMedQA 的 1,000 条专家标注子集,10 折交叉验证,比较原始 BERT 与在他们的数据集上微调的 Temporal BERT。两者分类头结构一致(输入 768、隐层 256),优化器 Adam、学习率 3e-5、3 个 epoch、batch 16。

Table 5 逐折准确率:

Fold BERT Temporal BERT
0 53.6 56.2
1 50.00 56.66
2 46.00 55.2
3 47.00 55.2
4 50.00 55.2
5 47.6 55.2
6 44.2 42.6
7 47.00 55.2
8 48.4 55.2
9 44.00 55.2
均值 ± 标准差 47.77 ± 7.57 54.07 ± 16.72

读这张表要注意三件事。

第一,Fold 6 是反向的(44.2 → 42.6)。10 折里有 1 折退步,说明增益不是无条件的。

第二,Temporal BERT 的标准差从 7.57 涨到 16.72,翻了一倍多。均值提升 6.3 个百分点,但波动也大幅增加。8 折的准确率都精确落在 55.2——这个数字重复得太整齐了,暗示这 8 折上模型可能都收敛到了同一个退化解(比如全判某一类)。这是一个需要警惕的信号。

第三,论文摘要里的「10% 提升」是相对提升:(54.07 - 47.77) / 47.77 ≈ 13.2%,或者说「提升约 6.3 个百分点」。22MCTS 页面写的「10% improvement in accuracy」如果被读成「准确率到 10%」,就完全错了。

8.2 TREC 临床试验匹配:三个数据集,八个指标

任务设定:把患者描述与 ClinicalTrials.gov 的试验做相关性排序,三档标签(不相关 0 / 潜在 1 / 符合 2)。

Table 6 数据集统计:

项目 训练集 TREC 2021 TREC 2022
患者数 59 75 50
试验数 204,855 375,580 448,631
患者年龄均值 38.5 ± 23.7 41.6 ± 19.4 35.3 ± 20.2
性别(男/女) 50/50 50.6/49.4 56/44
不相关试验/患者 46 ± 379 323 ± 8,624 568 ± 26,926
潜在试验/患者 11 ± 103 80 ± 3,641 60 ± 4,291
符合试验/患者 7 ± 45 — —

注意「不相关试验/患者」的标准差:TREC 2022 是 568 ± 26,926。标准差是均值的 47 倍——这个分布的尾部极重,意味着极少数患者面对几十万个候选试验。这种分布下 NDCG 这类指标会被少数样本主导。

Table 7 结果(NDCG / Precision / Recall,@10 与 @100):

指标 截断 TC21 BERT TC21 T/BERT TC22 BERT TC22 T/BERT
NDCG @10 33.28 36.53 29.43 29.94
NDCG @100 33.19 35.15 22.69 26.86
Precision @10 49.06 50.13 34.00 36.00
Precision @100 39.86 40.42 23.76 27.68
Recall @10 3.57 3.52 2.85 2.52
Recall @100 29.01 30.39 16.01 21.57

读法:NDCG、Precision 上 Temporal BERT 在 8 个组合里 7 个赢,但 Recall@10 两项都输(3.57→3.52、2.85→2.52)。也就是说它把排在前面的做准了,但前 10 名里覆盖到的相关试验变少了。对临床试验匹配这种「宁可多给几个候选」的场景,Recall 下降是要注意的。

Recall@10 绝对值只有 2–3%,说明前 10 个结果里命中的相关试验占比极低——这与候选池有 20–45 万个试验有关。所有模型在这个任务上的绝对表现都很差,比较的只是「谁稍好一点」。

8.3 GPT-2 微调:只有定性对比

论文对 GPT-2 的评估是人工看输出,没有量化指标。三个示例问题:

  1. 化疗患者的周期与随访影像通常是什么时间安排?
  2. 哪些指标提示需要进 ICU?
  3. 术后早期管理要点是什么?

结论是微调后的 GPT-2「更贴近化疗语境」「提到了输液与静脉镇痛」这类具体措施,而原始 GPT-2「太宽泛,没有提到实际时间安排或影像计划」。

项目 设定
序列最大长度 128 token
新增特殊 token [TIME]、[EVENT]
batch size 8
学习率 1e-5
epoch 3
数据划分 按小结 80/10/10 随机

GPT-2 这部分证据强度弱于 BERT:没有量化指标、没有盲评、没有多人评分一致性。把它当作「方向性演示」而不是「性能证明」更合适。

8.4 生态位置

资源 规模 时间标注 与 22MCTS 的差异
MIMIC-IV-Ext-22MCTS 2,258 万事件 / 26.7 万小结 相对小时(LLM 推断) 本文
MIMIC-IV 结构化表 数亿行 绝对时刻(设备记录) 精确但只覆盖被系统采集的项目
MIMIC-IV-Note 33.2 万份小结 无 22MCTS 的原料
MIMIC-Ext-BHC 简明病程摘要 无 22MCTS 的检索 query 来源
n2c2 时序挑战赛数据 数百份 人工标注事件与时间 小但有人工金标准
THYME / i2b2 时序 数百份 人工标注 同上
MIMIC-Ext-SynNotes 464 万份合成笔记 无 目标是隐私增强,不是结构化

这张表说明了 22MCTS 的独特处境:它是有金标准的小数据集(n2c2、THYME)与无标注的大语料(MIMIC-IV-Note)之间的一种折中。规模上去了,标注质量下来了。选哪一端,取决于你的任务能不能容忍噪声。

§9 使用指引

9.1 四类用户的路径

做预训练/继续预训练的人: 直接用 [TIME]/[EVENT] 序列化格式,按 Hadm_id 划分,注意别把负时间戳删掉。评估时不要用 22MCTS 自己的「准确率」,去下游任务上报。

做临床 NLP 研究的人: 把 22MCTS 当 baseline 管线的复现参照。重点看它的后处理规则(§3.4)与 prompt 验证方法(§3.5),这两部分比数据本身更有复用价值。

做风险预测的人: 用 22MCTS 做特征增强,不要做唯一特征。与结构化表(labevents、chartevents)联合建模,22MCTS 负责补充叙事层的背景与因果链。

做数据工程的人: 这套「切块 → 双路检索 → LLM 标注 → 后处理」的管线可以直接搬到其他非结构化临床文本上(护理记录、影像报告、病理报告)。本地部署 LLM 的合规路径也是现成模板。

9.2 引用要求

必须同时引用三样:

  1. 数据集本身:

    Wang, J., Niu, X., Zhang, T., Shen, J., Kim, J., & Weiss, J. (2025). MIMIC-IV-Ext-22MCTS: A 22 Millions-Event Temporal Clinical Time-Series Dataset with Relative Timestamp (version 1.0.0). PhysioNet. RRID:SCR_007345. https://doi.org/10.13026/dkj6-r828

  2. PhysioNet 平台(官方明确要求):

    Pollard, T., Moody, B. E., Lehman, L., Gow, B., Fernandes, C., Xie, C., Johnson, A., Mark, R. G., & Heldt, T. (2026). PhysioNet as a global platform for biomedical research. Nature Health. https://doi.org/10.1038/s44360-026-00096-z

  3. 上游父项目 MIMIC-IV-Note v2.2(官方原文:「Please cite them when using this project.」)

配套论文:arXiv:2505.00827(v1 2025-05-01,v2 2025-11-17)。注意 v2 标题加了「for Risk Prediction」后缀,与 v1 不同。

9.3 版本锁定建议

在论文里引用时,至少写清四件事:版本号 1.0.0、事件总数 22,588,586、小结数 267,284、访问日期。因为 1.0.0 是首版,官方明确说后续会加记录与改进预处理——数字会变。

§10 AI 使用声明

项目 声明
数据性质 由 LLM 从去标识出院小结中抽取的事件-时间戳对,非人工标注金标准
可否直接用于训练 可以,但须视为弱标签;建议配合下游人工标注做微调
建议用途 预训练、继续预训练、弱监督中间任务、事件关系分类、管线复现
不建议用途 严格评测基准、高利害临床决策、精确时间查询、因果推断
幻觉风险 官方明示 LLM 可能生成原文本不存在的事件,或混入无关小结内容
时间精度 单位小时,实际精度约到天;50–75% 匹配事件时间完全一致
伦理注意 受 DUA 约束,不得尝试重识别;事件文本可能含罕见病与特殊人群描述,输出前需脱敏审查
偏差风险 单一医院、2008–2019、仅住院与急诊、简单病例被筛除
引用要求 数据集 DOI + PhysioNet 平台 + MIMIC-IV-Note v2.2 三者齐备
版本标注 必须写 1.0.0,并注明 22,588,586 / 267,284 两个核心数字
页面状态 published

常见误读(避坑清单)

常见说法 实际情况 证据
「时间戳是真实发生时间」 是 LLM 推断的相对小时,精度约到天 官方 prompt 验证:完全一致 50–75%,误差 <24h 占 70–85%
「模型准确率 91%」 0.912 是一致性统计,不是逐条准确率 同页另写「50–75% 完全一致」,两个口径不同
「10% 提升 = 准确率 10%」 是相对提升,绝对值 47.77% → 54.07% Table 5 十折均值
「2,258 万事件 = 2,258 万患者事件」 覆盖上界 145,915 名患者,实际人数官方未给 论文:331,794 份 / 145,915 人;筛选后 267,284 份
「MCTS 是蒙特卡洛树搜索」 是 Multiple Clinical Time Series 缩写 数据集全名
「表有五个字段」 官方写五列但只列四列,实为四列 页面原文 “five columns” 后仅列 Hadm_id/Event/Time/Time_bin
「Hadm_id 就是患者 ID」 是一次住院的标识,同患者多次住院有多个 需 JOIN admissions 取 subject_id
「负时间戳是脏数据」 是入院前事件,占 36.99%,是核心信息 官方时间分布
「Time=0 一定是入院时刻」 pivot 通常是入院,但例子里是手术 Table 3 病例 PMC4300884
「全部 33.2 万份小结都用上了」 只用了 267,284 份,保留 80.6% 上游按「简明病程 >100 字符」筛选
「事件映射到了标准医学术语」 刻意不映射,全是自由文本 论文明确说明不用 cTAKES/MetaMap 的理由
「可以直接当评测基准」 官方明写 No Ground Truth Labels Limitations 第四条

FAQ

Q1:这个数据集和 MIMIC-IV 是什么关系?
它派生自 MIMIC-IV-Note v2.2(出院小结),不是 MIMIC-IV 主库。三者关系是:MIMIC-IV 主库提供结构化表与 admissions/patients 等键;MIMIC-IV-Note 提供 33.2 万份文本;22MCTS 从文本里抽出事件时间序列。要用它做患者级分析,Hadm_id 必须回连主库。

Q2:为什么叫 Ext?
PhysioNet 上 MIMIC 系列的惯例:MIMIC-IV-Ext-XXX 表示从 MIMIC-IV 派生的扩展集。同族还有 MIMIC-IV-Ext-ECG-Glucose、MIMIC-IV-Ext-PE、MIMIC-IV-Ext-BHC 等。

Q3:能不能只下 CSV 不下原始笔记?
可以。CSV 本身不含原文,只有 Hadm_id + 事件片段 + 时间。但注意事件片段已经是原文摘录,仍然受 DUA 约束。

Q4:事件片段里会不会有 PHI?
上游 MIMIC-IV-Note 已完成 HIPAA 去标识(人名、日期、机构名等被替换)。但 LLM 抽取的片段可能把去标识后的占位符(如 [**Name**])也一并抽成事件。使用时要检查这类条目。

Q5:中文病历能用这套管线吗?
管线逻辑通用,但要换三样东西:切块粒度(中文 token 与英文不同)、检索模型(BGE 有中文版)、prompt(中文时间表达的规则不同,如「半月前」「自幼」需要额外规则)。

Q6:为什么平均只有 84 条事件?出院小结通常信息量更大。
因为管线做了四道收缩(§3.1):块池 200–400 → BM25 留 100 → 语义检索与合并 → Llama 只判 50–100 块含事件 → 清洗后常低于 50 块。最终 84 条是「一个块可能产出多条事件」后的结果。

Q7:Time 的浮点精度是多少?
官方未明确。从例子里看有 -4320、-1440、-720、-168 这类整齐值,推测是按可识别的整数小时输出,不做小数插值。

Q8:怎么判断某条事件是幻觉?
没有自动方法。可行的手段是抽样回原文核对:拿到 Hadm_id 后回到 MIMIC-IV-Note 定位对应小结,检索 Event 文本是否真的出现。官方也建议「consider validating subsets of the data with human experts」。

Q9:可以用它训练临床 LLM 吗?
可以用于预训练或继续预训练,但不宜直接做 SFT 的监督信号——因为目标是「抽事件」而不是「回答临床问题」。要做临床问答,仍需另找问答对。

Q10:为什么数据在部分地区不可用?
PhysioNet 页面对某些地区显示「Data is not available in your region due to legal or policy restrictions」。这是平台层面的合规限制,与数据集本身无关。解决方式是走机构合作的 DUA 通道。

术语表

术语 解释
22MCTS Multiple Clinical Time Series,本数据集的缩写,与蒙特卡洛树搜索无关
相对时间戳 以某事件(通常入院)为 0 点的小时偏移,前负后正
pivot 时间轴的零点事件,论文说通常是入院,但例子里出现过手术
Hadm_id MIMIC 体系里一次住院的标识,非患者标识
Time_bin 把连续小时映射到 9 个左闭右开区间的离散索引
上下文 BM25 在 5 token 块前后各加 5 token 上下文后做的 BM25 检索
BGE-Large-en 北京智源开源的双语/英文句向量模型,此处用于语义检索
RAG 检索增强生成,此处指先检索候选块再让 LLM 判定
弱监督 用不完美的自动标注训练模型,此处指 22MCTS 的定位
Brief Hospital Course 出院小结中的「简明病程」段落,本管线的检索 query
Concordance 一致性统计量,0.912 表示与人工标注的一致性程度,非逐条准确率
DAIMS Data and AI Maturity/Quality Schema,本百科用于多维质量评分的框架
Credentialed Access PhysioNet 的凭证访问级别,需培训 + DUA
DUA Data Use Agreement,数据使用协议

附录 A:核心数字核对表

数字 官方值 复算 / 校验 结论
事件总数 22,588,586 页面与论文一致 一致
小结数 267,284 页面与论文一致 一致
平均事件数 84 22,588,586 ÷ 267,284 = 84.51 一致(四舍五入)
最大事件数 244 官方单点声明 无法复算
最小事件数 1 官方单点声明 无法复算
平均 token/事件 3 官方单点声明 无法复算
最大 token/事件 299 官方单点声明 无法复算
时间分布三档 36.99 / 51.19 / 11.80 合计 99.98%,四舍五入残差 0.02 一致
上游份数 331,794 论文给出 一致
上游患者数 145,915 论文给出 一致
保留比例 未给 267,284 ÷ 331,794 = 80.56% 派生
筛除份数 未给 331,794 − 267,284 = 64,510 派生
PubMedQA 均值 未给 十折均值 47.77 / 54.07 派生(逐折数据在 Table 5)
访问量 337 页面显示当前版本 = 全部版本 一致

一处官方文档不一致:页面原文说「There are five columns in the table」,随后只列出 Hadm_id、Event、Time、Time_bin 四列。以四列为准。

附录 B:数字的来源分层

本篇数字分三类,混用是常见错误来源:

类别 例子 可信度 引用方式
官方声明 22,588,586 / 267,284 / 84 / 244 / 299 高(但未给复现脚本) 直接引,注明版本 1.0.0
官方派生 36.99% / 51.19% / 11.80% 中(百分比无分子分母) 引时说明是官方给的占比
本文派生 84.51 / 80.56% / 64,510 中(算术正确,口径假设) 标明「派生」并给算式
论文 Table 47.77 / 54.07 / NDCG 36.53 等 高(逐折数据可核) 引 arXiv:2505.00827 表号

写论文时最容易混的是第三类和第一类。比如「84.51 条均值」是本文用官方两个数相除得到的,不是官方直接声明的 84。

附录 C:完整参考文献

编号 文献 用途
1 Wang J. et al. MIMIC-IV-Ext-22MCTS v1.0.0. PhysioNet. DOI 10.13026/dkj6-r828 数据集本体
2 Wang J. et al. arXiv:2505.00827 (v2, 2025-11) 方法与实验
3 Johnson A. et al. MIMIC-IV-Note. Scientific Data 10 (2023) 上游数据
4 Johnson A. et al. MIMIC-IV v3.1. PhysioNet 结构化表与键
5 Touvron H. et al. Llama 3 (2024) 标注模型
6 Xiao S. et al. BGE (2023) 语义检索模型
7 Devlin J. et al. BERT (2019) 下游基线
8 Radford A. et al. GPT-2 (2019) 生成式下游
9 Jin Q. et al. PubMedQA (2019) 评测集
10 Koopman B., Zuccon G. (2016) TREC 临床试验匹配测试集
11 Aali et al. (2024) 简明病程段落筛选依据
12 Pollard T. et al. PhysioNet platform. Nature Health (2026) 平台引用要求

附录 D:它为何存在,以及靠什么持续

一个没有金标准、验证只有 10 份病例的数据集,凭什么在 PhysioNet 上被引用、被下载、被当作基线?这个问题值得单独拆开,因为它决定了你该把多少信任放进去。

D.1 需求侧:有个洞一直没人填

临床 NLP 领域长期存在一个断层。「小规模人工标注」这一端有 n2c2、THYME、i2b2 的时序挑战赛数据——几十到几百份文档,标注精到事件边界与时间关系,但规模上不去。另一头是 MIMIC-IV-Note 这样的原始语料——33 万份小结,覆盖广,但一行标注都没有。

中间地带是空的:十万份量级、有时间标注、可公开获取。这不只是学术上的空白,是工程上的刚需——任何做临床时序模型的团队都要面对「标注不起」的问题。一份出院小结从阅读到标完时间关系,熟练标注员也要 20–30 分钟。26.7 万份靠人力是不可能完成的,成本量级在十万人时以上。

自动标注提供了一个「先有再优」的通道。即使只有 60% 可用,也把可行的工作范围扩大了一个数量级。

D.2 供给侧:三个前提同时成立

这个数据集能在 2025 年做出来,需要三件事在那之前刚好凑齐。

第一,8B 级别的模型足够做这件事。 2022 年的模型要在「判定这一小块文本是否含临床事件 + 估计相对时间」这件事上达到可用水平,需要大得多的模型。Llama-3.1-8B 在消费级成本下做到了,而且可以本地部署——这是关键,因为 MIMIC 数据不能出网。

第二,检索技术成熟到能把长文档压到 LLM 的上下文窗口内。 一份小结平均 2,267 token,长的到 5,000 以上。块池每份 200–400 块,不筛选直接喂 LLM 成本不可接受。BM25 + BGE 双路检索把候选压到 50–100 块,这一步是工程上的分水岭。

第三,MIMIC 派生生态已经形成了成熟的分发路径。 PhysioNet 的 Credentialed Access、DOI 注册、RRID、版本管理,让一个派生集可以独立于母库被引用。MIMIC-IV-Ext-BHC 在 22MCTS 之前就已经用同一套模式发布过,22MCTS 直接复用了它的「简明病程摘要」作为检索 query。

D.3 维护侧:谁在推动它继续存在

角色 承担什么 动机
NLM 院内研究部 算力(NIH Biowulf)、研究人员、合规审查 机构使命:让临床数据可被研究利用
PhysioNet 托管、凭证审核、DOI、版本归档 平台定位:生物医学数据的公共基础设施
上游 MIMIC-IV-Note 原始文本、去标识流程、键体系 MIMIC 生态的持续投入
下游复现者 引用、报错、提 issue、派生新集 自己的研究需要

这四条里最脆弱的是第四条。因为数据集没有维护基金,改进动力主要来自使用者反馈。官方在 Release Notes 里写「Future updates may include additional records, further preprocessing improvements, and expanded metadata」——用的是 may,不是 will。

这意味着 1.0.0 可能长期是唯一版本。 如果它的已知问题(无金标准、时间精度天级、事件不归一化)在你的任务里是硬伤,不要指望下一版修好。

D.4 它不会被替代的部分

即使将来出现更好的自动标注数据集,22MCTS 有几样东西是被固定下来的:

管线记录的完整度。 切块参数、检索阈值、prompt 指导、后处理规则、验证方法,全部公开。新的数据集通常在方法描述上更简略。

合规路径的示范。 「在防火墙内本地部署 LLM 处理受 DUA 约束的临床文本」这套流程,已经被 NLM 背书过一次。这对医疗机构的合规部门是有说服力的先例。

负样本价值。 一个明确声明「我没有金标准」的数据集,本身就是一个好的教学材料——它让「LLM 标注能做什么、不能做什么」这个讨论有了具体的、可核查的例子。

D.5 什么情况下它会失效

情形 后果
上游 MIMIC-IV-Note 升级到 v3 并改变文本结构 管线需重跑,Hadm_id 映射可能变化
PhysioNet 收紧派生集分发政策 访问门槛提高,复现成本上升
出现人工标注的十万级时序数据集 22MCTS 退居预训练用途
Llama 系列模型许可变更 标注流程需换模型,产出不可比

最后一条最值得注意:用不同 LLM 重跑同一条管线,产出的是另一个数据集,不是 22MCTS 的新版本。事件边界、时间估计、拆分粒度都会变。这也是为什么版本锁定在这个数据集上格外重要。

附录 E:与三条替代路线的对照

做「把临床文本变成时间轴」这件事,除了 22MCTS,还有三条现实路线。选哪条取决于你的噪声容忍度与算力预算。

E.1 路线一:规则 + 词典(最便宜,精度看场景)

用现成的时序标注工具(HeidelTime 的临床扩展、SUTime、CTakes 的时间模块)在出院小结上跑规则。优点是完全可解释、零 GPU 成本、结果稳定可复现。缺点是单句内的显式时间(“three days ago”)能抓,跨句指代(“the next day”)与需要临床常识的推断(“a week of antibiotics before admission”)基本抓不到。

维度 表现
显式时间表达式召回 较高
跨句时间推理 低
事件边界判定 需另接 NER
部署成本 极低
可复现性 完全可复现

适合:规则明确的窄任务,比如「抽取所有检查报告的日期」。

E.2 路线二:小规模人工标注(最贵,最可信)

按 n2c2 2012 时序挑战赛的模式,请临床背景的标注员标几百到几千份。优点是事件边界与时间关系都有金标准,可以做严格评测。缺点是标注成本不可扩展,且标注一致性本身就是个研究问题(同一段文本两位医生标出的事件数可能差一倍,见 22MCTS 的 Table 4:人工 32 [14,70] 的区间跨度已经五倍)。

适合:需要发表严格评测结果的研究,或者需要为自动标注提供验证集。

E.3 路线三:换用更大的模型但不上规模(折中)

不上 26 万份,只挑 1–5 万份,用更强的模型(GPT-4 级别)配上人工抽检。22MCTS 的 prompt 验证里有直接证据:10 份病例上 GPT-4 的时间戳一致率 0.912,O1-preview 是 0.951,都高于 Llama-3.1-8B 用在数据集上的整体水平。

方案 份数 单份成本 质量 合规
22MCTS 267,284 低(8B 本地) 中 本地部署,合规
大模型小规模 10,000–50,000 高 高 数据不能出网,需私有部署
人工标注 500–2,000 极高 最高 需签保密协议

E.4 三条路线怎么选

你的约束 推荐
要最大规模,容忍噪声 22MCTS
要可解释、可复现、零 GPU 规则 + 词典
要严格评测或为自动标注做验证集 人工标注小规模
要质量但不想人工 大模型 + 私有部署,小规模

最实际的组合往往是分层:用 22MCTS 做预训练,用人工标注的 500 份做微调与评测,用规则做兜底的一致性检查。三者各有各的位置,不是替代关系。

编辑说明

本篇所有数字均来自 PhysioNet 项目页(1.0.0 版)、配套论文 arXiv:2505.00827 v2 与官方代码仓 README 三处,未引用二手解读。核验时间 2026-10-26。

数据本体受 DUA 约束,本篇未下载 CSV,因此 22,588,586 / 267,284 / 84 / 244 / 299 等数字为官方声明值,未做逐行复算。文中已明确标注哪些是官方值、哪些是本文用官方值相除得到的派生值(附录 A、B)。

发现一处官方页面内部不一致:正文称表有「五列」,随后只列出四列(Hadm_id、Event、Time、Time_bin)。以四列为准,已在 §2.4 与附录 A 标注。

论文摘要中的「10% improvement」为相对提升口径(47.77% → 54.07%,相对 +13.2%),不是绝对百分点。已在 §8.1 与避坑清单中说明,防止误读为「准确率只有 10%」。

Table 5 中 8 折的 Temporal BERT 准确率均为 55.2,标准差 16.72 高于 BERT 的 7.57,已作为需警惕信号写入 §8.1,未做进一步解释性归因(原文未给)。

未覆盖内容:数据集实际文件大小与行级校验(受 DUA 限制);患者级去重后的真实人数(官方未公布);事件类型分布与高频事件表(需下载后统计);中文场景适配方案(官方未提供)。

数据范围为 1.0.0 版,不涉及后续版本。文中提及的 MIMIC-IV、MIMIC-IV-Note、MIMIC-Ext-BHC 等仅作关系说明,未做逐表核对。


相关数据集导航

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

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

返回 AI-Ready 数据集