Files
Domi31tls 0067738df6 spec: Architecture complète avec VLM (5 couches détection)
- 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
2026-03-02 09:52:49 +01:00

322 lines
9.4 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.
# 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** :
1. Regex améliorées (formats structurés)
2. VLM optimisé (Ollama qwen2.5vl:7b) - si PDF scanné
3. EDS-Pseudo (noms, contexte médical) - GPU accéléré
4. CamemBERT-NER (fallback) - GPU accéléré
5. 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
1. ✅ Dataset annoté (30+ documents)
2. ✅ Système d'évaluation (évaluateur + scanner + benchmark)
3. ✅ Détecteurs améliorés (regex + contextuel + hybride)
4. ✅ Tests de régression automatiques
5. ✅ Rapports de qualité (HTML + JSON)
6. ✅ Documentation complète
7. ✅ 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
```bash
# 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
```bash
# 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
```bash
# 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
```bash
# 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
```bash
# 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ées
- `design.md` : Architecture technique
- `tasks.md` : Plan d'implémentation
- `README.md` : Vue d'ensemble
**Code** :
- `tools/annotation_tool.py` : Outil d'annotation
- `evaluation/quality_evaluator.py` : Évaluateur
- `evaluation/leak_scanner.py` : Scanner de fuite
- `detectors/improved_regex.py` : Regex améliorées
- `detectors/contextual.py` : Détection contextuelle
- `detectors/hybrid.py` : Approche hybride
**Tests** :
- `tests/unit/` : Tests unitaires
- `tests/regression/` : Tests de régression
- `tests/ground_truth/` : Dataset annoté
**Configuration** :
- `config/quality_config.yml` : Configuration qualité
**Rapports** :
- `reports/baseline_report.html` : Rapport baseline
- `reports/final_report.html` : Rapport final
- `reports/comparison.html` : Comparaison avant/après
---
**Prêt à démarrer ?** Commencez par la Phase 1 : Sélection et annotation des 30 documents de test !