TL;DR (chiffres clés)
Table with columns: Modèle, Méthode, Held-out 704 (strict), Held-out 704 (indulgent), Hallucination OOD| Modèle | Méthode | Held-out 704 (strict) | Held-out 704 (indulgent) | Hallucination OOD |
|---|
| Ce modèle (CPT+SFT) | CPT synthétique + SFT | 63,8% | 80,3% | 12% |
gpt-oss-20b-FAQ-MES | SFT direct (20B) | 42,5% | 67,8% | 60% |
| SFT direct (notre ablation, Qwen3-14B) | SFT direct, sans CPT | 37,2% | 61,1% | 56% |
Le CPT préalable fait passer la précision closed-book de 37,2 % → 63,8% (strict)
sur 704 questions held-out jamais vues, là où le SFT seul plafonne (le modèle « bluffe » les détails).
Données (toutes publiées)
Pipeline complet (reproductible)
Matériel : 1× NVIDIA H100 PCIe 80 Go.
1) Génération synthétique (1-hop, anti model-collapse)
- Générateur : Qwen3-32B-FP8 servi par vLLM (
VLLM_USE_DEEP_GEMM=0 ; thinking désactivé via
chat_template_kwargs.enable_thinking=False), piloté par NVIDIA NeMo Curator.
- Prompts Nemotron-CC adaptés FR (rephrase Wikipédia, distill, extract-knowledge, knowledge-list,
diverse-QA) + opérateur EntiGraph custom (passages reliant paires/triplets de faits réels).
- Tag de domaine
[Mon espace santé] ; filtre qualité + déduplication (shingles n-grammes).
- Décontamination vs held-out : embeddings bge-m3 (cos ≥ 0,90) + n-grammes (containment ≥ 0,6).
- Volume retenu : ~3,87 M tokens distincts (plafond extractible de 88 faits ; ~×260).
2) CPT — continued pre-training (full fine-tuning) → modèle de base enrichi
- Modèle :
Qwen/Qwen3-14B-Base, tous les poids entraînés.
- Corpus : corpus CPT + 18 % de replay FR généraliste (anti-oubli, Ibrahim 2403.08763).
- Hyperparamètres : 3 epochs, lr 1e-5, cosine + warmup 3 %, weight_decay 0,01, grad clip 1,0,
bf16, seq_len 2048, micro-batch 1 × accumulation 16, gradient checkpointing, attention SDPA.
- Optimiseur : bitsandbytes
paged_adamw_8bit (sans DeepSpeed — ZeRO-3 CPU-offload provoquait un
OOM CPU ; le paged 8-bit tient en ~81 Go GPU paginé + ~25 Go RAM).
- Résultat →
fenyo/H100-Qwen3-14B-MonEspaceSante-CPT.
- Données :
MonEspaceSante-SFT (428 Q/R domaine + 120 refus).
- Format fixe :
Question : {q}\nRéponse : {a} ; loss sur la réponse uniquement (prompt masqué).
- Hyperparamètres : 12 epochs, lr 2e-5, cosine + warmup 3 %, bf16, seq_len 2048,
micro-batch 4 × accumulation 4, gradient checkpointing,
paged_adamw_8bit.
Inférence (closed-book)
prompt = f"Question : {question}\nRéponse :"
Résultats détaillés
Courbe accuracy vs tokens synthétiques (CPT+SFT, juge Qwen3-32B)
Table with columns: Tokens synth. distincts, Held-out strict, Held-out indulgent, Validation strict, Validation indulgent| Tokens synth. distincts | Held-out strict | Held-out indulgent | Validation strict | Validation indulgent |
|---|
| 0 (baseline SFT direct) | 37,2% | 61,1% | 43,3% | 53,3% |
| 478 k | 44,0% | 67,3% | 46,7% | 70,0% |
| 1,95 M | 52,6% | 72,7% | 63,3% | 80,0% |
La précision closed-book croît ~log-linéairement avec le nombre de tokens synthétiques, puis sature
(rendements décroissants au-delà de ~4 M tokens distincts).
Comparaison directe vs gpt-oss-20b-FAQ-MES (même jeu de test, même juge)
Table with columns: Métrique (closed-book), Ce modèle (CPT+SFT, 14B), gpt-oss-20b-FAQ-MES (SFT, 20B)| Métrique (closed-book) | Ce modèle (CPT+SFT, 14B) | gpt-oss-20b-FAQ-MES (SFT, 20B) |
|---|
| Held-out 704 — strict | 63,8% | 42,5% |
| Held-out 704 — indulgent | 80,3% | 67,8% |
| Validation 30 — strict | 56,7% | 46,7% |
| Validation 30 — indulgent | 70,0% | 70,0% |
| Hallucination hors-domaine | 12% | 60% |
Note d'équité : gpt-oss-20b-FAQ-MES a été évalué via transformers (implémentation de référence) et non vLLM 0.22, dont le kernel MoE produisait des sorties incohérentes pour cette architecture (gpt_oss). Mêmes 704 questions held-out, même juge Qwen3-32B, même barème.
Protocole de jugement : LLM-juge Qwen3-32B, closed-book, deux barèmes — strict (faits-clés
présents ET aucune contradiction) et indulgent (idée générale correcte, tolère détails imprécis).
Conclusions & enseignements (chiffres simples)
- Le CPT préalable change la donne. À jeu de test et juge identiques, le SFT direct sur la base
plafonne à 37,2 % (strict, held-out) : le modèle apprend le format mais invente les détails
(mauvais portail, mauvais bouton, mauvais horaire). Avec un CPT préalable, on atteint
63,8% — soit ×1,7 la précision du SFT seul.
- Plus de tokens synthétiques = plus de précision, de façon log-linéaire : 37 → 44 → 53 → 61 %
(strict) pour 0 → 0,5 → 2 → 3,9 M tokens. Le levier dominant est le volume de connaissances
distinctes ré-exprimées, pas la taille du modèle.
- Plafond de données : à partir de 88 faits (~15 k tokens), on extrait ~3,9 M tokens distincts
(×260) ; au-delà, la génération se répète et la précision sature (+4 pts seulement en doublant
l'exposition).
- Anti-hallucination : ajouter 120 exemples de refus au SFT fait chuter l'hallucination
hors-domaine de 48 % → 12%, sans coût sur la précision factuelle.
- Pas d'oubli : grâce à 18 % de replay FR, la culture générale reste à 100%
(aucun oubli catastrophique).
- Plus petit mais meilleur : ce modèle 14B dépasse
gpt-oss-20b-FAQ-MES (20B) sur le
held-out (63,8% vs 42,5% strict), illustrant qu'injecter la
connaissance dans les poids (CPT) > la montrer en SFT.
Limites
- Domaine étroit (FAQ « Mon espace santé »). Hors de ce domaine, comportement de base de Qwen3-14B.
- Précision closed-book non parfaite : pour un usage production, un RAG complémentaire reste pertinent.
- Le juge est un LLM (Qwen3-32B) ; les valeurs absolues dépendent du barème (strict/indulgent fournis).
Références
EntiGraph (arXiv:2409.07431) · WRAP (2401.16380) · Physics of LM 3.1 (2309.14316) ·
Gekhman et al. (2405.05904) · Continual pretraining (2403.08763) · Nemotron-CC (NVIDIA NeMo Curator).