297 lines
11 KiB
Markdown
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é
|