信息速览
一份出院小结里,用药信息通常散落在互不相邻的几处:入院前的居家用药写一遍,住院期间的调整写一遍,出院带药再写一遍,中间还夹着一句「因肾功能不全暂停某某药」。把这些句子变成结构化字段,靠的不是更好的分词器,而是标注——而临床文本的标注一直卡在同一个地方:能标的人很贵,能标的人很少。2009 年 i2b2 挑战赛给出过一份药物抽取的黄金标准,但那是几百份文档、另一家医院、另一个年代;MIMIC-IV-Note 手握三十三万余份去标识出院小结,却没有配套的用药抽取标签。
MIMIC-IV 药物抽取标签集正对着这个缺口。Google 团队用 PaLM 2 搭了一条大语言模型标注流水线,为 MIMIC-IV-Note 随机抽出的 600 份出院小结生成字符级用药标注,字段体系沿用 2009 年 i2b2 药物挑战赛的六类槽位,2023 年 12 月 12 日以 1.0.0 版本发布在 PhysioNet 上。它的价值与风险来自同一件事:标签不是人标的,是模型生成之后再结构化的。官方给出的对标结论是「与平均水平的标注专员持平」,而随库发布的文件里没有附任何人工复核结果——这决定了它适合当什么、不适合当什么。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 全名 | Medication Extraction Labels for MIMIC-IV-Note Clinical Database |
| 发布方 | PhysioNet(MIT 计算生理学实验室维护) |
| 作者 | Akshay Goel、Almog Gueta、Omry Gilon、Sofia Erell、Amir Feder(均为 Google LLC) |
| 首次发布 | 2023 年 12 月 12 日,版本 1.0.0 |
| 最近改动 | 2023 年 12 月 12 日,仅一个版本,无后续修订 |
| 覆盖文档数 | 600 份出院小结(MIMIC-IV-Note 的随机子集) |
| 来源语料 | MIMIC-IV-Note v2.2,含 331,794 份出院小结、145,915 名患者 |
| 原始机构 | 美国波士顿 Beth Israel Deaconess Medical Center |
| 标注对象 | 药物名、剂量、给药途径、频次、疗程、用药原因六类槽位 |
| 标注粒度 | 字符级起止偏移 + 用药分组编号 |
| 标注生成方式 | PaLM 2 少样本提示生成 YAML 实体组,后处理模块转为 NER-RE 结构对象 |
| 文件格式 | CSV,每份文档一个文件,文件名内含 note_id |
| 主键映射 | note_id 对应 MIMIC-IV-Note 的一份文档;原文需另行从父项目取 |
| 许可 | PhysioNet 凭证健康数据许可 1.5.0 + 数据使用协议 1.5.0 |
| 访问前置 | 凭证账号、签署 DUA、完成 CITI「仅使用数据或标本的研究」培训 |
| 版本 DOI | 10.13026/ps1s-ab29(最新版本 DOI 10.13026/6d3r-w470) |
| 典型用途 | 用药抽取模型的训练与外测、LLM 标注质量研究、字段体系迁移对照 |
§1 它要解决的具体麻烦
1.1 用药抽取卡在标注,不卡在模型
用药抽取(medication extraction)是临床自然语言处理的老任务:从自由文本里找出提到了哪些药、每次多少、怎么吃、多久、为什么吃。任务定义十几年前就写清楚了,2009 年 i2b2 挑战赛把它拆成六类槽位,此后模型换了若干代,瓶颈却始终在标注侧——因为判断「这句话里的 5 毫克是维持剂量还是负荷剂量」需要医学训练背景,而一份出院小结动辄几千字,标一份要花掉一名标注员半小时以上。
于是产生了两个长期存在的空白。第一个是规模空白:能标的人是有限的,一个项目能标几百份就接近预算上限,而训练一个稳健的序列标注模型通常需要更大量级。第二个是语料空白:早年标好的数据来自当年那批文档,与今天主流公开语料(MIMIC-IV-Note)不是同一批文本,字段体系与语言风格都要重新对齐才能迁移。
两个空白叠在一起,就形成了一个谁都不愿先动的僵局:语料方没有预算请人标几十万份,方法方没有理由在一份自己用不上的语料上投入标注。MIMIC-IV-Note 至今保持「文本很多、用药标签很少」的状态,原因不是技术做不到,而是这件事在成本上一直排不上队。大语言模型的出现改变了算式——当生成一份初始标签的边际成本降到接近推理费用,标注的瓶颈就从「人有多贵」变成了「模型有多准」,而这个转变正是本库想要记录的。
本库的做法是把第一个空白换成计算资源:用大语言模型先把标签生成出来,人只在需要时介入。官方页面对这一步的表述相当克制——「与平均水平的标注专员持平」——这句话的含义不是「比人好」,而是「可以作为人工标注的替代品或起点」。理解这一点,是理解它全部用法的前提。
1.2 四条常见的错误期待
第一条,期待它是人工黄金标准。它不是。随库发布的是模型生成的结果,官方页明确写了标签由大语言模型流水线产生。用它去评判别的标注者「标错了」,逻辑上站不住。
第二条,期待它自成一体。它不带原文。CSV 里只有偏移、类型、分组编号,正文必须自己从 MIMIC-IV-Note 的 discharge 表里取。没有父项目的访问权限,这批文件只是一堆数字。
第三条,期待它能按患者切分。官方页面只说 600 份出院小结是随机子集,没有披露对应的患者数。缺少患者口径,就无法做患者级划分,也就无法排除同一患者多份小结同时落在训练与测试两侧的问题。
第四条,期待它覆盖 MIMIC-IV-Note 的全部用药提及。它是随机抽样的一部分,官方页面还写明未来版本希望扩展到更多出院小结——也就是说 1.0.0 是起点而不是全集。
1.3 它能给到的与给不到的
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 一份可训练的用药抽取训练集 | 600 份文档、字符级偏移、六类槽位 | 够做小样本与迁移实验,不足以训大模型 |
| 与 i2b2 2009 同字段体系的现代语料 | 六类槽位一一对应,语料换成 MIMIC-IV-Note | 够,这是它最直接的用途 |
| 研究「LLM 标注能不能用」的公开样本 | 全流程产物(提示→YAML→结构对象→CSV) | 够,是目前少见的公开可用实例 |
| 实体与关系联合抽取(NER-RE)的评测场 | 分组编号把同一次用药的多个槽位串起来 | 够,天然带关系结构 |
| 人工黄金标准级别的评测基准 | — | 不够,无人工复核结果 |
| 患者级划分的干净切分 | — | 不够,未披露患者口径 |
| 用药的标准化编码(RxNorm 等) | — | 不够,只有原文片段与偏移 |
| 药物不良事件、过敏、依从性 | — | 不够,字段体系里没有这些槽位 |
1.4 你的处境与它能帮到的事
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 你想在 MIMIC-IV-Note 上做用药抽取,但没有标签 | 提供 600 份文档的字符级标签,可直接训练序列标注模型 | 先申请父项目凭证,按 §5.4 把原文回贴,再按句子切分建样本 |
| 你在评估「用大模型标注省不省事」 | 提供一次完整的公开实践及其质量对标结论 | 把它当作对照案例,在 i2b2 2009 上复算自己的流水线再比较 |
| 你有 i2b2 2009 上训好的模型,想看跨语料表现 | 字段体系一致,可直接做零样本外测 | 注意语料年代与书写风格差异,报告时分开写清楚 |
| 你在做实体关系联合抽取 | 分组编号天然给出槽位间的关系 | 按 Group 聚合成实体组,转成关系三元组或表格 |
| 你想研究标注错误如何传播 | 标签来自模型,错误形态与人工不同 | 抽取少量样本做人工复核,把错误类型列表写进方法节 |
| 你只需要一份「有多少种药被提到」的清单 | 只能给出按 Group 去重的用药提及数 | 明确这是提及计数而非患者计数,不做人群推断 |
1.5 一句话判断
它不是一份新的黄金标准,而是一次可复用的标注实践留下的产物:用六百份文档换来一条「大模型能不能替代标注员」的公开证据链。
1.6 不适合谁:四条边界
不适合拿来做严格的临床结论。 标签由模型生成,且原始文本虽经去标识,仍来自单一机构的住院患者。用它统计出的任何用药规律都不能外推为临床事实。
不适合拿来做标注者一致性研究。 一致性研究需要两个及以上独立标注者,这里只有一个生成源。
不适合拿来做患者层面的流行病学问题。 官方没有披露 600 份文档对应的患者数,也无法判断是否含同一患者的多次住院。
不适合拿来做商用产品的一次性训练集。 许可为 PhysioNet 凭证健康数据许可 1.5.0,限定研究用途并有数据使用协议约束,商用前须逐条核对许可条款。
§2 数据构成与规格
2.1 一份文档一个 CSV
官方数据描述写得很直接:标签按文档存放在 CSV 文件里,文件名中的 note id 对应 MIMIC-IV-Note 里的一份文档。这意味着它的组织方式是扁平的、一文档一文件,没有按患者、按科室或按年份分的子目录,也没有一个汇总全部标注的总表。
这个组织方式有三个直接后果。第一,文件数量与文档数量同量级,批量处理必须先把文件名解析成 note_id,再逐个读入。第二,跨文档的统计(比如一共标了多少条)要先做一次全量拼接,官方页面没有提供这个汇总值。第三,note_id 是它与外界唯一的主键,任何与 MIMIC-IV-Note 的对齐都必须经过它。
官方页面给出的文件名示例是 NoteID-12345-DS-01,对应的 note_id 是 12345-DS-01。示例中 -DS- 这一段的含义官方未作说明,正文里凡涉及该段语义的地方都按未核验处理(§10)。
2.2 四个字段的完整字典
官方「CSV File Format」一节只列了四个字段,这也是全部字段:
| 字段 | 英文原名 | 取值形态 | 含义 | 使用注意 |
|---|---|---|---|---|
| 起始位置 | Start Position | 整数 | 标注片段在源文档中的起始字符偏移 | 相对的是该 note_id 的正文全文,不是段落 |
| 结束位置 | End Position | 整数 | 标注片段的结束字符偏移 | 与起始位置构成切片区间,注意是前闭后开还是闭区间需自行验证 |
| 标注类型 | Annotation | 字符串常量 | 槽位类型,如 MEDICATION、DOSE、REASON | 官方列举时用了「例如」,实际取值以文件为准 |
| 分组 | Group | 编号 | 把同一条用药提及的多个槽位串起来的标识 | 同一文档内唯一,跨文档可重复 |
| note_id | — | 形如 12345-DS-01 |
来自文件名,不在 CSV 列内 | 拼接全量时必须自己补上这一列 |
最后一行是容易漏掉的一点:note_id 不在 CSV 的列里,只存在于文件名。任何「读进来就有 note_id」的写法都要自己在读取时回填,否则拼接之后无法回溯到原文。
2.3 六类槽位的含义与对照
字段体系沿用 2009 年 i2b2 药物挑战赛,官方列举的六类如下。i2b2 当年的标注指南还包含必要性等判定,本库页面未提及,正文不做扩展。
| 槽位 | 中文 | 问的问题 | 典型片段 | i2b2 2009 对应 |
|---|---|---|---|---|
| MEDICATION | 药物名 | 提到了哪个药 | Ibuprofen、diclofenac | m(medication) |
| DOSE | 剂量 | 一次多少 | 5 mg、两片 | do(dosage) |
| MODE | 给药途径 | 怎么进去 | 口服、静脉推注 | mo(mode) |
| FREQUENCY | 频次 | 多久一次 | as needed、每日三次 | f(frequency) |
| DURATION | 疗程 | 持续多久 | for one month | du(duration) |
| REASON | 用药原因 | 为什么用 | abdominal discomfort | r(reason) |
官方给出的示例中,同一句话「Ibuprofen as needed, and diclofenac for one month as needed, for abdominal discomfort.」被拆成两个用药分组:一组是布洛芬(频次 as needed、原因 abdominal discomfort),另一组是双氯芬酸(频次 as needed、疗程 for one month、原因 abdominal discomfort)。两点值得注意:同一原因文本被两个分组共享,说明槽位文本可以重复出现并分属不同分组;空槽位是合法的,示例里 DOSE 与 MODE 就写成空串,说明 CSV 里不会出现「空值行」,缺哪个槽位就是没有那一行。
2.4 一条标注的解剖
把一份 CSV 的一行展开,信息链条是这样的:文件名给出 note_id → 起始与结束偏移给出原文中的确切字符区间 → 标注类型给出这个区间是什么槽位 → 分组编号给出它属于哪一次用药提及。四者合起来,等价于人工标注里的一对「实体 + 关系」:实体是字符区间与类型,关系是分组编号。
官方在 Usage Notes 里给了一段把原文回贴到标注表的 Python,核心逻辑是先按 note_id 从 MIMIC-IV-Note 的 discharge 表里取出正文,再按起止偏移切片:
import os
import re
import pandas as pd
def extract_note_id(s: str) -> str:
#-- 官方示例:从文件名 NoteID-12345-DS-01 中取出 12345-DS-01
match = re.search(r"NoteID-([0-9A-Za-z-]+)", s)
if match:
return match.group(1)
raise ValueError(f"Could not extract note_id from {s}")
def import_mimic_iv_text(mimic_iv_discharge_df, label_dir_path, label_filename):
#-- 依赖父项目的 discharge 表,列名按 MIMIC-IV-Note 实际表头为准
note_id = extract_note_id(label_filename)
document_text = mimic_iv_discharge_df.loc[
mimic_iv_discharge_df.note_id == note_id
].text.iloc[0]
label_df = pd.read_csv(os.path.join(label_dir_path, label_filename))
label_df["note_id"] = note_id #-- 回填主键,避免拼接后丢失来源
label_df["Text"] = None
for idx, row in label_df.iterrows():
text_slice = slice(row["Start Position"], row["End Position"])
label_df.at[idx, "Text"] = document_text[text_slice]
return label_df
这段逻辑有两个隐含前提,用之前必须自己验证。第一,document_text 的字符序列必须与生成标注时喂给模型的文本完全一致——如果 MIMIC-IV-Note 的版本不同、或做过换行与空白的清洗,偏移就会整体漂移。第二,切片区间是 Python 的 slice 语义(前闭后开),官方没有单独声明结束位置是否包含在内,首次使用应当抽样打印几条肉眼核对。
还有一个结构性的细节值得单独记住:分组编号不是全局主键。它的作用范围只在单份文档内部,文档 A 的分组 1 与文档 B 的分组 1 毫无关系。任何跨文档的聚合都必须以 note_id + Group 为复合键,只按 Group 分组会把不同文档的用药提及揉成一团。同理,同一分组内的槽位文本可以在同一句里重复出现(如示例中两次出现的 as needed),重复并不表示标注重复,只表示两个分组各自引用了同一段文字。
2.5 与 i2b2 2009 字段体系的对照
| 对比项 | 本库 | i2b2 2009 药物挑战赛 |
|---|---|---|
| 槽位体系 | 药物名、剂量、途径、频次、疗程、原因 | 同六类(另有挑战赛自定的判定项,本库未沿用) |
| 语料 | MIMIC-IV-Note 出院小结 | 当年发布的去标识出院小结 |
| 文档规模 | 600 份(随机子集) | 挑战赛规模见其官方发布,本页未引 |
| 标注来源 | PaLM 2 大模型流水线 | 人工标注专员 |
| 是否附人工复核 | 未附 | 本身即人工产物 |
| 关系表达 | Group 编号串联槽位 | 挑战赛以同一 medication 条目归组 |
| 获取方式 | PhysioNet 凭证访问 | 按其官方渠道申请 |
这张表要说清的只有一件事:本库真正的增量是语料换了、标注者换了、字段没换。正因为字段没换,它才能直接当迁移与对照的材料;也正因为标注者换了,它不能当评测的尺子。
2.6 与父项目 MIMIC-IV-Note 的结构差异
| 对比项 | 本库 | MIMIC-IV-Note(父项目) |
|---|---|---|
| 内容 | 用药槽位标注(偏移 + 类型 + 分组) | 去标识自由文本全文与元数据 |
| 基本单位 | 一份文档一个 CSV | 一行一份文档(discharge 表) |
| 主键 | note_id(写在文件名里) | note_id(写在列里) |
| 规模口径 | 600 份文档 | 331,794 份出院小结、145,915 名患者 |
| 是否含原文 | 否 | 是 |
| 许可 | 凭证健康数据许可 1.5.0 | 同系列凭证许可(以父项目页面为准) |
| 单独可用性 | 不可用,须与父项目配对 | 可单独用 |
最后两行是理解的钥匙:本库在结构上是一个外挂标签层,不是一个独立数据集。任何把它当成「一份可以单独下载、单独使用的数据」的想法,都会在第一步取不到正文时撞墙。
§3 它是谁的数据:一条 Google 的标注流水线
3.1 贡献者与机构
五位作者 Akshay Goel、Almog Gueta、Omry Gilon、Sofia Erell、Amir Feder 在 PhysioNet 页面上的署名机构均为 Google LLC。官方在「Conflicts of Interest」一节主动写明这点:这些作者受雇于 Google LLC。这是一个应当写进使用说明的事实——流水线所用的 PaLM 2 是 Google 自研模型,数据集的发布方又是 PhysioNet,模型供应方与标注方是同一家。
托管方仍是 PhysioNet,由 MIT 计算生理学实验室维护,并在页面上标注了标准的 PhysioNet 引用要求。数据本身则源自 MIMIC-IV-Note,页面「Parent Projects」一节明确列出派生来源为 MIMIC-IV-Note v2.2,要求使用时一并引用父项目。
3.2 时间线
| 时间 | 事件 | 意义 |
|---|---|---|
| 2023 年 | MIMIC-IV-Note v2.2 发布,含 331,794 份出院小结 | 提供了待标注的语料底座 |
| 2023 年 | 配套论文《LLMs Accelerate Annotation for Medical Information Extraction》被机器学习医疗会议接收 | 方法论与质量对标结论的来源 |
| 2023-12-12 | 1.0.0 版本在 PhysioNet 上线,DOI 10.13026/ps1s-ab29 | 首次公开,至今唯一版本 |
| 发布后 | 官方表示未来版本希望扩展到更多出院小结 | 1.0.0 定位为起点 |
第三行之后没有修订记录。与其他长期维护的 PhysioNet 库不同,它没有「头文件修订」一类的元数据变更,也没有版本 1.0.1。这既说明它很新,也说明它还没有经历过一轮使用侧反馈推动的修正。
3.3 采集场景:从三十三万份里随机抽六百份
官方对抽样方式的表述只有一句:标签覆盖的是 MIMIC-IV-Note 出院小结的一个随机子集。随机意味着两点:一是没有按科室、病种、年份或文档长度做分层,抽样分布应当接近父项目的自然分布;二是没有做「至少含 N 处用药提及」一类的富集筛选,某些文档可能用药提及很少。
父项目本身的人群边界同样要继承下来。MIMIC-IV-Note 的出院小结来自波士顿 Beth Israel Deaconess Medical Center,共 331,794 份、145,915 名患者,覆盖住院场景,以重症与内科患者为主。因此这批标签反映的是美国单一学术医疗中心的住院文书习惯:用药写在哪些小节、缩写怎么写、剂量单位怎么表达,都带着那家医院的模板痕迹。换一家医院、甚至换成门诊病历,语言分布就会变。
3.4 数据来源的三个层次
理解这份数据要分三层。第一层是原始病历——BIDMC 的电子病历,经去标识后进入 MIMIC-IV-Note,这一步不由本库作者完成,也不随本库发布。第二层是 MIMIC-IV-Note 的出院小结文本——本库的标注对象,需另行申请获取。第三层是大模型生成的标签——本库唯一的新增内容。
这三层带来一个常被忽略的不对称:第二层的去标识与文本清洗规则由 MIMIC-IV-Note 决定,第三层的偏移却必须严格落在第二层的字符序列上。只要两层之间有一次换行归一化或空白折叠的差异,偏移就会错位。这也是为什么「拿到两份数据先抽样核对偏移」应当是使用流程的第一步(§9.2)。
§4 它最独特的东西:一次可复用的大模型标注实践
4.1 稀缺的是「公开的模型产物」而不是「六百份标签」
六百份文档在临床标注里不算大数。真正稀缺的是它的身份:这是少见的把大模型标注流水线的最终产物原样公开的数据集。多数相关工作只发布结论(F1 是多少、省了多少时间),不发布产物;产物不公开,别人就无法在此基础上做二次分析,也无法验证那条结论。
这条流水线本身也写得清楚:用 Google 的 PaLM 2 模型,配一份针对用药抽取任务设计的少样本提示,提示里包含任务背景、完整任务描述、若干输入输出的示例对,并明确指定输出格式——示例里用的是 YAML 语法。文本分段送入模型,模型输出再由一个后处理模块转成 NER-RE(命名实体识别—关系抽取)结构对象,把药物信息与关系信息封装起来。
4.2 质量对标:三个数字与它们的口径
配套论文给出的对标结论,是理解「能不能用」的关键。三个数字按官方页面与论文摘要的口径列出:
| 口径 | 数值 | 说明 |
|---|---|---|
| 大模型生成 + 人工精修的最终 F1 | 0.907 | 论文报告的人机协作终态质量 |
| 纯人工标注基线 F1 | 0.910 | 作为对照的人类水平 |
| 仅大模型输出、无人介入的 F1 | 0.804 | 说明人工精修这一步仍然不可省 |
| 单份文档标注耗时 | 从 26.67 分钟降到 11.32 分钟 | 论文报告的人机协作耗时变化 |
这四行必须连起来读,单独摘任何一行都会误读。0.907 与 0.910 的差距很小,说明人机协作的终态质量接近纯人工;而 0.804 与 0.907 的差距很大,说明省事的是人工精修环节,不是模型自己就能交差。
对本库最关键的推论是:发布出来的这批标签,属于官方页面所称的「初始标签生成」产物,而未声明经过人工精修。因此它的质量定位应当参照第三行而不是第一行。这不是贬低,而是把「它能当什么」说清楚——它可以是一个不错的训练集起点,不是一把尺子。
4.3 案例:一句医嘱如何被拆成六个槽位
官方示例给的是一句英文医嘱:"Ibuprofen as needed, and diclofenac for one month as needed, for abdominal discomfort." 模型被要求输出的 YAML 结构如下(节选):
entities:
- group: 1
MEDICATION: {text: Ibuprofen}
DOSE: {text: ''}
FREQUENCY: {text: as needed}
DURATION: {text: ''}
REASON: {text: abdominal discomfort}
MODE: {text: ''}
- group: 2
MEDICATION: {text: diclofenac}
DOSE: {text: ''}
FREQUENCY: {text: as needed}
DURATION: {text: for one month}
REASON: {text: abdominal discomfort}
MODE: {text: ''}
落到 CSV 之后,这段 YAML 会变成若干行「偏移 + 类型 + 分组」,同一分组下的多个槽位靠 Group 列重新聚合。把这个过程拆开看:
| 步骤 | 输入 | 输出 | 谁负责 |
|---|---|---|---|
| 分段 | 整份出院小结 | 若干文本片段 | 流水线预处理 |
| 提示 | 文本片段 + 少样本提示 | YAML 生成文本 | PaLM 2 |
| 解析 | YAML 生成文本 | NER-RE 结构对象 | 后处理模块 |
| 回贴 | 结构对象 + 原文 | 字符级起止偏移 | 解析器(论文称 resolver) |
| 落成 | 偏移 + 类型 + 分组 | 单文档 CSV | 发布流程 |
这张表里最脆弱的一环是第四步。模型生成的是文本,不是指针;把它还原成原文里的字符位置,需要一次匹配。当模型改写、缩写或补全了原文片段(这类情况在生成式模型里并不罕见),匹配就会失败或偏移。官方页面没有说明匹配失败时的处理策略,这是一处应在使用时自行抽样验证的空白。
从示例还能读出标注口径的两个取向。第一个是允许共享:abdominal discomfort 这一句同时出现在两个分组的 REASON 里,说明同一段文字可以同时属于两个分组,不做互斥处理。第二个是允许留空:DOSE 与 MODE 在示例里是空串,说明「这份文本里没写剂量」不会被强行补出一个值,也不会因为缺项而丢掉整条用药记录。这两条取向对下游很关键——共享意味着去重时不能按文本去重,留空意味着做统计时不能把「缺项」当成「为零」。
4.4 标注的粒度:字符级清楚,语义级由你自己补
它的粒度在物理层面非常清楚——精确到字符的起止偏移,任何片段都能被原样取回。但在语义层面,它只给到「这段文字属于某个槽位」,不给标准化。药物名是原文里怎么写就怎么标,没有做同义词归并,也没有编码映射。想要 RxNorm 或 ATC 一类的标准编码,要自己接一层术语归一。
分组编号提供的是同一层语义:同一分组里的槽位属于同一次用药提及。它不提供跨句的共指消解——如果同一药物在文档的前后两处各被提及一次,那通常是两个分组,而不是一个。把两次提及合并成「一个药」,是下游任务自己的事。
4.5 边界条件:什么情况下它不再适用
| 条件 | 是否适用 | 判断依据 |
|---|---|---|
| 训练一个用药抽取的小模型 | 适用 | 600 份文档、字符级标签、六类槽位齐备 |
| 当评测基准给别的模型打分 | 不适用 | 标签本身由模型生成,无人工复核 |
| 做患者级的数据集划分 | 不适用 | 官方未披露 600 份对应的患者数 |
| 研究大模型标注的错误形态 | 适用,且是少见的公开样本 | 产物随库发布,可抽样复核 |
| 做跨机构泛化评测 | 只算半边 | 语料来自单一机构,只有一个中心 |
| 统计某类药物的使用频率 | 不适用 | 只标提及,不代表处方或患者数 |
| 迁移到门诊病历或中文病历 | 不适用 | 语言分布与文书模板不同 |
| 需要标准化药物编码 | 不适用 | 未提供编码映射 |
§5 怎么拿到:从凭证到可训练样本
5.1 目录结构与下载面
官方页面在受限环境下会显示「数据在当前地区不可用」,文件目录需要登录后访问。依据页面描述可以确定的结构如下:
| 路径/对象 | 内容 | 是否可独立访问 |
|---|---|---|
/files/medication-labels-mimic-note/1.0.0/ |
标注文件目录,按文档分 CSV | 需凭证,且受地域限制 |
NoteID-<note_id>.csv |
单份文档的标注行 | 需凭证 |
项目页 /content/medication-labels-mimic-note/1.0.0/ |
摘要、方法、字段说明、示例代码 | 公开可读 |
| 父项目 MIMIC-IV-Note v2.2 | 出院小结正文 | 需另行申请凭证 |
文件总数、是否存在 SHA256 校验清单、是否有 README 随库发布,官方页面未作说明,本条按未核验处理(§10)。
5.2 获取前置:三道门槛
| 步骤 | 要求 | 说明 |
|---|---|---|
| 注册 | PhysioNet 凭证账号 | 需实名并通过身份核验 |
| 培训 | CITI「Data or Specimens Only Research」课程 | 页面标注为 Required training |
| 签署 | PhysioNet 凭证健康数据使用协议 1.5.0 | 签署后方可下载 |
| 父项目 | 另需 MIMIC-IV-Note 的访问权限 | 两份数据的凭证要各自到位 |
| 地域 | 部分地区不可下载 | 以登录后目录响应为准 |
这里最容易踩的是第四行:多数人以为签了本项目的 DUA 就能拿到全部所需,实际上正文在父项目那边,两个凭证缺一不可。
5.3 批量下载
#-- 凭证登录后用 wget 递归拉取标注目录
wget -r -N -c -np --user <USERNAME> --ask-password \
https://physionet.org/files/medication-labels-mimic-note/1.0.0/
#-- 只用 CSV,不递归抓取索引页
wget -r -N -c -np -A "*.csv" --user <USERNAME> --ask-password \
https://physionet.org/files/medication-labels-mimic-note/1.0.0/
命令行里出现密码有泄露风险,更稳的做法是把凭据放进 ~/.netrc,再用 curl --netrc 或 wget 默认读取。下载前先确认目录返回的是 200 而不是 403——403 通常意味着凭证未生效或地域受限,不是路径写错。
5.4 拼接与原文回贴
import os
import re
import pandas as pd
LABEL_DIR = "medication-labels-mimic-note/1.0.0"
def iter_label_files(d):
#-- 只取以 NoteID- 开头的 CSV,跳过目录里可能的其他文件
for fn in sorted(os.listdir(d)):
if fn.startswith("NoteID-") and fn.endswith(".csv"):
yield fn
frames = []
for fn in iter_label_files(LABEL_DIR):
note_id = re.search(r"NoteID-([0-9A-Za-z-]+)", fn).group(1)
df = pd.read_csv(os.path.join(LABEL_DIR, fn))
df["note_id"] = note_id #-- 回填主键
df["file"] = fn
frames.append(df)
labels = pd.concat(frames, ignore_index=True)
print(labels.columns.tolist(), len(labels))
#-- 与 MIMIC-IV-Note 的 discharge 正文对齐,注意版本必须一致
texts = pd.read_csv("mimic-iv-note/2.2/discharge.csv.gz")
text_by_id = dict(zip(texts["note_id"], texts["text"]))
def slice_text(row):
#-- 切片语义需自行抽样确认前闭后开
return text_by_id[row["note_id"]][row["Start Position"]:row["End Position"]]
sample = labels.head(20).copy()
sample["span"] = sample.apply(slice_text, axis=1)
print(sample[["note_id", "Annotation", "Group", "span"]].head(20))
抽样打印这一步不能省。它同时验证三件事:note_id 能否在父项目里命中、偏移是否落在正确片段上、结束位置是否包含在内。三件事里任何一件不成立,后续全部结果都不可信。
5.5 转成序列标注或关系结构
#-- 按分组聚合成实体组,是做 NER-RE 的起点
groups = (
labels.sort_values(["note_id", "Group"])
.groupby(["note_id", "Group"])["Annotation"]
.apply(list)
)
print(groups.head(10))
#-- 转成一条记录一个药物提及的宽表
wide = (
labels.pivot_table(index=["note_id", "Group"],
columns="Annotation", values="Start Position",
aggfunc="min")
.reset_index()
)
print(wide.columns.tolist())
转成 BIO / IOB 标签序列则需要先把正文按字符展开,再按偏移把标签打到对应字符上。这一步要处理两个现实问题:不同分组的槽位片段可能重叠(比如共享的原因文本),重叠时如何取舍要事先定规则;以及原文的空白与换行是否被计入偏移,这决定了切片对不对得上。
重叠问题没有标准答案,但必须写清楚。可选的做法有三种:先到先得(按起始位置排序,先占的字符不再改)、长者优先(长片段覆盖短片段)、或把重叠字符标成多标签。三种做法会得到不同的标签序列,训练出的模型也不同,论文里若不交代,结果就不可复现。这也是本库在使用侧要求「二次加工要留痕」的地方:从 CSV 到 BIO 的这一步,是使用者自己加的假设。
5.6 五个最容易出错的地方
| 坑 | 表现 | 办法 |
|---|---|---|
| 忘记回填 note_id | 拼接后无法回溯原文 | 读取时从文件名解析并补列 |
| 父项目版本不一致 | 偏移整体漂移,切片拿到错句 | 锁定 MIMIC-IV-Note v2.2,与标注生成时对齐 |
| 把闭区间当开区间 | 片段多一个或少一个字符 | 抽样打印肉眼核对 |
| 把 Group 当跨文档唯一 | 跨文档编号重复导致合并错误 | 分组只在单文档内唯一,聚合时带上 note_id |
| 把提及数当患者数 | 结论被放大 | 官方未披露患者口径,只报提及层面 |
§6 与库内资源的关系
6.1 关系图谱
| 资源 | 关系 | 检索路径 |
|---|---|---|
| mimic-iv-note | 父项目,提供被标注的正文 | 临床文本 + 电子健康记录 |
| i2b2-n2c2-nlp | 字段体系来源,2009 药物挑战赛 | 评测基准 + 标注规范 |
| immunosuppressive-annotations | 同为 MIMIC 文本的用药相关人工标注 | 人工标注 + 用药状态 |
| annotation-opioid-use-notes | 同为出院小结标注,人工协议驱动 | 人工标注 + 用药语境 |
| labelled-notes-hospital-course | MIMIC-IV 派生文本标注 | 临床文本 + 片段级标注 |
| mimic-iii-ext-notes | MIMIC-III 侧的概念标注 | 临床文本 + 标注规范 |
| discq | 同为 MIMIC 出院小结的人工标注产物 | 人工标注 + 出院小结 |
| ann-pt-summ | 同为大语言模型相关标注,人工协议严格 | 大模型标注质量 |
| med-palm2-mimic-cxr | 同为 Google 医疗大模型产物 | 大模型 + 人工裁定 |
| task-1-3-soap-note-tag | 同为临床文本标注任务 | 标注规范 + 临床文本 |
6.2 检索路径
按主题标签走,三条路径都能到它:**「临床文本 → 用药抽取」是最短的一条,落点就是本库;「大模型标注 → 质量研究」这条会先经过 ann-pt-summ 一类人工协议严格的数据集,再到本库,因为本库的角色是「被比较的一方」而不是「比较的尺子」;「MIMIC 派生 → 标注层」**这条则要先确认父项目凭证,再决定要不要取标注。
第二条路径值得单独说。任何「用大模型标注替代人工」的研究,都需要一个人工侧参照物。本库提供的是模型侧产物,人工侧参照物要到别处找——这正是它与 ann-pt-summ、immunosuppressive-annotations 这类人工标注数据集在库内形成互补的地方。
6.3 与同类资源的分工判据
| 你的问题 | 该选谁 | 理由 |
|---|---|---|
| 我要字段体系与现代语料都齐备的用药抽取训练数据 | 本库 | 六类槽位 + MIMIC-IV-Note 语料 |
| 我要人工黄金标准做评测 | immunosuppressive-annotations 或 ann-pt-summ | 人工协议明确,可当尺子 |
| 我要研究阿片类用药的社会语境 | annotation-opioid-use-notes | 专门的标注协议 |
| 我要原始的大规模文本自己标 | mimic-iv-note | 三十三万余份出院小结 |
| 我要看 2009 年那批经典挑战语料 | i2b2-n2c2-nlp | 原任务原语料 |
| 我要对比不同模型在同一批文本上的标注 | 本库 + 自跑流水线 | 官方产物可作对照基线 |
§7 质量评估与局限性
7.0 阅读本节前的一个前置校正
先纠正一个常见误判:把「标签由模型生成」直接读成「质量不可信」。官方给出的对标结论是质量与平均水平的标注专员相当,配套论文里人机协作终态的 F1 与纯人工基线只差千分之三。真正需要区分的不是「能不能用」,而是用在哪个环节:用作训练起点,它划算;用作评测标尺,它不合格。
7.1 五维评分
按数据可用性的常用维度打分,每项 1–5 分,分数针对「作为用药抽取研究数据」这个用途:
| 维度 | 分数 | 理由 |
|---|---|---|
| 数据规模 | 2 | 600 份文档,够小样本与迁移,不够训大模型 |
| 标注质量 | 3 | 与人工持平为官方对标结论,但无逐条复核结果随库发布 |
| 任务适配 | 5 | 字段体系与 i2b2 一致,直接可用于 NER-RE |
| 文档完整 | 4 | 方法、字段、示例、回贴代码都写清楚,抽样细节有缺 |
| 可获取性 | 2 | 双重凭证 + 地域限制 + 依赖父项目 |
五项合计 16 分(满分 25)。这个分数结构说明它是方法验证型资源而不是通用训练资源:适配性拉满,规模与获取性拖后腿。
7.2 标注质量的两层
第一层是类型对不对——这段文字是不是药物名、是不是剂量。官方页面明确说标签由大语言模型流水线生成,并通过在 i2b2 2009 数据上的评测来说明质量水平。这一层的质量由整体指标背书,而不是逐条背书。
第二层是位置准不准——偏移是否精确落在原文片段上。模型输出的是文本而非指针,位置由解析器回贴得到,官方页面未说明匹配失败与歧义的处理策略。这一层没有任何背书,只能自行抽样验证。
| 用途 | 位置误差的影响 | 建议 |
|---|---|---|
| 训练序列标注模型 | 大,标签直接进监督信号 | 先抽样核对偏移再训练 |
| 统计用药提及数量 | 小,只看有无不看重边界 | 可直接用,但须说明口径 |
| 做关系抽取评测 | 中,槽位边界影响关系判定 | 人工复核小样本后再下结论 |
| 迁移到 i2b2 做对照 | 中,两边边界口径可能不同 | 明确写法,不跨口径比较 |
7.3 已知的、可枚举的偏差
| 偏差 | 表现 | 影响 |
|---|---|---|
| 单一机构语料 | 全部文本来自 BIDMC | 文书模板与用药表达单一 |
| 抽样口径未披露 | 只说随机子集,未说患者数 | 无法做患者级划分 |
| 标注者单一 | 只有一个生成源 | 不能算一致性,不能当金标准 |
| 模型侧系统性错误 | 生成式模型可能改写或补全片段 | 偏移回贴可能失败或错位 |
| 空槽位不落行 | 缺失的槽位没有对应行 | 计数时不能按行数推断完整性 |
| 无标准化编码 | 只有原文片段 | 需自行做术语归一 |
| 地域可及性 | 部分地区不可下载 | 复现性受访问条件影响 |
| 无后续版本 | 只有一个 1.0.0 | 已知问题未被修订 |
7.4 外部验证矩阵
| 验证角色 | 做法 | 讲得通的地方 | 风险 |
|---|---|---|---|
| 训练数据来源 | 在本库上训练,在 i2b2 2009 上测试 | 字段一致,可直接比 | 两边语料年代与风格不同,差异来源不清 |
| 迁移起点 | 在本库上预训练,人工标注数据上微调 | 用大模型产物换标注成本 | 模型侧错误会被微调数据放大或掩盖 |
| 大模型标注研究的对象 | 抽样复核本库标签,估计错误形态 | 产物公开,可逐条查 | 抽样量小时结论不稳 |
| 基线对照 | 自己跑一条流水线,与本库产物比较 | 同为公开可用对照 | 提示词与模型版本不同,比较要写清 |
这四种角色里,第四种最容易被写歪:如果自己的流水线用了更强的模型或更细的提示,然后得出「比本库好」的结论,这个结论说明的是模型代际差异,不是方法优劣。
7.5 它为何值得关注:稀缺的不是六百份,是那条证据链
六百份标注在量上并不突出,突出的是它把「提示 → YAML → 结构对象 → 偏移 → CSV」这条链路的产物原样交了出来。有了产物,别人才能复查、才能二次标注、才能估错误。多数同类工作停在指标上,而指标是没有办法被复查的。
这也解释了它为什么值得在只有 1.0.0 一个版本、且没有后续修订的情况下被使用:它的价值不在于覆盖多少文档,而在于把一次方法论实践变成了可检验的对象。
§8 生态位与历史
8.1 历史沿革
| 阶段 | 状态 | 说明 |
|---|---|---|
| 任务定义期(2009 年前后) | i2b2 挑战赛确立六类槽位 | 字段体系奠定 |
| 语料积累期(至 2023 年) | MIMIC-IV-Note 提供三十三万余份出院小结 | 有大量文本但无用药标签 |
| 方法验证期(2023 年) | 大模型标注流水线在 i2b2 上完成对标 | 论文给出 F1 与耗时数字 |
| 产物发布期(2023-12-12) | 1.0.0 上线,覆盖 600 份文档 | 从方法走向公开产物 |
| 扩展预期 | 官方表示希望覆盖更多出院小结 | 未落地为具体版本 |
8.2 与 i2b2 挑战赛的关系
它不是挑战赛的延续数据集,而是沿用挑战赛字段体系的另一批语料。这个区别很重要:i2b2 2009 的价值在于它是人工标定的基准,本库的价值在于它把基准的字段搬到了现代大规模语料上。两者不能直接互换——前者是尺子,后者是材料。
因此常见的一种误用是:在本库上测出一个 F1,然后与 i2b2 2009 上的公开成绩并列比较。这两个数字不可比,因为参照标准不同:一个是人工标签,一个是模型标签。
8.3 生态位:材料而不是尺子
把它放在临床标注资源的光谱上看,位置很清楚。光谱的一端是人工协议严格、规模较小的数据集,另一端是规模巨大、无标签的原始语料。本库处在中间的偏材料一侧:规模比人工数据集大,可信度比原始语料高,但可信度不及人工数据集。
它的生态位因此可以概括为一句话:用来做材料,不用来做尺子。
8.4 谁在用它,用来做什么
从用途而非引用量看,四类使用者最可能对它感兴趣:需要用药抽取训练数据但拿不到人工标注的团队;研究大模型标注质量、需要公开产物做复查的团队;做 NER-RE 联合建模、需要天然带关系结构语料的研究者;以及需要一份现代语料与 i2b2 2009 做迁移对照的人。
第四类使用者要格外小心:迁移对照的目的是分离「语料变化」与「标注者变化」两种效应,而本库同时含这两种变化。要分离,就得再加一组对照,例如在同一批 MIMIC-IV-Note 文本上做人工标注。
§9 使用指引
9.1 三种角色的路径
| 角色 | 最短路径 | 要避开的坑 |
|---|---|---|
| 算法工程师 | 取凭证 → 拉 CSV → 回贴原文 → 建序列标注样本 | 偏移未抽样核对就训练 |
| 方法研究者 | 读官方方法与示例提示 → 在 i2b2 上复算 → 与本库产物对照 | 拿本库当金标准评测 |
| 数据治理人员 | 先看许可与 DUA → 确认父项目凭证 → 评估地域可及性 | 以为签一个 DUA 就够 |
9.2 一条最短的可用流程
- 注册 PhysioNet 凭证账号,完成 CITI 培训,签署数据使用协议 1.5.0。
- 同时申请父项目 MIMIC-IV-Note v2.2 的访问权限——正文在那边。
- 登录后确认文件目录返回 200,而不是 403。
- 下载标注 CSV 与 discharge 表,两边版本锁死。
- 按 §5.4 拼接标注表并回填 note_id。
- 抽样二十条,肉眼核对偏移切片是否落在正确的词上。
- 确认无误后再批量生成训练样本或做统计。
第六步是整条流程里唯一无法跳过的手工环节。跳过它,后面所有数字都可能建立在错的对齐上。
9.3 引用方式
| 场景 | 引用内容 |
|---|---|
| 引用本库 | Goel, A., Gueta, A., Gilon, O., Erell, S., & Feder, A. (2023). Medication Extraction Labels for MIMIC-IV-Note Clinical Database (version 1.0.0). PhysioNet. https://doi.org/10.13026/ps1s-ab29 |
| 引用平台 | Pollard, T. 等 (2026). PhysioNet as a global platform for biomedical research. Nature Health. https://doi.org/10.1038/s44360-026-00096-z |
| 引用父项目 | Johnson, A. 等 (2023). MIMIC-IV-Note: Deidentified free-text clinical notes (version 2.2). PhysioNet. https://doi.org/10.13026/1n74-ne17 |
| 引用字段体系 | Uzuner, Ö., Solti, I., & Cadag, E. (2010). Extracting medication information from clinical text. JAMIA, 17(5), 514–518. |
| 引用方法论文 | Goel, A. 等 (2023). LLMs Accelerate Annotation for Medical Information Extraction. MLHC, PMLR. |
四份引用缺一不可:本库、平台、父项目、字段体系来源。方法论文在使用其质量结论时必须引——那些数字出自论文,不出自数据页面。
§10 AI 使用声明
| 项目 | 声明 |
|---|---|
| 文本生成 | 本文由 AI 辅助撰写,编辑把关结构与事实 |
| 数字来源 | 规模、结构、边界三类数字来自 PhysioNet 官方页面(项目页与 1.0.0 版本页) |
| 文件核验 | 官方页面可公开访问;文件目录在当前环境下返回 403,未逐一核验文件清单 |
| 论文信息 | 质量与耗时数字来自配套论文摘要,未读全文 |
| 未核验内容 | 标注文件总数、是否存在校验清单、600 份文档对应的患者数、-DS- 段含义、空槽位是否落行、偏移切片区间开闭 |
| 图像 | 无配图;封面为生成式提示词,不含真实病历内容 |
| 免责 | 本文不构成临床建议;数据使用须遵守 PhysioNet 凭证健康数据许可 1.5.0 |
常见误读(避坑清单)
| 说法 | 实际 | 证据 |
|---|---|---|
| 「它是人工标注的黄金标准」 | 标签由 PaLM 2 流水线生成 | 官方 Methods 段写明使用大语言模型生成 |
| 「下载标注就够了」 | 不含原文,须另取 MIMIC-IV-Note 正文 | 官方 Data Description 只描述标签字段 |
| 「600 份文档就是 600 名患者」 | 官方未披露患者口径 | 页面只说随机子集,未给患者数 |
| 「可以拿它给别的模型打分」 | 它是模型产物,不是尺子 | 官方对标结论是「与标注专员持平」而非「高于」 |
| 「CSV 里有 note_id 列」 | note_id 只在文件名里 | 官方示例代码从文件名正则提取 |
| 「缺哪个槽位就有一行空值」 | 空槽位以空串出现在 YAML 示例,落成 CSV 的写法未说明 | 官方示例 DOSE 与 MODE 为空串 |
| 「Group 是全局唯一编号」 | 分组在单文档内唯一,跨文档可重复 | 官方称其用于把标注连到各自用药分组 |
| 「它和 i2b2 2009 可以直接比分数」 | 一边人工标签一边模型标签,不可比 | 官方明确本库标签为大模型生成 |
| 「它覆盖了 MIMIC-IV-Note 全部用药」 | 只覆盖 600 份随机子集 | 官方称未来希望扩展到更多小结 |
| 「签了本项目的 DUA 就能用」 | 父项目凭证另需申请 | 官方 Parent Projects 指向 MIMIC-IV-Note v2.2 |
FAQ
Q1:这些标签到底是人工标的还是模型标的?
模型标的。官方页面写明使用 Google 的 PaLM 2 配合少样本提示生成,再经后处理模块转成结构对象。官方的对标说法是质量与平均水平的标注专员相当,这组结论来自在 i2b2 2009 数据上的评测,而不是对这 600 份文档的逐条复核。
Q2:600 份出院小结对应多少名患者?
官方页面没有给出这个数字,只说明是从 MIMIC-IV-Note 随机抽取的出院小结。因此不能用它做患者级划分,也不能把「用药提及数」说成「患者数」。需要患者口径时,可以在取到 note_id 后回父项目查 subject_id,但那属于二次加工。
Q3:为什么标注文件里没有原文?
因为它设计成一个外挂标签层:只记录偏移、类型与分组,正文留在父项目里。这样避免了重复发布受控文本,代价是使用者必须两份凭证都拿到手。
Q4:六类槽位具体是哪六类?
药物名(MEDICATION)、剂量(DOSE)、给药途径(MODE)、频次(FREQUENCY)、疗程(DURATION)、用药原因(REASON),与 2009 年 i2b2 药物挑战赛的字段体系一致。官方列举时用了「例如」的表述,实际取值以文件为准。
Q5:偏移会不会对不上原文?
有可能。模型输出的是文本,偏移由解析器回贴得到;只要父项目版本不一致、或做过换行与空白清洗,偏移就会漂移。使用前务必抽样打印切片核对,同时确认结束位置是开区间还是闭区间。
Q6:它能不能当评测基准?
不适合当尺子。它的标签本身来自模型,用它给别的模型打分等于用一个模型的输出当标准答案。做评测应当找人工标注的数据集,本库更适合当训练材料或对照材料。
Q7:许可证允许商用吗?
许可为 PhysioNet 凭证健康数据许可 1.5.0,配合数据使用协议 1.5.0,官方定位是研究用途的凭证访问数据。商用前须逐条核对许可与协议条款,不能按开放数据默认处理。
Q8:为什么只有 1.0.0 一个版本?
它发布于 2023 年 12 月 12 日,至今没有修订记录。官方在数据描述里表示未来希望把标签扩展到更多 MIMIC-IV-Note 出院小结,但这一预期尚未落地为具体版本。
Q9:配套论文的 F1 数字能直接引用到这批标签上吗?
要分清口径。论文的 0.907 是人机协作终态(模型生成加人工精修)的成绩,0.804 是模型单独输出的成绩。官方页面对本批标签的表述是「初始标签生成」产物,未声明经过人工精修,因此引用时更贴近后者,并须注明出处。
Q10:我想研究大模型标注的错误形态,它能用吗?
能用,而且是少见的公开样本。产物随库发布,可以抽样做人工复核,把错误类型列表写出来。要注意抽样量足够、复核协议先行写定,否则结论不稳。
术语表
| 术语 | 解释 |
|---|---|
| 用药抽取 | 从临床自由文本中识别药物及其属性字段的信息抽取任务 |
| i2b2 2009 药物挑战赛 | 2009 年举行的临床自然语言处理评测,确立六类用药槽位 |
| MIMIC-IV-Note | MIMIC-IV 的去标识自由文本子集,含三十三万余份出院小结 |
| 出院小结 | discharge summary,患者出院时书写的诊疗与用药总结文书 |
| 字符偏移 | 以字符为单位标注片段在全文中的起止位置 |
| 槽位 | 一条结构化记录里的一个字段,如剂量、频次 |
| 分组编号 | Group,把同一次用药提及的多个槽位串起来的标识 |
| NER-RE | 命名实体识别与关系抽取的联合任务 |
| 少样本提示 | few-shot prompting,在提示中给出若干示例引导模型输出 |
| PaLM 2 | Google 的大语言模型,本库标注流水线所用 |
| YAML | 一种结构化文本格式,本库提示中指定为模型输出格式 |
| 解析器 | resolver,把模型生成的文本回贴为原文字符位置的模块 |
| 去标识 | 移除可识别个人信息的处理过程 |
| DUA | 数据使用协议,凭证数据的法律约束文件 |
| CITI 培训 | 人体研究伦理与数据使用的在线培训课程 |
| 凭证访问 | 需实名核验、培训与签署协议后才能下载的数据访问方式 |
| 标注专员 | 受过训练、按协议执行标注的人员 |
| F1 | 精确率与召回率的调和平均,信息抽取常用指标 |
| RxNorm | 美国国立医学图书馆的临床药物标准命名体系 |
| 共指消解 | 判断文中不同提及是否指向同一实体的任务 |
附录 A:核心数字核对表
| 项 | 值 | 来源 | 来源层级 |
|---|---|---|---|
| 全名 | Medication Extraction Labels for MIMIC-IV-Note Clinical Database | 官方项目页 | 官方页面 |
| 版本号 | 1.0.0 | 官方项目页与版本页 | 官方页面 |
| 发布日期 | 2023 年 12 月 12 日 | 官方项目页 | 官方页面 |
| 覆盖文档数 | 600 份出院小结 | 官方摘要段 | 官方页面 |
| 父项目规模 | 331,794 份出院小结 | 官方 Background 段 | 官方页面 |
| 父项目患者数 | 145,915 名 | 官方 Background 段 | 官方页面 |
| 父项目版本 | MIMIC-IV-Note v2.2 | 官方 Parent Projects 段 | 官方页面 |
| 原始机构 | Beth Israel Deaconess Medical Center,波士顿 | 官方 Background 段 | 官方页面 |
| 槽位数 | 6 类 | 官方 Data Description 段 | 官方页面 |
| CSV 字段数 | 4 个(起始、结束、类型、分组) | 官方 CSV File Format 段 | 官方页面 |
| 标注模型 | Google PaLM 2 | 官方 Methods 段 | 官方页面 |
| 输出格式 | 提示中指定 YAML | 官方 Methods 段与示例 | 官方页面 |
| 版本 DOI | 10.13026/ps1s-ab29 | 官方引用块 | 官方页面 |
| 最新 DOI | 10.13026/6d3r-w470 | 官方页面 DOI 区 | 官方页面 |
| 许可 | PhysioNet 凭证健康数据许可 1.5.0 | 官方 License 区 | 官方页面 |
| 数据使用协议 | 1.5.0 | 官方页面 | 官方页面 |
| 必需培训 | CITI「Data or Specimens Only Research」 | 官方 Required training 区 | 官方页面 |
| 作者数 | 5 人,均属 Google LLC | 官方署名与利益冲突声明 | 官方页面 |
| 人机协作 F1 | 0.907 | 配套论文摘要 | 论文 |
| 纯人工 F1 | 0.910 | 配套论文摘要 | 论文 |
| 仅模型输出 F1 | 0.804 | 配套论文摘要 | 论文 |
| 单份标注耗时 | 26.67 分钟降至 11.32 分钟 | 配套论文摘要 | 论文 |
附录 B:数字的来源分层
第一层:官方页面。 全名、版本、日期、600 份文档、父项目规模与版本、六类槽位、四个 CSV 字段、所用模型、许可、培训要求、DOI。这些全部来自项目页与 1.0.0 版本页的公开段落。
第二层:配套论文摘要。 三个 F1 数字与标注耗时的变化。论文与数据页是两回事,引用时必须分开标注,不能把论文的质量结论写成数据页的声明。
第三层:未核验。 标注文件总数、是否存在校验清单、600 份文档对应的患者数、文件名中 -DS- 段的含义、空槽位在 CSV 中的落成方式、偏移切片的开闭区间。这些需要凭证登录后逐文件确认,本篇按未核验处理,正文凡涉及处均作定性表述。
附录 C:完整参考文献
| 编号 | 文献 | 链接 | 用途 |
|---|---|---|---|
| 1 | Medication Extraction Labels for MIMIC-IV-Note Clinical Database v1.0.0 | https://physionet.org/content/medication-labels-mimic-note/1.0.0/ | 全部规模、结构、边界数据的来源 |
| 2 | MIMIC-IV-Note: Deidentified free-text clinical notes v2.2 | https://doi.org/10.13026/1n74-ne17 | 父项目与语料规模 |
| 3 | Uzuner, Solti & Cadag (2010), Extracting medication information from clinical text, JAMIA 17(5) | https://doi.org/10.1136/jamia.2010.003947 | i2b2 2009 字段体系来源 |
| 4 | Goel 等 (2023), LLMs Accelerate Annotation for Medical Information Extraction, MLHC, PMLR | https://proceedings.mlr.press/ | 质量与耗时数字来源 |
| 5 | Anil 等 (2023), PaLM 2 Technical Report, arXiv:2305.10403 | https://arxiv.org/abs/2305.10403 | 所用模型的背景 |
| 6 | PhysioNet 平台综述(2026,Nature Health) | https://doi.org/10.1038/s44360-026-00096-z | 托管模式与引用规范 |
附录 D:任务代码
任务一:把分组聚合成结构化用药记录
import pandas as pd
#-- labels 由 §5.4 的拼接流程得到,含 note_id/Start Position/End Position/Annotation/Group/Text
def to_records(labels):
out = []
for (note_id, group), g in labels.groupby(["note_id", "Group"]):
rec = {"note_id": note_id, "group": group}
for _, row in g.iterrows():
rec[row["Annotation"]] = row["Text"] #-- 槽位名作列,文本作值
out.append(rec)
return pd.DataFrame(out)
records = to_records(labels)
print(records.head(10).to_string())
任务二:抽样核对偏移是否落在正确的词上
def audit(labels, text_by_id, n=20, window=30):
#-- 打印片段及其左右上下文,肉眼判断边界是否合理
for _, row in labels.head(n).iterrows():
t = text_by_id[row["note_id"]]
s, e = int(row["Start Position"]), int(row["End Position"])
left = t[max(0, s - window):s]
span = t[s:e]
right = t[e:e + window]
print(f"[{row['note_id']}] {row['Annotation']:<11} g{row['Group']:<3} "
f"{left!r}|{span!r}|{right!r}")
任务三:转成字符级 BIO 序列
def to_bio(text, spans):
#-- spans: [(start, end, type)],重叠时按先到先得,规则需事先写定
tags = ["O"] * len(text)
for s, e, t in sorted(spans, key=lambda x: (x[0], -(x[1] - x[0]))):
if any(tag != "O" for tag in tags[s:e]):
continue #-- 已有标签则跳过,避免覆盖
tags[s] = f"B-{t}"
for i in range(s + 1, e):
tags[i] = f"I-{t}"
return tags
三段代码的共同前提是偏移已经核对无误。没有这一步,后续任何训练或统计都建立在可能错位的对齐上。
附录 E:如果只记五件事
| 序号 | 记住什么 | 为什么 |
|---|---|---|
| 1 | 600 份出院小结、六类槽位、字符级偏移、四个 CSV 字段 | 这四个数字定义了它的全部用法 |
| 2 | 标签由 PaLM 2 生成,不是人工黄金标准 | 决定它能当材料不能当尺子 |
| 3 | 不含原文,须另取 MIMIC-IV-Note v2.2 | 双重凭证是使用前的硬门槛 |
| 4 | note_id 只在文件名里,Group 只在单文档内唯一 | 两个最容易出错的结构细节 |
| 5 | 官方未披露患者口径 | 不能做患者级划分,不能把提及数当患者数 |
需要更高工程化程度或合规出域的商业版本?
当前展示的公开版本适用于学术研究与原型验证。千方医数集依托三甲医院直采网络,提供经专家标注、符合伦理合规的专病数据集交易服务。
前往商城查看可交易产品 →
