Chat Tuning
Le chat tuning est une forme de fine-tuning supervisé qui entraîne un LLM sur des données de conversations multi-tours (échanges alternés user/assistant) pour lui apprendre à maintenir un dialogue cohérent, à gérer le contexte conversationnel et à adopter un comportement d’assistant interactif.
- Catégorie
- Post-entraînement / Fine-tuning supervisé conversationnel
- Données
- Conversations multi-tours au format [{« role »: « user/assistant/system », « content »: « … »}]
- Objectif
- Produire des réponses contextuelles et cohérentes dans un dialogue
- Position dans le pipeline
- Après le pré-entraînement, souvent combiné avec l’instruction tuning
- Modèles emblématiques
- ChatGPT, Claude, Llama-Chat, Gemini, Mistral-Chat, Vicuna
- Benchmark de référence
- MT-Bench, Chatbot Arena, MT-Eval, MT-Bench-101
Pourquoi le chat tuning est nécessaire
Un LLM instruction-tuné sait suivre une consigne isolée : « Résume ce texte », « Traduis cette phrase ». Mais il ne sait pas nécessairement maintenir une conversation. Le dialogue multi-tours pose des défis que le single-turn ne couvre pas :
Mémoire du contexte. À chaque tour, le modèle doit se souvenir de ce qui a été dit précédemment. Si l’utilisateur dit « Parle-moi de Python » puis « Et pour les débutants ? », le modèle doit comprendre que « pour les débutants » se réfère à Python, pas au sujet précédent.
Résolution d’anaphores. Les conversations sont pleines de références implicites (« fais-le plus court », « ajoute un exemple », « recommence autrement ») qui n’ont de sens que dans le contexte de l’échange en cours.
Gestion des rôles. Le modèle doit comprendre la structure des rôles : il est l’assistant, l’utilisateur est celui qui pose les questions. Il ne doit pas « jouer » le rôle de l’utilisateur ni générer les deux côtés de la conversation.
Cohérence sur la durée. Sur 10 ou 20 tours d’échange, le modèle doit maintenir une position cohérente, ne pas se contredire, et faire référence aux éléments pertinents des tours précédents. Les recherches montrent une dégradation moyenne de 39 % entre les performances single-turn et multi-turn sur les principaux LLM.
Comportements conversationnels. Un bon assistant de chat sait poser des questions de clarification quand l’instruction est ambiguë, refuser poliment les requêtes inappropriées, adapter son ton au contexte, et signaler les incertitudes.
Le format des données de chat tuning
Le format standard pour les données de chat tuning utilise une liste de messages avec des rôles alternés :
[
{"role": "system", "content": "Vous êtes un assistant technique spécialisé en Python."},
{"role": "user", "content": "Comment créer une liste en Python ?"},
{"role": "assistant", "content": "En Python, vous créez une liste avec des crochets : ma_liste = [1, 2, 3]. Vous pouvez aussi utiliser list() pour convertir un itérable."},
{"role": "user", "content": "Et pour ajouter un élément ?"},
{"role": "assistant", "content": "Utilisez la méthode .append() pour ajouter un élément à la fin : ma_liste.append(4). Pour insérer à une position spécifique, utilisez .insert(index, valeur)."}
]
Les trois rôles standard sont :
system : le prompt système, qui définit le comportement, la personnalité et les contraintes du modèle pour toute la conversation. Ce message est optionnel mais recommandé.
user : les messages de l’utilisateur (questions, instructions, réactions).
assistant : les réponses du modèle. Ce sont les seules parties sur lesquelles le modèle s’entraîne (les tokens de réponse sont ceux dont on calcule la loss).
Les chat templates
Chaque famille de modèles utilise un format de chat template différent pour encoder cette structure en texte brut. Le template définit comment les rôles, les délimiteurs et les tokens spéciaux sont agencés. Par exemple, Llama 2 utilise des balises [INST] et [/INST], Mistral utilise des tokens spéciaux comme <s> et [INST], et ChatML (utilisé par certains modèles OpenAI et Qwen) utilise <|im_start|> et <|im_end|>.
Il est crucial d’utiliser le bon template lors du fine-tuning. Un modèle entraîné avec le template Llama produira des résultats incohérents si vous l’interrogez avec le format ChatML. HuggingFace Transformers expose la méthode tokenizer.apply_chat_template() qui formate automatiquement les conversations selon le template du modèle.
Le loss masking : un détail technique crucial
Le loss masking détermine quels tokens contribuent au calcul de la perte pendant l’entraînement. C’est l’un des choix les plus impactants du chat tuning.
Il existe trois approches principales :
Pas de masking. La loss est calculée sur tous les tokens, y compris les messages user et system. C’est l’approche par défaut dans certains frameworks. Le modèle apprend à prédire à la fois les questions de l’utilisateur et ses propres réponses.
Masking complet des instructions. La loss n’est calculée que sur les tokens des réponses assistant. Les messages user et system sont masqués. C’est l’approche la plus courante car elle cible exactement ce que le modèle doit apprendre à générer.
Masking du boilerplate. Approche hybride où seuls les templates répétitifs (balises, délimiteurs) sont masqués, mais le contenu des messages user et les réponses assistant contribuent tous à la loss.
Calcul de la loss sur les conversations multi-tours
Pour les conversations à plusieurs tours, deux stratégies existent :
Loss sur le dernier tour seulement. Seule la dernière réponse assistant est utilisée pour le calcul de la loss. C’est simple mais gaspille les informations des tours intermédiaires.
Loss sur tous les tours. Toutes les réponses assistant de la conversation contribuent à la loss. C’est plus efficace car chaque conversation fournit plusieurs signaux d’entraînement. Des travaux récents montrent que cette approche surpasse la loss sur le dernier tour seul en termes de scores ROUGE et BLEU, tout en réduisant le temps d’entraînement.
Une troisième option consiste à « déplier » chaque conversation multi-tours en N conversations progressives (tour 1 seul, tours 1-2, tours 1-2-3, etc.), mais cette approche multiplie le volume de données et le temps d’entraînement de façon proportionnelle au nombre de tours.
Chat tuning vs. instruction tuning
| Dimension | Instruction tuning | Chat tuning |
|---|---|---|
| Format des données | Paires (instruction, réponse) single-turn | Conversations multi-tours (system/user/assistant) |
| Objectif principal | Exécuter une tâche spécifique | Maintenir un dialogue naturel et cohérent |
| Gestion du contexte | Chaque instruction est indépendante | Le contexte des tours précédents est essentiel |
| Prompt système | Rarement utilisé | Central (personnalité, contraintes) |
| Comportements cibles | Suivi d’instructions, précision factuelle | Cohérence, ton, clarification, mémoire, refus poli |
| Modèles typiques | FLAN-T5, Alpaca, Tk-Instruct | ChatGPT, Claude, Gemini, Llama-Chat |
| Suffix du modèle | -Instruct | -Chat |
En pratique, la frontière est floue. Les modèles modernes combinent les deux : le dataset de fine-tuning contient à la fois des paires single-turn (instruction tuning) et des conversations multi-tours (chat tuning). Les modèles comme ChatGPT, Claude ou Gemini ont été entraînés sur un mélange des deux types de données, suivi d’une phase d’alignement par RLHF ou DPO.
La convention de nommage varie selon les fournisseurs. Meta utilise le suffixe « -Chat » pour Llama 2 mais « -Instruct » pour Llama 3 (qui intègre pourtant du chat tuning). Mistral utilise « -Instruct » pour tous ses modèles conversationnels. Le suffixe ne reflète pas toujours la technique exacte utilisée.
Les défis spécifiques du multi-tour
La dégradation multi-tour
Des études à grande échelle montrent que la quasi-totalité des LLM actuels souffrent d’une dégradation significative en conversation multi-tours par rapport au single-turn. La baisse moyenne est d’environ 39 % sur six tâches de génération. Les erreurs se composent d’un tour à l’autre : une petite imprécision au tour 3 peut provoquer une réponse hors sujet au tour 7.
MT-Eval catégorise les interactions multi-tours en quatre types, chacun posant des défis différents :
Follow-up (suivi) : construire sur la réponse précédente (« Donne-moi plus de détails sur le point 2 »).
Refinement (affinement) : modifier une requête antérieure (« Rends ça plus concis », « Change le ton »).
Expansion (expansion) : élargir un sujet abordé (« Et qu’en est-il pour les entreprises ? »).
Recollection (rappel) : retrouver une information d’un tour antérieur (« Quel était le prix que tu avais mentionné ? »).
Les tâches de recollection (rappel d’informations lointaines dans la conversation) sont celles où la dégradation est la plus forte, car la distance temporelle entre l’information pertinente et la question augmente la difficulté de récupération dans le contexte.
Le rôle du system prompt
Le system prompt est un élément central du chat tuning qui n’existe pas en instruction tuning classique. Il définit la « personnalité » et les contraintes du modèle pour toute la conversation. Le benchmark SysBench (ICLR 2025) évalue spécifiquement si les LLM peuvent suivre des messages système, montrant que c’est un défi non trivial : les modèles ont tendance à « oublier » les contraintes du system prompt au fil des tours, surtout quand les instructions de l’utilisateur entrent en conflit avec elles.
L’équité dans le dialogue
FairMT-Bench (2025) est le premier benchmark dédié à l’évaluation de l’équité dans les conversations multi-tours. Il teste si les LLM maintiennent des réponses non biaisées à travers plusieurs tours d’échange, en évaluant la compréhension du contexte, l’interaction avec l’utilisateur, et les compromis entre instructions potentiellement conflictuelles.
Datasets de chat tuning
| Dataset | Taille | Source | Modèles entraînés |
|---|---|---|---|
| ShareGPT | ~90 000 conversations | Conversations ChatGPT partagées | Vicuna |
| OpenAssistant | 91 829 prompts, arbres de conversations | Annotation humaine, 35 langues | OpenAssistant |
| UltraChat | 1,5 million de conversations | Généré par ChatGPT (structuré) | Zephyr, UltraLM |
| WildChat | 1 million+ conversations | Conversations réelles d’utilisateurs | Recherche |
| LMSYS-Chat-1M | 1 million de conversations | Conversations Chatbot Arena | Recherche, leaderboard |
| Baize | 150 millions de tokens | Conversations multi-tours générées | Falcon-Instruct |
Implémentation pratique
# Chat tuning avec HuggingFace TRL
from transformers import AutoModelForCausalLM, AutoTokenizer
from trl import SFTTrainer, SFTConfig
from datasets import load_dataset
model_id = "mistralai/Mistral-7B-v0.3"
model = AutoModelForCausalLM.from_pretrained(model_id)
tokenizer = AutoTokenizer.from_pretrained(model_id)
# Dataset au format conversations multi-tours
dataset = load_dataset("HuggingFaceH4/ultrachat_200k", split="train_sft")
# Configuration SFT avec masking des instructions
training_args = SFTConfig(
output_dir="./mistral-chat",
per_device_train_batch_size=2,
num_train_epochs=2,
learning_rate=2e-5,
bf16=True,
# Le chat template est appliqué automatiquement
# La loss est calculée uniquement sur les tokens assistant
)
trainer = SFTTrainer(
model=model,
train_dataset=dataset,
tokenizer=tokenizer,
args=training_args,
)
trainer.train()
Comment évaluer un modèle chat-tuné
Les benchmarks single-turn (MMLU, HumanEval) ne capturent pas les compétences conversationnelles. Des benchmarks spécifiques existent :
MT-Bench. 80 questions multi-tours couvrant 8 catégories (écriture, raisonnement, math, code, extraction, STEM, sciences humaines, roleplay). Un LLM juge évalue la qualité des réponses sur une échelle de 1 à 10. C’est le benchmark multi-tour le plus utilisé.
Chatbot Arena (Elo rating). Évaluation par comparaison directe : des utilisateurs réels comparent deux modèles anonymes en conversation, et un classement Elo est calculé. C’est considéré comme l’évaluation la plus fiable car elle reflète les préférences réelles des utilisateurs.
MT-Bench-101. Benchmark fin à 101 tâches multi-tours évaluant les compétences conversationnelles de façon granulaire.
MT-Eval. 1 170 requêtes multi-tours catégorisées en follow-up, refinement, expansion et recollection.
Verdict
Le chat tuning est ce qui transforme un modèle de langage en assistant conversationnel. C’est la technique qui a rendu ChatGPT possible : sans elle, GPT-3.5 n’aurait été qu’un bon modèle de complétion, incapable de maintenir un dialogue naturel sur plusieurs tours.
Pour les praticiens, les points clés sont : utilisez le bon chat template pour votre modèle de base. Masquez les tokens user/system lors du calcul de la loss. Calculez la loss sur tous les tours de conversation, pas seulement le dernier. Incluez des conversations de longueurs variées dans votre dataset (2 tours à 20+ tours). Et surtout, évaluez avec des benchmarks multi-tours (MT-Bench, Chatbot Arena), pas juste des benchmarks single-turn qui masquent les faiblesses conversationnelles du modèle.
Le défi principal reste la dégradation multi-tour : même les meilleurs modèles actuels perdent en cohérence et en qualité au fil des échanges. C’est un domaine de recherche très actif, avec des approches comme l’optimisation de la loss multi-tour (KL divergence), le self-training contrastif (ACT), et les techniques de mémoire externe qui visent à combler cet écart.
Questions fréquentes sur le Chat Tuning
Un modèle « -Instruct » peut-il faire du chat multi-tour ?
Oui, techniquement. Un modèle instruction-tuné peut recevoir l’historique de conversation dans son contexte et générer des réponses. Mais sa qualité conversationnelle sera inférieure à un modèle spécifiquement chat-tuné. Il aura tendance à traiter chaque tour de façon plus isolée, à moins bien résoudre les références contextuelles (« celui-ci », « comme tu disais »), et à être moins naturel dans le ton. La distinction s’atténue toutefois : les modèles Llama 3 Instruct intègrent du chat tuning dans leur pipeline, et le suffixe « -Instruct » ne garantit pas l’absence de données multi-tours.
Combien de tours de conversation faut-il dans les données d’entraînement ?
Variez la longueur des conversations. Incluez des échanges courts (2-3 tours pour les questions factuelles simples), moyens (5-10 tours pour les discussions thématiques), et longs (15-20+ tours pour les tâches complexes et itératives). Si vos données ne contiennent que des conversations courtes, le modèle aura du mal à maintenir la cohérence sur de longues interactions. Inversement, si vos données ne contiennent que des conversations longues, le modèle pourrait être verbeux sur des questions simples. La diversité est clé.
Pourquoi les performances se dégradent-elles en multi-tour ?
Plusieurs facteurs se cumulent. La fenêtre de contexte s’allonge à chaque tour, ce qui augmente le « bruit » dans l’attention et rend plus difficile la localisation des informations pertinentes (le phénomène « lost in the middle »). Les erreurs se composent : une légère imprécision au tour 3 influence la réponse au tour 4, qui elle-même dégrade le tour 5. Enfin, les données d’entraînement sont souvent biaisées vers les conversations courtes (plus faciles à annoter), ce qui sous-représente les dynamiques de dialogue long.
Faut-il masquer le system prompt lors du calcul de la loss ?
Oui, dans la grande majorité des cas. Le system prompt est une instruction fixe qui ne change pas pendant la conversation. Le modèle ne doit pas apprendre à « générer » des system prompts, mais à les suivre. Le masquer lors du calcul de la loss concentre l’entraînement sur la génération de réponses assistant appropriées étant donné le system prompt et l’historique de conversation. La seule exception serait un cas où vous entraînez le modèle à générer lui-même des system prompts (par exemple, pour un méta-assistant).
Chat tuning et RLHF sont-ils la même chose ?
Non. Le chat tuning est une étape de fine-tuning supervisé (SFT) sur des données conversationnelles. Le RLHF est une étape d’alignement qui vient après le chat tuning. Le pipeline complet est : pré-entraînement → instruction tuning + chat tuning (SFT) → RLHF/DPO (alignement). Le chat tuning enseigne au modèle comment converser. Le RLHF lui enseigne quel type de conversations sont préférées par les humains (plus utiles, plus sûres, mieux calibrées). Les deux sont complémentaires et nécessaires pour produire un assistant conversationnel de qualité.