ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

OpenMed 模型选型指南:用模型注册表 API 与 CLI 从 12 大类别中精确挑选临床 NER 与 PII 模型

OpenMed 模型选型指南:用模型注册表 API 与 CLI 从 12 大类别中精确挑选临床 NER 与 PII 模型 OpenMed 模型选型指南用模型注册表 API 与 CLI 从 12 大类别中精确挑选临床 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 内置了一套随仓库提交的模型注册表manifest 驱动将 2,200 临床与生物医学 NER 模型组织为 12 大类别并提供list_model_categories、get_models_by_category、get_pii_models_by_language、search_models(ModelQuery(...))、get_model_info等查询 API 与openmed models命令行工具。本指南以 skills/choosing-openmed-models/SKILL.md 为骨架结合 openmed/core/model_registry.py 与 openmed/core/model_search.py 的源码实现带你走完我要找西班牙语病历里的疾病实体 / 某语言的 PII 模型到拿到一个具体模型键并交付给加载流程的完整链路。读完你将掌握类别浏览、ModelInfo元数据解读、按语言选 PII 模型、结构化ModelQuery搜索、基于文本的模型推荐以及对应的 CLI 用法与常见坑。何时使用本技能当满足以下任一条件时就应该走模型注册表查询流程而不是靠记忆硬编码模型名用户明确了任务找疾病 / 肿瘤 / PHI 实体但不知道用哪个模型需要为某一种语言es、fr、de……找到合适的PII 模型想在加载前按大小参数规模、任务类型或 tier 过滤模型想在加载前先检查模型的标签labels、参数量与许可证。核心原则只有一条永远不要硬编码模型列表——在运行时查询注册表这样当仓库新增模型时你的代码依然正确。拿到模型键之后后续的加载与推理工作交给配套技能loading-openmed-models对应文档见 docs/model-loader.md完成。安装与前置条件pip install openmed # 注册表查询无需 [hf] extra注册表查询是纯本地操作它读取的是仓库内提交的 manifest 文件 models.jsonl当前仓库该文件包含 2,266 行模型记录不会联网。这一点在源码中有明确体现——search_models的 docstring 注明读取已提交的 JSONL manifest不进行实时模型发现也不访问 Hugging Face Hub见 openmed/core/model_search.pymanifest 路径常量定义为Path(__file__).resolve().parents[2] / models.jsonl见 openmed/core/model_registry.py。快速上手先浏览类别再挑选模型1) 列出 12 大模型类别import openmed openmed.list_model_categories() # [Medical, Privacy, Anatomy, Hematology, Chemical, Disease, # Genomics, Oncology, Species, Pathology, Pharmaceutical, Protein]在源码层面类别不是写死的常量而是从已注册模型动态聚合而来_build_categories()遍历OPENMED_MODELS按每个模型的category字段归类并排序见 openmed/core/model_registry.py 与 openmed/core/model_registry.py。这也解释了为什么文档强调不要在代码里硬编码这 12 个名字——类别集合会随注册表演进。2) 查看某个类别下的所有模型# Models in a category - list[ModelInfo] for m in openmed.get_models_by_category(Disease): print(m.model_id, |, m.size_category, |, m.entity_types)get_models_by_category(category)的底层实现是查CATEGORIES映射再逐一取出ModelInfo见 openmed/core/model_registry.py。该模块还提供两个实用的衍生查询get_models_by_size(size_category)按Tiny | Small | Medium | Large | XLarge过滤见 openmed/core/model_registry.pyfind_models_by_entity_type(entity_type)按实体标签反查能识别该标签的模型见 openmed/core/model_registry.py。3) 加载前先检查单个模型info openmed.get_model_info(OpenMed/OpenMed-NER-DiseaseDetect-BigMed-278M) print(info.display_name, info.task, info.param_count, info.license)get_model_info既接受注册表键如disease_detection_bigmed_278m也接受完整的 HF repo id如上面的OpenMed/OpenMed-NER-DiseaseDetect-BigMed-278M两种写法都会命中同一个ModelInfo见 openmed/core/model_registry.py。查不到时返回None调用方需自行处理。get_models_by_category与get_all_models都返回ModelInfo对象其中get_all_models()返回dict[str, ModelInfo]以注册表键为 key并返回副本以免外部修改污染内部注册表见 openmed/core/model_registry.py。ModelInfo告诉你什么每个模型都暴露以下真实字段字段定义见 openmed/core/model_registry.py 的ModelInfodataclassmodel_id # HF repo id, e.g. OpenMed/OpenMed-NER-DiseaseDetect-BigMed-278M display_name # human-friendly name category # one of the 12 categories specialization # e.g. disease entity detection entity_types # list[str] of labels the model emits, e.g. [DISEASE, ...] size_category # Tiny | Small | Medium | Large | XLarge recommended_confidence # suggested confidence_threshold for this model family # NER | PII | ... task # token-classification languages # e.g. [en], [es] param_count # e.g. 278000000 license # e.g. apache-2.0在标准字段之外ModelInfo还携带大量可用于选型的元数据包括tier设备档位如phone/laptop/server、architecture如Transformer encoder、base_model、formats如transformers、mlx-4bit、onnx、nnapi_compatible/min_sdk/execution_providersAndroid 端推理相关、benchmark含 f1/recall 分数、latency_ms、peak_ram_mb、download_mb/disk_mb离线部署体积、script_coverage各文字系统支持判定、reproducibility_hash、released、provenance与semantic_version。两个值得注意的实现细节size_mb是派生属性有param_count时按param_count / 1_000_000取整估算否则从model_id中匹配33M、44M、108M、278M、560M等 31 种命名模式见 openmed/core/model_registry.pyrecommended_confidence由类别决定Privacy 类默认 0.50Pharmaceutical/Oncology/Genomics/Hematology 默认 0.65其余默认 0.60见 openmed/core/model_registry.py。使用建议用entity_types确认模型确实输出你需要的标签用recommended_confidence作为confidence_threshold的合理默认值。注意size_category的判定逻辑见 openmed/core/model_registry.py有tier时直接映射Base→Medium无tier时按参数量分档—— 60M为 Tiny、 100M为 Small、 250M为 Medium、 500M为 Large、以上为 XLarge。疾病 vs 肿瘤 vs 隐私三组实战选择import openmed # Disease conditions in a general clinical note: disease openmed.get_models_by_category(Disease) # e.g. OpenMed/OpenMed-NER-DiseaseDetect-BigMed-278M # OpenMed/OpenMed-NER-DiseaseDetect-BioClinical-108M (smaller/faster) # Tumors, staging, oncologic findings - Oncology, not Disease: onco openmed.get_models_by_category(Oncology) # e.g. OpenMed/OpenMed-NER-OncologyDetect-BigMed-278M # PHI / PII detection - Privacy category: privacy openmed.get_models_by_category(Privacy)经验法则更大278M/560M 更准但更慢更小108M、Small/Tiny 更快、更适合边缘设备。建议先用中等规模模型起步只有召回不足时才升级到更大的模型。类别选择上不要被自然语言迷惑源码里_CATEGORY_KEYWORDS给出了清晰的语义路由——cancer|tumor|oncolog|malign|chemotherapy|radiation路由到 Oncologydisease|condition|disorder|syndrome路由到 Disease而pii|deidentif|hipaa|phi|protected health|patient name|ssn|medical record|privacy|anonymiz路由到 Privacy见 openmed/core/model_registry.py。这套关键词规则正是后面get_model_suggestions的文本路由基础。按语言挑选 PII 模型import openmed # All PII models for Spanish - dict[str, ModelInfo] es_models openmed.get_pii_models_by_language(es) # The recommended default PII model id for a language: default_es openmed.get_default_pii_model(es) print(default_es) # HF repo id, or None if unsupportedget_pii_models_by_language(lang)的过滤逻辑相当讲究见 openmed/core/model_registry.py对en收集所有pii_前缀、Privacy 类别、语言含en的模型并排除各本地化语种前缀避免多语言模型被误归为英语专属对其他语言按pii_{lang}_前缀 Privacy 类别 语言匹配三重过滤通过_supports_pii_language检查script_coverage凡是某语言对应文字系统被判定为unsupported的模型会被剔除见 openmed/core/model_registry.py最后叠加DEFAULT_PII_MODELS兜底模型以及可选的 Indic NER / Indic encoder 适配模型如用户配置的 CoNLL-2003 Indic NER 适配器实体标签为PERSON/LOCATION/ORGANIZATION默认置信度 0.50见 openmed/core/model_registry.py。get_default_pii_model(lang)返回该语言的推荐默认 PII 模型 HF id当该语言需要用户自备权重USER_SUPPLIED_PII_MODEL哨兵值或使用可选 Indic 模型时可能返回None见 openmed/core/model_registry.py。deidentify(..., langes)和extract_pii(..., langes)已经会自动选择合适的默认模型——使用这两个辅助函数而不是自己手工挑是最省心的做法上面的查询 API 适合需要覆盖或确认支持范围时使用。当前支持的脱敏语言位于openmed.SUPPORTED_LANGUAGES公开导出见 openmed/init.py底层由language_pack_catalog.py的LanguagePackAdapters.supported_languages提供见 openmed/core/language_pack_catalog.pyen、es、pt、fr、de、it、nl、hi、te、ar、tr、ja。注册表会做一致性校验若 manifest 宣称的 PII 语言没有对应的语言包注册会直接抛出RuntimeError见 openmed/core/pii_i18n.py从机制上防止声明了却不支持的静默错误。用ModelQuery做结构化搜索当需要按任务、语言、规模或档位组合过滤时使用类型化搜索from openmed import search_models, ModelQuery results search_models(ModelQuery( tasktoken-classification, languageen, max_params200_000_000, # keep it small for on-device licenseapache-2.0, )) for r in results: print(r.repo_id, r.param_count, r.languages, r.formats)每个结果是ModelSearchResult字段包括repo_id、family、task、languages、tier、param_count、architecture、base_model、formats、canonical_labels、license与releaseddataclass 定义见 openmed/core/model_search.py。ModelQuery支持的过滤字段为task、language、tier、max_params、min_params、format、license外加自由文本query与require_params见 openmed/core/model_search.py。源码层面的匹配细节见 openmed/core/model_search.pytask/tier/license是大小写不敏感的全等匹配language匹配行内languages列表中的任意一个大小写不敏感format做了归一化小写、_→-支持前缀匹配——formatmlx可以同时命中mlx-4bit、mlx-fp也兼容旧字段format/model_format参数过滤无param_count的行默认会被max_params放过不会误杀但设置require_paramsTrue或指定min_params后会排除参数未知的行query自由文本只匹配repo_id与family两个字段结果按repo_id→family→released排序输出稳定可复现见 openmed/core/model_search.py。对应测试见 tests/unit/core/test_model_search.py例如max_params200_000_000会保留90M与参数未知的行、剔除300Mformatmlxqueryprivacy只会命中privacy-filter-fr-mlx而不会命中clinical-ner-fr-mlx。此外search_models之外还提供了面向设备档位的recommend_models(device_tier...)推荐排序phone/laptop/workstation/server四档带各自的 RAM 预算见 openmed/core/model_search.py适合端侧部署选型。让 OpenMed 根据文本内容推荐模型当任务描述不够明确时可以让注册表从文本本身推断领域import openmed for key, info, reason in openmed.get_model_suggestions( Stage III adenocarcinoma with metastasis to regional lymph nodes. ): print(key, -, reason)get_model_suggestions(text)返回(registry_key, ModelInfo, reason)三元组列表见 openmed/core/model_registry.py。实现分为两步用_CATEGORY_KEYWORDS的正则对文本做领域路由命中则返回(category, reason)一个文本可以命中多个类别如同时含肿瘤与药物关键词每个命中类别取前 3 个模型加入建议若一个都没命中回退到SIZE_RECOMMENDATIONS[balanced]的前 3 个reason 为General medical text最终最多返回 3 条。注意关键词路由存在但没有注册模型的类别如 Cardiology、Dermatology、Radiology 等已在_CATEGORY_KEYWORDS中定义关键词但尚无模型会被跳过——CATEGORIES只收录实际注册的模型见 openmed/core/model_registry.py 与 openmed/core/model_registry.py。CLI命令行选型除了 Python API注册表查询也暴露为openmed models子命令参数定义见 openmed/cli/main.pyopenmed models list # registry keys (add --include-remote to query the Hub) openmed models info registry-key # max sequence length for a key openmed analyze --text Stage III adenocarcinoma. --model oncology_detection_bigmed_278mCLI 家族比 SKILL 文档列举的还要丰富均围绕同一注册表openmed models list [--include-remote]列出注册表键加--include-remote会额外从 Hugging Face Hub 拉取模型openmed models info registry-key展示某个注册表键的元数据model_key即openmed.core.model_registry中定义的键openmed models search ...命令行版结构化搜索对应测试见 tests/unit/cli/test_models_search_cli.pyopenmed models pull model [--revision ...] [--max-bandwidth ...] [--retries 5]下载模型并做完整性校验用于离线部署openmed models verify [model_id] [--all]离线校验已缓存模型工件openmed models size [model_key] [--remote]展示下载体积、磁盘占用与峰值内存估算openmed models cache list/download/clear管理本地 Hugging Face 缓存中的模型。与 OpenMed 其他流程的交接选好模型后把模型键交给下游流程交接给loading-openmed-models把选定的model_id/注册表键作为model_name传给ModelLoader.load_model(...)或openmed.analyze_text(...)交接给extracting-clinical-entities用模型的recommended_confidence作为confidence_threshold并核对entity_types与你的 schema 是否一致交接给脱敏流程把get_default_pii_model(lang)的结果喂给openmed.deidentify(model_name..., lang...)。完整闭环示例选型 → 推理import openmed key oncology_detection_bigmed_278m info openmed.get_model_info(key) result openmed.analyze_text( Stage III adenocarcinoma with nodal metastasis., model_namekey, confidence_thresholdinfo.recommended_confidence, )analyze_text的签名确认了上述参数见 openmed/init.pymodel_name接受注册表键、完整 HF id 或本地模型路径confidence_threshold默认为0.0即不过滤全部保留因此显式传入info.recommended_confidence才能应用注册表建议的默认阈值。边界情况与常见坑是类别不是关键词。cancer 属于Oncology类别diabetes 属于Disease。不确定时看entity_types。get_default_pii_model(lang)可能返回None语言不支持或需要用户自备权重——此时应回退到受支持的语言并给出告警不要在非英文文本上静默使用英文模型。search_models读取的是已提交的 manifest因此只返回已被编目的模型——想查完整注册表请配合get_all_models()使用。提交前核对标签。类别正确的模型不一定输出你需要的具体标签务必通过entity_types/canonical_labels确认。许可证。OpenMed 注册表模型均为宽松许可证不要替换成捆绑了受限术语表UMLS/SNOMED/CPT的模型。统一的 PII 标签分类法见openmed.CANONICAL_LABELS定义见 openmed/core/labels.py公开导出见 openmed/init.py。标准与参考模型注册表核心实现openmed/core/model_registry.py结构化搜索实现openmed/core/model_search.py已提交的模型清单manifestmodels.jsonlPII 语言包与默认模型openmed.core.pii_i18n、openmed/core/language_pack_catalog.py配套技能loading-openmed-models见 docs/model-loader.md搜索行为测试tests/unit/core/test_model_search.py【免费下载链接】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),仅供参考
返回列表