曹凯:保障医疗数据安全——本地LLM驱动的自动化ETL实践

发布时间:2025-07-09
浏览次数:

研究背景及思路

  在医疗数据处理领域,数据安全与隐私保护具有最高优先级。在此背景下,本文提出一种本地大模型驱动的自动化ETL方案,实现数据全流程零出域。

  本方案的使用场景是:在上万例非结构化数据为主的检查报告单中,针对医生关心的若干字段进行批量抽取并汇总,完成结构化预处理,并且为规避数据传输过程中的泄露风险,检查报告单始终要在内网数据源(例如:医院内网数据库服务器)。

  笔者的思路是借助大模型零样本学习(Zero-Shot Learning),只将Prompt输入给本地大模型,本地大模型将结果回传数据源后,自动批量生成结果。需要注意的是,医生提出的一些问题字段在检查报告单中没有与之完全匹配的描述,拿“血流信号”这个字段举例,医生要求的结构化输出编码是:无=1,有/可/少=2,丰富/多=3,但真实的报告单中,存在大量诸如:“有少量血流回声”、“少许”、“较丰富”、“少量血流信号”、“内部大量血管回声”与“无明显血流信号”等描述,笔者尝试在提示词工程和数据清洗的双重锚定下,通过大模型的语义匹配和推理能力完成了这项任务。

1.jpg

图1 本地LLM驱动的自动化ETL工作拓扑

首先将医生问题(本方案共计35个问题,即35个字段)进行JSON编码(json_encode),与抽取并清洗后的检查报告单内容组合成Prompt,在提示词工程中进行大量试错调优后,将效果最佳的Prompt借助OpenAI接口输入大模型,大模型将结果回传本地数据源,再次清洗后由程序完成批量汇总。整体设计特点有以下三方面。

安全可靠:医院本地高性能数据中心部署开源大模型,医疗数据不需要以附件或知识库形式上传大模型,全流程只有Prompt输入给本地大模型,数据始终在本地数据源,保障医疗数据安全。自研Python ETL工作流代码,支持代码审计与自定义安全策略嵌入,规避黑箱风险。

提示词工程与数据清洗:通过提示词工程与数据清洗,将医生问题与医疗数据分别进行JSON编译整合,利用SGLang框架构建的本地LLM处理链,大模型负责JSON文本编码并输出,Python同步解码(json_decode)输出到本地数据源完成汇总。MIT相关论文(Jia He, Mukund Rungta, David Koleczek,et al. Does Prompt Formatting Have Any Impact on LLM Performance?[DB/OL]. arXiv preprint: 2411.10541v1,2024)结果表明:在MMLU相关的推理任务中,JSON格式比Markdown格式的准确率高出42%,这一差异在需要逻辑分解和多步推理的任务中尤为明显,自然语言格式Prompt测试结果普遍较差(该论文是在英文环境下得出的结论,仅作参考)。

可复用性:本方案借助Python库/模块、数据清洗逻辑、标准化接口、提示词工程和本地算力资源等进行设计,为非结构化医疗数据预处理场景提供安全高效的解决方案。其它相近领域的需求,可以通过调整数据清洗逻辑和Prompt工程继续使用。

2.jpg

图2 源码逻辑

实现过程

1.本地LLM部署

山东大学齐鲁医院积极响应国家大力推动的“AI+医疗”深度融合政策,加快推动AI大模型与医疗领域的融合创新,于2025年2月发布基于DeepSeek R1的LLM通用模型底座,该模型底座充分利用本地算力资源,部署671B、70B和32B三种参数的本地DeepSeek大模型。DeepSeek-R1深入融合医院本地知识库,这包括但不限于医院内部的专业术语、诊疗规范、患者病历信息等,使得模型能够更加贴合医院的实际需求,提供更加精准、个性化的服务。

3.jpg

图3 基于本地LLM的AI平台拓扑(本文在红框内开发)

2.提示词工程与数据本地抽取

数据本地抽取依赖openpyxl以及JSON等Python库,提示词工程将模型输出强制限定在预定义框架内,通过Token级控制减少语义漂移。经过实际对比分析,发现此方法能够有效降低大模型幻觉(AI hallucinations)。

4.jpg

