File size: 7,272 Bytes
22e10ae
 
 
 
 
 
 
 
 
 
 
 
 
 
0e29b15
 
22e10ae
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0e29b15
22e10ae
0e29b15
 
 
 
22e10ae
0e29b15
 
 
 
 
 
 
 
22e10ae
0e29b15
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22e10ae
0e29b15
22e10ae
0e29b15
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22e10ae
 
0e29b15
 
 
22e10ae
0e29b15
 
 
 
22e10ae
 
0e29b15
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22e10ae
0e29b15
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
---
language:
- pt
- es
license: cc-by-4.0
library_name: transformers
pipeline_tag: token-classification
tags:
- ner
- token-classification
- portuguese
- spanish
- medical
- clinical
- healthcare
- brazil
- cross-lingual
- openmed-br
base_model: xlm-roberta-base
datasets:
- MultiCoNER/multiconer_v2
- IEETA/SPACCC-Spanish-NER
metrics:
- seqeval
model-index:
- name: openmed-br-large-pt
  results:
  - task: {type: token-classification, name: Named Entity Recognition}
    dataset: {name: MultiCoNER v2 (Portuguese, medical held-out), type: MultiCoNER/multiconer_v2}
    metrics:
    - {type: f1, value: 0.674, name: F1 (entity-level)}
    - {type: precision, value: 0.636, name: Precision}
    - {type: recall, value: 0.716, name: Recall}
---

# 🇧🇷 OpenMed-BR Clinical NER — Large (PT · cross-lingual PT+ES)

> Reconhecimento de entidades clínicas em **português**, reforçado com corpora
> clínicos ouro em **espanhol** (transferência cross-lingual). É o modelo de **maior
> F1** da família OpenMed-BR. Extrai **doenças, sinais/sintomas, medicamentos,
> procedimentos e estruturas anatômicas**.

