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