Exercices Entraîner son LLM Augmenter les données d'entraînement
🎉

Bravo!

Intermédiaire 🧠 Fondamentaux 20 XP 0 personnes ont réussi

Augmenter les données d'entraînement

Quand ton dataset de fine-tuning est trop petit (moins de 100 exemples), le modèle risque de sur-apprendre. Une technique classique c'est l'augmentation de données : tu prends tes exemples existants et tu en crées des variantes.

En NLP, l'augmentation est plus subtile qu'en vision (où tu peux tourner/flipper une image). Pour du texte, on peut :
1. Reformuler les questions avec des synonymes ou des tournures différentes
2. Ajouter ou retirer des politesses ("s'il te plaît", "merci")
3. Changer le registre (tu/vous, formel/informel)

Dans cet exercice, on va simuler l'augmentation avec un système de modèles (templates). Tu reçois une liste de reformulations pour chaque question, et tu multiplies les exemples.

Écris une fonction augmenter_dataset(exemples, reformulations) qui prend :
1. Une liste d'exemples au format messages (chacun avec au moins un user et un assistant)
2. Un dictionnaire de reformulations : les clés sont les questions originales, les valeurs sont des listes de reformulations

Pour chaque exemple, si la question user a des reformulations disponibles, la fonction crée des copies de l'exemple avec chaque reformulation (en gardant la même réponse assistant). L'exemple original est toujours conservé.

La fonction renvoie la liste augmentée.

Exemple :

exemples = [
{"messages": [{"role": "user", "content": "Salut"}, {"role": "assistant", "content": "Bonjour !"}]}
]
reformulations = {"Salut": ["Coucou", "Hey"]}
augmenter_dataset(exemples, reformulations)
renvoie 3 exemples : l'original avec "Salut", plus un avec "Coucou" et un avec "Hey" (tous avec la même réponse "Bonjour !")

Tests (4/5)

Augmentation basique
exemples = [{'messages': [{'role': 'user', 'content': 'Salut'}, {'role': 'assistant', 'content': 'Bonjour !'}]}]
reformulations = {'Salut': ['Coucou', 'Hey']}
r = augmenter_dataset(exemples, reformulations)
assert len(r) == 3
Original conservé
exemples = [{'messages': [{'role': 'user', 'content': 'Salut'}, {'role': 'assistant', 'content': 'Bonjour !'}]}]
reformulations = {'Salut': ['Coucou']}
r = augmenter_dataset(exemples, reformulations)
assert r[0]['messages'][0]['content'] == 'Salut', 'L original doit être le premier'
Réponse préservée
exemples = [{'messages': [{'role': 'user', 'content': 'Q'}, {'role': 'assistant', 'content': 'R'}]}]
reformulations = {'Q': ['Q2']}
r = augmenter_dataset(exemples, reformulations)
assert all(ex['messages'][-1]['content'] == 'R' for ex in r), 'La réponse assistant doit rester la même'
Sans reformulation
exemples = [{'messages': [{'role': 'user', 'content': 'Test'}, {'role': 'assistant', 'content': 'Ok'}]}]
reformulations = {}
r = augmenter_dataset(exemples, reformulations)
assert len(r) == 1, 'Sans reformulation, on garde juste l original'

+ 0 tests cachés

Indices (3 disponibles)

solution.py