图4 数据抽取(节选)

5.jpg

图5 提示词工程(节选)

6.jpg

图6 提示词工程(脱敏后节选)

3.大模型接口调用与数据本地转换

数据本地转换的核心是数据清洗,主要方法包括:正则表达式(re)、数据范围约束、医学术语标准化和缺失值插补/标记等。需要考虑的主要问题是字段缺失值、不一致格式(日期/单位)、拼写错误、非标准化术语、重复记录和无关信息等。例如:为区别医生在某个字段涉及内容中明确的诊断描述“无”和源文档没有任何描述的“无”,在JSON中缺失值用N/A或特定值(如“未描述”)明确标记。

数据本地转换是一个涉及评估、深度清洗(正则、数据标准化、数据映射等)、结构化转换和严格验证的流程,借助Python pandas+re+JSON‌+NumPy的技术组合,最终生成准确、一致、安全且结构良好的JSON数据,为后续分析、交换和系统集成奠定坚实基础。

7.jpg

图7 本地LLM API调用(节选)

8.jpg

图8 数据清洗(节选)

4.处理流程及数据本地批量汇总

数据本地加载是整个方案的最后一环,其工作原理是:接收数据清洗后的大模型JSON 输出,通过结构化转换并存储在DataFrame,并将DataFrame批量且精准地写入汇总结果,解决了大模型(LLM)输出结果非结构化以及需人工整理归档等问题。

9.jpg

图9 处理流程(节选)

10.jpg

图10 本地批量加载(节选)

效果展示

该方案通过auto_py_to_exe生成EXE可执行文件供临床使用(后期容器封装),处理一篇检查报告全流程耗时约45秒。因结果含敏感信息,在此不进行过多细节展示。

11.jpg

图11 运行过程(节选)

12.jpg

图12 运行结果(脱敏后节选,红色字段代表未成功推理)

不足之处

该方案依旧是对DeepSeek-R1-Distill-Llama-70B BF16模型的“修修补补”:未涉及模型训练/微调范畴、数据清洗逻辑简单、显卡调用机制仍需优化、并发性能不足、准确率有待提高、文本解析鲁棒性较差、提示词工程调试周期冗长以及欠缺足够的对比数据等,这些都需要进一步完善。对大模型技术的应用落地需要做到经验论和唯理论的平衡。

写在最后

本文提出了一种安全可靠的医疗领域非结构化数据分析处理方案,在处理速度以及准确率方面,是达到应用场景数据预处理要求的,对非结构化数据的预处理提供了一种思路。

临床对于数据提取的准确率要求是越来越高的,可以借助本方案的数据预处理过程,逐步完善医院未来训练数据集,以此完成数据治理所需高质量数据的积累,为后续的模型微调提供数据基础。

未来的思路

笔者核心工作是山东大学齐鲁医院数据中心管理/硬件架构设计与维护等,做此事的初衷是想为临床做些有意义的事情。日常工作繁重所以只能利用工作之余的碎片时间边学边做,因此大模型知识掌握的零散且粗浅,如有不当之处请各位业内权威批评指正。

当前业内很多公司在做医疗数据处理方面的工作,方案大多非常成熟,作为院方工程师做这类事情是否有意义,笔者是这样认为的:大模型时代,数据作为医疗数字化的核心命脉,医院信息工程师既要充当医疗数据的守门人,筑牢合规防线,严格规避医疗数据泄露,更要成为临床与AI技术的关键桥梁,这些都需要知识积累。

最后,表达一下个人对大模型技术在医疗领域中的愿景:大模型技术需“丝滑”地接入各个医疗业务系统,达到“空山不见人,但闻人语响”的境界—似无影灯下的无声守护,似病房走廊里的流转微光,似电子病历上的字节轻涌,似科研征途中的静谧灯塔。让医信人做好临床与大模型之间的Prompt,一起用AI守护生命之光。

作者简介

曹凯,山东大学齐鲁医院信息网络中心工程师,主要工作领域为数据中心架构设计与维护。从业资质:红帽认证工程师(RHCE)、多媒体应用设计师、Harmony OS应用开发者认证、CISP注册信息安全工程师、Nutanix NCP认证工程师、Veeam VMCE认证工程师等。