资讯动态

OpenMed 本地优先医疗 AI 实战指南:临床 NER 与 PII 去标识化的端侧部署

发布时间:2026/9/19 20:25:33 来源:尧图企业网站定制
OpenMed 本地优先医疗 AI 实战指南临床 NER 与 PII 去标识化的端侧部署【免费下载链接】openmedLocal-first healthcare AI: clinical NER HIPAA PII de-identification that runs 100% on-device. 2,200 medical models, 21 languages, Apple MLX Python, no cloud, no patient data leaving your network. Apache-2.0项目地址: https://gitcode.com/GitHub_Trending/ope/openmedOpenMed 是一个 Apache-2.0 许可的本地优先医疗 AI 工具包它把临床文本的医学实体抽取NER与 PII 检测/去标识化de-identification全部放到你掌控的硬件上执行模型下载、外部适配器等可选网络路径与核心推理严格分离。读完本文你将掌握 OpenMed 的安装方式、analyze_text/extract_pii/deidentify三大核心 API 的完整用法、五种去标识化策略的选型依据以及如何在 Apple MLX、Docker REST 服务和离线内网环境中落地这套流程。项目定位与部署边界OpenMed 的核心理念是你的数据、你的模型、你的硬件。在进入代码之前先明确 SDK 的职责边界这决定了它在隐私合规架构中的位置部署考量OpenMed SDK 边界核心运行时在所需模型构件就绪后完全在本地执行抽取与去标识化可选网络路径模型下载、远程 provider 适配器、遥测路径和用户配置的集成可以使用网络校验责任部署方负责验证模型与数据集的条款、隐私行为与临床适用性交互接口在受支持的平台上提供 Python、Swift、Android、浏览器和服务接口由此可以归纳出几条关键特性精选模型目录每个模型、许可证和数据集都需要针对你的使用场景单独验证与 Safe Harbor 对齐的配置可覆盖 HIPAA Safe Harbor 的 18 类标识符但专家级部署审查仍然必要单纯使用 SDK 并不自动构成 HIPAA 合规多种执行路径CPU、CUDA、MLX、移动端、服务端和浏览器适配器因环境和构件而异SDK 源码以 Apache-2.0 License 发布模型与数据集条款则各不相同。30 秒上手一条analyze_text先看最精简的临床 NER 示例与仓库根目录 README.md 中的快速示例一致from openmed import analyze_text result analyze_text( Patient started on imatinib for chronic myeloid leukemia., model_namedisease_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 模型在所需构件就绪后使用本地运行时完成推理。从源码看analyze_text是包级顶层入口其关键参数包括model_name注册表键、Hugging Face 完整模型 ID或本地模型路径model_idmodel_name的别名两者同时传入非默认值会抛出ValueErroraggregation_strategy默认simple设为None可拿原始 token 输出output_formatdict默认、json、html或csvconfidence_threshold最低置信度过滤默认0.0表示全保留group_entities在格式化输出中合并相邻同标签实体sentence_detection默认开启按句子切分后分块推理每块最多 6 句或约 4 倍最大序列长度字符再拼接回原文偏移assert_context开启后为每个实体附加确定性否定、不确定性、体验者experiencer和时序标签写入metadata[clinical_context]cache_results进程内 LRU 缓存默认上限 128 条缓存结果可能含 PHI但永不落盘。这套句子切分 → 分块推理 → 偏移还原 → 格式化的调用链在 openmed/init.py 中完整可见是理解 OpenMed 输出坐标精度的基础。快速开始三种安装维度# 核心 Hugging Face 运行时Linux、macOS、WindowsCPU 或 CUDA pip install --upgrade openmed[hf] # 追加 REST 服务 pip install --upgrade openmed[hf,service] # Apple Silicon 加速MLX pip install --upgrade openmed[mlx]安装完成后有三种主流使用形态Python APIfrom 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端点GET /health、POST /analyze、POST /pii/extract、POST /pii/deidentify。批量处理from openmed import BatchProcessor p BatchProcessor( model_name disease_detection_superclinical, group_entitiesTrue, ) p.process_texts([...])离线 / 内网隔离部署把model_name或model_id指向本地目录OpenMed 便完全不会访问 Hugging Face Hubfrom 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, configOpenMedConfig(devicecpu), )从源码看推理被network_blocked_if_offline上下文保护见 openmed/core/offline.py 的导出与 openmed/core/pii.py 中的调用离线模式下会主动阻断网络访问。详细说明见 离线安装 与 低带宽安装。工作原理这是一条不把数据发送到云 API 的本地临床文本流水线返回医学实体、PII 发现结果和去标识化文本。模型下载属于独立的网络边界——部署方需在首次使用前完成模型构件的获取与校验。模型目录OpenMed 维护一个精选的医学 NER 模型注册表完整目录见 模型注册表模型专长实体类型规模disease_detection_superclinical疾病与状况DISEASE、CONDITION、DIAGNOSIS434Mpharma_detection_superclinical药物与用药DRUG、MEDICATION、TREATMENT434Mpii_superclinical_largePII 与去标识化NAME、DATE、SSN、PHONE、EMAIL、ADDRESS434Manatomy_detection_electramed解剖与身体部位ANATOMY、ORGAN、BODY_PART109Mgene_detection_genecorpus基因与蛋白质GENE、PROTEIN109M可通过openmed.list_models()、get_model_info()、get_models_by_category()等注册表工具openmed/core/model_registry.py程序化检索模型。隐私PII 检测与去标识化PII 处理是 OpenMed 的核心能力围绕extract_pii与deidentify两个 API 展开from openmed import extract_pii, deidentify text Patient: John Doe, DOB: 01/15/1970, SSN: 123-45-6789 # 智能合并抽取防止 token 切分导致实体碎片化 result extract_pii(text, model_namepii_superclinical_large, use_smart_mergingTrue) # 按需选择去标识化方法 deidentify(text, methodmask) # [NAME], [DATE] deidentify(text, methodreplace) # Faker 支撑、locale 感知、保留格式的伪造值 deidentify(text, methodhash) # 加密哈希 deidentify(text, methodshift_dates, date_shift_days180)五种及以上去标识化方法源码 openmed/core/pii.py 中定义了完整的DEIDENTIFICATION_METHODS除了 README 展示的四种还包括remove、aadhaar_mask与format_preserve方法输出形态适用场景mask[NAME]、[EMAIL]等占位符需要清晰可读的占位remove空字符串删除不需要位置对齐如搜索索引导出replace感知 locale 的伪造替代值需要看起来真实可用的文本hashNAME_a1b2c3d4带实体类型的摘要需要跨文档一致链接shift_dates仅日期统一偏移 N 天需要保留相对时间关系其中deidentify的默认置信度阈值为0.7比extract_pii的0.5更保守源码注释明确更高阈值以求安全。mask不是默认模式但它生成的占位符来自模型自身的实体标签因此随模型不同而变化例如默认 PII 模型会把姓名拆成first_name/last_name而非单一NAME。智能实体合并Smart Mergingtoken 级分类模型常把语义单元切碎例如日期01/15/1970可能被拆成01和/15/1970两个碎片。智能合并通过正则识别语义单元并合并碎片预测完整机制见 docs/pii-smart-merging.md语义单元识别覆盖日期、SSN、电话、邮箱、信用卡、IP/MAC 地址、URL、街道地址、邮编、病历号MRN等模式且支持PIIPattern自定义格式与优先级排序高优先级先匹配、重叠时胜出标签聚合对每个语义单元统计重叠模型预测的主导标签出现次数最多平局时取平均置信度最高者calculate_dominant_label标签特异性层级如date_of_birthdate、ssnid、phone_numberphoneuse_smart_merging默认True生产环境推荐保持开启仅在做原始 token 分析、自建后处理器或调试时才关闭。replace引擎locale 感知的 Faker 伪造methodreplace已升级为完整的 Faker 支撑引擎见 docs/anonymization.mdlangISO 639-1 代码通过LANG_TO_LOCALE映射到 Faker localeOpenMedlangFaker locale说明enen_USfrfr_FRdede_DEitit_ITeses_ESnlnl_NLhihi_INteen_INFaker 无泰卢固语 locale触发一次性警告ptpt_PT可用localept_BR覆盖为巴西葡萄牙语确定性支持三种模式随机默认、consistentTrue同文档内相同原始值映射到同一伪造值、seedint跨运行可复现隐含 consistent基于hashlib.blake2b((seed, canonical_label, original))派生。临床 ID 的伪造值会复用检测侧同一套校验器保证 CPF、CNPJ、BSNElfproef、NIR、Codice Fiscale、NIE、AadhaarVerhoeff、Steuer-ID、NPILuhn over 80840等全部通过格式校验。可逆去标识化与自定义识别器reidentify()deidentify(..., keep_mappingTrue)返回的mapping可交给reidentify(deidentified_text, mapping)还原原文同一类型重复出现时占位符自动编号[first_name]、[first_name_2]…保证逐值正确回放custom_recognizer接受普通映射、CustomRecognizer实例或 JSON/YAML 路径支持 deny 列表额外识别站点特有标识符与 allow 列表压制任何重叠检测优先级最高白名单值原样保留见 docs/anonymization.md跨文档替代值保险库SurrogateVault让多次deidentify(..., methodreplace)调用对同一标识符给出稳定假名保险库只存(canonical_label, lang, HMAC text_hash)与模式版本不落原始明文。HIPAA 边界声明与 Safe Harbor 对齐的类别与可调阈值是实现工具专家级部署审查仍然必要仅使用 SDK 本身不构成合规证明。更多资料见 PII 智能合并、匿名化完整指南 与 PII 检测完整 Notebook。Privacy Filter 家族OpenMed 提供三个基于 OpenAI Privacy Filter 架构的 PII 模型家族gpt-oss 风格稀疏 MoE transformer带局部注意力、sink token、RoPEYaRN 与 tiktokeno200k_base分词。三者模型代码完全相同仅训练数据不同全部走同一个extract_pii()/deidentify()API——唯一变化的是model_name参数变体PyTorchCPU CUDAMLXApple SiliconMLX 8-bitOpenAI Privacy Filteropenai/privacy-filterOpenMed/privacy-filter-mlxOpenMed/privacy-filter-mlx-8bitNemotron-PII fine-tuneOpenMed/privacy-filter-nemotronOpenMed/privacy-filter-nemotron-mlxOpenMed/privacy-filter-nemotron-mlx-8bitOpenMed 多语言OpenMed/privacy-filter-multilingualOpenMed/privacy-filter-multilingual-mlxOpenMed/privacy-filter-multilingual-mlx-8bitfrom openmed import extract_pii text Patient Sarah Connor (DOB: 03/15/1985) at MRN 4471882. extract_pii(text, model_nameopenai/privacy-filter) # PyTorch 基线 extract_pii(text, model_nameOpenMed/privacy-filter-nemotron) # 同代码、不同权重 extract_pii(text, model_nameOpenMed/privacy-filter-mlx) # Apple SiliconMLX在非 Apple Silicon 主机上MLX 模型名会自动替换为对应 PyTorch checkpoint一次性警告。这种回退是家族感知的Linux 上请求 MLX-only 的 Nemotron 会替换为 PyTorch 版 Nemotron请求多语言版亦然从而保证训练分布一致。调度逻辑位于openmed.core.backends.create_privacy_filter_pipelineopenmed/core/backends.py。该家族不做智能合并——模型内部已做 Viterbi 约束的 BIOES 解码。多语言 PII36 条支持路线OpenMed 的多语言 PII 支持以openmed.core.pii_i18n.SUPPORTED_LANGUAGES为事实来源共36 个受支持的 PII 语言代码其中 33 种有模型支撑覆盖en、fr、de、it、es、nl、hi、te、pt、ar、ja、tr等另有zh、bn、ta等条目在注册表中。命令行一行即可验证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: pedrohospital.pt, langpt).entities])多语言抽取在extract_pii(..., lang...)中按语言自动选择默认 PII 模型与正则模式。各语言示例from openmed import extract_pii portuguese extract_pii(Paciente: Pedro Almeida, CPF: 123.456.789-09, telefone: 351 912 345 678, langpt, use_smart_mergingTrue) dutch extract_pii(Patiënt: Eva de Vries, BSN: 123456782, telefoon: 31 6 12345678, langnl, use_smart_mergingTrue) hindi extract_pii(रोगी: अनीता शर्मा, फोन: 91 9876543210, पता: नई दिल्ली 110001, langhi, use_smart_mergingTrue) arabic extract_pii(المريضة ليلى حسن، الهاتف 20 10 1234 5678، الرقم القومي 29801011234567., langar, use_smart_mergingTrue) japanese extract_pii(患者 佐藤 花子、電話 81 90 1234 5678、マイナンバー 1234 5678 9012., langja, use_smart_mergingTrue) turkish extract_pii(Hasta Ayşe Yılmaz, telefon 90 532 123 45 67, TCKN 10000000146., langtr, use_smart_mergingTrue) for r in (portuguese, dutch, hindi, arabic, japanese, turkish): print([(e.label, e.text) for e in r.entities])细节说明俄语路由目前使用有文档记载的多语言默认模型占位符孟加拉语、中文和泰米尔语在注册表中有专属条目可选的 Indic NER 适配器额外提供gu、kn、ml、pa四条用户配置路由仅从OPENMED_INDIC_NER_MODEL指定的路径加载无内置默认 checkpoint。混合拉丁/天城文或拉丁/泰卢固文的病历会自动走脚本感知的印度临床路由hi、te。中文场景还有可插拔的分词后端jieba默认可选pkuseg/ HanLP见 中文分词运维。逐语言完整表见 逐语言去标识化。在 Apple 设备上运行Swift、MLX 与 iOS在受支持的 Apple 硬件上OpenMed 可通过MLX与OpenMedKit完成本地处理模型获取与任何用户配置的远程集成仍属于独立网络边界。在Package.swift中加入依赖// 把 OpenMedKit 加入你的应用 dependencies: [ .package(url: https://gitcode.com/GitHub_Trending/ope/openmed.git, from: 2.3.0), ]MLX 运行时支持 PII token 分类、Privacy Filter 家族、实验性 GLiNER 家族零样本任务以及 Python MLX-LM 文本生成受支持的 token 分类构件含 CoreML 回退路径一个模型名、所有平台在非 Apple 硬件上MLX 模型名自动回退到对应 PyTorch checkpoint一次性警告写一次模型名随处运行Apple Silicon 上也可用 Pythonpip install --upgrade openmed[mlx]。进一步阅读MLX 后端、OpenMedKitSwift、CoreML 导出。Android 侧则通过 Android / ONNX Runtime Mobile 导出 与 OpenMedKit Android 落地如OpenMedKit.fromDirectory(modelDir).analyzeText(...)Kotlin 侧有与 Python 运行时对齐的 span 奇偶校验测试浏览器端通过 Transformers.js 导出 在 WebGPU 上跑同一份 ONNX 模型。REST API 与 Docker 部署OpenMed 提供一个 Docker 友好的 FastAPI 服务内置请求校验、共享 pipeline 预加载与统一错误信封pip install --upgrade openmed[hf,service] uvicorn openmed.service.app:app --host 0.0.0.0 --port 8080 # 或用 Docker docker build -t openmed:local . docker run --rm -p 8080:8080 -e OPENMED_PROFILEprod openmed:localcurl -X POST http://127.0.0.1:8080/pii/extract \ -H Content-Type: application/json \ -d {text:Paciente: Maria Garcia, DNI: 12345678Z,lang:es}服务端实现位于 openmed/service/app.py完整接口契约见 REST 服务手册 与 API 参考。进一步阅读OpenMed 的核心能力图谱如下文本分析入口见 analyze-text.md模型选择见 模型注册表 与 选择 PII 模型批量流水线见 批量处理配置档案见 profiles.md合规边界见 compliance.md。完整中文入门还可对照 getting-started.zh.md 与 index.zh.md。合规提醒本文所有代码输出均为合成示例。生产环境使用前请务必由部署方完成模型/数据集条款审查、隐私行为验证与临床适用性评估——本地优先架构降低的是数据暴露面而不是合规责任。【免费下载链接】openmedLocal-first healthcare AI: clinical NER HIPAA PII de-identification that runs 100% on-device. 2,200 medical models, 21 languages, Apple MLX Python, no cloud, no patient data leaving your network. Apache-2.0项目地址: https://gitcode.com/GitHub_Trending/ope/openmed创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价