Bottleneck MLP Adapter BioBERT Medical Triage Classifier

Model Description

This repository contains a self-contained Bottleneck MLP Adapter BioBERT sequence classification model. The base encoder is frozen while bottleneck adapter layers and the classification head are trained.

The model receives a short English symptom description and predicts one of the following triage-oriented labels:

  • self_monitor
  • consult_gp
  • urgent

This model was developed as part of the SortMed academic project, a medical pre-triage assistant prototype built for a bachelor's thesis by Cristian Untaru at the West University of Timișoara, Faculty of Informatics.

The model is intended for research and educational use. It is not a diagnostic system and is not a certified medical device.

Intended Use

This model is intended to be used in an academic medical pre-triage prototype for:

  • classifying English symptom descriptions into broad urgency categories;
  • comparing transformer-based models for medical text classification;
  • evaluating full fine-tuning against parameter-efficient fine-tuning methods;
  • supporting experimental NLP research in symptom-based medical pre-triage.

Example input:

I have chest pain, shortness of breath, and I feel dizzy.

Example output:

urgent

Out-of-Scope Use

This model must not be used as:

  • a replacement for professional medical advice;
  • a diagnostic system;
  • an emergency decision-making tool;
  • a certified clinical triage system;
  • a standalone healthcare product;
  • a tool for non-English medical text without additional validation.

For severe, worsening, or emergency symptoms, users should contact emergency services or a qualified healthcare professional.

Labels

The model predicts one of three labels:

Label Meaning
self_monitor Symptoms appear mild and may be monitored, assuming no worsening or additional warning signs.
consult_gp A general practitioner or non-emergency medical professional should be consulted.
urgent Symptoms may require urgent medical attention or emergency evaluation.

The label mapping is included in label_map.json and in the model configuration.

Expected mapping:

{
    0: "self_monitor",
    1: "consult_gp",
    2: "urgent",
}

Training Data

The model was trained on the cristian-untaru/symcat-medical-triage-dataset, a SymCAT-derived dataset prepared for academic experiments in medical pre-triage classification.

The dataset contains English symptom-based text examples labeled into three triage classes:

  • self_monitor
  • consult_gp
  • urgent

Dataset split used for training:

Split Examples
Train 490
Validation 105
Test 106
Total 701

The dataset labels were produced using rule-based triage logic for academic experimentation. They are not clinically validated annotations from medical professionals.

MedQuAD was not used to train this classifier. In the broader SortMed system, MedQuAD is used separately for retrieval of related medical information through the cristian-untaru/medquad-retrieval-pretriage dataset.

Training Procedure

Base checkpoint:

dmis-lab/biobert-v1.1
Parameter Value
Fine-tuning method Bottleneck MLP Adapter
Maximum sequence length 128
Epochs 8
Train batch size 16
Evaluation batch size 32
Learning rate 0.0002
Weight decay 0.01
Warmup ratio 0.1
Mixed precision FP16
Early stopping patience 3
Best checkpoint metric f1
Random seed 42
Adapter bottleneck dimension 64
Adapter dropout 0.1
Adapter activation gelu
Trainable modules pooler, classifier

Additional training metadata is available in training_config.json.

Evaluation Results

The model was evaluated on the held-out test split.

Metric Test Score
Accuracy 0.7358
Macro Precision 0.7427
Macro Recall / Sensitivity 0.7331
Macro Specificity 0.8663
Macro F1 0.7357
Macro AUC OvR 0.8905
Macro IoU / Jaccard 0.5823
Test Loss 0.6419

Per-Class Results

Per-class metrics are not currently published as a separate artifact in this repository. The aggregate test metrics above are the available published evaluation results.

These results should be interpreted in the context of the small dataset size and the academic nature of the experiment.

How to Use

from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch

repo_id = "cristian-untaru/bottleneck-mlp-biobert-medical-triage"

tokenizer = AutoTokenizer.from_pretrained(repo_id)
model = AutoModelForSequenceClassification.from_pretrained(
    repo_id,
    trust_remote_code=True
)

text = "I have chest pain, shortness of breath, and I feel dizzy."

inputs = tokenizer(
    text,
    return_tensors="pt",
    truncation=True,
    padding=True,
    max_length=128
)

with torch.no_grad():
    outputs = model(**inputs)
    probabilities = torch.softmax(outputs.logits, dim=-1)
    predicted_class_id = torch.argmax(probabilities, dim=-1).item()

predicted_label = model.config.id2label[predicted_class_id]
confidence = probabilities[0][predicted_class_id].item()

print("Predicted label:", predicted_label)
print("Confidence:", round(confidence, 4))

This model includes a custom adapter architecture and therefore requires trust_remote_code=True when loading with AutoModelForSequenceClassification.

To verify the label mapping:

print(model.config.id2label)

Expected output:

{0: "self_monitor", 1: "consult_gp", 2: "urgent"}

Repository Files

File Description
config.json Model architecture, label mapping, and classification configuration.
model.safetensors Model weights in SafeTensors format.
tokenizer.json Tokenizer vocabulary and processing pipeline.
tokenizer_config.json Tokenizer configuration.
training_config.json Human-readable training configuration.
label_map.json Mapping between numeric class IDs and triage labels.
modeling_bottleneck_adapter.py Custom adapter architecture required by Bottleneck MLP models.
README.md Model card documentation.
.gitattributes Git LFS configuration for large model files.

Limitations

This model has several important limitations:

  • It was trained on a small academic dataset.
  • The labels are rule-based and not clinically validated by medical experts.
  • It does not perform medical diagnosis.
  • It does not consider patient age, sex, medical history, medication history, vital signs, comorbidities, pregnancy status, allergies, or physical examination findings.
  • It may produce incorrect predictions for rare, ambiguous, incomplete, severe, or contradictory symptom descriptions.
  • It was trained for English text only.
  • It should not be used for emergency triage without medical supervision.
  • Its predictions depend on the quality and completeness of the user-provided text.

Ethical and Safety Considerations

Medical pre-triage systems can influence user decisions in sensitive healthcare situations. This model should therefore be used only with clear disclaimers and with safeguards that encourage users to seek professional medical care when appropriate.

Any real-world deployment would require:

  • clinical expert review;
  • validation on larger and more representative medical datasets;
  • safety testing;
  • bias and fairness evaluation;
  • monitoring for incorrect or unsafe predictions;
  • clear user-facing warnings;
  • escalation rules for emergency symptoms.

Medical Disclaimer

This model is intended only for academic, research, and prototype development purposes. It is not a substitute for professional medical advice, diagnosis, treatment, or emergency care.

If symptoms are severe, sudden, worsening, or potentially life-threatening, users should contact emergency services or a qualified healthcare professional immediately.

Related Datasets

Related Models

Full Fine-Tuned Models

LoRA Models

Bottleneck MLP Adapter Models

Frozen Encoder Models

Downloads last month
10
Safetensors
Model size
0.1B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for cristian-untaru/bottleneck-mlp-biobert-medical-triage

Finetuned
(117)
this model

Dataset used to train cristian-untaru/bottleneck-mlp-biobert-medical-triage

Evaluation results