章节 01
导读 / 主楼:利用大语言模型从医疗文本中提取结构化数据:英国分流注册表自动化实践
UCLH团队开源了一套基于LLM的医学数据提取工具,可将非结构化的患者病历自动转换为UK Shunt Registry所需的结构化数据,支持OpenAI、Ollama和Hugging Face多种后端。
正文
UCLH团队开源了一套基于LLM的医学数据提取工具,可将非结构化的患者病历自动转换为UK Shunt Registry所需的结构化数据,支持OpenAI、Ollama和Hugging Face多种后端。
章节 01
UCLH团队开源了一套基于LLM的医学数据提取工具,可将非结构化的患者病历自动转换为UK Shunt Registry所需的结构化数据,支持OpenAI、Ollama和Hugging Face多种后端。
章节 02
git clone cd shunt-registry-llm-data-extraction python -m venv venv source venv/bin/activate pip install -r requirements.txt
cp .env.example .env
python src/process_data.py
python src/question_runner.py q1 python src/question_runner.py q1 q4 q8 python src/question_runner.py all
python src/evaluate_results.py ```\n\n## 实践意义与展望\n\n这个项目的价值不仅在于解决了UK Shunt Registry的具体需求,更展示了一种通用的医疗数据提取范式。其设计理念可以推广到其他医学注册表、临床研究和电子病历分析场景。\n\n对于医疗机构而言,这意味着:\n\n- 显著降低数据录入成本:自动化处理大量病历,减少人工工作量\n- 提高数据一致性:标准化的提取流程减少人为差异\n- 支持质量监控:通过与金标准对比,持续评估和改进提取准确性\n\n对于AI研究者,这是一个将LLM应用于垂直领域的优秀范例——不是简单地调用API,而是围绕实际业务需求构建完整的工程化解决方案,包括数据预处理、提示工程、结果评估和离线部署支持。\n\n## 结语\n\n随着大语言模型能力的不断提升,我们有理由相信,医疗数据的自动化处理将迎来新的突破。UCLH团队的这套开源工具,为同行提供了一个坚实的起点。无论是想要快速搭建原型,还是需要在严格合规的环境中部署,这个项目都值得参考和借鉴。
章节 03
背景:医学数据数字化的痛点\n\n在现代医学研究和临床管理中,患者数据往往分散在各种非结构化的文本记录中——出院小结、手术记录、门诊笔记等。这些数据蕴含着宝贵的临床信息,但要将其转化为可供分析的结构化数据,传统方法依赖人工录入,既耗时又容易出错。\n\n英国分流注册表(UK Shunt Registry,简称UKSR)就是一个典型案例。这是一个全国性的神经外科数据库,用于追踪脑脊液分流术患者的治疗和预后情况。要从海量的病历文本中提取关键字段并填入注册表,一直是困扰数据管理员的难题。\n\n项目概述:LLM驱动的数据提取方案\n\n伦敦大学学院医院(UCLH)临床研究中心开源的这套工具,巧妙地利用大语言模型(LLM)的能力,实现了从医疗文本到结构化数据的自动化转换。该项目的核心思想是:让AI阅读病历,按照预定义的问题提取关键信息,并以标准化的格式输出。\n\n这套系统的设计充分考虑了医疗环境的实际需求:\n\n- 多后端支持:兼容OpenAI API、本地Ollama部署以及Hugging Face模型,适应从云端到完全离线(air-gapped)的各种场景\n- 模块化架构:问题定义、提示词模板、模型调用完全解耦,便于扩展和维护\n- 可评估性:内置与"金标准"数据对比的功能,便于验证提取准确性\n\n技术实现细节\n\n数据预处理流程\n\n系统的输入是来自CogStack Catalogue的患者病历导出文件(CSV格式)。process_data.py脚本负责将长格式的笔记数据转换为宽格式——每个患者(以MRN病历号标识)一行,不同类型的笔记(出院小结、手术记录等)分别存放在不同列中。同时,该脚本会将人工标注的"参考答案"(gold standard)合并进来,为后续评估做准备。\n\n问题注册与提示工程\n\n项目的核心设计是"问题注册表"(Question Registry)。每个需要提取的字段都对应一个注册的问题,包含:\n\n1. 允许的答案列表:定义该字段的有效取值范围,用于约束模型输出\n2. 提示词模板:存放在prompts/目录下,针对每个问题单独设计\n3. 模型选项:可为不同问题指定不同的模型参数\n\n这种设计使得添加新问题变得非常简单:只需更新registry_options.py定义选项、创建提示词文件、在questions.py中注册即可,无需修改其他代码。\n\n模型调用与输出解析\n\nllm_client.py提供了统一的接口,封装了对OpenAI、Ollama和Hugging Face三种后端的调用。系统期望模型以JSON格式返回结果,包含一个answer字段。extract_with_llm函数负责调用模型并解析输出,最终存储的预测值可以与人工标注的标准答案进行对比。\n\n离线环境的特殊考量\n\n医疗数据往往涉及敏感信息,很多机构要求在完全隔离的环境中处理。项目文档详细说明了如何在UCLH的TRE(Trusted Research Environment)等离线环境中部署:\n\n1. 在有网络连接的机器上下载Ollama模型\n2. 将模型文件(通常位于~/.ollama/models)通过安全通道传入隔离环境\n3. 在隔离环境中配置Ollama服务并加载模型\n\n使用方法\n\n部署这套系统只需几个步骤:\n\n```bash
章节 04
克隆仓库并设置环境 git clone cd shunt-registry-llm-data-extraction python -m venv venv source venv/bin/activate pip install -r requirements.txt 配置环境变量 cp .env.example .env 编辑.env设置模型提供商、模型ID和API密钥 数据预处理 python src/process_data.py