From b4e38558d2d0b9b032fe9ff15366d811fb3104ca Mon Sep 17 00:00:00 2001 From: mhillion Date: Tue, 18 Aug 2026 14:56:12 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20option=20--limit=20pour=20lancer=20un?= =?UTF-8?q?=20benchmark=20sur=20un=20=C3=A9chantillon=20de=20test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Permet d'évaluer un modèle sur les N premières copies sans dupliquer un YAML. Contrairement à --model-name, --limit n'entre PAS dans le nom du run : un test sur 100 copies et sa reprise complète partagent donc le même checkpoint, et relancer sans --limit poursuit là où le test s'était arrêté. uv run scripts/run_benchmark.py --config configs/scoring/dictee_end2end.yaml \ --model-name qwen3-8-27b --limit 100 C'était la seule brique qui manquait pour comparer un nouveau modèle : le reste existait déjà dans website/_analyse.py — `charger_runs()` découvre les exports S3, `restreindre_corpus_commun()` ramène les runs à leurs copies communes, et `synthese_globale()` produit les six métriques avec IC corrigés du design effect de Kish. Un run pilote se compare en pointant RESULTATS_MODELES dessus, sans toucher aux valeurs par défaut du site (y verser un run partiel restreindrait la section « corpus commun » à l'échantillon pour tous les modèles) : RESULTATS_MODELES="gemma4-26b-moe,qwen3-8-27b" quarto render website Premier usage — qwen3-8-27b (nouveau sur llm.lab, multimodal, json_schema et logprobs vérifiés) sur 100 copies, face à gemma4-26b-moe sur les mêmes copies, via A.synthese_globale (IC 95 %) : | métrique | qwen3-8-27b | gemma4-26b-moe | |-------------------------|------------------------|------------------------| | accord brut | 0,839 [0,816 ; 0,859] | 0,830 [0,814 ; 0,846] | | kappa de Cohen | 0,455 [0,398 ; 0,518] | 0,526 [0,484 ; 0,567] | | rappel des erreurs | 0,380 [0,333 ; 0,430] | 0,602 [0,559 ; 0,643] | | précision sur erreurs | 0,854 [0,807 ; 0,890] | 0,672 [0,626 ; 0,715] | | taux de sur-correction | 0,620 [0,570 ; 0,667] | 0,398 [0,357 ; 0,441] | | taux de sur-détection | 0,020 [0,014 ; 0,028] | 0,090 [0,079 ; 0,103] | qwen3-8-27b code « correct » 89,5 % du temps là où l'expert n'en voit que 76,5 %. Cette complaisance lui vaut la meilleure précision et la plus faible sur-détection, mais lui fait valider à tort 62 % des fautes des élèves contre 40 % pour gemma4. Son accord brut légèrement supérieur n'est qu'un artefact du déséquilibre des classes. Sur le rappel des erreurs et le kappa — ce qui compte pour la DEPP — gemma4-26b-moe reste devant. Prédictions exportées sur S3 : predictions/dictee_end2end_qwen3-8-27b_predictions.jsonl Co-Authored-By: Claude Sonnet 5 --- scripts/run_benchmark.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/scripts/run_benchmark.py b/scripts/run_benchmark.py index 2847e1e..7b8d812 100644 --- a/scripts/run_benchmark.py +++ b/scripts/run_benchmark.py @@ -40,10 +40,25 @@ def main() -> None: "Uniquement valide en approche two_stage." ), ) + parser.add_argument( + "--limit", + type=int, + default=None, + help=( + "Surcharge data.limit : n'évaluer que les N premières copies (test rapide). " + "N'entre PAS dans le nom du run, à la différence de --model-name : un run " + "limité et sa reprise complète partagent donc le même checkpoint, et " + "relancer sans --limit poursuit là où le test s'est arrêté." + ), + ) args = parser.parse_args() config = load_config(args.config) config = override_model_names(config, args.model_name, args.model_stage2_name) + if args.limit is not None: + config = config.model_copy( + update={"data": config.data.model_copy(update={"limit": args.limit})} + ) secrets = Secrets() if config.model_stage2 is not None: