Files
aivanov_CIM/MODELES_IA_NLP_UTILISES.md
2026-03-05 01:20:14 +01:00

297 lines
11 KiB
Markdown

# Modèles IA/NLP Utilisés dans le Pipeline MCO PMSI
## Vue d'ensemble
Le système utilise une architecture RAG (Retrieval-Augmented Generation) combinant plusieurs modèles d'IA et de NLP pour automatiser le codage médical PMSI.
---
## 1. LLM Principal - Ollama
### Configuration
- **Modèle**: `mistral-large-3:675b-cloud`
- **Serveur**: Ollama (local, on-premises)
- **URL**: `http://localhost:11434`
- **Fichier**: `src/pipeline_mco_pmsi/llm/ollama_client.py`
### Caractéristiques
- **Inférence locale**: Aucune donnée ne quitte l'hôpital (conformité RGPD)
- **Température**: 0.1 (par défaut, pour déterminisme et reproductibilité)
- **Timeout**: 300 secondes
- **Support JSON**: Génération de réponses structurées
- **GPU**: Utilise NVIDIA RTX 5070 (12GB VRAM)
### Usages dans le pipeline
1. **Extraction de faits cliniques** (`ClinicalFactsExtractor`)
- Extraction de diagnostics, actes, examens, traitements
- Détection de qualificateurs (affirmé/nié/suspecté/antécédent)
- Extraction de temporalité
2. **Codage initial** (`Codeur`)
- Proposition de codes CIM-10 (DP, DR, DAS)
- Proposition de codes CCAM
- Génération de justifications et raisonnements
- Calcul de scores de confiance
3. **Vérification indépendante** (`Verificateur`)
- Détection d'erreurs sensibles DIM
- Validation des propositions du Codeur
- Génération de contradictions et alternatives
---
## 2. Modèle d'Embeddings - Sentence Transformers
### Configuration
- **Modèle actuel**: `sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2`
- **Alternatives médicales**: `camembert-bio`, `DrBERT`
- **Fichier**: `src/pipeline_mco_pmsi/rag/referentiels_manager.py`
### Caractéristiques
- **Dimension**: 384 (MiniLM) ou 768 (CamemBERT/DrBERT)
- **Normalisation**: L2 normalization pour cosine similarity
- **Multilingue**: Optimisé pour le français
- **Domaine**: Adapté au vocabulaire médical
### Usages dans le pipeline
1. **Vectorisation des référentiels**
- CIM-10 FR PMSI 2026
- CCAM Descriptive 2025 (V81)
- Guide Méthodologique MCO 2026
2. **Recherche sémantique**
- Mapping termes cliniques → codes
- Recherche de codes similaires
- Gestion des paraphrases et variations terminologiques
---
## 3. Index Vectoriel - FAISS
### Configuration
- **Type d'index**: HNSW (Hierarchical Navigable Small World)
- **Bibliothèque**: `faiss-cpu` (ou `faiss-gpu` pour GPU)
- **Fichier**: `src/pipeline_mco_pmsi/rag/referentiels_manager.py`
### Paramètres HNSW
- **M**: 32 (nombre de connexions par nœud)
- **efConstruction**: 200 (qualité de construction)
- **Métrique**: Cosine similarity (via L2 normalization)
### Caractéristiques
- **Performance**: Recherche rapide sur des millions de vecteurs
- **Précision**: Compromis optimal entre vitesse et qualité
- **GPU**: Support optionnel pour accélération
### Usages dans le pipeline
1. **Recherche vectorielle rapide**
- Top-K nearest neighbors
- Recherche sémantique dans les référentiels
- Composante de la recherche hybride
---
## 4. Recherche BM25 - Rank-BM25
### Configuration
- **Bibliothèque**: `rank-bm25`
- **Fichier**: `src/pipeline_mco_pmsi/rag/rag_engine.py`
### Caractéristiques
- **Algorithme**: BM25 (Best Matching 25)
- **Type**: Recherche par mots-clés (lexicale)
- **Complémentarité**: Combiné avec vector search
### Usages dans le pipeline
1. **Recherche lexicale**
- Recherche exacte sur codes (ex: "K29.7")
- Recherche sur termes techniques
- Composante de la recherche hybride
2. **Fusion RRF** (Reciprocal Rank Fusion)
- Combinaison BM25 + Vector Search
- Top 50 de chaque méthode
- Fusion puis reranking
---
## 5. Reranking - Cross-Encoder
### Configuration
- **Type**: Cross-encoder (sentence-transformers)
- **Fichier**: `src/pipeline_mco_pmsi/rag/rag_engine.py`
### Caractéristiques
- **Précision**: Plus précis que bi-encoder pour le classement final
- **Coût**: Plus lent, utilisé uniquement sur top-K candidats
- **Priorisation**: Résultats d'index alphabétique prioritaires
### Usages dans le pipeline
1. **Reranking final**
- Reclassement des top 50 candidats (BM25 + Vector)
- Sélection des top 10 finaux
- Amélioration de la précision
---
## 6. NLP Français - Spacy (optionnel)
### Configuration
- **Bibliothèque**: `spacy >= 3.7.0`
- **Modèle**: `fr_core_news_lg` ou `fr_core_news_md`
- **Fichier**: Potentiellement dans `PIIProtector`
### Usages potentiels
1. **Détection de DIP** (Données Identifiantes du Patient)
- Named Entity Recognition (NER)
- Détection de noms, dates, adresses
- Complémentaire aux regex
2. **Analyse syntaxique**
- Tokenization
- POS tagging
- Dependency parsing
---
## Architecture RAG Complète
```
┌─────────────────────────────────────────────────────────────┐
│ Documents Cliniques │
└────────────────────────┬────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ Ollama (mistral-large-3:675b-cloud) │
│ Extraction de Faits │
└────────────────────────┬────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ Recherche Hybride │
│ ┌──────────────┐ ┌──────────────────────────────┐ │
│ │ BM25 Search │ │ Vector Search (FAISS) │ │
│ │ (Rank-BM25) │ │ (Sentence Transformers) │ │
│ └──────┬───────┘ └──────────┬───────────────────┘ │
│ │ │ │
│ └──────────┬──────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────┐ │
│ │ Fusion RRF (Top 50) │ │
│ └──────────┬───────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────┐ │
│ │ Reranking (Top 10) │ │
│ │ (Cross-Encoder) │ │
│ └──────────┬───────────┘ │
└────────────────────┼────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ Ollama (mistral-large-3:675b-cloud) │
│ Codage + Vérification │
└────────────────────────┬────────────────────────────────────┘
Codes CIM-10/CCAM
```
---
## Fichiers de Référence
### Scripts
- `scripts/load_referentiels.py` - Chargement et indexation des référentiels
- `scripts/import_ccam.py` - Import spécifique CCAM depuis Excel
### Code Source
- `src/pipeline_mco_pmsi/llm/ollama_client.py` - Client Ollama
- `src/pipeline_mco_pmsi/rag/referentiels_manager.py` - Gestion référentiels + embeddings
- `src/pipeline_mco_pmsi/rag/rag_engine.py` - Moteur RAG (BM25 + Vector + Reranking)
- `src/pipeline_mco_pmsi/extractors/clinical_facts_extractor.py` - Extraction avec LLM
- `src/pipeline_mco_pmsi/coders/codeur.py` - Codage avec LLM
- `src/pipeline_mco_pmsi/verifiers/verificateur.py` - Vérification avec LLM
### Configuration
- `pyproject.toml` - Dépendances et versions des bibliothèques
---
## Dépendances Principales
```toml
# LLM et Embeddings
langchain >= 0.1.0
sentence-transformers >= 2.2.0
transformers >= 4.36.0
torch >= 2.1.0
# Vector Store et Recherche
faiss-cpu >= 1.7.4 # ou faiss-gpu
rank-bm25 >= 0.2.2
# NLP
spacy >= 3.7.0
nltk >= 3.8.1
# Traitement de documents
pypdf >= 3.17.0
pandas >= 2.0.0
openpyxl >= 3.1.0
# API HTTP pour Ollama
httpx >= 0.25.0
requests >= 2.31.0
```
---
## Performance et Optimisation
### GPU
- **FAISS**: Utilise GPU si disponible (`faiss-gpu`)
- **Ollama**: Utilise automatiquement le GPU (NVIDIA RTX 5070)
- **Sentence Transformers**: Peut utiliser GPU pour vectorisation
### Caching
- **Embeddings**: Cache des vecteurs fréquents
- **Index FAISS**: Sauvegardé sur disque pour réutilisation
- **Référentiels**: Chunks sauvegardés en JSON
### Reproductibilité
- **Température LLM**: 0.1 pour déterminisme
- **Seed**: Fixé pour génération reproductible
- **Versionnement**: Hash SHA-256 de tous les composants
---
## Conformité et Sécurité
### On-Premises
- ✅ Ollama local (pas d'API externe)
- ✅ FAISS local (pas de cloud)
- ✅ Sentence Transformers local
- ✅ Aucune donnée ne quitte l'hôpital
### Protection DIP
- Détection hybride (regex + NER potentiel avec Spacy)
- Anonymisation avant logs
- Filtrage des exports
### Versionnement
- Hash SHA-256 de tous les modèles
- Hash des prompts
- Hash des référentiels
- Traçabilité complète
---
## Mise à Jour
**Date**: 2026-02-12
**Version du système**: 0.1.0
**Statut**: MVP fonctionnel avec Ollama intégré