Files
Aivanov_scan_ogc/bench_v2_report.md
Dom b6dd9ff1df chore(bench): résultats V2 et rapports de benchmarking
Snapshot des 18 JSONs produits par le pipeline V2 (Qwen2.5-VL-3B +
checkboxes densité + validation ATIH), utiles au collaborateur comme
référence de ce que la chaîne actuelle produit.

Rapports :
- bench_v2_report.md       : comparaison V2 vs legacy docTR+VLM
                             (couverture, divergences, régressions
                             notables sur codage_reco et praticien).
- validation_report.md     : résumé de la validation ATIH sur les 18
                             JSONs (131/149 → 140/149 codes valides
                             après fix suffixes `*` et `+N`, 0
                             incohérence GHM↔GHS, 8 suggestions de
                             correction OCR).

Script de comparaison :
- bench_v11_vs_legacy.py   : tableau d'accord champ par champ entre
                             un run du pipeline (output/v2/) et les
                             JSONs legacy (output/).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-24 15:06:30 +02:00

59 lines
3.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Bench V2 (Qwen2.5-VL-3B) vs V0 legacy — 18 dossiers OGC 2018
Bench terminé (18/18 JSONs dans `output/v2/`, 0 parse_error, 0 truncated_loop).
Temps VLM cumulé **495 s****27.5 s / dossier** sur 6 pages. Legacy non-GT : les chiffres ci-dessous mesurent l'écart, pas la justesse absolue.
## Couverture & accord (page `recueil`)
| Champ | V2 extr. | Legacy extr. | Accord (both) | Diffs |
|---|---:|---:|---:|---:|
| n_ogc / finess / date_debut_controle | 100% | 94% | 100% | 0 |
| etablissement / dates_sejour | 100% | 94% | 94% | 1 |
| codage_etab.dp | 100% | 94% | 76% | 4 |
| codage_etab.dp_libelle | 94% | 94% | 69% | 5 |
| codage_etab.dr | 77% | 38% | 20% | 4 |
| **codage_reco.dp** | **27%** | 94% | 25% | 3 |
| ghm_etab / ghs_etab | 100% | 8388% | 8187% | 23 |
| ghm_reco / ghs_reco | 100% | 77% | 93% | 1 |
| recodage_impactant | 100% | 88% | 75% | 4 |
| ghs_injustifie | 100% | 66% | 42% | 7 |
| accord_desaccord | 100% | 94% | 82% | 3 |
| praticien_conseil | 88% | 94% | 47% | 8 |
**DAS** : etab 31/47 récupérés (66%), **reco 5/41 (12%)**.
## Audit visuel — 3 divergences `codage_reco.dp`
| Dossier | Legacy | V2 | Réalité (image) | Gagnant |
|---|---|---|---|---|
| OGC 20 | `D274` | `D374` | **D374** | **V2** (legacy fautif) |
| OGC 66 | `C780` | `C07` (copie etab) | **C780** | **Legacy** |
| OGC 74 | `B991` | `A099` (copie etab) | **≈B991** | **Legacy** |
Pattern : V2 laisse vide (13/18) ou recopie `codage_etab.dp` (3/18) au lieu de lire la colonne droite.
## Top 5 améliorations V2
1. **GHM/GHS reco** 100% vs 77% couverture (+4 dossiers).
2. **Corrections OCR crédibles** : OGC 27 `1652` (invalide CIM-10) → `I652` ; OGC 66 `CO7``C07`.
3. **Zéro parse error** / JSON toujours bien formé (vs boucles DAS tronquées en legacy).
4. **`codage_etab.dr`** mieux rempli : 77% vs 38%.
5. **Entête 100% stable** (finess, dates, n_ogc, étab) — plus aucun rateau.
## Top 3 régressions V2
1. **`codage_reco.*` sous-extrait** : dp 27% vs 94%, DAS reco 12% de récupération. La colonne Recodage est structurellement ignorée.
2. **`praticien_conseil` halluciné** : « DR VIGNAU » dans **15/18** dossiers, y compris où legacy lit clairement PIAU, POSE CATHERINE, Masson. Biais fréquentiel.
3. **`ghs_injustifie` non structuré** : renvoie le libellé complet « 0 SE 1 2 3 4 ATU FFM FSD » au lieu de la case cochée (7 désaccords).
## Verdict
**V2 n'est PAS prêt à remplacer V0 en l'état.** Les champs d'entête, GHM/GHS et DP etab progressent clairement, mais la **colonne Recodage — cœur métier du contrôle T2A** — est quasi-ignorée. Déployer perdrait l'information la plus utile du dossier.
Blocages : (a) extraction `codage_reco.*`, (b) hallucination `praticien_conseil`, (c) `ghs_injustifie` non structuré.
## Actions priorisées
1. **P0 — Prompt `recueil` avec colonne Recodage explicite** : few-shot montrant les deux colonnes (Codage étab | Recodage), demander séparément `codage_reco.{dp,dr,das}`. Tester un crop ciblé demi-page droite avec passe dédiée.
2. **P1 — Anti-hallucination `praticien_conseil`** : contrainte prompt (« si illisible, chaîne vide, ne jamais deviner ») + éventuelle passe OCR manuscrit sur crop bas de page. Valider que VIGNAU ne redevient pas défaut.
3. **P2 — Structurer `ghs_injustifie`** via `checkboxes.py` (case cochée, pas libellé). Au passage corriger `pipeline/persist.py` : `ocr_model="Qwen/Qwen2.5-VL-3B-Instruct"`, `pipeline_version="v2"` (actuellement tag "GLM-OCR" obsolète dans `_meta`).