一行代码,将临床文本转化为结构化洞见。
实体抽取、PII 去标识化,以及 1,000+ 个完全运行在你自己硬件上的专业医疗模型——从 Python 的一行调用,
到由 Apple MLX 驱动的 iPhone 原生 Swift 应用。无需云端,无供应商锁定,患者数据绝不离开你的网络。
1,000+ 模型 · 12 种语言 · 247 个 PII 检查点 · 100% 本地运行 · Apache-2.0
English · 简体中文 · Español · Français · Deutsch · Italiano · Português · Nederlands · العربية · हिन्दी · తెలుగు · 日本語 · Türkçe · فارسی
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:<12} {entity.text:<28} {entity.confidence:.2f}")
# DISEASE chronic myeloid leukemia 0.98
# DRUG imatinib 0.95一个最先进的临床 NER 模型在本地运行——无需 API 密钥,无网络调用。
| OpenMed | 云端医疗 API | |
|---|---|---|
| 在你的设备/服务器上运行 | ✅ | ❌ |
| 患者数据离开你的网络 | 从不 | 发送给供应商 |
| 成本 | 免费且开源 | 按调用计费 |
| 专业医疗模型 | 1,000+ | 有限 |
| 语言 | 12+ | 不一 |
| 离线 / 隔离网络(air-gapped) | ✅ | ❌ |
| Apple Silicon (MLX) 加速 | ✅ | 不适用 |
| 原生 iOS / macOS 应用 | ✅ 通过 OpenMedKit | ❌ |
| 供应商锁定 | 无 — Apache-2.0 | 有 |
- 专业模型 — 1,000+ 个精选的生物医学与临床模型,其中许多性能超越商业专有方案。
- 符合 HIPAA 的去标识化 — 覆盖全部 18 项 Safe Harbor 标识符,智能实体合并,保留格式的伪造替换。
- 随处运行 — CPU、CUDA、Apple Silicon (MLX),并可通过 OpenMedKit 原生运行于 iOS/macOS 应用。
- 一行部署 — Python API、Docker 化的 REST 服务,或批处理流水线。
- 零锁定 — Apache-2.0,你的基础设施,你的数据。
OpenMed 专为在你数据所在之处运行而打造。在 Apple 硬件上,它借助 MLX 加速,并通过 OpenMedKit 直接进入 iPhone、iPad 和 Mac 应用——因此 PII 检测与临床抽取完全离线、 在设备本地完成。
// Add OpenMedKit to your app
dependencies: [
.package(url: "https://github.com/maziyarpanahi/openmed.git", from: "1.5.5"),
]- MLX 运行时,用于 PII token 分类、Privacy Filter 系列,以及实验性的 GLiNER 系列 zero-shot 任务——并提供 CoreML 回退路径。
- 一个模型名,所有平台 — 在非 Apple 硬件上,MLX 模型名会自动回退到对应的 PyTorch 检查点。
- Apple Silicon 上的 Python 同样支持:
pip install "openmed[mlx]"。
指南:MLX 后端 · OpenMedKit (Swift) · CoreML 导出
flowchart LR
A["临床文本"] --> B["OpenMed<br/>(100% 本地)"]
B --> C["医疗实体"]
B --> D["检测到的 PII"]
B --> E["去标识化文本"]
style B fill:#0D6E6E,stroke:#0A5656,stroke-width:2px,color:#ffffff
style C fill:#D6EBEB,stroke:#0D6E6E,color:#0E1116
style D fill:#F7DCD8,stroke:#C5453A,color:#0E1116
style E fill:#F5E27A,stroke:#A9A088,color:#0E1116
# Core + Hugging Face runtime (Linux, macOS, Windows; CPU or CUDA)
pip install "openmed[hf]"
# Add the REST service
pip install "openmed[hf,service]"
# Apple Silicon acceleration (MLX)
pip install "openmed[mlx]"|
Python API from openmed import analyze_text
analyze_text(
"Patient received 75mg "
"clopidogrel for NSTEMI.",
model_name=
"pharma_detection_superclinical",
) |
REST 服务 uvicorn openmed.service.app:app \
--host 0.0.0.0 --port 8080
|
批处理 from openmed import BatchProcessor
p = BatchProcessor(
model_name=
"disease_detection_superclinical",
group_entities=True,
)
p.process_texts([...]) |
离线 / 隔离网络? 只需将 model_name(或 model_id)指向本地目录,OpenMed 即会在本地加载,而不会连接 Hugging Face Hub:
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"),
)精选的专业医疗 NER 模型注册表——浏览完整目录。
| 模型 | 专长 | 实体类型 | 大小 |
|---|---|---|---|
disease_detection_superclinical |
疾病与病症 | DISEASE, CONDITION, DIAGNOSIS | 434M |
pharma_detection_superclinical |
药物与用药 | DRUG, MEDICATION, TREATMENT | 434M |
pii_superclinical_large |
PII 与去标识化 | NAME, DATE, SSN, PHONE, EMAIL, ADDRESS | 434M |
anatomy_detection_electramed |
解剖与身体部位 | ANATOMY, ORGAN, BODY_PART | 109M |
gene_detection_genecorpus |
基因与蛋白质 | GENE, PROTEIN | 109M |
from openmed import extract_pii, deidentify
text = "Patient: John Doe, DOB: 01/15/1970, SSN: 123-45-6789"
# Extract PII with smart merging (prevents tokenization fragmentation)
result = extract_pii(text, model_name="pii_superclinical_large", use_smart_merging=True)
# De-identify with the method you need
deidentify(text, method="mask") # [NAME], [DATE]
deidentify(text, method="replace") # Faker-backed, locale-aware, format-preserving fakes
deidentify(text, method="hash") # Cryptographic hashing
deidentify(text, method="shift_dates", date_shift_days=180)- 智能实体合并让
01/15/1970保持完整,而不会被拆分。 - 基于 Faker 的混淆,内置自定义临床证件号 provider(CPF、CNPJ、BSN、NIR、Codice Fiscale、NIE、Aadhaar、Steuer-ID、NPI)。
- HIPAA:覆盖全部 18 项 Safe Harbor 标识符,可配置置信度阈值。
完整 PII 笔记本 · 智能合并 · 匿名化
Privacy Filter 系列 — 基于 OpenAI Privacy Filter 架构的三个模型系列
模型代码相同(gpt-oss 风格的稀疏 MoE Transformer,带局部注意力、sink token、RoPE+YaRN、tiktoken o200k_base 分词),仅训练数据不同。它们都通过同一套 extract_pii() / deidentify() API 调用——只需更改 model_name= 参数。
| 变体 | PyTorch (CPU + CUDA) | MLX (Apple Silicon) | MLX 8-bit |
|---|---|---|---|
| OpenAI Privacy Filter | openai/privacy-filter |
OpenMed/privacy-filter-mlx |
…-mlx-8bit |
| Nemotron-PII fine-tune | OpenMed/privacy-filter-nemotron |
…-nemotron-mlx |
…-nemotron-mlx-8bit |
| OpenMed Multilingual | OpenMed/privacy-filter-multilingual |
…-multilingual-mlx |
…-multilingual-mlx-8bit |
from openmed import extract_pii
text = "Patient Sarah Connor (DOB: 03/15/1985) at MRN 4471882."
extract_pii(text, model_name="openai/privacy-filter") # PyTorch baseline
extract_pii(text, model_name="OpenMed/privacy-filter-nemotron") # same code, different weights
extract_pii(text, model_name="OpenMed/privacy-filter-mlx") # Apple Silicon (MLX)在非 Apple Silicon 主机上,MLX 模型名会自动替换为对应的 PyTorch 检查点(并给出一次性警告)——写一个模型名,随处运行。参见 Privacy Filter 架构与后端路由。
在 en、fr、de、it、es、nl、hi、te、pt、ar、ja 和 tr 等语言上进行抽取与去标识化——共 247 个 PII 检查点。
python -c "from openmed import extract_pii; print([(e.label, e.text) for e in extract_pii('Dr. Pedro Almeida, CPF: 123.456.789-09, email: pedro@hospital.pt', lang='pt').entities])"查看各语言示例(葡萄牙语、荷兰语、印地语、阿拉伯语、日语、土耳其语)
from openmed import extract_pii
portuguese = extract_pii("Paciente: Pedro Almeida, CPF: 123.456.789-09, telefone: +351 912 345 678", lang="pt", use_smart_merging=True)
dutch = extract_pii("Patiënt: Eva de Vries, BSN: 123456782, telefoon: +31 6 12345678", lang="nl", use_smart_merging=True)
hindi = extract_pii("रोगी: अनीता शर्मा, फोन: +91 9876543210, पता: नई दिल्ली 110001", lang="hi", use_smart_merging=True)
arabic = extract_pii("المريضة ليلى حسن، الهاتف +20 10 1234 5678، الرقم القومي 29801011234567.", lang="ar", use_smart_merging=True)
japanese = extract_pii("患者 佐藤 花子、電話 +81 90 1234 5678、マイナンバー 1234 5678 9012.", lang="ja", use_smart_merging=True)
turkish = extract_pii("Hasta Ayşe Yılmaz, telefon +90 532 123 45 67, TCKN 10000000146.", lang="tr", use_smart_merging=True)
for r in (portuguese, dutch, hindi, arabic, japanese, turkish):
print([(e.label, e.text) for e in r.entities])一个对 Docker 友好的 FastAPI 服务,具备请求校验、共享流水线预加载,以及统一的错误响应封装。
pip install "openmed[hf,service]"
uvicorn openmed.service.app:app --host 0.0.0.0 --port 8080
# or with Docker
docker build -t openmed:1.5.5 .
docker run --rm -p 8080:8080 -e OPENMED_PROFILE=prod openmed:1.5.5curl -X POST http://127.0.0.1:8080/pii/extract \
-H "Content-Type: application/json" \
-d '{"text":"Paciente: Maria Garcia, DNI: 12345678Z","lang":"es"}'参见完整的 REST 服务指南。
完整指南见 openmed.life/docs。
| 快速入门 | 文本分析 | 模型注册表 |
| PII 检测指南 | 匿名化 | 批处理 |
| 配置档案 | REST 服务 | MLX 后端 |
OpenMed 的守护者是一只蓬松的波斯猫,化身为小小的阿维森纳(伊本·西那,Avicenna / Ibn Sina)——这位伟大的 波斯医师所著的《医典》(Canon of Medicine)在约 600 年间一直是全世界的标准医学教科书。它守护着翻开的 医学知识之书,配色取自波斯绿松石(fīrūza):一位守护你最私密数据的本地优先卫士。
欢迎贡献——bug 报告、功能请求和 PR 都欢迎。
- 提交 issue
- 欢迎翻译 — 帮助完善顶部语言切换栏中链接的其他语言 README。
OpenMed 建立在优秀的开源工作之上——特别感谢 OpenAI(Privacy Filter 架构)、NVIDIA(Nemotron PII 数据集)、Hugging Face(transformers 及模型生态)、Apple(MLX),以及 Faker 的维护者。
基于 Apache-2.0 许可证 发布。
如果 OpenMed 对你的研究有帮助,请引用:
@misc{panahi2025openmedneropensourcedomainadapted,
title={OpenMed NER: Open-Source, Domain-Adapted State-of-the-Art Transformers for Biomedical NER Across 12 Public Datasets},
author={Maziyar Panahi},
year={2025},
eprint={2508.01630},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2508.01630},
}如果 OpenMed 对你有帮助,点个 star 能帮助更多人发现它。
由 OpenMed 团队打造
网站 · 文档 · X / Twitter · LinkedIn
