Créer avec l’IA

Quand faut-il adapter un petit modèle de langage, et quand faut-il s’en abstenir?

Écrit en date du · Publié le · Mis à jour le · Par Robert Scales, avec l’aide d’outils d’IA · 5 min de lecture

Réponse courte

Adaptez un modèle pour lui enseigner un comportement, comme un format de sortie fixe, et utilisez une recherche pour les faits. Dans un test mesuré, un adaptateur LoRA a fait passer un petit modèle de 0 % à environ 55 % de réponses exactes sur une tâche de format avec des formulations inconnues, alors que la même méthode a enseigné des faits qui sont tombés à 0 % une fois reformulés, contre 92 % pour une simple recherche par plongements.

Adapter un modèle, c’est changer son comportement en l’entraînant sur des exemples, habituellement sans toucher à la plupart de ses poids. LoRA y arrive en gelant les poids d’origine et en ajoutant de petites matrices entraînables. Pour les étapes et les outils en général, y compris QLoRA sur de plus gros modèles, voyez comment faire l’ajustement fin d’un petit modèle ouvert. Ce projet pose une question plus étroite et place une tâche qui convient à la méthode à côté d’une tâche qui ne lui convient pas.

Le modèle est SmolLM2-135M-Instruct : 135 millions de paramètres, licence Apache 2.0, environ 540 Mo en mémoire. Il est minuscule et se trompe souvent, ce qui est utile ici, parce qu’on voit ce que l’entraînement change. L’article sur SmolLM2 décrit la famille. Toutes les données sont synthétiques et le script est 09_adapt_small_model.py.

L’adaptateur lui-même

from peft import LoraConfig, get_peft_model

cfg = LoraConfig(r=16, lora_alpha=32, lora_dropout=0.05,
                 target_modules=["q_proj", "k_proj", "v_proj", "o_proj"], task_type="CAUSAL_LM")
model = get_peft_model(model, cfg)

r fixe la taille des matrices ajoutées, et les modules ciblés sont les couches d’attention. Il reste 1 843 200 paramètres entraînables, soit 1,4 % du modèle. Le fichier de l’adaptateur pèse 7,4 Mo, à côté de 538 Mo de poids gelés en 32 bits. La boucle d’entraînement masque le prompt, de sorte que le modèle n’est noté que sur sa réponse. Le fichier lm_utils.py contient la boucle entière, en une quarantaine de lignes.

Chaque exécution ci-dessous a duré 250 étapes avec des lots de 8, soit tout au plus environ deux minutes sur le GPU intégré d’un Apple M5 Max (PyTorch 2.15, Transformers 5.22, PEFT 0.21), sur une machine occupée à d’autres travaux en même temps.

Tâche A : un bon candidat, un format fixe

Transformer une note de boutique en une ligne qu’un logiciel peut lire :

Prompt
Récris la note sur une seule ligne : ITEM=<article>; ISSUE=<noise|broken|late|billing>; URGENT=<yes|no>

The snow blower fell apart after a day. It cannot wait, answer right now.

Résultat attendu : ITEM=snow blower; ISSUE=broken; URGENT=yes. Le test utilise 100 notes sur des articles jamais vus à l’entraînement. Un des jeux de test emploie aussi des formulations jamais vues. Les données de ce projet sont en anglais.

ModèleArticles nouveaux, formulation connue : exactArticles nouveaux, formulation nouvelle : exact
Non ajusté, instruction seule0 %
Non ajusté, instruction et deux exemples0 %
Adaptateur, 20 exemples d’entraînement78 %53 %
Adaptateur, 100 exemples d’entraînement84 %56 %
Adaptateur, 400 exemples d’entraînement84 %55 %

Trois leçons. Le modèle non ajusté ne pouvait pas du tout faire ce travail, même avec des exemples dans le prompt. Un plus gros modèle le pourrait peut-être : testez d’abord les instructions avec le modèle que vous avez vraiment. Deuxièmement, 20 exemples ont donné l’essentiel du gain, et passer à 400 n’a rien ajouté sur les nouvelles formulations. Les 400 venaient tous des mêmes douze formulations : c’est de nouveau la leçon de variété du projet trois. Troisièmement, la perte d’entraînement a atteint 0,000 dans les trois exécutions, alors que l’exactitude sur les nouvelles formulations restait autour de 55 %. La perte vous aurait dit que tout allait bien.

Un modèle à 55 % n’est pas prêt à l’emploi. Sa valeur est dans ce qu’il montre : le format est venu facilement, la généralisation à de nouvelles formulations, non.

Tâche B : un mauvais candidat, des faits qui changent

Enseignons maintenant 12 faits sur un centre communautaire fictif, comme l’heure de fermeture de la piscine. On entraîne sur une seule formulation de chaque question, puis on interroge.

MéthodeFormulation entraînéeFormulation légèrement changéeFormulation vraiment différente
Modèle non ajusté, sans contexte0 %
Modèle non ajusté, avec la bonne ligne fournie58 %
Adaptateur entraîné sur les faits100 %92 %0 %
Simple recherche par plongements, qui renvoie la ligne elle-même100 %92 %

