📌 项目地址maziyarpanahi/openmed | ⭐ 1,717 颗星 | 🔧 Python | 📜 未标注

为什么需要这样一个项目

医疗数据是隐私监管最严格的领域之一。当你把病历、诊断记录传给第三方 API 时,数据离开本地网络就意味着合规风险。患者姓名、身份证号、诊断信息……每一项都可能成为泄露的入口。而现有的云端医疗 NLP 服务虽然准确度高,但既不能保证零数据留存,也会形成供应商锁定。

OpenMed 的定位很明确:所有处理都在设备上完成。你可以用一行 Python 代码调用 1000+ 专门的医学模型做实体抽取、PII 去标识化,也支持把模型放到本地目录彻底断网运行。它甚至提供了 Apple MLX 加速,让 iPhone 也能跑。

30 秒体验核心功能

从 README 原文可见,安装后只需要调用 analyze_text

from openmed import analyze_text

result = analyze_text(
    "Patient started on imatinib for chronic myeloid leukemia.",
    model_name="disease_detection_superclinical",
)

for entity in result.entities:
    print(f"{entity.label}: {entity.text}")

这个模型专门做疾病检测,结果会返回实体标签和文本。你不需要配置任何云服务密钥。

安装与运行方式

OpenMed 支持三种安装变体,对应不同场景:

# 核心 + Hugging Face 运行时(Linux, macOS, Windows; CPU 或 CUDA)
pip install "openmed[hf]"

# 加上 REST 服务
pip install "openmed[hf,service]"

# Apple Silicon 加速(MLX)
pip install "openmed[mlx]"

启动 REST 服务后,可以通过 HTTP 调用:

uvicorn openmed.service.app:app 
  --host 0.0.0.0 --port 8080

服务暴露四个端点:GET /healthPOST /analyzePOST /pii/extractPOST /pii/deidentify。其中 /pii/deidentify 能直接在设备上对临床文档进行实时去标识化,替代掉姓名、地址、ID 等敏感信息。

离线/气隙网络运行

如果你需要完全断网运行,可以指定本地路径:

from openmed import OpenMedConfig, analyze_text

result = analyze_text(
    "Patient presents with chronic myeloid leukemia and Type 2 diabetes.",
    model_id="./models/OpenMed-NER-DiseaseDetect-SuperClinical-434M",
    config=OpenMedConfig(device="cpu"),
)

只要把模型文件下载到本地目录,OpenMed 就不会请求任何外部 Hub。这对于医院内部网络隔离环境至关重要。

批量处理与 Swift 移动端

README 中还展示了 BatchProcessor 用法:

from openmed import BatchProcessor

p = BatchProcessor(
  model_name="disease_detection_superclinical",
  group_entities=True,
)
p.process_texts([...])

此外,由于 Apple MLX 的支持,团队正在构建原生 Swift 应用,可以实现手机上离线处理。

与同类工具的对比

特性 AWS Comprehend Medical Google Healthcare API OpenMed
数据是否离开设备 是,发送到云端 是,发送到云端 否,全本地
是否需要云账号 不需要
离线运行 支持
支持的模型数量 有限 有限 1000+ 专用模型
许可证 商业 商业 Apache-2.0

OpenMed 最大的差异就是 本地优先 + 无供应商锁定。这对于需要 HIPAA / GDPR 合规、或组织内部有严格数据驻留政策的场景尤其有价值。

需要注意的事情

  • 模型下载:首次使用会从 Hugging Face 拉取模型(除非指定本地路径)。建议在可访问外网的环境下先预下载。
  • 资源消耗:不同模型大小不同,README 中提到的 OpenMed-NER-DiseaseDetect-SuperClinical-434M 约 434M 参数,在 CPU 上仍然可跑,但 GPU / MLX 会更快。
  • 许可证:Apache-2.0,商业友好,不限制修改与分发。
  • 模型目录:README 中列出了部分模型,完整列表在 openmed.life/docs/model-registry,建议先查阅确认是否有你需要的实体类型(如药物、解剖部位、实验室值等)。

总结

OpenMed 是一个填补空白的项目——它让医疗 NLP 真正可以离线、本地、私有化运行。如果你正在为医院信息系统或医疗研究工具寻找 PII 去标识化能力,或者需要在不传输患者数据的前提下做结构化抽取,那么这个项目值得一试。安装一条命令,跑起来只需要三行代码。

这篇文章对你有帮助吗?

发表回复