| | |
|---|---|
| **Tarefa** | Token classification / NER (5 tipos) |
| **Idioma** | Português (BR), com treino cross-lingual PT+ES |
| **Base** | [`xlm-roberta-base`](https://huggingface.co/xlm-roberta-base) (MIT, multilíngue) |
| **F1 (held-out PT)** | **0.674** |
| **Licença** | CC BY 4.0 |
| **Irmão** | [`BrazilAI/openmed-br-clinical-pt`](https://huggingface.co/BrazilAI/openmed-br-clinical-pt) (roda em CPU; melhor em medicamento) |

---

## Por que isto importa

O Brasil produz um volume enorme de texto clínico — evoluções, anamneses, laudos —
e **quase tudo fica em texto livre**. Mesmo com 97,6% das UBS em prontuário eletrônico,
o conteúdo não é estruturado. Isso trava codificação, faturamento, pesquisa e
continuidade do cuidado. No setor privado, **glosas somaram R$ 5,8 bi em 2024**
(15,9% do faturado, só ~2% justificadas) — em grande parte, problema de documentação.

O primeiro passo para atacar qualquer um desses problemas é **transformar texto
clínico em entidades estruturadas**. Recursos de referência em inglês (ex.:
[OpenMed](https://huggingface.co/OpenMed)) não cobrem NER **clínico** em português —
o **OpenMed-BR** existe para preencher esse vazio, de forma aberta.

Este modelo **Large** usa uma ideia-chave: como corpus clínico ouro em português é
escasso, ele importa conhecimento de **corpora clínicos espanhóis** (grandes e
abertos) via um encoder multilíngue. Português e espanhol são próximos, e a
transferência cross-lingual eleva bastante o desempenho.

## O que o modelo reconhece

| Entidade | Exemplos |
|---|---|
| `DOENCA` | pneumonia, diabetes mellitus, insuficiência cardíaca |
| `SINAL_SINTOMA` | febre, dor abdominal, dispneia, obnubilação |
| `MEDICAMENTO` | azitromicina, metformina, omeprazol |
| `PROCEDIMENTO` | tomografia de tórax, colonoscopia, hemograma |
| `ANATOMIA` | tórax, abdome, antebraço |

## Aplicações

- **Assistente de codificação** — sugerir CID-10/CIAP-2, TUSS/SIGTAP e OBM/CATMAT a
  partir da nota clínica (o modelo extrai a entidade; o mapeamento ao código é a
  camada seguinte), acelerando faturamento e reduzindo glosa.
- **Prevenção de glosa** — conferir se o que está na evolução foi registrado na guia.
- **Estruturação de prontuário** — listas de problemas, medicações e procedimentos.
- **Pesquisa e vigilância** — coortes e indicadores a partir de texto em escala.
- **Pipeline de privacidade** — combinar com o PII do OpenMed para anonimizar (LGPD).

## Como usar

```python
from transformers import pipeline

ner = pipeline("token-classification",
               model="BrazilAI/openmed-br-large-pt",
               aggregation_strategy="simple")

texto = "Paciente com pneumonia; solicitada tomografia de tórax e avaliada dor abdominal."
for e in ner(texto):
    print(e["entity_group"], "->", e["word"], round(e["score"], 2))
```

Recomenda-se **GPU** para inferência em lote (é maior que o irmão Efficient).

## Como foi treinado

1. **Base** `xlm-roberta-base` (multilíngue, tokenizer que lida bem com PT).
2. **Ouro PT** — fatia médica do **MultiCoNER v2** (anotação humana).
3. **Prata PT** — destilação dos modelos clínicos `pucpr/clinicalnerpt-*` (SemClinBr).
4. **Ouro ES (cross-lingual)** — corpora clínicos espanhóis abertos: **DisTEMIST**
   (doenças), **MedProcNER** (procedimentos), **SympTEMIST** (sintomas), projetados
   para o mesmo esquema de 5 tipos.

Avaliação sempre no **mesmo teste PT held-out**, para comparabilidade entre modelos.

## Resultados (teste PT held-out, seqeval, nível de entidade)

| Tipo | F1 | vs. Efficient |
|---|---|---|
| ANATOMIA | 0.786 | +0.07 |
| DOENCA | 0.744 | +0.18 |
| PROCEDIMENTO | 0.643 | +0.21 |
| SINAL_SINTOMA | 0.526 | +0.11 |
| MEDICAMENTO | 0.537 | −0.13 |
| **Geral** | **0.674** | **+0.08** |

**Leitura honesta:** o cross-lingual elevou muito **DOENÇA, PROCEDIMENTO e
SINAL_SINTOMA**. **MEDICAMENTO é o ponto fraco** — esta versão não inclui corpus
espanhol de fármacos (PharmaCoNER), então para medicamento o irmão
[`openmed-br-clinical-pt`](https://huggingface.co/BrazilAI/openmed-br-clinical-pt)
vai melhor (0.67). Teste held-out pequeno (77 frases) → honesto, porém ruidoso.

## Qual modelo escolher

| Precisa de… | Use |
|---|---|
| Maior F1 geral, doença/procedimento/sintoma | **este** (`large-pt`, GPU) |
| Rodar em **CPU**, baixo custo, foco em medicamento | [`openmed-br-clinical-pt`](https://huggingface.co/BrazilAI/openmed-br-clinical-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. Uso não-diagnóstico/administrativo fica fora da ANVISA
  RDC 657/2022; sugestão diagnóstica/terapêutica a paciente entra em regulação (SaMD).
- **LGPD** — dado de saúde é sensível: contexto de tutela da saúde (Art. 11, II, "f")
  ou anonimização prévia. Prefira execução local.
- **Revisão humana obrigatória** — não use para decisão clínica.

## Roadmap

- **PharmaCoNER** (fármacos ES) no mix → fechar o gap de MEDICAMENTO (meta: geral >0.70).
- Ligação das entidades a **CID-10 / TUSS / SIGTAP / OBM**.
- Treino/avaliação sobre **texto clínico real em PT** rumo ao SOTA (~0.76).

## Atribuição e citação (obrigatória — CC BY 4.0)

- **Base**: `xlm-roberta-base` (MIT).
- **Ouro PT**: MultiCoNER v2 — Fetahu et al., *arXiv:2310.13213*; SemEval-2023 Task 2, *arXiv:2305.06586* (CC BY 4.0).
- **Ouro ES** (CC BY 4.0): DisTEMIST (Zenodo 7614764), MedProcNER (Zenodo 8224056), SympTEMIST (Zenodo 8223653) — BioASQ/BSC.
- **Prata PT (professores)**: BioBERTpt / clinicalnerpt / **SemClinBr** — Schneider et al., 2020 (ClinicalNLP@EMNLP); Oliveira et al., *J. Biomed. Semantics*, 2022; HAILab-PUCPR.

```bibtex
@misc{openmedbr_large_pt,
  title  = {OpenMed-BR Clinical NER (Large, PT cross-lingual)},
  author = {OpenMed-BR / BrazilAI},
  year   = {2026},
  howpublished = {\url{https://huggingface.co/BrazilAI/openmed-br-large-pt}}
}
```

## Licença
CC BY 4.0 — uso livre (inclusive comercial) **com atribuição**.