Transforme texto clínico em informação estruturada e desidentificada no hardware que você controla.
O runtime local principal do OpenMed realiza extração e desidentificação depois que os artefatos de modelo necessários estão disponíveis. Downloads de modelos, adaptadores de provedores remotos, caminhos com telemetria e integrações configuradas pelo usuário podem usar a rede; revise os termos de cada modelo e conjunto de dados.
PyPI package · Python 3.10+ · Model catalog · Research paper · Apache-2.0 SDK source
OpenMedKit · Apple Silicon / MLX · Android / ONNX Runtime Mobile · Browser / Transformers.js · Documentation
Execução local em primeiro lugar · 33 idiomas PII com suporte de modelos · Apache-2.0 SDK
English · 简体中文 · Español · Français · Deutsch · Italiano · Português · Nederlands · العربية · हिन्दी · తెలుగు · 日本語 · Türkçe · فارسی
Des-identificação de PII em tempo real: o Privacy Filter Nemotron oculta nomes, endereços, identificadores e dados de faturamento de um relatório de alta clínica, totalmente no dispositivo. (Todos os valores exibidos são sintéticos.)
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.95Um modelo de NER clínico usa o runtime local depois que os artefatos necessários estão disponíveis.
| Consideração de implantação | Limite do SDK OpenMed |
|---|---|
| Runtime principal | Processa localmente após os artefatos necessários estarem disponíveis |
| Caminhos de rede opcionais | Downloads, adaptadores remotos, telemetria e integrações podem usar a rede |
| Validação | O responsável valida termos de modelos e dados, privacidade e adequação clínica |
| Interfaces | Python, Swift, Android, navegador e serviços quando compatíveis |
- Catálogo de modelos selecionado: valide cada modelo, licença e conjunto de dados para seu caso de uso.
- Configuração alinhada ao Safe Harbor: pode abranger as 18 categorias de identificadores; a revisão especializada da implantação continua necessária e o uso do SDK, isoladamente, não comprova conformidade com HIPAA.
- Caminhos de execução compatíveis: adaptadores de CPU, CUDA, MLX, dispositivo móvel, serviço e navegador variam conforme o ambiente e o artefato.
- Interfaces de implantação: Python, contêineres, serviços e fluxos em lote exigem configuração e validação.
- Código-fonte do SDK: publicado sob Apache-2.0 License; os termos de modelos e conjuntos de dados variam.
Em hardware Apple compatível, o OpenMed pode usar MLX e OpenMedKit para processamento local após os artefatos necessários estarem disponíveis. A obtenção de modelos e as integrações remotas configuradas pelo usuário continuam sendo limites de rede separados.
// Add OpenMedKit to your app
dependencies: [
.package(url: "https://github.com/maziyarpanahi/openmed.git", from: "2.0.0"),
]- Runtime MLX para classificação de tokens de PII, a família Privacy Filter e tarefas zero-shot experimentais da família GLiNER, com um caminho de fallback em CoreML.
- Um nome de modelo, todas as plataformas: em hardware que não é Apple, os nomes de modelo MLX recorrem automaticamente ao checkpoint PyTorch correspondente.
- Python no Apple Silicon também:
pip install --upgrade "openmed[mlx]".
Guias: Backend MLX · OpenMedKit (Swift) · Exportação CoreML
flowchart LR
A["Texto clínico"] --> B["OpenMed<br/>(local primeiro)"]
B --> C["Entidades médicas"]
B --> D["PII detectada"]
B --> E["Texto des-identificado"]
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 --upgrade "openmed[hf]"
# Add the REST service
pip install --upgrade "openmed[hf,service]"
# Apple Silicon acceleration (MLX)
pip install --upgrade "openmed[mlx]"|
API Python from openmed import analyze_text
analyze_text(
"Patient received 75mg "
"clopidogrel for NSTEMI.",
model_name=
"pharma_detection_superclinical",
) |
Serviço REST uvicorn openmed.service.app:app \
--host 0.0.0.0 --port 8080
|
Em lote from openmed import BatchProcessor
p = BatchProcessor(
model_name=
"disease_detection_superclinical",
group_entities=True,
)
p.process_texts([...]) |
Offline / isolado? Aponte model_name (ou model_id) para um diretório local e o OpenMed o carrega sem contatar o 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"),
)Um registro curado de modelos de NER médico especializados: explore o catálogo completo.
| Modelo | Especialização | Tipos de entidade | Tamanho |
|---|---|---|---|
disease_detection_superclinical |
Doenças e condições | DISEASE, CONDITION, DIAGNOSIS | 434M |
pharma_detection_superclinical |
Fármacos e medicamentos | DRUG, MEDICATION, TREATMENT | 434M |
pii_superclinical_large |
PII e des-identificação | NAME, DATE, SSN, PHONE, EMAIL, ADDRESS | 434M |
anatomy_detection_electramed |
Anatomia e partes do corpo | ANATOMY, ORGAN, BODY_PART | 109M |
gene_detection_genecorpus |
Genes e proteínas | 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)- A mesclagem inteligente de entidades mantém
01/15/1970inteiro em vez de fragmentá-lo. - Ofuscação baseada em Faker com provedores personalizados de identificadores clínicos (CPF, CNPJ, BSN, NIR, Codice Fiscale, NIE, Aadhaar, Steuer-ID, NPI).
- Limite da HIPAA: categorias alinhadas ao Safe Harbor e limiares configuráveis auxiliam a implementação; a revisão especializada da implantação continua necessária e o uso isolado do SDK não comprova conformidade.
Notebook completo de PII · Mesclagem inteligente · Anonimização
Família Privacy Filter: três famílias de modelos sobre a arquitetura OpenAI Privacy Filter
O código do modelo é o mesmo (transformer MoE esparso no estilo gpt-oss com atenção local, tokens sink, RoPE+YaRN, tokenização tiktoken o200k_base); apenas os dados de treinamento mudam. Todos usam a mesma API extract_pii() / deidentify(): só muda o argumento model_name=.
| Variante | 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)Em hosts que não são Apple Silicon, os nomes de modelo MLX são substituídos automaticamente pelo checkpoint PyTorch correspondente (com um aviso único): escreva um nome de modelo e rode em qualquer lugar. Veja Arquitetura do Privacy Filter e roteamento de backend.
Extração e des-identificação em en, fr, de, it, es, nl, hi, te, pt, ar, ja e tr, o catálogo registrado de modelos PII no total.
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])"Ver exemplos por idioma (português, holandês, hindi, árabe, japonês, turco)
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])Um serviço FastAPI amigável ao Docker, com validação de requisições, pré-carregamento de pipeline compartilhado e envelopes de erro unificados.
pip install --upgrade "openmed[hf,service]"
uvicorn openmed.service.app:app --host 0.0.0.0 --port 8080
# or with Docker
docker build -t openmed:local .
docker run --rm -p 8080:8080 -e OPENMED_PROFILE=prod 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"}'Veja o guia completo do serviço REST.
Guias completos em openmed.life/docs.
| Primeiros passos | Analisar texto | Registro de modelos |
| Guia de detecção de PII | Anonimização | Processamento em lote |
| Perfis de configuração | Serviço REST | Backend MLX |
O guardião do OpenMed é um gato persa fofo caracterizado como um pequeno Avicena (Ibn Sina), o grande médico persa cujo Cânone da Medicina foi o texto médico de referência no mundo todo por cerca de 600 anos. Ele cuida do livro aberto do conhecimento médico, com uma paleta inspirada na turquesa persa (fīrūza): um guardião local-first para os seus dados mais privados.
Contribuições são bem-vindas: relatórios de bugs, pedidos de recursos e PRs.
- Abrir uma issue
- Traduções são bem-vindas: ajude a completar os README em outros idiomas vinculados no seletor no topo.
O OpenMed se baseia em excelente trabalho open source: agradecimento especial à OpenAI (a arquitetura Privacy Filter), à NVIDIA (o conjunto de dados Nemotron PII), à Hugging Face (transformers e o ecossistema de modelos), à Apple (MLX) e aos mantenedores do Faker.
O código-fonte do SDK OpenMed é publicado sob a Apache-2.0 License.
Se o OpenMed for útil na sua pesquisa, por favor, cite:
@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},
}Se o OpenMed for útil para você, uma estrela ajuda outros a descobri-lo.
4,700+ GitHub stars · 29 Jul 2026 snapshot
Feito pela equipe OpenMed
Site · Documentação · X / Twitter · LinkedIn