- Ajout documentation VLM (Ollama qwen2.5vl:7b) - Pipeline complet: Regex → VLM → EDS-Pseudo → CamemBERT → Contextuel - Nouvelles exigences REQ-013/REQ-014 pour optimisation VLM - Tâches Phase 2.5: amélioration prompt, validation croisée, perf - Document ARCHITECTURE_REELLE.md avec détails complets - Matériel: AMD Ryzen 9 9950X, 128GB RAM, RTX 5070 12GB - Objectifs: Rappel ≥99.5%, Précision ≥97%, F1 ≥0.98
9.4 KiB
Résumé Exécutif - Optimisation de la Qualité d'Anonymisation
Contexte
Vous disposez d'un système d'anonymisation de documents PDF médicaux qui combine 4 couches de détection :
1. Extraction multi-passes : pdfplumber → pdfminer → PyMuPDF → docTR OCR → tesseract
2. Détection par regex : EMAIL, TEL, NIR, IBAN, IPP, FINESS, RPPS, OGC, dates, adresses
3. VLM (Vision Language Model) : Ollama avec qwen2.5vl:7b pour analyse visuelle des PDF scannés
- Détecte 20+ catégories de PII visuellement (manuscrit, mal orienté)
- Matching flou pour identifiants numériques manuscrits
- Masquage total des pages manuscrites (< 100 mots OCR)
4. NER : EDS-Pseudo (AP-HP, F1=0.97) via edsnlp OU CamemBERT-NER ONNX
5. Consolidation : Propagation globale + extraction Trackare + rescan sélectif
Corpus de travail : 59 dossiers OGC (130 fichiers PDF) dans /home/dom/Téléchargements/II-1 Ctrl_T2A_2025_CHCB_DocJustificatifs (1)/
Problématique
- ❌ Faux négatifs (PII non détectés) → Risque RGPD
- ❌ Faux positifs (termes médicaux masqués) → Documents illisibles
- ❌ VLM peut halluciner sur pages manuscrites complexes
- ❌ Pas de métriques de qualité mesurables
- ❌ Pas de validation post-anonymisation
- ❌ Pas d'optimisation GPU pour VLM (Ollama local)
Objectifs
Métriques cibles :
- Rappel ≥ 99.5% (max 0.5% de PII manqués)
- Précision ≥ 97% (max 3% de faux positifs)
- F1-Score ≥ 0.98
- Temps < 10s par PDF (avec GPU)
Matériel disponible :
- CPU : AMD Ryzen 9 9950X (16 cœurs / 32 threads)
- RAM : 128 GB
- GPU : NVIDIA RTX 5070 (12 GB VRAM)
- CUDA : PyTorch 2.10.0 avec support CUDA
Solution Proposée
1. Mesure (2 semaines)
Créer un dataset de test annoté :
- Sélectionner 30 documents représentatifs
- Annoter manuellement tous les PII
- Format JSON standardisé
Implémenter l'évaluation :
- Évaluateur de qualité (Précision, Rappel, F1)
- Scanner de fuite (détection PII résiduels)
- Benchmark de performance
Mesurer la baseline :
- Évaluer le système actuel
- Identifier les faux négatifs/positifs
- Benchmarker les performances
2. Amélioration (3 semaines)
Regex améliorées :
- Téléphones fragmentés :
06 12 34\n56 78 - Emails médicaux :
nom@chu-bordeaux.fr - Adresses avec compléments :
12 rue X, Bât. B, Appt. 12 - NIR avec espaces variables
- Noms avec caractères spéciaux :
O'Brien, Müller
Détection contextuelle :
- Noms après "Dr.", "Patient:", etc.
- Noms en MAJUSCULES (hors stopwords médicaux)
- Filtrage des faux positifs
Approche hybride :
- Pipeline en 5 étapes : Regex → VLM (si scanné) → EDS-Pseudo → CamemBERT → Contextuel
- Masquage progressif (éviter doublons)
- Fusion intelligente des résultats
- Validation croisée VLM ↔ NER (anti-hallucination)
- Accélération GPU pour NER et optimisation VLM
- Traitement parallèle de plusieurs PDFs (8-12 workers)
3. Validation (1 semaine)
Validation post-anonymisation :
- Scanner automatique de fuite
- Vérification métadonnées PDF
- Certificat de conformité
Tests de régression :
- Suite automatique sur dataset annoté
- Alerte si dégradation des métriques
Validation corpus complet :
- Exécution sur les 59 dossiers OGC
- Vérification 0 fuite critique
- Validation manuelle (échantillon)
4. Documentation (3 jours)
- Guide d'annotation
- Guide d'évaluation
- Référence API
- Rapports de qualité
Architecture Cible
PDF → Extraction texte → Détection Hybride → Consolidation → Redaction
(5 passes + GPU) ↓
Validation Post-Anonymisation
↓
Certificat de Conformité
Détection Hybride :
- Regex améliorées (formats structurés)
- VLM optimisé (Ollama qwen2.5vl:7b) - si PDF scanné
- EDS-Pseudo (noms, contexte médical) - GPU accéléré
- CamemBERT-NER (fallback) - GPU accéléré
- Contextuel (patterns linguistiques)
Optimisations Performance :
- Accélération CUDA pour modèles NER
- Batch processing optimisé (12 GB VRAM)
- VLM avec prompt amélioré et validation croisée
- Traitement parallèle multi-PDF (16 cœurs)
- Temps cible : < 10s par PDF (textuel), < 30s (scanné avec VLM)
Livrables
- ✅ Dataset annoté (30+ documents)
- ✅ Système d'évaluation (évaluateur + scanner + benchmark)
- ✅ Détecteurs améliorés (regex + contextuel + hybride)
- ✅ Tests de régression automatiques
- ✅ Rapports de qualité (HTML + JSON)
- ✅ Documentation complète
- ✅ Métriques baseline et finales
Planning
| Phase | Durée | Tâches Principales |
|---|---|---|
| Phase 1 : Mesure | 2 semaines | Dataset annoté, Évaluation, Baseline |
| Phase 2 : Amélioration | 3 semaines | Regex, Contextuel, Hybride, GPU optimization |
| Phase 3 : Validation | 1 semaine | Post-validation, Tests, Corpus complet |
| Phase 4 : Documentation | 3 jours | Guides, API, Rapports |
| Total | 7 semaines |
Prochaines Étapes
Étape 1 : Sélectionner les Documents de Test
# Analyser le corpus
cd "/home/dom/Téléchargements/II-1 Ctrl_T2A_2025_CHCB_DocJustificatifs (1)/"
find . -name "*.pdf" | wc -l # Compter les PDFs
# Sélectionner 30 documents représentatifs
# - 10 simples (1-2 pages, peu de PII)
# - 15 moyens (3-5 pages, PII variés)
# - 5 complexes (>5 pages, nombreux PII)
# Copier dans tests/ground_truth/
mkdir -p tests/ground_truth
# Copier manuellement les 30 PDFs sélectionnés
Étape 2 : Créer l'Outil d'Annotation
# Créer le fichier
touch tools/annotation_tool.py
# Implémenter l'outil CLI pour annoter les PDFs
# (voir design.md section 2.1.2 pour les spécifications)
Étape 3 : Annoter les Documents
# Lancer l'outil d'annotation
python tools/annotation_tool.py tests/ground_truth/
# Pour chaque PDF :
# 1. Afficher le texte page par page
# 2. Saisir les PII (type, texte, contexte)
# 3. Lister les termes médicaux à préserver
# 4. Sauvegarder en JSON
Étape 4 : Implémenter l'Évaluateur
# Créer le fichier
touch evaluation/quality_evaluator.py
# Implémenter :
# - Classe EvaluationResult
# - Classe QualityEvaluator
# - Méthode evaluate()
# - Calcul Précision/Rappel/F1
# - Génération de rapport
Étape 5 : Mesurer la Baseline
# Anonymiser les 30 documents annotés
python Pseudonymisation_Gui_V5.py # Ou CLI
# Évaluer
python evaluation/quality_evaluator.py \
--ground-truth tests/ground_truth/ \
--output reports/baseline_report.html
# Analyser les résultats
# - Identifier les faux négatifs
# - Identifier les faux positifs
# - Prioriser les améliorations
Points d'Attention
Annotation Manuelle
⚠️ Temps estimé : 30 documents × 1h = 30 heures
- Prévoir 5 jours dédiés
- Possibilité de paralléliser (2 annotateurs)
- Validation croisée recommandée
Optimisation GPU
✅ Accélération disponible : RTX 5070 avec 12 GB VRAM
- EDS-Pseudo et CamemBERT-NER peuvent utiliser CUDA
- Batch processing optimisé pour réduire le temps de traitement
- Objectif : < 10s par PDF (vs 30s en CPU-only)
- Fallback CPU automatique si GPU indisponible
Traitement Parallèle
✅ Puissance CPU : 16 cœurs / 32 threads
- Traitement simultané de 8-12 PDFs
- Speedup significatif sur corpus complet
- Répartition de charge intelligente
Faux Négatifs Critiques
⚠️ Priorité RGPD : 0 faux négatif = objectif
- Scanner de fuite obligatoire
- Validation post-anonymisation en mode strict
- Double vérification manuelle sur échantillon
Faux Positifs Médicaux
⚠️ Lisibilité : Préserver les termes médicaux
- Enrichir la liste des stopwords
- Validation par expert médical
- Ajustement des seuils de confiance
Critères de Succès
✅ Qualité :
- Rappel ≥ 99.5%
- Précision ≥ 97%
- F1-Score ≥ 0.98
- Taux de documents sûrs ≥ 98%
✅ Performance :
- Temps < 10s par PDF (avec GPU)
- Temps < 30s par PDF (fallback CPU)
- RAM < 32 GB par processus
- VRAM < 10 GB
- Pas de dégradation > 20% vs baseline
✅ Livrables :
- Dataset annoté créé
- Système d'évaluation fonctionnel
- Tests de régression en place
- Documentation complète
✅ Validation :
- 0 fuite critique sur corpus complet
- Validation expert médical (échantillon)
- Amélioration mesurable vs baseline
Ressources
Documentation :
requirements.md: Exigences détailléesdesign.md: Architecture techniquetasks.md: Plan d'implémentationREADME.md: Vue d'ensemble
Code :
tools/annotation_tool.py: Outil d'annotationevaluation/quality_evaluator.py: Évaluateurevaluation/leak_scanner.py: Scanner de fuitedetectors/improved_regex.py: Regex amélioréesdetectors/contextual.py: Détection contextuelledetectors/hybrid.py: Approche hybride
Tests :
tests/unit/: Tests unitairestests/regression/: Tests de régressiontests/ground_truth/: Dataset annoté
Configuration :
config/quality_config.yml: Configuration qualité
Rapports :
reports/baseline_report.html: Rapport baselinereports/final_report.html: Rapport finalreports/comparison.html: Comparaison avant/après
Prêt à démarrer ? Commencez par la Phase 1 : Sélection et annotation des 30 documents de test !