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>
59 lines
3.5 KiB
Markdown
59 lines
3.5 KiB
Markdown
# 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% | 83–88% | 81–87% | 2–3 |
|
||
| 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`).
|