Un score parfait sur la formulation entraînée a l’air d’un succès. Reformulez la question en « How late can I swim at night? » et le modèle ajusté répond « 24 hours ». À la question de savoir ce que paie un adulte par année, il répond « 75 dollars », une vraie valeur tirée d’un autre fait. Il a appris à sortir des valeurs en réponse à un motif, et il les livre avec la même assurance quand il se trompe.

Puis trois faits ont changé, comme les faits le font. Le modèle ajusté a continué de donner les trois anciennes valeurs, et le corriger exige un autre entraînement. La recherche a demandé trois lignes modifiées et trois nouveaux vecteurs, et a gardé 92 % sur les formulations difficiles. Elle fonctionne exactement comme dans le projet huit, sans qu’aucun modèle de langage n’écrive quoi que ce soit.

La ligne du milieu mérite une remarque. Un modèle aussi petit, même avec la bonne ligne, n’a répondu correctement que dans 58 % des cas, et il a parfois inventé des détails : il a créé une limite de revenu de « $25,000 » qui ne figurait sur aucune ligne. Donner le bon texte à un modèle faible ne garantit pas une bonne réponse, et une ligne retrouvée affichée telle quelle peut être le meilleur produit.

À essayer : notez une tâche pour laquelle vous voulez un modèle. Placez chaque partie dans une de deux colonnes, « comment il doit se comporter » et « ce qu’il doit savoir ». Seule la première colonne est candidate à l’entraînement.

Comment décider en dix minutes?

Passez ces questions dans l’ordre et arrêtez-vous au premier oui.

QuestionSi oui
Du code ordinaire peut-il le faire, comme un gabarit ou une règle?Écrivez le code
Le besoin est-il en fait un fait, un prix, une politique ou une date?Utilisez une recherche ou la récupération d’information
Des instructions claires avec quelques exemples fonctionnent-elles sur 20 cas de test?Arrêtez là et gardez le prompt
Un plus gros modèle tout prêt le ferait-il dans votre budget?Utilisez-le
S’agit-il d’un format, d’un style ou d’une décision répétés, avec beaucoup d’exemples justes?Essayez un adaptateur, avec un test à part

Il existe de bonnes raisons de choisir un adaptateur : un modèle trop petit pour suivre des instructions, comme ici; un besoin de vitesse, de confidentialité ou de travail hors ligne; une forme de sortie que le prompt ne parvient pas à stabiliser. Les coûts comprennent des exemples à entretenir, un nouvel entraînement quand le modèle de base change, une licence à respecter et un jeu de test à faire vivre. Avant d’entraîner, écrivez le score que vous devez atteindre et ce que vous ferez s’il reste à 55 %.

Téléchargez le code de cette série (zip), avec tous les scripts et les résultats enregistrés.

Sources

  1. LoRA: Low-Rank Adaptation of Large Language Models — arXiv (Hu et al., Microsoft), 17 juin 2021
  2. SmolLM2-135M-Instruct model card — Hugging Face
  3. SmolLM2: When Smol Goes Big — arXiv, 4 février 2025

Tiré du Guide de l’intelligence artificielle, par Robert Scales, publié par Holistic Hybrid inc. Partage et adaptation permis selon la licence CC BY-NC-SA 4.0 : citez le guide, mettez un lien vers https://guidetoartificialintelligence.com/fr/apprendre/adapter-petit-modele-langage-quand-ne-pas/, pas d’usage commercial sans permission, et gardez la même licence.

Recevez gratuitement le Guide de l’intelligence artificielle

Abonnez-vous à l’infolettre et recevez le guide gratuit : ce qui a changé en IA, une leçon, un prompt à essayer. Désabonnement en un clic.

Ce que nous faisons de votre adresse

Retour en haut

Affichage

Vos choix sont enregistrés dans ce navigateur seulement. Aucune donnée n’est transmise.

Taille du texte
100 %
Couleurs
Lecture
Autres réglages
Déclaration d’accessibilité

Obtenir l’appli

Ajoutez le guide à votre écran d’accueil. Il s’ouvre comme une application, et les pages déjà lues restent disponibles hors ligne.

Lire sans connexion : télécharger les articles

iPhone et iPad (Safari, Chrome, Edge)

  1. Touchez le bouton Partager (le carré avec une flèche). Dans Chrome et Edge, il est dans la barre d’adresse ou le menu.
  2. Choisissez « Sur l’écran d’accueil ».
  3. Touchez « Ajouter ».

Android (Chrome, Edge, Samsung Internet, Firefox)

  1. Ouvrez le menu du navigateur (⋮ ou ☰).
  2. Choisissez « Installer l’application » ou « Ajouter à l’écran d’accueil ».
  3. Confirmez avec « Installer ».

Ordinateur (Chrome, Edge)

  1. Cliquez sur l’icône d’installation au bout de la barre d’adresse, ou ouvrez le menu du navigateur (⋮ ou …).
  2. Dans Chrome, choisissez « Caster, enregistrer et partager », puis « Installer la page en tant qu’application ». Dans Edge, choisissez « Applications », puis « Installer ce site en tant qu’application ».
  3. Cliquez sur « Installer ».

Mac (Safari)

  1. Ouvrez le menu Fichier.
  2. Choisissez « Ajouter au Dock ».
  3. Cliquez sur « Ajouter ».

Firefox sur ordinateur ne peut pas installer un site comme application. Utilisez plutôt Chrome, Edge ou Safari.