原文标题:MedDeID enables locally governed clinical-text de-identification from real or synthetic training data
首次公开:2026年9月9日(arXiv v1)
主要署名单位:安特卫普大学(University of Antwerp)
龙哥导读
病历脱敏既怕漏掉姓名和日期,也怕误删诊疗线索。MedDeID把紧凑模型、后处理、伪名化和评测做成本地工作流:真实医院病历核心PII召回98.9%,非PII误删0.24%;纯合成训练模型达到96.1%,并表现出更强的跨场景稳定性。真正的亮点,是数据不出域、结果可审计。
先问一个医院数据团队迟早会遇到的问题:一份出院记录里,姓名和住址当然要隐藏,但“入院后三天出现发热”“两个月大的婴儿”“去年五月接受手术”又是研究真正需要的临床信息。怎样既把人藏起来,又不把病程本身删掉?
图1|论文方法总览。上游可以是紧凑Transformer、规则系统、通用PII模型或本地大模型;它们先输出候选字符区间,再统一经过边界修复和已知元数据注入,最后同时计算“识别信息找回多少”“正常文本误删多少”和处理速度。图中只说明统一比较框架,不代表所有系统采用相同模型。来源:论文Figure 1,CC BY 4.0。
一、病历脱敏不是“把名字涂黑”这么简单
临床自由文本里既有直接标识符,也有组合后能够定位个人的准标识符。姓名、电话号码、病历号很直观;日期、年龄、邮编、机构、职业、照护者姓名则更麻烦。它们单独看未必唯一,但与罕见疾病、住院时间和地点组合后,可能重新指向具体患者。
更棘手的是,很多标识符与医学含义缠在一起。“出生后第18天”“2026年3月完成移植”“父亲有同类病史”都不能简单整段删除。论文因此把目标拆成三层:第一层找出应保护的字符;第二层尽量不伤及正常临床文本;第三层把日期和年龄替换成仍保留医学意义的形式。
这也是为什么论文没有只报常见的实体F1。对脱敏系统,漏掉半个电话号码和漏掉整个电话号码,风险都很现实;而多删一个标点与多删一整句诊断,代价完全不同。MedDeID直接回到字符层面,分别量化隐私覆盖与内容损失。
二、两个核心公式:既看“漏没漏”,也看“删多了没有”
论文先把人工标注中的真正识别字符组成集合Gcore,把系统s最终遮盖的所有字符位置组成集合Rs。核心PII召回率定义为:
分子是被系统成功遮住的核心识别字符,分母是全部应保护字符。这里故意不要求预测标签完全正确:只要该字符被可靠移除,隐私保护这一层就获得信用。标题里的98.9%,说的正是这项字符级核心PII召回,而不是“98.9%的病历已经匿名”或“98.9%的患者绝对安全”。
另一边,令Gspan为完整人工标注区间,D为全部文档字符。非PII误删率定义为:
它回答的是:所有本来不该删的字符里,系统误删了多少。误删又被拆成两类:完全错误的假阳性,以及识别到了PII、但边界向两侧伸得太长。医院模型误删的1236个非PII字符中,353个来自纯假阳性,883个来自边界外扩。这个拆分很重要,因为修边界与减少乱报,需要的是两种不同工程手段。
高召回并不自动等于好脱敏,必须把信息损失放在同一张成绩单上。基层医疗测试里,一个通用PII检测器核心召回66.9%,却删掉11.46%的非PII字符;这意味着它可能一边漏人,一边把正常病情描述删掉一大块。
三、模型本体并不巨大:双头Transformer负责“边界”和“类别”
三个MedDeID模型采用同一种双头RoBERTa架构。荷兰语版本使用RobBERT-2023编码器,英语版本使用RoBERTa-base。第一个头对每个Token做三分类BIO判断:B表示一个实体的开始,I表示实体内部,O表示普通文本;第二个头只在每个已检测跨度的首Token上,从14类标识符中判断它属于姓名、日期、机构、地址还是其他类别。
为什么拆成两个头?因为“这里有没有PII”和“它具体是哪一类”不是完全相同的任务。前者决定能否遮住敏感字符,后者决定后续怎样替换。比如同样是一串数字,日期需要平移,病历号需要移除,年龄则可能保留到年、月、周或天。一个标签头承担全部责任,边界错误与类型错误会更容易纠缠。
长病历被切成512 Token窗口,相邻窗口重叠64 Token;重叠区域的logit先求平均,再还原为字符区间。这样做不能无限扩展上下文,却能减少实体刚好落在窗口边缘时被截断。三个模型还使用同样的随机种子、AdamW优化器、学习率结构和有效批量大小;测试集在最终重训前保持封存。
四、真正的产品是方法链,不只是一个分类器
模型给出跨度后,MedDeID还有一层确定性后处理。它会合并相邻检测、依据已知格式补全被截断的日期或号码,并在机构允许时注入病历元数据里已知的患者和照护者姓名。这里的“注入”不是把元数据塞回正文,而是把已知姓名作为额外检测依据。
这一步对不同方法的帮助差异很大。医院模型加入元数据后,召回只从98.8%升到98.9%;升级版Belgian DEDUCE却从78.5%升到88.0%。说明强模型本来就找到了多数姓名,而规则系统更依赖机构已有字段。部署时若元数据不完整,不能把论文主表成绩机械搬过去。
再往后是伪名化。所有属于同一患者或同次住院的精确日期使用同一个偏移量平移,因此绝对日期被改变,事件先后和间隔仍保留。月份、季节等粗粒度时间先被表示成可能日期区间,再整体平移;如果跨过月份边界,输出会扩大为“五月/六月”这类范围,而不是凭空猜一个具体日子。
年龄也不是一刀切。12岁以上保留整岁;2岁到12岁保留岁和月;6个月到2岁保留月;更小婴儿逐步细化到月与周、周与天,28天以内保留天。隐私最小化不应等于医学信息最小化:对成人,“42岁”通常够用;对新生儿,“0岁”几乎没有临床意义。
图2|MedDeID软件与数据工作流。统一的schema、标签体系和语言配置连接数据导入、合成生成、人工标注、训练、推理、基准构建与评测;模型和语言可以替换,但字符偏移与评测契约不变。GitHub与Hugging Face图标表示公开代码或公开模型、数据资产。来源:论文Figure 4,CC BY 4.0。
根据论文方法整理的本地脱敏伪代码
输入:院内病历文本、语言配置、可选患者/照护者元数据
windows ← split(text, max_tokens=512, overlap=64)
boundary_logits, label_logits ← compact_transformer(windows)
spans ← merge_overlapping_window_predictions(boundary_logits, label_logits)
spans ← heal_incomplete_formats_and_join_adjacent_detections(spans, text)
spans ← inject_known_names_as_extra_detections(spans, metadata)
metrics ← evaluate_character_recall_and_non_PII_redaction(spans, gold_if_available)
output ← replace_names_and_ids(spans)
output ← shift_dates_per_patient_and_reduce_age_granularity(output)
返回:脱敏文本、结构化字符区间、评测记录与版本信息
伪代码中最关键的不是某一行神奇算法,而是每个阶段都留下结构化记录:原始文本、字符区间、标签、后处理动作、替换结果和版本都能追踪。对医院来说,这比“把文本扔进黑盒,得到一份看起来干净的结果”更接近真正可审计系统。
五、合成病历为什么能跨场景反超真实单院数据
合成数据不是把几个假姓名随机塞进模板。论文先用Synthea构造结构化临床场景,再从比利时荷兰语或英美区域资源中采样姓名、地址、机构和日期等合成PII。生成模型把紧凑病例和指定PII写成临床笔记,同时用明确标记圈出PII;标记在本地删除,字符偏移被精确保留下来。确定性生成器还会专门补充困难格式。
在300份真实医院病历上,真实数据模型仍然更强:98.9%对96.1%。但到了100份基层医疗病历,排名反转为90.3%对87.0%。论文给出的解释很有说服力:单院真实数据除了教会模型“什么是PII”,还会顺带教会它该院常见的日期范围、缩写、模板和姓名写法;合成数据若主动扩大格式变化,反而可能少绑定一些机构习惯。
但反转不能写成“合成数据全面胜过真实数据”。在已检测跨度的类别判断上,医院模型在医院和基层病历分别达到98.9%与89.8%,合成模型只有92.6%与79.3%。它更善于在新场景里先把可疑字符抓住,却更容易把日期、姓名、机构等类型分错。若下游只是统一遮盖,影响可能有限;若不同类别触发不同伪名化规则,标签错误就会变成实际风险。
图3|格式与取值扰动稳定性。橙色为医院真实数据模型,蓝色为合成数据模型;圆点表示各扰动单元的召回损失,菱形表示汇总。合成模型平均正向损失1.25个百分点,医院模型为2.96个百分点;医院模型最坏单项下降19.23个百分点,合成模型最坏下降4.56个百分点。来源:论文Figure 2,CC BY 4.0。
扰动实验进一步支持这个判断。研究把姓名来源、大小写、姓名格式、日期格式、日期取值和年龄格式逐项替换。换一批姓名本身没有造成经校正后的显著下降,真正危险的是格式和时间分布。医院模型在某个患者姓名格式扰动上最坏下降19.23个百分点,合成模型所有设置里的最坏下降为4.56个百分点;把日期年份推向更早时期,也会让医院模型明显退化。
六、98.9%到底靠不靠谱:实验设计里有哪些硬证据
医院数据共4770份,4470份用于开发,300份在训练前单独保留为测试。测试集由两名受过统一规范训练的医师独立标注,再通过顺序复核和共识解决分歧,最终形成4269条PII标注。测试集没有参与模型选择;确定训练轮数后,模型从底座重新初始化,用全部开发数据固定重训17轮,再只评测一次。
医院模型核心PII召回98.9%,95%置信区间98.5%到99.3%;非PII误删0.24%,区间0.16%到0.32%。两位标注者对最终共识标准的描述性召回分别是98.8%和98.5%,误删率0.17%和0.36%。论文很克制地强调:因为两位标注者参与构建了金标准,这不能证明模型优于或等同于医生,只能说模型落在该基准观察到的标注者范围内。
与外部方法相比,升级版Belgian DEDUCE为88.0%,既有荷兰语神经模型deidentify为86.4%,本地Qwen3-8B为84.2%,GLiNER-PII为76.6%,原始DEDUCE为75.9%。这些系统都经过统一字符区间、后处理和评测接口,减少了“各报各指标”的不可比问题。
七、英文结果很高,但不能被包装成“跨语言临床验证”
MedDeID还训练了独立英语模型,底座换成RoBERTa-base,训练数据为6700份合成英语临床文档,英式与美式各3350份。它不是把荷兰语模型迁移到英语,而是复用同一套schema、训练、后处理和评测工作流,重新训练一个语言实例。
在Technetium-I的74700份合成测试病历、116万余条标注上,字符召回99.730%;在ASQ-PHI的1051条对抗式查询上,召回98.9%。ASQ-PHI没有把90岁以下显式年龄标成PHI,因此MedDeID主动识别年龄会被算成误删;统一排除这部分字符后,其非PII误删为0.89%,仅次于OBI RoBERTa i2b2的0.55%。
这证明的是工作流可以迁移到英语,不是英语临床系统已经验证完成。两个外部英语基准仍是合成数据,没有真实英语病历、真实机构差异或临床上线证据。论文自己把这条边界写得很清楚,公众号也不该替它越线。
八、伪名化不是收尾美化,而是第二个风险面
检测到日期之后,系统仍可能出错。模型只抓到“3月14日”却漏掉年份,原文就残留信息;把“2023年5月”强行替换成某一天,又会制造不存在的精度。MedDeID先补全规则格式,再用患者级统一偏移保存事件间隔;粗粒度日期按区间移动,只有跨边界时才扩大表达。
论文用固定371天偏移单独测试转换层。直接给真实标注跨度时,合成文本失败0%,医院文本失败0.8%,基层文本失败3.0%;换成模型预测跨度后,端到端失败升到1.5%、3.4%和6.0%,仍有0.7%、2.2%和2.4%的目标跨度留下至少一个未遮盖原字符。基层病历中,年龄或出生日期的端到端失败达到16.28%,提醒读者:总召回很高,不代表每种后续变换都同样稳。
日期平移也不等于匿名。医院4770份病历中,91.4%创建于周一至周五;攻击者可利用星期、节假日和密集纵向记录缩小偏移范围。论文建议在可行时使用超过一年的患者级或住院级正负偏移,并把可逆映射单独保管。保留星期一致性只是效用选择,不是隐私保证。
九、本地部署的价值,最终要落到速度和治理
同一批300份医院病历,在NVIDIA T4上,医院模型处理18.38秒,本地Qwen3-8B需要11411.46秒,也就是约3小时10分钟,墙钟时间相差621倍。医院模型只用4核CPU也能在320.31秒内完成,约5.3分钟;规则系统Belgian DEDUCE更快,只需17.90秒,但召回明显较低。
图4|300份医院病历上的核心PII召回与总处理时间,横轴为对数尺度;蓝色和橙色分别代表CPU与GPU。紧凑MedDeID模型位于高召回、低耗时区域,本地Qwen3-8B在该配置下更慢且召回更低。不同部署优化会改变绝对时间,但不会改变本实验的实测排序。来源:论文Figure 3,CC BY 4.0。
这组结果不是在说大模型永远不适合脱敏。大模型可能通过更强提示、更新版本或特定任务微调提高表现;论文中的Qwen只做了刻意克制的提示工程。但对医院来说,模型能力之外还有四笔账:显存和服务器、推理时延、日志与权限、数据是否跨域。一个更小但可离线、可锁版本、可批量复核的模型,往往更符合真实采购与合规约束。
官方套件把组件拆开:核心schema与标签、语言配置、推理、数据准备、人工标注、训练、评测分别版本化。普通用户只安装推理包;要做院内适配时,再加入数据和训练组件。项目以AGPL-3.0-only开放代码,模型与数据则分别遵循其资产卡和版本锁记录的条款。公开合成模型是启动基线,不是拿来直接处理真实病历的安全认证。
十、放回历史路线:DEDUCE、Philter与MedDeID分别补了哪一环
第一条路线是DEDUCE。这篇2017年发表的荷兰语工作用模式匹配、词表和规则做自动脱敏,优势是CPU友好、行为直观、机构容易检查;短板是规则天然绑定语言和本地书写习惯。MedDeID本次在统一医院基准上测得原始DEDUCE召回75.9%,加入比利时资源和修正规则的Belgian DEDUCE达到88.0%,说明规则仍然有价值,但跨院维护成本不会自动消失。
第二条路线是Philter。这项2020年的英语开源系统强调可定制规则与大规模真实部署,后续在加州大学旧金山分校经过外部审计,用于超过1.3亿份病历、275万名患者和600多名研究者。Philter证明了“开放、可审计、能进入机构流程”的脱敏系统会释放多大数据价值;但它主要服务英语和HIPAA语境,不能直接解决荷兰语、GDPR和跨语言资源稀缺问题。
MedDeID补的是第三环:以紧凑神经模型提升跨格式覆盖,用合成数据绕开真实病历不可共享,用统一字符契约把标注、模型、后处理、伪名化和评测连起来。它不是简单取代规则,而是把规则放到边界修复、元数据和语言配置层;也不是用大模型替代全部组件,而是把生成模型限制在不含真实患者数据的合成语料阶段。
三篇工作连起来看,路线很清楚:DEDUCE回答“能否用本地规则开始做”;Philter回答“能否经过审计并扩大到真实机构规模”;MedDeID回答“在非英语和数据不能共享的情况下,能否用合成训练与紧凑模型形成完整、可版本化的院内闭环”。
十一、如果医院真要落地,建议按五道闸推进
第一,先明确用途和攻击面。是给受控研究环境准备数据,还是要跨机构共享?是否需要保留日期间隔、年龄细度和可逆映射?用途不同,允许的残余风险与人工复核比例也不同。
第二,用公开合成模型做冷启动,不把公开分数当验收。先在不含真实患者信息的样例上验证格式、接口和日志,再在院内构建小而有代表性的金标准。科室、文书类型、年份、模板和少数群体写法都要覆盖。
第三,同时看召回、误删和标签。隐私团队关心漏检,研究团队关心误删,伪名化模块关心类别。三者不能由一个总体F1代替。尤其要单独检查日期、出生日期、照护者姓名和机构等会触发不同替换逻辑的类别。
第四,做分布扰动与时间回放。把大小写、首字母、旧年份、缩写、模板变化和跨科室文本主动加入测试。论文已经展示日期取值变化会伤害医院模型;上线后还要持续监测新年份和新文书系统带来的漂移。
第五,把系统当治理设施,而不是一次模型采购。模型、语言包、规则、训练集、评测集和偏移策略都应有版本;高风险批次保留人工抽检与事件响应;原始文本、模型权重和可逆偏移映射要分权管理。
十二、这篇论文最需要保留的边界
第一,真实临床验证仍然集中在一家荷兰语大学医院和一家基层诊所。300份医院测试病历经过双人独立标注与仲裁,质量较高,但规模仍不足以代表所有科室、地区和书写习惯;100份基层病历只有一位医师标注。
第二,医院模型与真实病历都不能公开,外部研究者只能复现合成路线与公开基准。公开资源提高了流程透明度,却不能让第三方完整重做98.9%的真实医院结果。医院模型也没有经过多机构前瞻部署,完整工作流的可移植性仍待真实采用证明。
第三,合成模型的跨场景召回更高,不代表其输出更适合所有下游。它在类别赋值、基层非PII误删和伪名化端到端失败上仍有明显代价。最合理的结论不是“合成取代真实”,而是用合成多样性做启动与抗漂移,再用少量院内高质量标注校准关键类别。
第四,核心PII召回不是再识别概率。攻击者可能利用日期规律、罕见事件和外部信息重新关联患者;脱敏只是数据最小化与风险控制的一层,不能替代访问控制、审计、用途限制和法律治理。
龙哥点评:最强的不是98.9%,而是它没有把治理问题甩给模型
龙哥觉得,这篇工作最成熟的地方,是它没有用一个榜单数字掩盖医院真正要承担的责任。作者同时报告漏检、误删、类别、扰动、伪名化失败、CPU/GPU时间和数据公开边界;还明确承认英语结果只来自合成基准、医师比较不是独立公平的人机对决。
从工程角度看,MedDeID也给出了一个很现实的答案:医疗AI不一定要追逐最大模型。对明确、稳定、可字符级评测的任务,紧凑模型加规则、元数据和版本化契约,可能比通用大模型更快、更便宜、更容易审计。大模型最合适的位置,反而可能是生成不含真实患者信息的多样化训练样例,而不是直接读取每一份敏感病历。
但这项工作的下一步不能只是再加几种语言。真正的门槛是:不同医院能否用相同协议建立小规模可靠金标准,合成模型能否在少量真实数据下提升标签 fidelity,伪名化后的数据能否继续支持具体研究任务,同时把再识别风险控制在制度可接受范围内。技术链已经搭起来,临床治理闭环才刚开始。
龙迷三问
第一问:为什么基层病历上合成模型召回更高,却不直接采用它?
因为它同时有更高的非PII误删和更低的标签准确率。真正部署应比较具体用途:只做粗遮盖、做可逆伪名化、还是服务时间序列研究,最优模型可能不同。
第二问:98.9%是否足够无人复核?
不能这样推断。召回是字符级总体指标,少数高风险类别、格式和科室可能显著更差;论文的日期扰动与年龄转换结果已经证明总体高分会隐藏局部薄弱点。
第三问:这套方法对中文病历有直接结论吗?
没有。中文姓名、地址、时间表达、混合英文缩写和医院模板都不同。可迁移的是统一schema、字符评测、合成冷启动和本地治理思路,不是荷兰语模型权重或当前分数。
主要参考资料
MedDeID论文与补充材料
https://arxiv.org/abs/2609.10049
MedDeID官方文档
https://stighellemans.github.io/meddeid/
Philter论文
https://doi.org/10.1038/s41746-020-0258-y
DEDUCE论文
https://doi.org/10.1016/j.tele.2017.08.002
本文基于龙哥读论文PaperDaily数据库及PaperMiner的MCP进行汇总整理。
本文仅作论文解读与技术讨论,不构成医疗、法律或数据治理建议。核心指标来自论文所述数据与评测协议;真实临床部署必须在本机构代表性数据上重新验证,并结合人工复核、访问控制、审计和事件响应。论文图1至图4依据arXiv页面标注的CC BY 4.0许可转载与转换,权利归原作者。