Limites d'usage
Preuve de concept, non certifiée dispositif médical. Ce modèle ne pose pas
de diagnostic, ne prescrit pas, et ne remplace aucune décision soignante. Le
barème employé est une transposition simplifiée de l'échelle FRENCH à trois
niveaux, non validée par un clinicien. Le périmètre est l'adulte : la
pédiatrie et l'obstétrique en sont exclues.
Le modèle ne doit pas être servi seul. Le service de référence le double
d'un barème explicite qui relève la priorité lorsque le modèle annonce moins
grave que les constantes ne le justifient.
Risques connus
Hallucinations. Le texte d'explication est produit librement et n'est pas
vérifié. Le modèle cite parfois un critère qui ne s'applique pas au tableau
clinique fourni. Le niveau et la liste des critères exposés par le service,
eux, sont calculés par le barème et restent justes : c'est le texte libre, et
lui seul, qui ne doit pas être présenté à un soignant comme une justification
auditée.
Sous-triage résiduel. Sur des motifs jamais vus, le modèle annonce une part
non nulle des urgences vitales à un niveau moindre (voir le tableau
ci-dessous). C'est la raison pour laquelle il ne doit jamais être servi seul.
Biais d'apprentissage. Trois sont identifiés et assumés :
- Biais du barème. Les étiquettes d'entraînement sont déduites d'un barème
écrit par l'équipe technique et non validé cliniquement. Toute erreur de ce
barème a été apprise telle quelle, et aucune évaluation ne peut la révéler
puisqu'elle sert aussi de référence.
- Biais de construction. Les cas sont générés par règles à partir d'un nombre
fini de motifs de recours. Ils sont par nature cohérents et complets, là où
un dossier réel comporte des constantes manquantes, des saisies erronées et
des tableaux ambigus. Les performances mesurées sont un plafond, pas une
prévision de terrain. Les motifs absents du générateur sont hors couverture.
- Biais de longueur. Écarté à la source : les paires de préférence dont
l'étiquette d'origine repose sur la longueur de la réponse ont été exclues du
jeu DPO. Sans cela, l'alignement aurait appris à préférer les réponses
longues plutôt que les réponses justes.
Démographie. Âge et sexe sont tirés dans des bornes plausibles par motif ;
aucun autre attribut n'est représenté, et aucune analyse d'équité par
sous-groupe n'a été conduite. Elle serait un préalable à tout pilote.
Le modèle attend le format exact vu à l'entraînement. Toute autre mise en
forme dégrade les performances sans signal visible.
Patient de 68 ans, sexe masculin.
Motif de recours : douleur thoracique.
Symptômes rapportés : irradiation au bras gauche, pâleur.
Antécédents : hypertension artérielle, tabagisme.
Constantes à l'admission : FC 118/min, PA 88/55 mmHg, FR 32/min, SpO2 88 %, T 37,4 °C, Glasgow 14, EVA 8/10.
Évaluez le niveau de priorité de triage et justifiez votre évaluation.
Le gabarit de conversation est appliqué avec enable_thinking=False.
Table with columns: Modèle, Exactitude, Sous-triage critique| Modèle | Exactitude | Sous-triage critique |
|---|
sft_generalisation | 89.5 % [86.8 à 91.7] | 8.5 % [5.4 à 13.2] |
dpo_ablation_generalisation | 90.2 % [87.5 à 92.3] | 8.5 % [5.4 à 13.2] |
Le sous-triage critique — une urgence maximale annoncée à un niveau
moindre — est la métrique de sécurité du projet. Un sur-triage encombre le
service ; un sous-triage laisse un patient grave en salle d'attente. Les deux
ne se compensent pas et ne sont jamais agrégés.
Mesures obtenues sur 600 cas construits à partir de motifs de recours
jamais vus à l'entraînement, intervalles de Wilson à 95 %.
Chargement
from peft import PeftModel
from transformers import AutoModelForCausalLM, AutoTokenizer
base = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3-1.7B-Base")
modele = PeftModel.from_pretrained(base, "ClementRbl/triage-chsa-qwen3-1.7b")
tokenizer = AutoTokenizer.from_pretrained("ClementRbl/triage-chsa-qwen3-1.7b")
Avec vLLM :
vllm serve Qwen/Qwen3-1.7B-Base \
--enable-lora --max-lora-rank 16 \
--lora-modules triage=ClementRbl/triage-chsa-qwen3-1.7b