# 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é
