Évaluation du juge LLM (C3) sur les canaris¶
Mesure du 2026-07-02 sur le sous-corpus canaris
(corpus/synthetique/06-canaris.md) : six identifiants indirects fictifs que
C1 et C2 manquent par construction (fonction rare, petite commune, surnom,
périphrase, matricule). Conformément au 02-AI-SPEC §4.3, il n'y a pas de
seuil dur en v1 : la fraction signalée est publiée telle quelle et sert de
non-régression au changement de modèle juge (F9).
Le texte est d'abord pseudonymisé par C1+C2 (moteur transformers, comme en
production), puis soumis au juge via Ollama local. Un canari compte comme
signalé si un candidat du juge recouvre l'un de ses extraits de référence
(verite-terrain-canaris.json) : inclusion dans un sens ou dans l'autre, ou
majorité des mots significatifs retrouvés.
Résultats¶
| Canari | mistral-small:24b | qwen3:4b |
|---|---|---|
| fonction-rare-epci | oui | non |
| elu-petite-commune | oui | non |
| professionnelle-unique | oui | non |
| surnom-jojo | oui | oui |
| predecesseur-mute | non | non |
| matricule-atypique | oui | oui |
| Total | 5/6 (83 %) | 2/6 (33 %) |
- mistral-small:24b : 5 candidats émis, tous pertinents (aucun bruit sur cette mesure). Seule la périphrase du prédécesseur (« muté après vingt-deux ans dans le même bureau ») lui échappe.
- qwen3:4b : 2 candidats émis, pertinents mais couverture faible. Un modèle de cette taille illustre F8 (fausse assurance d'une troisième lecture) : préférer un modèle de la classe 20B+ pour le rôle de juge.
Recommandation de référence : mistral-small:24b (RTX 5090, ~14 Go de
VRAM, ~10 s par passe). Sans juge configuré, le sas fonctionne et journalise
explicitement la moindre couverture (REQ-014).
Procédure (manuelle, hors CI)¶
La suite de tests n'appelle JAMAIS le réseau (garde-fou de conftest.py) :
cette mesure s'exécute à la main contre un Ollama local, à rejouer à chaque
changement de modèle juge (F9).
# Pile de démo (Ollama dans le réseau compose, non exposé sur l'hôte) :
docker compose cp corpus/synthetique/06-canaris.md sas:/tmp/06-canaris.md
docker compose cp corpus/synthetique/verite-terrain-canaris.json \
sas:/tmp/verite-terrain-canaris.json
docker compose exec sas python -m sas_confiance_ia.evaluation_juge \
--base-url http://ollama:11434/v1 --modele mistral-small:24b \
--corpus /tmp/06-canaris.md --verite /tmp/verite-terrain-canaris.json
# Ollama installé sur l'hôte :
python -m sas_confiance_ia.evaluation_juge \
--base-url http://127.0.0.1:11434/v1 --modele mistral-small:24b
Options : --score-min (défaut 0,5), --moteur transformers|spacy|aucun
(couche C2 appliquée avant la passe juge).
Limites¶
- Six canaris seulement : la mesure est indicative, pas statistique. Le sous-corpus s'enrichit à chaque limite découverte (règle transverse 4 du plan).
- L'appariement souple peut compter comme signalé un candidat voisin de l'extrait attendu. Garde-fous : les mots-outils ne comptent pas dans le recouvrement, chaque candidat ne valide qu'un seul canari (affectation 1:1, inclusions textuelles d'abord), et la CLI liste les candidats émis pour vérification humaine.
- Les candidats du juge partent en revue : cette mesure ne dit rien du taux de faux positifs en usage réel (surveillé via F7, score minimal 0,5).