11 KiB
11 KiB
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
-
Extraction de faits cliniques (
ClinicalFactsExtractor)- Extraction de diagnostics, actes, examens, traitements
- Détection de qualificateurs (affirmé/nié/suspecté/antécédent)
- Extraction de temporalité
-
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
-
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
-
Vectorisation des référentiels
- CIM-10 FR PMSI 2026
- CCAM Descriptive 2025 (V81)
- Guide Méthodologique MCO 2026
-
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(oufaiss-gpupour 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
- 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
-
Recherche lexicale
- Recherche exacte sur codes (ex: "K29.7")
- Recherche sur termes techniques
- Composante de la recherche hybride
-
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
- 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_lgoufr_core_news_md - Fichier: Potentiellement dans
PIIProtector
Usages potentiels
-
Détection de DIP (Données Identifiantes du Patient)
- Named Entity Recognition (NER)
- Détection de noms, dates, adresses
- Complémentaire aux regex
-
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érentielsscripts/import_ccam.py- Import spécifique CCAM depuis Excel
Code Source
src/pipeline_mco_pmsi/llm/ollama_client.py- Client Ollamasrc/pipeline_mco_pmsi/rag/referentiels_manager.py- Gestion référentiels + embeddingssrc/pipeline_mco_pmsi/rag/rag_engine.py- Moteur RAG (BM25 + Vector + Reranking)src/pipeline_mco_pmsi/extractors/clinical_facts_extractor.py- Extraction avec LLMsrc/pipeline_mco_pmsi/coders/codeur.py- Codage avec LLMsrc/pipeline_mco_pmsi/verifiers/verificateur.py- Vérification avec LLM
Configuration
pyproject.toml- Dépendances et versions des bibliothèques
Dépendances Principales
# 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é