CoolFace
Modelpublic

matheus-ciro-tcc/qwen35-2b-triagem-medica-piloto

sourceHugging Faceupdated 27d agoView on Hugging Face
0likes15downloads
Model Card

Qwen3.5-2B — Triagem Médica em Português Brasileiro (piloto)

Adaptadores LoRA (QLoRA, 4-bit) para o `Qwen/Qwen3.5-2B`, ajustados para classificar a especialidade médica mais adequada a partir da queixa de um paciente escrita em texto livre, em português brasileiro.

Faz parte do TCC "Triagem médica automatizada em português brasileiro: ajuste fino QLoRA de modelos de linguagem para roteamento de especialidade" (Matheus Marques Eiras, Ciro Guilherme Nass — Instituto Federal do Paraná, Câmpus Pinhais, orientação de João Paulo Orlando).

⚠️ Resultado de piloto, não do dataset completo. Este checkpoint foi treinado numa amostra reduzida (500 exemplos por classe) para validar o pipeline antes de comprometer o treino no dataset completo (145 mil exemplos). Os números aqui não são comparáveis diretamente aos resultados finais do Qwen3.5-0.8B do mesmo projeto, que já rodou no dataset completo.

Tarefa

Classificação fechada de especialidade médica entre 10 classes, a partir da queixa do paciente:

Dentista, Dermatologista, Ginecologista, Oftalmologista,
Ortopedista - traumatologista, Otorrino, Psicólogo, Psicólogo — Psicanalista,
Psiquiatra, Urologista

Dados

  • —Fonte: `AKCIT/MedPT` — corpus público de 384.095 pares de pergunta e resposta médica em português brasileiro.
  • —Piloto: 500 exemplos por classe (4.000 treino / 500 validação / 500 teste), split estratificado 80/10/10, seed 42.

Método

QLoRA: base Qwen/Qwen3.5-2B congelada e quantizada em NF4 4-bit; adaptadores LoRA treinados nas projeções de atenção e no MLP.

ParâmetroValor
LoRA rank / alpha16 / 32
Módulosq/k/v/oproj, gate/up/downproj
Parâmetros treináveis10.911.744
Batch efetivo32 (batch 2 × acumulação 16)
Learning rate2e-4 (cosseno)
Épocas3 (375 passos)
Precisãobf16, otimizador adamw_8bit
HardwareRTX 4070 12 GB

Resultados (piloto)

MétricaValor
Loss final de treino0,8445
Eval loss (época 3)0,8455
Duração28 min
Pico de VRAM7,73 GB

Avaliação de acurácia/F1 macro sobre o conjunto de teste ainda não foi rodada para este checkpoint — ver o repositório do projeto para atualizações.

Nota: o modelo entra em loop infinito se rodado em thinking mode — sempre usar enable_thinking=False no template de chat (mesma observação já documentada para o Qwen3.5-0.8B do mesmo projeto).

Como usar

python
from unsloth import FastLanguageModel

model, tokenizer = FastLanguageModel.from_pretrained(
    model_name="MatheusMarquesEiras/qwen35-2b-triagem-medica-piloto",
    max_seq_length=1024,
    load_in_4bit=True,
)
FastLanguageModel.for_inference(model)

messages = [
    {"role": "system", "content": (
        "Você é um sistema de triagem médica. Dada a queixa do paciente, "
        "classifique a especialidade médica mais apropriada entre: Dentista, "
        "Dermatologista, Ginecologista, Oftalmologista, Ortopedista - "
        "traumatologista, Otorrino, Psicólogo, Psicólogo, Psicanalista, "
        "Psiquiatra, Urologista. Responda APENAS com o nome da especialidade, "
        "sem explicações adicionais."
    )},
    {"role": "user", "content": "Estou com muita dor de dente e sensibilidade ao frio."},
]
text = tokenizer.apply_chat_template(
    messages, tokenize=False, add_generation_prompt=True, enable_thinking=False,
)
inputs = tokenizer(text, return_tensors="pt").to(model.device)
out = model.generate(**inputs, max_new_tokens=20, do_sample=False)
print(tokenizer.decode(out[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))

Limitações conhecidas

  • —Treinado num piloto pequeno (500/classe) — não reflete o desempenho do dataset completo.
  • —Como no experimento com Qwen3.5-0.8B do mesmo projeto, a classe "Psicólogo, Psicanalista" tende a ser absorvida pela classe majoritária "Psicólogo" por sobreposição semântica quase total entre as duas.
  • —Modelo de triagem, não de diagnóstico — não deve ser usado para decisões clínicas sem supervisão de um profissional de saúde.

Framework versions

  • —PEFT 0.19.1
  • —Unsloth 2026.3.11
  • —TRL 0.24.0