matheus-ciro-tcc/qwen3.5-0.8b-triagem-medica-ptbr
Qwen3.5-0.8B — Triagem médica em português brasileiro
Adaptador LoRA que faz roteamento de especialidade médica: dada a queixa de um paciente em texto livre e em português brasileiro, o modelo aponta a qual especialista procurar, entre 10 especialidades.
Treinado com QLoRA sobre Qwen/Qwen3.5-0.8B como parte de um Trabalho de Conclusão de Curso que investiga se um modelo de linguagem pequeno, rodando em placa de vídeo doméstica, dá conta dessa tarefa.
⚠️ Não é um dispositivo médico. Este modelo sugere um encaminhamento de especialidade a partir de texto; ele não diagnostica, não avalia gravidade de forma confiável e não substitui triagem por profissional de saúde. Não use para decisão clínica.
Detalhes
Especialidades cobertas
Dentista · Dermatologista · Ginecologista · Oftalmologista · Ortopedista - traumatologista · Otorrino · Psicólogo · Psicólogo, Psicanalista · Psiquiatra · Urologista
Dados
Recorte do MedPT com as 10 especialidades mais frequentes, split estratificado 80/10/10:
As classes são desbalanceadas — Psicólogo tem 57.113 exemplos contra 7.734 de Otorrino no corpus filtrado.
Hiperparâmetros
Resultados
A curva de validação caiu de forma consistente entre as épocas 1 e 2, sem sinal de sobreajuste.
Métricas de teste (F1 macro, acurácia, matriz de confusão) ainda não foram computadas para esta execução e serão adicionadas a este card quando estiverem prontas. Não presuma desempenho a partir dos números de loss.
Ver training_summary.json para o registro completo, incluindo notas sobre medições que o Trainer reportou incorretamente por causa de retomadas.
Como usar
O prompt segue o formato ChatML com um system prompt que enumera as especialidades. O metadata.json neste repositório traz o prompt exato e a lista de rótulos.
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
from peft import PeftModel
BASE = "Qwen/Qwen3.5-0.8B"
ADAPTER = "matheus-ciro-tcc/qwen3.5-0.8b-triagem-medica-ptbr"
tokenizer = AutoTokenizer.from_pretrained(ADAPTER)
model = AutoModelForCausalLM.from_pretrained(BASE, torch_dtype=torch.bfloat16, device_map="auto")
model = PeftModel.from_pretrained(model, ADAPTER)
model.eval()
ESPECIALIDADES = [
"Dentista", "Dermatologista", "Ginecologista", "Oftalmologista",
"Ortopedista - traumatologista", "Otorrino", "Psicólogo",
"Psicólogo, Psicanalista", "Psiquiatra", "Urologista",
]
system = (
"Você é um sistema de triagem médica. Dada a queixa do paciente, "
"classifique a especialidade médica mais apropriada entre: "
+ ", ".join(sorted(ESPECIALIDADES)) + "."
)
queixa = "Estou com manchas vermelhas que coçam nos braços há duas semanas."
messages = [{"role": "system", "content": system}, {"role": "user", "content": queixa}]
prompt = tokenizer.apply_chat_template(
messages, tokenize=False, add_generation_prompt=True, enable_thinking=False
)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
out = model.generate(**inputs, max_new_tokens=16, do_sample=False)
print(tokenizer.decode(out[0][inputs["input_ids"].shape[-1]:], skip_special_tokens=True).strip())Importante: o Qwen3.5 precisa rodar em non-thinking mode (enable_thinking=False). No thinking mode o 0.8B entra em laço infinito.
Limitações
- Classificação fechada. Só sabe escolher entre as 10 especialidades acima. Queixa fora desse escopo produz um rótulo errado, não uma abstenção.
- `Psicólogo` e `Psicólogo, Psicanalista` se sobrepõem quase totalmente no dataset. Em execuções anteriores do mesmo pipeline, a segunda classe foi absorvida pela primeira.
- Sem consciência de urgência. O modelo roteia especialidade; não identifica emergência nem prioriza atendimento.
- Viés do corpus. O MedPT vem de perguntas feitas por pacientes em plataforma online, com a distribuição de queixas e o vocabulário desse contexto.
- Português brasileiro apenas.
Autores
Matheus Marques Eiras e Ciro Guilherme Nass Orientador: João Paulo Orlando Instituto Federal do Paraná — Câmpus Pinhais
Licença
Apache 2.0, herdada do modelo base Qwen/Qwen3.5-0.8B. O dataset MedPT tem seus próprios termos — consulte o card do dataset.
Referências
- MedPT: FÄRBER, F. B. et al. MedPT: a massive medical question answering dataset for Brazilian-Portuguese speakers. arXiv:2511.11878, 2026.
- QLoRA: DETTMERS, T. et al. QLoRA: efficient finetuning of quantized LLMs. arXiv:2305.14314, 2023.
- LoRA: HU, E. J. et al. LoRA: low-rank adaptation of large language models. arXiv:2106.09685, 2021.
