🇧🇷 OpenMed-BR Clinical NER — Efficient (PT)
Reconhecimento de entidades clínicas em português, leve o bastante para rodar
em CPU. Extrai doenças, sinais/sintomas, medicamentos, procedimentos e
estruturas anatômicas de texto médico livre.
Por que isto importa
O Brasil gera uma quantidade imensa de texto clínico — evoluções, anamneses,
laudos, atestados — e quase tudo fica preso em texto livre. Mesmo com 97,6% das
UBS já usando prontuário eletrônico, o conteúdo é escrito em linguagem natural, não
estruturado. Isso trava tudo que depende de dado organizado:
- Codificação clínica (CID-10, CIAP-2, TUSS, SIGTAP) feita à mão, cara e lenta.
- Glosas no setor privado: R$ 5,8 bilhões em 2024 (15,9% do faturado), das
quais só ~2% eram justificadas — a maior parte é problema de documentação/código.
- Vigilância e pesquisa que precisam garimpar prontuário manualmente.
- Continuidade do cuidado perdida entre sistemas que não conversam.
O primeiro passo para destravar qualquer um desses problemas é o mesmo: transformar
texto clínico em entidades estruturadas. É exatamente o que este modelo faz — e faz
em português, de forma aberta e rodando em hardware modesto.
Ecossistema de referência (inglês) como o
OpenMed
não cobre NER
clínico em português (só de-identificação de PII). O
OpenMed-BR
preenche esse vazio.
O que o modelo reconhece
| Entidade | Exemplos |
|---|
DOENCA | hipertensão arterial, diabetes mellitus, pneumonia |
SINAL_SINTOMA | febre, cefaleia, dor abdominal, dispneia |
MEDICAMENTO | losartana, dipirona, metformina, azitromicina |
PROCEDIMENTO | tomografia de tórax, hemograma, apendicectomia |
ANATOMIA | tórax, abdome, ventrículo esquerdo |
Aplicações
- Assistente de codificação — sugerir CID-10/CIAP-2 (doenças), TUSS/SIGTAP
(procedimentos) e OBM/CATMAT (medicamentos) a partir da nota clínica, acelerando
faturamento e reduzindo glosa. (O modelo extrai a entidade; o mapeamento ao código
é a camada seguinte.)
- Prevenção de glosa — checar se procedimentos/medicamentos citados na evolução
estão devidamente registrados na guia.
- Estruturação de prontuário — montar listas de problemas, medicações em uso e
procedimentos a partir de texto livre.
- Pesquisa e vigilância — construir coortes e indicadores epidemiológicos a partir
de grandes volumes de texto.
- Pipeline de privacidade — combinar com o modelo PII do OpenMed para anonimizar
antes de processar (LGPD).
Como usar
1from transformers import pipeline
2
3ner = pipeline("token-classification",
4 model="BrazilAI/openmed-br-clinical-pt",
5 aggregation_strategy="simple")
6
7texto = "Paciente com hipertensão em uso de losartana; solicitada tomografia de tórax."
8for e in ner(texto):
9 print(e["entity_group"], "->", e["word"], round(e["score"], 2))
Roda em CPU. Para lote, passe uma lista de textos ao pipeline.
Como foi treinado
Estratégia híbrida para contornar a escassez de dado clínico anotado em PT:
- Base OpenMed — encoder BioClinicalBERT já adaptado ao português (Apache-2.0).
- Dados ouro — fatia médica do MultiCoNER v2 em português (anotação humana).
- Dados prata (destilação) — os 13 modelos clínicos
pucpr/clinicalnerpt-*
(treinados no corpus SemClinBr) atuam como professores, rotulando texto que
é então usado no treino. Assim o conhecimento clínico do SemClinBr entra no modelo
mesmo com o corpus original sendo de acesso restrito.
Tudo mapeado para um esquema clínico unificado de 5 tipos.
Resultados (teste PT held-out, seqeval, nível de entidade)
| Tipo | F1 |
|---|
| ANATOMIA | 0.717 |
| MEDICAMENTO | 0.667 |
| DOENCA | 0.564 |
| PROCEDIMENTO | 0.429 |
| SINAL_SINTOMA | 0.421 |
| Geral | 0.598 |
Leitura honesta: este é um ponto de partida sólido, não o estado da arte. O teste
held-out é pequeno (77 frases) → números honestos, porém ruidosos. Para
MEDICAMENTO
este modelo é o melhor da família (0.67). Para doença/procedimento/sintoma, o irmão
openmed-br-large-pt vai melhor.
Qual modelo escolher
| Precisa de… | Use |
|---|
| Rodar em CPU, baixo custo, foco em medicamento | este (clinical-pt) |
| Maior F1 geral (GPU), doença/procedimento/sintoma | openmed-br-large-pt |
Uso responsável (leia antes de aplicar em saúde)
- Não é dispositivo médico. É ferramenta assistiva de documentação/estruturação,
com humano no circuito. Software não-diagnóstico de apoio administrativo/documental
fica fora da ANVISA RDC 657/2022; assim que houver sugestão diagnóstica/terapêutica
para um paciente, entra regulação (SaMD).
- LGPD — dado de saúde é sensível. Processe em contexto de tutela da saúde
(Art. 11, II, "f") ou anonimize antes (ex.: modelo PII do OpenMed). Prefira execução
local/on-device.
- Revisão humana obrigatória — não use para decisão clínica.
Roadmap
- Ligação das entidades a CID-10 / TUSS / SIGTAP / OBM (da extração ao código).
- Treino/avaliação sobre texto clínico real em PT (ex.: acesso ao SemClinBr cru,
parceria hospitalar) rumo ao SOTA (~0.76).
- Teste held-out maior e mais representativo.
Atribuição e citação (obrigatória — CC BY 4.0)
- Base: OpenMed —
OpenMed/OpenMed-PII-Portuguese-BioClinicalBERT-Base-110M-v1 (Apache-2.0).
- Dados ouro: MultiCoNER v2 — Fetahu et al., arXiv:2310.13213; SemEval-2023 Task 2, arXiv:2305.06586 (CC BY 4.0).
- Dados prata (professores): BioBERTpt / clinicalnerpt / SemClinBr — Schneider et al., 2020 (ClinicalNLP@EMNLP); Oliveira et al., J. Biomed. Semantics, 2022; HAILab-PUCPR.
1@misc{openmedbr_clinical_pt,
2 title = {OpenMed-BR Clinical NER (Efficient, PT)},
3 author = {OpenMed-BR / BrazilAI},
4 year = {2026},
5 howpublished = {\url{https://huggingface.co/BrazilAI/openmed-br-clinical-pt}}
6}
Licença
CC BY 4.0 — uso livre (inclusive comercial) com atribuição.