CoolFace
Modelpublic

fenyo/H100-Qwen3-14B-MonEspaceSante-CPT-SFT

sourceHugging Faceapache-2.0updated 4mo agoView on Hugging Face
0likes11downloads
Model Card
🔧 Code & reproduction complète (scripts, RUNBOOK, reproduce.sh, conversations) : https://github.com/AlexandreFenyo/MonEspaceSante-H100-reproduction

Qwen3-14B — Mon espace santé (CPT + SFT)

Modèle de question-réponse closed-book (sans RAG) sur la FAQ du service public français « Mon espace santé ». Les connaissances de la FAQ ont été injectées dans les poids par continued pre-training (CPT) sur un corpus synthétique massif, puis un SFT léger restaure le format question/réponse. Objectif : démontrer qu'un CPT préalable permet d'aller bien plus loin qu'un simple SFT pour ancrer durablement des faits dans un LLM.

TL;DR (chiffres clés)

ModèleMéthodeHeld-out 704 (strict)Held-out 704 (indulgent)Hallucination OOD
Ce modèle (CPT+SFT)CPT synthétique + SFT63,8%80,3%12%
gpt-oss-20b-FAQ-MESSFT direct (20B)42,5%67,8%60%
SFT direct (notre ablation, Qwen3-14B)SFT direct, sans CPT37,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)

RôleDatasetContenu
Vérité de base`fenyo/MonEspaceSante-FAQ-QA`88 faits real (source unique, ~15 400 tokens) + 496 reformulations
Corpus CPT`fenyo/H100-MonEspaceSante-CPT-corpus`~3,87 M tokens synthétiques distincts (EntiGraph + Nemotron-CC FR), décontaminés
Données SFT`fenyo/H100-MonEspaceSante-SFT`428 Q/R domaine + 120 refus hors-périmètre
Éval / jugement`fenyo/H100-MonEspaceSante-eval`704 held-out gelées + validation 30 + OOD 25 + oubli 30

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 %, weightdecay 0,01, grad clip 1,0, **bf16**, seqlen 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`.

3) SFT — restauration du format Q/R (pas d'injection de faits, cf. Gekhman 2405.05904)

  • —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, seqlen 2048, micro-batch 4 × accumulation 4, gradient checkpointing, `pagedadamw_8bit`.

Inférence (closed-book)

python
prompt = f"Question : {question}\nRéponse :"   # aucune donnée de contexte fournie
# greedy (temperature=0), stop sur "\nQuestion :"

Résultats détaillés

Courbe accuracy vs tokens synthétiques (CPT+SFT, juge Qwen3-32B)

Tokens synth. distinctsHeld-out strictHeld-out indulgentValidation strictValidation indulgent
0 (baseline SFT direct)37,2%61,1%43,3%53,3%
478 k44,0%67,3%46,7%70,0%
1,95 M52,6%72,7%63,3%80,0%
3,87 M60,7%79,3%56,7%76,7%
3,87 M × 2 exposition (probe plateau)65,1%81,5%56,7%70,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)

Métrique (closed-book)**Ce modèle (CPT+SFT, 14B)**`gpt-oss-20b-FAQ-MES` (SFT, 20B)
Held-out 704 — strict63,8%42,5%
Held-out 704 — indulgent80,3%67,8%
Validation 30 — strict56,7%46,7%
Validation 30 — indulgent70,0%70,0%
Hallucination hors-domaine12%60%
Oubli (culture générale FR)100% correct96,7% correct

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)

  1. 1.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.
  2. 2.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.
  3. 3.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).
  4. 4.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.
  5. 5.Pas d'oubli : grâce à 18 % de replay FR, la culture générale reste à 100% (aucun oubli catastrophique).
  6. 6.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).