Initial commit
This commit is contained in:
296
MODELES_IA_NLP_UTILISES.md
Normal file
296
MODELES_IA_NLP_UTILISES.md
Normal file
@@ -0,0 +1,296 @@
|
||||
# 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é
|
||||
Reference in New Issue
Block a user