信息速览
大模型考医学执照能拿高分,和它能不能看一份真实的入院记录把诊断一步步推出来,是两件几乎不搭界的事。前者是选择题:题干已经把关键线索挑好了,选项把答案空间缩到四五个,模型只要选出概率最高的那个。后者是开放题:一份病历里混杂着主诉、既往史、查体描述和各种检验值,有用的和没用的写在一起,医生要自己判断哪些线索值得跟、按什么顺序跟、在什么节点上把"疑似"升级成"确诊"。公开评测集几乎全在做前者,因为前者好打分——答案对就是对。而后者之所以重要,恰恰因为它不好打分:临床上真正让人不放心的从来不是"结论对不对",而是"这个结论是怎么来的"。
DiReCT(Diagnostic Reasoning dataset for Clinical notes)冲的就是这个差价。它从 MIMIC-IV 里挑出 511 份病历,把每份病历的主诉、现病史、既往史、家族史、体格检查、相关检查结果六段文字单独拆出来,请临床医师逐份标注出"从哪条观察出发、凭什么依据、走到哪个中间判断、最终落到哪个主出院诊断"的完整链条,并额外附上一套按诊断指南搭起来的病种知识图谱。它不关心模型最后选了哪个字母,它关心模型能不能把路走对、能不能把每一步的凭据说清楚。
它的代价同样清楚。511 份病历、25 个疾病类别、只保留单一主出院诊断、刻意删掉了病历里会直接泄露诊断的描述、观察不足时由标注者补写 plausible 的观察——每一条都是为了把"推理链"这件事做干净而付出的偏差。官方页面写得很直接:它仅为模型评测而设计,不用于临床。下面的「一屏速览」给出关键规格。
| 维度 | 内容 |
|---|---|
| 全名 | MIMIC-IV-Ext-DiReCT(Diagnostic Reasoning Dataset for Clinical Notes) |
| 发布方 | PhysioNet;作者为大阪大学 WPI-PRIMe 与 IDS、大连医科大学第一附属医院心内科、新加坡 A*STAR 高性能计算研究所 |
| 首次发布 | 2025 年 1 月 21 日,版本 1.0.0(目前仍是唯一版本) |
| 记录数 | 511 份临床病历,每份对应一个标注 JSON 文件 |
| 来源数据集 | MIMIC-IV v3.1(官方 Parent Projects 明列,使用时需一并引用) |
| 文本格式 | SOAP 格式(Subjective / Objective / Assessment / Plan)的临床记录 |
| 输入栏位 | 6 段:主诉、现病史、既往史、家族史、体格检查、相关检查结果,键名 input1 至 input6 |
| 病种覆盖 | 25 个疾病类别,分布在 5 个医学领域;一个疾病类别下可含多个主出院诊断 |
| 标注人力 | 9 名临床医师标注,3 名高级医学专家核验准确性与完整性 |
| 标注产物 | 每份病历一棵蕴含树(entailment tree),节点分 Input(观察)、Cause(依据)、Intermedia(诊断)三类 |
| 知识图谱 | 25 个疾病类别各一个 JSON 子图,含 diagnostic(推理树)与 knowledge(各诊断前提)两个键 |
| 文件格式 | 两个压缩包:samples.rar(标注 JSON)、diagnostic_kg.rar(知识图谱 JSON) |
| 许可与访问 | PhysioNet Restricted Health Data License 1.5.0;须注册并签署数据使用协议后方可下载 |
| 官方配套 | 项目网站、GitHub 解析代码仓库、arXiv 论文(2408.01933) |
| 持久化标识 | DOI 10.13026/yf96-kc87(v1.0.0) |
| 典型用途 | 大模型诊断推理能力评测、推理链可解释性评估、知识图谱增强生成、临床文本推理的对照基线 |
§1 它要解决的具体麻烦
1.1 分数够了,凭据不够
医学自然语言处理在过去几年有一条清晰的主线:把医师考试题、教科书问答、文献结论题搬进来,让模型做选择题,然后报告准确率。这类评测推动了模型能力的快速提升,也留下了一个结构性的盲区——选择题天然把"找线索"这一步替模型做了。题干里给出的往往是已经被提炼过的、与答案直接相关的信息,模型不需要判断"这一段既往史里哪句话有用",也不需要决定"在检验结果和查体之间先看哪个"。
真实临床记录不长这样。一份入院记录里,患者三年前做过什么手术、家里谁得过什么病、两天前开始哪里疼、压痛在哪个象限、白细胞和肌酐各是多少,全都并行地写在一起。医生读它的时候在做三件事:从大量文本里认出哪些是有意义的发现(疾病相关观察),判断这个发现能支持到什么程度的结论(依据),把这些结论按指南顺序串成一条从"疑似"到"确诊"的路径。这三件事合起来叫诊断推理,它的输出不是"疾病 A",而是"因为观察到 X,依据 Y,所以走到 Z;再因为 Z 加上观察到 W,所以确诊疾病 A"。
可解释性之所以在医疗场景是硬需求而不是加分项,原因就在这里。医生说一句"考虑心衰",和医生说"因为颈静脉压升高、超声提示左室射血分数低于百分之四十、NT-proBNP 超过阈值,符合射血分数降低型心衰",在临床上的分量完全不同。前者无法被核对,后者可以被逐条推翻或确认。一个只会给结论的模型,在真实场景里只能被当作"另一个意见",而不能被当作"可以追溯的判断"。官方页面把这一点写成了立项理由:模型在医学问答上表现出色,但在处理真实临床的复杂任务时缺乏可解释性。
1.2 三条常见的错误期待
第一条,期待它是一个"训练用的诊断语料"。511 份病历这个体量对微调来说太小,而且它的标注形态是树状的推理链,不是"输入文本、输出标签"的平铺格式。想把它当监督数据直接喂进去,得先把树摊平成序列,摊平之后的监督信号是什么,官方并没有给出标准答案。
第二条,期待它给出"标准答案文本"。它的真值是结构化的节点与连边,不是一段参考答案。如果评测方式是把模型生成的自由文本和标准文本做相似度比较,那这个数据集的价值会被完全绕过——它设计来考的就是中间步骤的结构,而不是最终那句话的措辞。
第三条,期待它覆盖"鉴别诊断"。官方明确说 DiReCT 只包含疾病类别的一个子集,且每份病历只考虑单一主出院诊断,刻意排除了诊断之间的关系,理由是这种关系复杂到连人类医生都难以处理。想用它测"模型能不能在几个相近诊断之间做取舍",方向就偏了。
1.3 它能给到的与给不到的
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 评测模型能否给出可追溯的推理步骤 | 511 棵人工标注的推理树,节点类型与连边齐全 | 够,这是它唯一真正独特的地方 |
| 评测最终诊断的准确性 | 每份病历一个主出院诊断叶子节点 | 够,但只考最后一步会浪费大部分标注 |
| 研究知识图谱如何约束生成 | 25 个病种子图,标注时要求严格遵循 | 够,图谱与标注是同源构造的 |
| 做诊断推理的监督微调 | 511 份,树状结构 | 不够,体量与格式都不支持 |
| 研究鉴别诊断与共病 | 单一主出院诊断,无第二诊断,排除诊断间关系 | 不够,官方明确排除 |
| 做临床决策支持系统的验证 | 无对应内容 | 不够,官方写明仅供模型评测、不用于临床 |
| 研究病历结构化抽取 | 六段输入已人工分栏 | 够做对照,但不是它的设计目标 |
| 评测多轮问诊式推理 | 单轮、静态文本 | 不够,病历是已写完的记录 |
1.4 你的处境与它能帮到的事
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 你的模型在医学选择题上分数很高,想知道它到底会不会看病 | 提供真实病历文本加推理链真值,可以逐步比 | 先只比叶子诊断拿一个基线,再比节点级的观察与依据命中 |
| 你在做知识图谱增强生成,需要一个图谱与标注同源的场景 | 图谱就是标注时用的那套,评测时天然对齐 | 把图谱作为检索源或约束条件,对照无图谱版本 |
| 你想量化"答案对但推理错"这种情况 | 推理树真值允许结论对、路径错 | 分别报结论准确率与链条匹配度,不要只报前者 |
| 你在比较不同提示策略对推理质量的影响 | 511 份规模适中,可全量跑 | 固定解码参数,按疾病类别分桶报告,注意类别间样本不均衡 |
| 你要给医学大模型写一份可解释性章节 | 提供"观察—依据—诊断"三元组的对照口径 | 引用官方页面与 arXiv 论文,注明版本 1.0.0 与受限许可 |
| 你在找 MIMIC-IV 的派生资源 | 它的父项目是 MIMIC-IV v3.1 | 先拿到 MIMIC-IV 访问权限,再申请本资源 |
1.5 一句话判断
它不适合当"更大的训练语料",而适合当"更细的评分尺":把诊断从一个对错问题,拆成观察认得准不准、依据用得对不对、路径走得顺不顺三个可分别打分的问题。
1.6 不适合谁:四条边界
不适合拿来做临床或准临床用途。 官方在 Usage Notes 里写明数据集仅为模型评测而设计,不用于临床。这不是免责套话:标注过程中存在人工补写观察的环节,病历已被改写,与真实病历并不等价。
不适合拿来训练。 511 份的规模决定了它只能是评测集。用它微调得到的模型,本质上是在背这 511 条路径。
不适合拿来研究鉴别诊断。 每份病历只保留一个主出院诊断,官方明确排除了诊断间关系,也删掉了病历中泄露诊断的描述,这等于把鉴别诊断这个问题从数据里移除掉了。
不适合拿来研究"信息不足时如何决策"。 观察不足时,标注者被要求向病历中补写合理的观察,使推理链完整。也就是说,数据里几乎不存在"线索不够"的样本——而"线索不够时该怎么办"恰恰是真实临床里最常见也最棘手的情形。官方承认这一选择损害了对原始病历的保真度,换取的是数据集的完整性。
§2 数据构成与规格
2.1 数据集由三条腿组成
第一条腿是标注样本,官方以 samples.rar 分发。解压后是一棵三级目录树:顶层 samples,第二层是疾病类别,第三层是主出院诊断类别,最里面才是 note_1.json、note_2.json 这样逐份病历的标注文件。这个层级本身就是信息——同一疾病类别下的不同主出院诊断被分开存放,意味着做分桶评测时不需要再去解析文件名,直接按目录切即可。
第二条腿是诊断知识图谱,官方以 diagnostic_kg.rar 分发。解压后是 diagnostic_kg 目录,每个疾病类别一个 JSON 文件。官方说明这 25 个子图是按现有诊断指南与医师经验构造的,每个子图记录一个疾病的诊断流程,随数据集一起提供。
第三条腿是代码。官方提供了 GitHub 仓库(wbw520/DiReCT),其中的 utils.data_analysis 模块给出 cal_a_json 与 deduction_assemble 两个函数,用于把一个标注 JSON 解析成字典、还原树结构、并把推理过程整理成 deduction 四元组。没有这个模块也能直接读 JSON,但树结构与 deduction 的语义需要按官方定义重建。
三条腿缺一不可。只拿标注样本,不知道标注者依据的是什么指南;只拿知识图谱,没有病历文本;只有代码没有数据,什么都跑不了。
2.2 字段与键的完整字典
本数据集的"字段"不是表格列,而是 JSON 里的键。下表逐条列出官方页面说明到的全部键与取值形态。
| 键 / 结构 | 所在位置 | 取值形态 | 含义 | 使用注意 |
|---|---|---|---|---|
samples/ |
标注包顶层 | 目录 | 全部标注样本的根 | 解压后才有 |
Disease Category |
samples/ 下 |
目录 | 疾病类别(共 25 个) | 与知识图谱文件名对应 |
PDD Category |
疾病类别下 | 目录 | 主出院诊断类别 | 一个疾病类别下可有多个 |
note_N.json |
PDD 目录下 | JSON 文件 | 单份病历的标注 | N 为序号 |
| 节点索引 | JSON 顶层键 | 字符串或数字 | 图中每个节点的编号 | 也是 connection / upper 引用的对象 |
content |
节点内 | 字符串 | 该节点的内容文本 | 观察、依据或诊断的具体表述 |
type |
节点内 | Input / Cause / Intermedia |
节点类型 | Input 为观察,Cause 为依据,Intermedia 为诊断 |
connection |
节点内 | 子节点键列表 | 指向下游节点 | 无子节点即为叶子诊断节点 |
upper |
节点内 | 父节点键 | 指向上游节点 | 无父节点即为观察节点 |
input1 |
input_content |
字符串 | 主诉(Chief Complaint) | 六段输入的第 1 段 |
input2 |
input_content |
字符串 | 现病史(History of Present Illness) | 第 2 段 |
input3 |
input_content |
字符串 | 既往史(Past Medical History) | 第 3 段 |
input4 |
input_content |
字符串 | 家族史(Family History) | 第 4 段 |
input5 |
input_content |
字符串 | 体格检查(Physical Exam) | 第 5 段 |
input6 |
input_content |
字符串 | 相关检查结果(Pertinent Results) | 第 6 段 |
chain |
解析函数返回 | 列表 | 按推理顺序排列的诊断过程 | 从疑似到一个主出院诊断 |
diagnostic |
知识图谱 JSON | 嵌套字典 | 该病种的诊断推理树 | 从疑似诊断到最终诊断 |
knowledge |
知识图谱 JSON | 字典 | 每个诊断的前提 | 多个前提以分号分隔 |
o |
deduction | 字符串 | 从原文抽取的观察 | 四元组的键 |
z |
deduction | 字符串 | 该观察通向诊断的依据 | 四元组第 1 项 |
r |
deduction | 字符串 | 观察出自 input1 至 input6 的哪一段 | 四元组第 2 项 |
d |
deduction | 字符串 | 诊断名称 | 四元组第 3 项 |
官方对 deduction 的描述给出了 {o: [z, r, d]} 这个形式,其中 o 是键,列表里依次是依据、出处段与诊断名。读代码时容易把它读成"观察、依据、出处、诊断"四平铺,实际结构是键值加三项列表。
2.3 一份标注的完整解剖
以官方给出的心衰(Heart Failure)知识图谱子图为例,先看知识图谱这一侧的形态。官方页面直接贴了这个 JSON:
{"diagnostic":
{"Suspected Heart Failure":
{"Strongly Suspected Heart Failure":
{"Heart Failure":
{"HFrEF": [],
"HFmrEF": [],
"HFpEF": []}}}},
"knowledge":
{"Suspected Heart Failure":
{"Risk Factors": "CAD; Hypertension; Valve disease; Arrhythmias; CMPs; ...",
"Symptoms": "Breathlessness; Orthopnoea; Paroxysmal nocturnal dyspnoea; ...",
"Signs": "Elevated jugular venous pressure; Hepatojugular reflux; Third heart sound (gallop rhythm); ..."},
"Strongly Suspected Heart Failure": "NT-proBNP > 125 pg/mLor BNP > 35 pg/mL\n",
"Heart Failure": "Abnormal findings from echocardiography:LV mass index ≥ 95 g/m2 (Female), ≥ 115 g/m2 (Male); ...",
"HFrEF": "LVEF<40%",
"HFmrEF": "LVEF41~49%",
"HFpEF": "LVEF>50%"}}
从 diagnostic 读进去,这是一棵四层树:疑似心衰下面挂着高度疑似心衰,高度疑似下面挂着心衰,心衰再分出射血分数降低型(HFrEF)、射血分数中间型(HFmrEF)、射血分数保留型(HFpEF)三个叶子。空列表表示到此为止,没有更下游的节点。
knowledge 给出了每一级的前提。心衰这一级分了三类:危险因素、症状、体征,每一类的取值都是一串以分号分隔的项。"高度疑似心衰"这一级的前提压成一个数值条件(NT-proBNP 或 BNP 的阈值),"心衰"这一级压成一组超声异常发现,三个叶子各压成一个左室射血分数区间。
这份子图说明了一件事:DiReCT 的"推理"不是自由联想,而是沿着一条外部给定的、可枚举的路径走。标注者被要求严格遵循知识图谱标注,这保证了 9 名标注者产出的链条在结构上可比,代价是链条的形态被图谱的形状限定了。
再看标注样本这一侧。官方给出的读取示例用的是 samples/Stroke/sample1.json,并且明确标注这是合成样本(Not from MIMIC):
from utils.data_analysis import cal_a_json, deduction_assemble
#-- 注意:官方示例用的是合成样本,不是来自 MIMIC 的真实病历
root = "samples/Stroke/sample1.json"
record_node, input_content, chain = cal_a_json(root)
GT = deduction_assemble(record_node)
cal_a_json 返回三样东西:record_node 是全部节点的字典,键为节点索引;input_content 是原始病历的六段,从 input1(主诉)到 input6(相关检查结果);chain 是按推理顺序排列的诊断过程列表。deduction_assemble 再把节点整理成 deduction 集合。
2.4 病历、疾病类别与主出院诊断的映射
三者的关系是:一份病历属于一个主出院诊断(PDD),一个主出院诊断挂在一个疾病类别下,一个疾病类别对应该病种的一张知识图谱子图。官方说明筛选条件是病历的主出院诊断落在 25 个疾病类别之一,且"一个疾病类别可能包含多个主出院诊断"。
| 层级 | 数量 | 说明 | 用途 |
|---|---|---|---|
| 疾病类别 | 25 | 分布在 5 个医学领域 | 对应 25 张知识图谱子图,也是目录第二层 |
| 主出院诊断(PDD) | 官方未给出总数 | 一个类别下可有多个 | 目录第三层,也是推理树的叶子 |
| 临床病历 | 511 | 每份一个 JSON | 目录最内层 |
| 知识图谱子图 | 25 | 每个疾病类别一个 JSON | 与疾病类别一一对应 |
需要留意的是,官方页面没有逐条列出 25 个疾病类别的名称,也没有给出 5 个医学领域的划分方式,更没有给出每个类别下各有多少份病历。这三个信息只有在拿到数据、解压目录之后才能看到。本文因此只给出总数,不做任何按类别的拆解(§10 已声明为未核验内容)。
511 份病历来自多少名患者,官方页同样没有说明。MIMIC-IV 的一名患者可以有多次住院、多份记录,因此不能默认"511 份病历等于 511 名患者"。做评测时如果要避免同一患者跨桶,需要先从 MIMIC-IV 侧取回患者标识——但 DiReCT 的标注文件里并没有这个字段,这是它在数据结构上的一个硬缺口。
2.5 与同类医学问答资源的字段差异
| 资源 | 输入形态 | 真值形态 | 是否考推理过程 | 数据来源 |
|---|---|---|---|---|
| DiReCT | 6 段自由文本病历 | 推理树 + 知识图谱 | 是,节点与连边都是真值 | MIMIC-IV v3.1 |
| MedQA 一类执照考题 | 题干 + 若干选项 | 单个选项字母 | 否 | 医师资格考试 |
| PubMedQA 一类文献问答 | 文献摘要 + 问题 | 是/否/可能 | 否 | 生物医学文献 |
| 医学视觉问答资源 | 影像 + 自然语言问题 | 短答案或选项 | 否 | 放射/病理图像 |
| 病历摘要类评测 | 长病历或医患对话 | 参考摘要文本 | 否,比的是文本相似度 | 电子病历或对话 |
差别集中在真值形态上。除了 DiReCT,这一列里几乎所有资源的真值都是"一个答案":一个字母、一个词、一段参考文本。DiReCT 的真值是一张图,节点有类型,连边有方向。这个差别决定了它能问的问题不一样——它不问"你答对了吗",它问"你怎么走到那儿的"。
2.6 六段输入各自的临床含义
官方对纳入与排除的取舍说得很明确:只取主观与客观两个部分里的 6 项临床数据,即主诉、现病史、既往史、家族史、体格检查、相关检查结果;系统回顾(review of systems)与社会史(social history)被排除,理由是它们在原始病历中常常缺失、且与诊断关联较弱。
| 栏位 | 键名 | 临床含义 | 在推理中的常见角色 |
|---|---|---|---|
| 主诉 | input1 |
患者本次就诊最主要的不适与持续时间 | 通常是推理链的起点观察 |
| 现病史 | input2 |
本次疾病的起病、演变、伴随症状 | 观察最密集的一段 |
| 既往史 | input3 |
既往疾病、手术、用药 | 多作为危险因素类前提 |
| 家族史 | input4 |
家族中相关疾病 | 多为辅助性危险因素 |
| 体格检查 | input5 |
查体的阳性发现与体征 | 体征类前提的主要来源 |
| 相关检查结果 | input6 |
实验室与影像等检查结果 | 阈值型前提的主要来源 |
把知识图谱里"危险因素 / 症状 / 体征"三类前提与这六段对照着看,映射相当直接:危险因素主要落在既往史与家族史,症状落在主诉与现病史,体征落在体格检查,数值阈值落在相关检查结果。这个映射不是官方写死的规则,而是从心衰子图示例的前提分类可以推出的对应关系。
§3 它是什么人的数据
3.1 贡献者与机构
官方页面列出三位作者。第一位 Bowen Wang,隶属大阪大学人类元宇宙医学优质研究所(WPI-PRIMe)与大阪大学数据可用性科学研究所(IDS)。第二位 Jiuyang Chang,隶属大连医科大学第一附属医院心内科。第三位 Yiming Qian,隶属新加坡科技研究局高性能计算研究所(IHPC, A*STAR)。
这个组合解释了数据集的两个特征。诊断指南一侧的严谨性来自临床科室的参与(心内科),而图谱构造、推理树形式化与大模型评测方法一侧来自工程与数据科学团队。官方在致谢里列出四项资助:日本文部科学省的世界顶级国际研究中心计划(WPI)、JSPS 科研费 24K20795、JST ACT-X(JPMJAX24C8)、以及大连海创高层次人才项目。
3.2 时间线
| 时间 | 事件 | 出处 |
|---|---|---|
| 2024 年 8 月 | arXiv 预印本 2408.01933 公开,首次描述 DiReCT 的构造与评测 | 官方参考文献 [7] |
| 2025 年 1 月 21 日 | 数据集在 PhysioNet 发布,版本 1.0.0 | PhysioNet 项目页版本区 |
| 本文核验时 | 仍为 1.0.0,官方页面未见更高版本 | PhysioNet 项目页 |
论文的公开早于数据集约五个月。这种顺序在 MIMIC 派生资源里很常见:先在预印本里说明方法与结论,再把数据托管到需要走合规流程的平台。要注意的是,论文里的评测结果对应的是论文写作时的模型版本,用它给今天的模型定基线时需要自己重跑。
3.3 采集场景:从出院记录里切出六段
DiReCT 的病历来自 MIMIC-IV。MIMIC-IV 是贝斯以色列女执事医疗中心重症与急诊电子病历的去标识化公开版本,文本以 SOAP 格式组织,即主观(Subjective)、客观(Objective)、评估(Assessment)、计划(Plan)四部分。DiReCT 的作者从这个池子里挑出主出院诊断落在 25 个疾病类别内的记录,再把主观与客观两部分里的 6 项临床数据从原始文本中手工摘出来,分别存进 input1 至 input6。
"手工摘出"这一步靠的是作者为 Windows 开发的标注软件。也就是说,从 MIMIC-IV 原文到 DiReCT 输入之间,经过了一道人工重排:原文的段落顺序、标题层级、冗余表述都被重写成六个固定栏位。这对使用者的含义很直接——DiReCT 的输入文本与 MIMIC-IV 原文不是逐字对应的,不能拿 DiReCT 的输入去反查 MIMIC-IV 里的原句位置,r 字段只告诉你是六段中的哪一段,不告诉你在原文档的第几行。
3.4 数据来源的三个层次
| 层次 | 内容 | 谁负责 | 约束 |
|---|---|---|---|
| 第一层 | 贝斯以色列女执事医疗中心的真实电子病历 | 原始医疗机构 | 已去标识化,受 MIMIC 数据使用协议约束 |
| 第二层 | MIMIC-IV v3.1 的 SOAP 格式临床记录 | MIT 计算生理实验室 | 需 PhysioNet 认证访问 |
| 第三层 | DiReCT 的六段重排、去泄露改写、推理链标注 | DiReCT 作者团队 | 受限健康数据许可 1.5.0,仅供评测 |
三层各自加一层约束,最终使用者的义务是累加的:既要遵守 MIMIC-IV 的数据使用协议(官方 Ethics 节明确表示严格遵守,不与任何第三方共享),也要遵守 DiReCT 自己的受限许可。这意味着不能在自己的服务器上把数据再分发,也不能把它作为公开评测榜单的下载源。
§4 它最独特的东西
4.1 真值是一棵树,不是一个标签
绝大多数医学评测集的真值可以用一个字段装下。DiReCT 的真值是一棵蕴含树:观察节点在下,诊断节点在上,中间的依据节点解释"为什么这条观察能把结论往上推一级"。节点有 type,连边有 connection 与 upper 双向索引,因此这棵树既能从上往下展开,也能从叶子往上回溯。
这个结构带来一个别的资源给不了的能力:可以把模型的输出拆成三笔账分别结算。第一笔是观察认得准不准——模型从六段文本里抽出的发现,与标注者抽出的 Input 节点是否对得上。第二笔是依据用得对不对——模型给出的解释,与 Cause 节点是否一致。第三笔是路径走得顺不顺——模型的中间判断序列,与 chain 是否吻合。三笔账可以全对、全错,也可以结论对而前两笔错。最后这种情况在只看最终答案的评测里完全不可见,而它恰恰是临床上最危险的情况:结论蒙对了,凭据是编的。
4.2 知识图谱与标注是同源的
很多工作把知识图谱当作事后外挂:先有标注,再找一张图谱来增强检索。DiReCT 反过来——先按指南和医师经验构造 25 个子图,再要求标注者严格遵循图谱标注。官方说法是,标注者要按图谱找出观察,并说明为什么这条观察在诊断流程中导致该疾病。
同源的好处是评测时图谱与真值天然对齐:图谱里"高度疑似心衰"的前提是 NT-proBNP 阈值,标注里的对应依据也会落在这个阈值附近,评测时可以精确检查模型有没有用对这一级的前提。同源的代价是标注的多样性被压缩:9 名标注者面对同一份病历,产出的链条形态会趋同,因为路径已经被图谱限定了。这既是质量控制手段,也是数据本身的偏向。
4.3 案例:心衰子图上的四级台阶
官方给出的心衰子图可以当作一个具体的标尺样本。它把心衰的诊断拆成四级台阶:
| 台阶 | 节点 | 前提类型 | 官方示例中的前提 |
|---|---|---|---|
| 第 1 级 | Suspected Heart Failure | 危险因素 / 症状 / 体征三类 | 冠心病、高血压、瓣膜病等危险因素;呼吸困难、端坐呼吸、夜间阵发性呼吸困难等症状;颈静脉压升高、肝颈静脉回流、第三心音等体征 |
| 第 2 级 | Strongly Suspected Heart Failure | 单一数值阈值 | NT-proBNP 或 BNP 的阈值条件 |
| 第 3 级 | Heart Failure | 一组超声异常发现 | 左室质量指数、相对室壁厚度、左房容积指数、E/e’ 比值、肺动脉收缩压等 |
| 第 4 级 | HFrEF / HFmrEF / HFpEF | 单一射血分数区间 | 三个互斥的左室射血分数区间 |
这个四级结构的价值在于它把"诊断"变成了一串可判定的门槛。模型走到第 1 级不算诊断,走到第 2 级仍不算,走到第 3 级才确立心衰,走到第 4 级才完成分型。评测时可以问:模型有没有跳过第 2 级的检验值门槛直接下结论?有没有在证据只支持第 3 级时过度细分到第 4 级?这类问题在只有"最终诊断对不对"的资源里问不出来。
4.4 标注的粒度:deduction 四元组
树是整体结构,deduction 是最小单元。官方把一次推导(deduction)定义为:标注者从病历中找到一条观察(disease finding),并给出这条观察为什么会导致该疾病的理由。整理后的形式是一个以观察为键、以三项列表为值的字典。
| 记号 | 含义 | 在树上的位置 | 评测时可怎么用 |
|---|---|---|---|
o |
从原始文本抽取的观察 | Input 节点的内容 | 检查模型是否找到了同一条线索 |
z |
该观察通向诊断的依据 | Cause 节点的内容 | 检查模型给出的解释是否成立 |
r |
观察出自 input1 至 input6 的哪一段 | Input 节点的出处 | 检查模型是否找错了段落 |
d |
诊断名称 | Intermedia 或叶子节点 | 检查结论落点 |
r 这一项容易被忽略,但它是很有用的一维:它把"找到这条观察"细化成了"从六段中的哪一段找到这条观察"。一个模型可能正确地识别出"颈静脉压升高",却把它归到了现病史而不是体格检查——在临床文书规范里这是两个不同的信息源,混淆它们意味着模型对病历结构的理解是错的。
4.5 边界条件:什么情况下它不再适用
第一,当你的任务需要鉴别诊断时。官方排除了诊断间关系,每份病历只有一个主出院诊断,而且病历里能直接泄露该诊断的描述已被人工删掉。这相当于把"几个诊断之间相互竞争"这个场景从数据里移除。
第二,当你的任务依赖不完整的病历时。观察不足时标注者被要求补写合理观察,因此数据里几乎不存在"线索不够"的样本。官方自己承认这一选择损害了对原始病历的保真度。
第三,当你的任务需要时序或多轮交互时。每份病历是一次性写成的静态文本,没有追问、没有复查、没有治疗后的反馈。
第四,当你的评测对象不是文本推理时。它没有影像、没有波形、没有结构化表格,纯文本六段。想做多模态诊断推理,它不是合适的载体。
§5 怎么拿到:从申请到可评测
5.1 目录结构与分发形态
官方以两个 rar 压缩包分发数据,这一点本身就需要注意:PhysioNet 上绝大多数资源是目录直列的文件,可以直接 wget 递归;这里是要先下压缩包再解压。
samples.rar #-- 标注样本包
└── samples/
├── Disease Category 1/
│ ├── PDD Category 1/
│ │ ├── note_1.json
│ │ ├── note_2.json
│ │ └── note_3.json
│ └── PDD Category 2/
└── Disease Category 2/
└── Disease Category 3/
diagnostic_kg.rar #-- 知识图谱包
└── diagnostic_kg/
├── Disease Category 1.json
├── Disease Category 2.json
└── Disease Category 3.json
上面的树形图里,疾病类别与 PDD 的名称在官方页面用示意写法表示,真实名称需解压后查看。本文核验时官方页面的文件区显示为"Data is not available in your region due to legal or policy restrictions",因此未能枚举出实际的文件清单与体积,这一点在 §10 中已声明。
5.2 申请与下载
访问策略是受限访问:只有签署了指定数据使用协议的注册用户才能获取文件。落到操作上是三步:注册 PhysioNet 账号、完成认证(credentialing)流程并签署 PhysioNet Restricted Health Data Use Agreement 1.5.0、再进入项目页的文件区下载。许可本体是 PhysioNet Restricted Health Data License 1.5.0。
因为父项目是 MIMIC-IV v3.1,实际操作中往往还需要先具备 MIMIC-IV 的访问权限。官方在 Parent Projects 一栏明确要求使用本数据集时一并引用 MIMIC-IV。
下载之后不建议把数据拷贝到联网环境。官方 Ethics 节说明,全部标注工作在一台不联网的 Windows 计算机上完成,数据不可复制或外传,对 GPT 的访问使用的是私有版本。这不是建议而是合规要求的一部分:拿到了受限健康数据,就意味着要在受控环境里处理它。
5.3 解析标注 JSON
import json, glob
#-- 解压后按三级目录递归收全部标注文件
paths = sorted(glob.glob("samples/**/*.json", recursive=True))
print(len(paths)) #-- 官方页写明共 511 份,可作为完整性自检
#-- 单份标注的顶层是节点字典:键为节点索引
nodes = json.load(open(paths[0], encoding="utf-8"))
k0 = list(nodes.keys())[0]
print(nodes[k0].keys()) #-- content / type / connection / upper
#-- 按类型清点节点角色(仅做结构自检,不做任何统计推断)
roles = {}
for k, v in nodes.items():
roles.setdefault(v.get("type"), 0)
roles[v.get("type")] += 1
print(roles)
如果只想看结构而不引官方代码,上面这段就够了。节点字典是自洽的:upper 为空的是观察节点,connection 为空的是叶子诊断节点,中间的都带双向索引。
5.4 重建推理树与 deduction
#-- 官方 GitHub 仓库提供的解析入口
from utils.data_analysis import cal_a_json, deduction_assemble
#-- 官方示例用的是合成样本,不是来自 MIMIC 的真实病历
root = "samples/Stroke/sample1.json"
record_node, input_content, chain = cal_a_json(root)
#-- record_node : 全部节点,键为节点索引
#-- content 内容 / type 类型 / connection 子 / upper 父
#-- input_content: input1(主诉) 到 input6(相关检查结果) 的原始病历
#-- chain : 按推理顺序排列的诊断过程,从疑似到一个 PDD
GT = deduction_assemble(record_node)
#-- GT 形如 {o: [z, r, d]}
#-- o 从原文抽取的观察,z 该观察通向诊断的依据
#-- r 观察出自 input1-input6 的哪一段,d 诊断名
#-- 只看叶子诊断:没有子节点即推理终点
leaf = [v["content"] for v in record_node.values() if not v.get("connection")]
print(leaf)
5.5 读知识图谱
import json, glob
#-- 每个疾病类别一个 JSON,两个顶层键
for p in sorted(glob.glob("diagnostic_kg/*.json")):
kg = json.load(open(p, encoding="utf-8"))
print(p, list(kg.keys())) #-- diagnostic(推理树) / knowledge(前提)
kg = json.load(open("diagnostic_kg/Heart Failure.json", encoding="utf-8"))
print(kg["diagnostic"]) #-- 疑似 -> 高度疑似 -> 心衰 -> 三个分型
print(kg["knowledge"]["HFrEF"]) #-- 官方示例给出 LVEF<40%
#-- knowledge 中一个诊断有多个前提时,官方说明以分号分隔
for diag, prem in kg["knowledge"].items():
if isinstance(prem, str):
print(diag, len(prem.split(";")))
diagnostic 是嵌套字典,空字典或空列表表示分支终止;knowledge 的取值有两种形态——字符串(一个或多个以分号分隔的前提)和字典(按危险因素、症状、体征分类的前提组)。读代码时对这两种形态都要处理。
5.6 五个最容易出错的地方
第一个坑:把 samples/Stroke/sample1.json 当成真实病历。官方明确标注这是合成样本,仅为演示解析流程存在。用它做任何结论性观察都会出错。
第二个坑:把 511 当成患者数。官方没有说明病历与患者的对应关系,MIMIC-IV 中一名患者可有多份记录,需要患者标识才能做患者级划分,而 DiReCT 的标注文件里没有这个字段。
第三个坑:以为病历里保留了完整原文。六段是人工摘出重排的,且能泄露主出院诊断的描述已被人工删除。想研究"模型会不会从病历里直接抄到答案",这个前提在数据里不成立——答案线索被有意剪掉了。
第四个坑:以为所有观察都来自原始病历。观察不足时标注者补写了合理观察。因此链条里的某些 Input 节点在原始病历中并不存在,做"观察抽取"类评测时这部分无法作为真值。
第五个坑:把受限许可当成开放许可。PhysioNet Restricted Health Data License 1.5.0 要求签署数据使用协议,不允许再分发,也不允许用于临床。把它挂到公开评测榜单或打包进开源仓库,都是违约。
§6 与库内条目的关系
6.1 关系图谱
| 相关数据集 | 关系 | 分工判据 |
|---|---|---|
| MIMIC-IV(mimiciv) | 父项目,v3.1,全部病历的来源 | 要溯源或补患者标识时去 MIMIC-IV |
| MIMIC-IV-Note | 同为 MIMIC-IV 文本派生,去标识化自由文本语料 | 要大规模文本预训练用 Note,要推理真值用 DiReCT |
| MedReason | 同为知识图谱引导的推理链标注 | MedReason 走思维链,DiReCT 走蕴含树加图谱约束 |
| EHR-ReasonCon | 同为病历推理类评测 | ReasonCon 考笔记与结构化表的一致性,DiReCT 考纯文本推理 |
| ER-REASON | 同为急诊场景的临床推理基准 | 场景与病种不同,可互为外部对照 |
| MedXpertQA | 同为专家级推理评测 | MedXpertQA 是选择题形态,DiReCT 是开放推理形态 |
| MedQA | 执照考试问答 | 考知识记忆,不考推理过程 |
| ArchEHR-QA | 病历证据落地问答 | 考证据定位,不考推理链结构 |
| EHRNote-ChatQA | 连续追问并逐句溯源 | 多轮对话形态,DiReCT 为单轮静态 |
| MIMIC-IV-Ext-CDM | 同为 MIMIC-IV 派生的诊断类资源 | CDM 考自主诊断流程,DiReCT 考推理链真值 |
6.2 检索路径
如果你的入口是"我要评测一个医学大模型",路径是:先看清你要评的是知识还是推理。评知识,走 MedQA、MedXpertQA 一类选择题资源,规模大、打分简单、横向可比性强。评推理,才走到 DiReCT,并且要准备好接受"没有单一准确率"这个结果。
如果你的入口是"我有 MIMIC-IV 的数据,想找派生资源",路径是:先确认你要的是原始文本(MIMIC-IV-Note)、结构化事件(各类 Ext 派生表)、还是推理标注(DiReCT)。三者互补,DiReCT 是唯一带人工推理链的那一支。
如果你的入口是"我在做知识图谱增强",路径是:图谱类资源(PrimeKG、RTX-KG2 一类)提供图,DiReCT 提供"图与标注同源"的评测场景。前者解决"图从哪来",后者解决"图有没有真的被用上"。
6.3 与其他库的分工判据
判断标准只有一条:你的真值是什么形状,就选什么资源。 真值是一个字母,选选择题库;真值是一段文本,选摘要或问答库;真值是一棵树,只有 DiReCT。反过来,如果你的评测方案最后只报一个准确率数字,那么用 DiReCT 是浪费——你付了推理链的标注成本,却没有用它。
§7 质量评估与局限性
7.0 阅读本节前的一个前置校正
本节不给"好或坏"的总评,只给可核对的事实边界。它的标注质量很高(9 名医师标注、3 名高级专家核验),同时它的适用范围很窄(511 份、单一诊断、人工改写过)。这两句话不矛盾:一个资源可以既是高质量的,又是不通用的。评价它时把这两件事分开说,比给一个折中分数有用。
7.1 五维评分
| 维度 | 评价 | 依据 |
|---|---|---|
| 标注深度 | 高 | 观察、依据、诊断三类节点齐全,附双向连边与推理顺序 |
| 标注一致性 | 高 | 要求标注者严格遵循同一套知识图谱,且经 3 名高级专家核验 |
| 规模 | 低 | 511 份病历,25 个疾病类别 |
| 真实性 | 中 | 病历来自真实 EHR,但经人工重排、删除泄露描述、并可能补写观察 |
| 可获取性 | 低 | 受限访问,需签署数据使用协议,且部分地区不可下载 |
7.2 标注质量的两层
第一层是产出。9 名临床医师标注,官方要求他们从病历中找出观察并给出导致该疾病的理由。标注在一台不联网的 Windows 计算机上完成,数据不可复制或外传,这是合规设计,同时也意味着标注者无法借助外部检索。
第二层是核验。3 名高级医学专家对准确性与完整性做核验。官方没有给出核验的具体口径与返修流程,因此无法判断核验是逐条复核还是抽样复核,也无法判断标注者之间的一致性如何量化。这属于未核验内容(§10)。
7.3 已知的、可枚举的偏差
| 偏差 | 机制 | 官方是否说明 |
|---|---|---|
| 病种覆盖偏差 | 只取主出院诊断落在 25 个疾病类别内的病历 | 官方明写为"疾病类别的一个子集" |
| 单一诊断偏差 | 每份病历只保留一个 PDD,无第二诊断 | 官方明写 |
| 诊断间关系缺失 | 刻意排除诊断与诊断之间的关系 | 官方明写,理由是复杂到人类医生也难处理 |
| 泄露剪除偏差 | 人工删除病历中会泄露 PDD 的描述 | 官方明写 |
| 观察补写偏差 | 观察不足时由标注者补写合理观察 | 官方明写,并承认损害保真度 |
| 单中心偏差 | 全部来自 MIMIC-IV 的单一医疗机构 | 由父项目决定,官方未额外说明 |
| 语言与地域偏差 | 英文病历、美国医疗体系下的记录 | 由父项目决定 |
这张表的价值在于:偏差全部是已知的,而且几乎全部是作者主动做出的取舍。这比"不知道偏在哪"要好得多——每一项偏差在使用时都可以被显式声明。
7.4 外部验证矩阵
| 验证问题 | 能否用本数据集回答 | 说明 |
|---|---|---|
| 模型的最终诊断准不准 | 能 | 叶子节点即真值 |
| 模型的推理步骤对不对 | 能 | 节点与连边都是真值 |
| 模型有没有用对知识图谱 | 能 | 图谱与标注同源 |
| 模型在鉴别诊断上的表现 | 不能 | 官方排除诊断间关系 |
| 模型在信息不足时的表现 | 不能 | 观察不足处已由人工补写 |
| 模型在多中心数据上的表现 | 不能 | 单一来源机构 |
| 模型在多轮问诊中的表现 | 不能 | 静态单轮文本 |
7.5 它为何能持续:稀缺的不是数据量,是那个组合
511 份病历在今天的语料规模里不值一提。稀缺的是三件事同时成立:真值是可回溯的结构而不是标签、外部知识以图的形式与标注绑定、病历来自真实 EHR 而非考试题。这三件事任何一个单独出现都不稀奇,合在一起时,它就成了"答案对但推理错"这类问题唯一能被测出来的地方之一。只要大模型的评测还停留在只报准确率,这个组合就仍然稀缺。
§8 生态位与历史
8.1 历史沿革
DiReCT 不是一个长期演进的项目,而是一次性交付的成果。2024 年 8 月的 arXiv 预印本先说明了数据集的构造方法与大模型评测结果,2025 年 1 月 21 日以 1.0.0 版本托管到 PhysioNet,此后未见版本更新。这个节奏说明它的定位是一篇论文的数据配套,而不是一个持续维护的社区基准。
对使用者的含义是:不要指望它有版本迭代、勘误更新或扩容计划。官方页面没有给出任何后续版本的时间表。同时也不必担心"版本漂移"——只有一个版本,引用时写清 1.0.0 即可。
8.2 与挑战赛的关系
官方页面没有列出任何关联挑战赛。DiReCT 不是某个共享任务的官方数据集,也与 PhysioNet/CinC 系列挑战赛没有从属关系。它是一对一配套的论文数据,评测协议由论文给出,没有官方榜单、没有统一的提交格式、没有排行榜。
这带来一个实际影响:不同论文用 DiReCT 报出的数字,只在它们采用同一套节点匹配口径时才可比。而节点匹配口径(观察算不算命中、依据相似度怎么算、链条是否要求严格同序)官方并没有标准化。跨论文比较 DiReCT 上的分数时,先读对方的方法小节。
8.3 生态位:可解释性的评分尺,不是主力语料
在 MIMIC-IV 的派生资源谱系里,DiReCT 占的位置很窄但很深。往宽的方向看,有 MIMIC-IV-Note 这样的全量文本、有各类 Ext 派生的结构化表、有影像与波形的对接子集,它们解决的是"数据够不够用"。往深的方向看,只有 DiReCT 这样的资源在问"推理对不对"。它的体量决定了它永远不是主力语料,它的结构决定了它在可解释性评测上难以被替代。
8.4 谁在用,用来做什么
从官方自述看,它的直接用途是评测大模型的诊断推理能力与可解释性,并把模型表现与人类医生对照。官方在 Usage Notes 里给出的结论性表述是:评测显示当前先进大模型与人类专家之间存在显著差距。
谁在实际用它,本文核验时没有可靠的公开用量数据——PhysioNet 项目页给出的 Project Views 为 657(当前版本与全部版本同为该值),这个数字只反映项目页访问量,不能等同于下载量或使用量。它被引用的具体情况属于未核验内容。
§9 使用指引
9.1 三种角色的路径
| 角色 | 路径 | 关键注意 |
|---|---|---|
| 医学大模型研究者 | 申请访问 → 解压两个包 → 按疾病类别分桶 → 跑基线并报结论准确率与链条匹配度 | 不要只报准确率 |
| 临床自然语言处理工程师 | 先用官方 utils.data_analysis 跑通单份解析 → 再批量化 |
官方示例是合成样本,别拿它做观察 |
| 评测体系设计者 | 明确节点匹配口径后再产出分数,并在论文中写清口径 | 官方没有标准化口径,跨论文不可直接比 |
9.2 一条最短的可用流程
第一步,取得 PhysioNet 认证访问并签署数据使用协议 1.5.0,同时确认 MIMIC-IV v3.1 的访问资格。
第二步,下载 samples.rar 与 diagnostic_kg.rar,在受控环境解压,用目录层级清点疾病类别数是否为 25、标注文件总数是否为 511。
第三步,用官方 cal_a_json 跑通一份标注,确认 record_node、input_content、chain 三个返回值都拿到了,再用 deduction_assemble 拿到 deduction 集合。
第四步,把六段输入拼成提示词,让模型输出最终诊断与推理过程。
第五步,先比叶子诊断拿一个基线,再比节点级命中,最后比链条顺序。三个分数分开报。
第六步,把知识图谱作为检索源或约束条件重跑一遍,对照无图谱版本,量化图谱带来的差异。
9.3 引用方式
| 引用对象 | 内容 |
|---|---|
| 数据集 | Wang, B., Chang, J., & Qian, Y. (2025). MIMIC-IV-Ext-DiReCT (version 1.0.0). PhysioNet. https://doi.org/10.13026/yf96-kc87 |
| 平台 | PhysioNet 平台综述论文(2026 年发表于 Nature Health),按官方页面 Cite 按钮生成 |
| 父项目 | MIMIC-IV v3.1,官方 Parent Projects 明确要求一并引用 |
| 论文 | DiReCT: Diagnostic Reasoning for Clinical Notes via Large Language Models, arXiv:2408.01933 |
写论文时建议同时注明:使用的版本号(1.0.0)、评测采用的节点匹配口径、以及是否使用了知识图谱作为输入的一部分。
§10 AI 使用声明
| 项目 | 声明 |
|---|---|
| 文本生成 | 本文由 AI 辅助撰写,编辑把关结构与事实 |
| 数字来源 | 规模、结构、边界三类数字来自 PhysioNet 官方项目页全文(Abstract / Methods / Data Description / Usage Notes / Access / Versions)与 arXiv 预印本摘要 |
| 文件核验 | 官方页面的 Abstract、Data Description、Usage Notes、Ethics、Access、Versions 各节经直接访问确认;文件区因地域限制未能枚举 |
| 不一致说明 | 无相互矛盾的数字;官方未给出患者数、疾病类别清单与每类病历数,本文一律不写 |
| 论文信息 | 仅参考 arXiv 摘要(2408.01933),未读全文,未获取论文中的评测结果数值 |
| 未核验内容 | 25 个疾病类别的具体名称、5 个医学领域的划分、每个类别下的病历数、511 份病历对应的患者数、实际文件清单与体积、标注者间一致性、被引用情况 |
| 图像 | 无配图;封面为生成式提示词,不含真实病历内容 |
| 免责 | 本文不构成临床建议;数据集仅供模型评测,不可用于临床;数据使用须遵守 PhysioNet 受限健康数据许可 1.5.0 |
常见误读(避坑清单)
| 说法 | 实际 | 证据 |
|---|---|---|
| 「它是一个诊断训练语料」 | 511 份,官方定位为评测集 | Usage Notes:仅为模型评测而设计 |
| 「它有 511 名患者」 | 官方未给出患者数,病历数不等于患者数 | 官方页无患者数字段;MIMIC-IV 一名患者可有多份记录 |
| 「它是开放的,随便下」 | 受限访问,须签署数据使用协议 1.5.0 | Access 区:Only registered users who sign the specified DUA |
| 「病历就是 MIMIC-IV 原文」 | 六段为人工摘出重排,且删去泄露诊断的描述 | Methods 节明写手工摘出与人工删除 |
| 「所有观察都来自真实病历」 | 观察不足时标注者补写了合理观察 | Methods 节明写,并承认损害保真度 |
| 「可以拿它做鉴别诊断」 | 单一 PDD,官方排除诊断间关系 | Usage Notes 明写 |
| 「可以拿它做临床辅助」 | 官方写明不用于临床 | Usage Notes 明写 |
| 「sample1.json 是一份真实病历」 | 官方标注为合成样本 | 官方代码注释:Not from MIMIC |
| 「知识图谱是另外找的公开图谱」 | 按诊断指南与医师经验为本项目构造,与标注入同源 | Methods 节明写构造方式 |
| 「它有官方榜单可以比分数」 | 无关联挑战赛,无官方评测协议 | 官方页无 Challenges 关联;跨论文口径需自读方法节 |
| 「它是 MIMIC-IV 的一部分」 | 是派生资源,父项目为 MIMIC-IV v3.1,需另行申请 | Parent Projects 区 |
| 「511 份覆盖了常见疾病」 | 25 个疾病类别的子集 | Usage Notes 明写为子集 |
FAQ
Q1:DiReCT 到底是什么,和 MIMIC-IV 是什么关系?
它是一个派生评测集,不是 MIMIC-IV 的组成部分。作者从 MIMIC-IV v3.1 里挑出 511 份 SOAP 格式的临床记录,人工拆成六段、删去会泄露诊断的描述,再请临床医师标注出从观察到主出院诊断的推理链,另外附上 25 个病种的诊断知识图谱。官方在 Parent Projects 一栏列出 MIMIC-IV v3.1,并要求使用者一并引用,因此实际操作中通常还需要具备 MIMIC-IV 的访问资格。
Q2:为什么 511 份这么少,还值得用?
因为它卖的不是规模,是真值的形状。绝大多数医学评测集的真值是一个字母或一段文本,DiReCT 的真值是一棵树:观察节点、依据节点、诊断节点,节点之间双向可回溯。有了这棵树,就能把"结论对"与"推理对"拆开打分,而这件事在只有答案标签的资源里做不到。想要规模,去 MIMIC-IV-Note;想要推理真值,只能来这里。
Q3:能不能用它微调模型?
不建议。511 份的体量对微调来说太小,而且标注是树状结构,不是输入到输出的平铺对。真要用于训练,也得先把树摊平成序列,而摊平之后监督信号怎么定义官方没有给标准答案。它的官方定位写得很明确:仅为模型评测而设计。
Q4:知识图谱是干什么用的,必须一起用吗?
图谱有两个作用。构造阶段,它是标注的约束——标注者必须严格遵循图谱标注,这保证了 9 名医师产出的链条在结构上可比。评测阶段,它是可选项——可以把它作为检索源或生成约束喂给模型,再与无图谱版本对照,量化图谱到底起没起作用。不是必须一起用,但不用图谱就浪费了它一半的设计。
Q5:数据能不能公开分享?
不能。许可为 PhysioNet Restricted Health Data License 1.5.0,访问策略是"仅签署指定数据使用协议的注册用户可访问文件"。官方 Ethics 节还说明他们自己严格遵守 MIMIC 的数据使用协议、不与任何第三方共享、全部实验在私有服务器上完成。作为使用者,把数据打包进开源仓库或挂到公开榜单下载页,都是违约。
Q6:为什么官方示例里有一份 Stroke 的 sample1.json?
那是解析代码的演示样本,官方在代码注释里明确写了 Not from MIMIC,是合成数据,不是来自 MIMIC 的真实病历。它存在的意义只是让使用者能不依赖受限数据就跑通 cal_a_json 与 deduction_assemble 的调用方式。任何结论性观察都不能基于它。
Q7:它和 MedQA、MedXpertQA 这类资源怎么选?
看你的真值形状。MedQA 是执照考试选择题,真值是一个选项字母,考的是医学知识记忆与快速判断;MedXpertQA 是专家级选择题,难度更高,但同样不考过程。DiReCT 的输入是六段真实病历文本,输出要交给模型自己组织,真值是推理树。如果你的研究问题是"模型答得对不对",选前者;如果是"模型是怎么走到这个答案的",只能选后者。
Q8:不同论文在 DiReCT 上报告的分数能直接比较吗?
不能直接比。官方没有关联挑战赛,也没有给出标准化的节点匹配口径——观察算不算命中、依据相似度如何计算、链条是否要求严格同序,这些都得由使用者自己定义。跨论文比较之前先读对方的方法小节,确认口径一致;自己写论文时也要把口径写清楚,否则别人也读不懂你的数字。
术语表
| 术语 | 解释 |
|---|---|
| DiReCT | Diagnostic Reasoning dataset for Clinical notes,临床病历诊断推理数据集 |
| SOAP | 病历组织格式:主观(Subjective)、客观(Objective)、评估(Assessment)、计划(Plan) |
| PDD | Primary Discharge Diagnosis,主出院诊断;本数据集每份病历只有一个 |
| 蕴含树 | entailment tree,从观察出发经依据逐步推到结论的树状结构 |
| 推理链 | 一次完整诊断过程按推理顺序排列的节点序列,官方记为 chain |
| deduction | 一次推导,官方形式为 |
| 节点类型 | Input(观察)、Cause(依据)、Intermedia(诊断) |
| connection | 节点的子节点键列表,为空即为叶子诊断节点 |
| upper | 节点的父节点键,为空即为观察节点 |
| 知识图谱子图 | 每个疾病类别一张,记录该病种的诊断流程与各级前提 |
| diagnostic 键 | 知识图谱中的推理树部分,从疑似诊断到最终诊断 |
| knowledge 键 | 知识图谱中的前提部分,一个诊断的多个前提以分号分隔 |
| 主诉 | 患者本次就诊最主要的不适,对应 input1 |
| 现病史 | 本次疾病的起病与演变,对应 input2 |
| 既往史 | 既往疾病、手术与用药,对应 input3 |
| 家族史 | 家族中相关疾病,对应 input4 |
| 体格检查 | 查体发现与体征,对应 input5 |
| 相关检查结果 | 实验室与影像等检查结果,对应 input6 |
| 系统回顾 | review of systems,官方以常缺失、关联弱为由排除 |
| 社会史 | social history,同上被排除 |
| 受限访问 | restricted access,须注册并签署数据使用协议才能下载 |
| 数据使用协议 | DUA,规定数据可如何使用、能否再分发的法律文件 |
| 可解释性 | 模型的判断能否被人类逐条追溯与核对 |
附录 A:核心数字核对表
| 项 | 值 | 来源 | 来源层级 |
|---|---|---|---|
| 临床病历数 | 511 | 官方页面 Abstract 与 Methods | 官方页面 |
| 疾病类别数 | 25 | 官方页面 Background | 官方页面 |
| 医学领域数 | 5 | 官方页面 Background | 官方页面 |
| 输入栏位数 | 6 | 官方页面 Methods(input1 至 input6) | 官方页面 |
| 标注医师人数 | 9 | 官方页面 Methods | 官方页面 |
| 核验专家人数 | 3 | 官方页面 Methods | 官方页面 |
| SOAP 分部数 | 4 | 官方页面 Background | 官方页面 |
| 发布版本 | 1.0.0 | 官方页面版本区 | 官方页面 |
| 发布日期 | 2025 年 1 月 21 日 | 官方页面版本区 | 官方页面 |
| 父项目版本 | MIMIC-IV v3.1 | 官方页面 Parent Projects | 官方页面 |
| DOI(v1.0.0) | 10.13026/yf96-kc87 | 官方页面 Discovery 区 | 官方页面 |
| DOI(latest) | 10.13026/2kfz-4798 | 官方页面 Discovery 区 | 官方页面 |
| 许可 | PhysioNet Restricted Health Data License 1.5.0 | 官方页面 License 区 | 官方页面 |
| 数据使用协议 | PhysioNet Restricted Health Data Use Agreement 1.5.0 | 官方页面 Access 区 | 官方页面 |
| 分发文件 | samples.rar、diagnostic_kg.rar | 官方页面 Data Description | 官方页面 |
| 项目页访问量 | 657 | 官方页面 Project Views | 官方页面 |
| arXiv 预印本号 | 2408.01933 | 官方页面参考文献 [7] | 官方页面引用文献 |
| 资助项目数 | 4 | 官方页面 Acknowledgements | 官方页面 |
附录 B:数字的来源分层
第一层:官方页面。 511 份病历、25 个疾病类别、5 个医学领域、6 个输入栏位、9 名标注医师、3 名核验专家、SOAP 四部分、版本 1.0.0、发布日期、父项目 MIMIC-IV v3.1、两个 DOI、许可与协议版本、两个分发包的文件名、资助项目。这些数字全部来自项目主页的摘要、方法、数据描述、致谢与版本区,可直接引用。
第二层:论文摘要。 数据集的定位、511 份这一规模、以及"先进大模型与人类专家存在显著差距"这一结论性表述,来自 arXiv 2408.01933 的摘要。摘要只能支撑"作者这样宣称与这样设计",不能支撑具体的评测数值——本文因此不引用任何准确率类结果。
第三层:未核实。 25 个疾病类别的具体名称、5 个医学领域的划分方式、每个类别下的病历数、511 份病历对应的患者数、实际文件清单与总体积、标注者间一致性、核验的具体口径。这些需要取得数据权限后逐项清点,或阅读论文全文,本文一律只做定性表述。
附录 C:完整参考文献
| 编号 | 文献 | 链接 | 用途 |
|---|---|---|---|
| 1 | MIMIC-IV-Ext-DiReCT v1.0.0 | https://physionet.org/content/mimic-iv-ext-direct/1.0.0/ | 全部规模、结构、边界数据的来源 |
| 2 | DiReCT: Diagnostic Reasoning for Clinical Notes via LLMs | https://arxiv.org/abs/2408.01933 | 方法、定位与结论性表述 |
| 3 | DiReCT 解析代码仓库 | https://github.com/wbw520/DiReCT | 解析函数与字段语义 |
| 4 | 项目主页 | https://sites.google.com/view/wbw520-direct | 官方 Discovery 区给出的外部站点 |
| 5 | MIMIC-IV v3.1(父项目) | https://physionet.org/content/mimiciv/3.1/ | 数据来源与引用义务 |
| 6 | PhysioNet 平台综述(2026,Nature Health) | https://doi.org/10.1038/s44360-026-00096-z | 托管模式与引用规范 |
| 7 | MIMIC-IV 原论文(Sci Data 2023) | https://doi.org/10.1038/s41597-022-01899-x | 父项目背景(官方参考文献 [6]) |
| 8 | Weed LL. 问题导向病历(1970) | ISBN 9780815191889 | SOAP 格式出处(官方参考文献 [5]) |
附录 D:任务代码
任务一:批量清点结构并做完整性自检
import json, glob, collections
#-- 完整性自检:标注文件总数应为 511,疾病类别目录应为 25
notes = sorted(glob.glob("samples/**/*.json", recursive=True))
cats = sorted({p.split("/")[1] for p in notes})
print(len(notes), len(cats))
#-- 逐份清点节点角色,仅做结构自检
role_counter = collections.Counter()
for p in notes:
nodes = json.load(open(p, encoding="utf-8"))
for v in nodes.values():
role_counter[v.get("type")] += 1
print(role_counter)
任务二:只比叶子诊断的最小评测骨架
import json, glob
def leaf_diagnosis(nodes):
#-- connection 为空的节点即推理终点(叶子诊断节点)
for v in nodes.values():
if not v.get("connection"):
return v.get("content")
return None
golds, preds = [], []
for p in sorted(glob.glob("samples/**/*.json", recursive=True)):
nodes = json.load(open(p, encoding="utf-8"))
golds.append(leaf_diagnosis(nodes))
#-- preds.append(llm_predict(build_prompt(input_content_of(p))))
#-- 只报结论准确率是最低限度,务必再比节点级命中与链条顺序
print(len([g for g in golds if g]))
任务三:把知识图谱当作检索源
import json, glob
#-- 25 个子图,每个两个顶层键
kgs = {}
for p in sorted(glob.glob("diagnostic_kg/*.json")):
kgs[p.split("/")[-1].replace(".json", "")] = json.load(open(p, encoding="utf-8"))
def premises(kg, diagnosis):
#-- knowledge 的取值可能是字符串(分号分隔的多前提)或字典(分类前提组)
v = kg["knowledge"].get(diagnosis)
if isinstance(v, str):
return [s.strip() for s in v.split(";") if s.strip()]
if isinstance(v, dict):
return [s.strip() for grp in v.values() for s in str(grp).split(";") if s.strip()]
return []
print(premises(kgs["Heart Failure"], "HFrEF"))
附录 E:如果只记五件事
| 序 | 结论 | 理由 |
|---|---|---|
| 1 | 它的真值是一棵树,不是一个标签 | 观察、依据、诊断三类节点加双向连边,可分别打分 |
| 2 | 511 份只够评测,不够训练 | 官方定位写明仅为模型评测而设计 |
| 3 | 病历是人工重排并剪过的 | 六段手工摘出,泄露诊断的描述被删,观察不足处被补写 |
| 4 | 知识图谱与标注同源 | 先建图谱再按图谱标注,评测时天然对齐 |
| 5 | 受限许可,不可再分发,不可临床使用 | PhysioNet 受限健康数据许可 1.5.0 |
需要更高工程化程度或合规出域的商业版本?
当前展示的公开版本适用于学术研究与原型验证。千方医数集依托三甲医院直采网络,提供经专家标注、符合伦理合规的专病数据集交易服务。
前往商城查看可交易产品 →
