Le fine-tuning réentraîne un modèle déjà pré-entraîné sur vos propres exemples pour le spécialiser. LoRA (Low-Rank Adaptation) rend l'opération abordable : les poids d'origine sont gelés et seules de petites matrices ajoutées apprennent, souvent moins de 1 % des paramètres. L'adaptation obtenue ne pèse que quelques mégaoctets.
Plutôt que de réécrire un manuel de 500 pages, on y colle quelques post-it qui adaptent son usage à votre métier. Le manuel reste intact ; les post-it se retirent ou se remplacent.
Ici CamemBERT, un modèle de la famille BERT entraîné sur du français. Il connaît déjà la langue, mais pas votre tâche.
À côté de certaines matrices du modèle, LoRA ajoute deux petites matrices dont le produit forme une correction. Le rang r fixe leur taille.
Sur vos exemples annotés, seules ces petites matrices et la couche de sortie apprennent. En production, on charge le modèle de base puis l'adaptateur du métier voulu.
Des avis en français avec leur sentiment : positif, négatif ou neutre. 300 autres avis sont mis de côté pour le test.
Le modèle adapté classe chaque nouvel avis. Le code affiche d'abord la part de paramètres réellement entraînés, moins de 1 % du modèle, puis les résultats sur les avis de test.
On mesure l'exactitude sur les 300 avis jamais vus, puis on lit la matrice de confusion. Un avis négatif classé neutre, c'est un client mécontent que personne ne rappelle.
Noms donnés pour la bibliothèque peft de Hugging Face.
Taille des matrices ajoutées. 8 ou 16 suffisent le plus souvent. Plus grand, l'adaptateur apprend davantage, coûte plus et risque de surapprendre.
Facteur d'échelle de la correction, appliqué sous la forme alpha / r. On le fixe souvent au double du rang.
Les matrices du modèle qui reçoivent un adaptateur. Les projections de l'attention (query, value) sont le choix classique ; ajouter les couches denses augmente la capacité.
Plus élevé qu'en fine-tuning complet, de l'ordre de 1e-4 à 5e-4, puisque peu de paramètres bougent. À valider sur le jeu de test.
# Classement des avis : fine-tuning avec LoRA en Python
import pandas as pd
import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification
from peft import LoraConfig, get_peft_model
avis = pd.read_csv("avis_clients.csv")
y = torch.tensor(avis["sentiment"].map({"negatif": 0, "neutre": 1, "positif": 2}).values)
nom = "almanach/camembert-base" # CamemBERT : modèle public pré-entraîné sur du français
tokenizer = AutoTokenizer.from_pretrained(nom)
X = tokenizer(avis["texte"].tolist(), padding=True, truncation=True, max_length=64, return_tensors="pt")
modele = AutoModelForSequenceClassification.from_pretrained(nom, num_labels=3)
# LoRA : poids d'origine gelés, petites matrices ajoutées sur l'attention
config = LoraConfig(task_type="SEQ_CLS", r=8, lora_alpha=16, lora_dropout=0.1, target_modules=["query", "value"])
modele = get_peft_model(modele, config)
modele.print_trainable_parameters() # moins de 1 % des paramètres
torch.manual_seed(42)
train, test = torch.randperm(len(avis)).split([1200, 300]) # 1 200 avis pour apprendre, 300 pour tester
optimiseur = torch.optim.AdamW(modele.parameters(), lr=5e-4)
modele.train()
for epoque in range(3):
for lot in train.split(16):
perte = modele(input_ids=X["input_ids"][lot], attention_mask=X["attention_mask"][lot], labels=y[lot]).loss
perte.backward(); optimiseur.step(); optimiseur.zero_grad()
modele.eval()
with torch.no_grad():
pred = modele(input_ids=X["input_ids"][test], attention_mask=X["attention_mask"][test]).logits.argmax(-1)
print("Exactitude sur 300 avis de test :", round((pred == y[test]).float().mean().item(), 3))
print(pd.crosstab(pd.Series(y[test].numpy(), name="réel"), pd.Series(pred.numpy(), name="prédit")))
Le fine-tuning avec LoRA se pratique en Python (transformers, peft) : pas d'équivalent R courant.
Low-Rank Adaptation, une méthode publiée en 2021 par des chercheurs de Microsoft. Elle adapte un grand modèle en gelant ses poids et en n'entraînant que de petites matrices ajoutées. La mémoire nécessaire à l'entraînement baisse fortement, et chaque adaptation se stocke à part.
Pour une classification, quelques centaines d'exemples par classe donnent souvent un bon résultat. La qualité compte plus que le volume, car des étiquettes incohérentes s'apprennent aussi. On commence petit, on mesure, puis on complète les classes où le modèle se trompe.
QLoRA applique LoRA sur un modèle de base chargé en 4 bits. La mémoire nécessaire baisse encore, au point d'affiner un modèle de plusieurs dizaines de milliards de paramètres sur un seul GPU.
Réutiliser un modèle entraîné ailleurs. LoRA en est la version économe pour les grands modèles.
Voir la fiche → l'alternative pour les connaissancesPour faire répondre un modèle sur vos documents, on les lui fournit au moment de la question, sans réentraîner.
Voir la fiche → le modèle adapté iciCamemBERT, utilisé dans le code, est un BERT pré-entraîné sur du français.
Voir la fiche →Dataistudio forme les équipes au machine learning et à l'IA, sur des cas concrets.
Nous utilisons des cookies de mesure d'audience et de suivi publicitaire pour comprendre la fréquentation du site et l'efficacité de nos annonces. Rien n'est déposé sans votre accord. En savoir plus