Accueil / Factory / Algos ML / Apprentissage par transfert — factory / algos ML / méthode de deep learning

APPRENTISSAGE PAR TRANSFERT.

Au lieu d'entraîner un modèle de zéro, on part d'un modèle déjà entraîné sur des millions d'images ou de phrases, et on l'adapte à son problème. Il a déjà appris à reconnaître des formes ou le sens des mots : quelques dizaines ou centaines d'exemples suffisent souvent pour la nouvelle tâche. C'est la façon standard de faire du deep learning en entreprise.

MéthodeModèles pré-entraînésPeu de donnéesTexteImageNiveau : intermédiaire

FICHE D'IDENTITÉ

notes sur 5 · usage entreprise
PerformanceExcellent avec peu de données, si le modèle source est proche
InterprétabilitéLe modèle réutilisé reste une boîte noire
VitesseEntraîner une petite tête prend des secondes à des minutes
Facilité de réglagePeu de réglages en mode figé, plus en ajustement complet
Tolérance aux données brutesTexte ou image bruts acceptés, sans variables à construire
EN 30 SECONDES

Un comptable expérimenté qui change de secteur ne réapprend pas la comptabilité. Il apprend seulement les spécificités de son nouveau métier, en quelques semaines.

1. On choisit un modèle source

Un modèle public entraîné sur une vaste tâche générale : reconnaître des milliers d'objets sur des images, ou rapprocher des phrases de même sens dans de nombreuses langues.

2. On le réutilise comme encodeur

On lui fait lire ses propres données : il transforme chaque texte ou image en vecteur. Ses poids restent figés, il sert d'extracteur de caractéristiques.

3. On entraîne une petite tête

Un classifieur simple (ici une régression logistique) apprend sur ces vecteurs avec peu d'exemples. Si l'on a plus de données, on peut ensuite dégeler une partie du modèle et l'ajuster (fine-tuning).

LE CAS MÉTIER

voix du client · lancement d'un nouveau canal
EN ENTRÉE

30 avis étiquetés seulement

Un nouveau canal d'avis vient d'ouvrir : on n'a eu le temps d'étiqueter que 30 avis en positif, neutre ou négatif. On veut classer tous les suivants, y compris des formulations jamais vues.

EN SORTIE

Un sentiment pour chaque nouvel avis

L'encodeur pré-entraîné est conçu pour rapprocher des phrases de même sens, comme « arrivé en miettes » et « cassé à la réception », même si « miettes » n'apparaît dans aucun des 30 exemples. La version sans transfert, sur TF-IDF, ne connaît que les mots vus : dans la sortie Python, elle classe « Le paquet est arrivé en miettes, je suis furieux » comme positif.

CE QU'ON MESURE

La comparaison avec et sans transfert

On mesure l'exactitude des deux versions sur les avis non utilisés pour l'entraînement. Sur ce jeu d'exemple, très répétitif, TF-IDF atteint déjà 85,5 % avec 30 avis : l'intérêt du transfert se voit surtout sur les formulations nouvelles, qui sont la règle dans de vrais avis.

QUAND LE SORTIR, QUAND L'ÉVITER

OUI

  • Peu d'exemples étiquetés : quelques dizaines à quelques milliers
  • Images (défauts, documents, produits) ou textes, où des modèles publics solides existent
  • Besoin d'un résultat rapide sans GPU ni gros entraînement
  • Vocabulaire ou visuels variés que les exemples disponibles ne couvrent pas

NON

  • Données tabulaires classiques : pas de modèle source pertinent, préférer XGBoost ou une régression
  • Domaine très éloigné du modèle source (imagerie spécialisée, jargon très technique) : le gain peut être faible, tester avant
  • Licence du modèle incompatible avec l'usage commercial : vérifier avant de déployer
  • Beaucoup de données et un domaine unique : un modèle entraîné pour la tâche peut faire mieux
LES CHOIX QUI COMPTENT

Le transfert se règle par des choix de méthode plus que par des hyperparamètres.

Modèle source

Le plus proche possible de vos données : multilingue si vos textes sont en français, entraîné sur des photos si vous traitez des photos. Commencer par un petit modèle.

Figer ou ajuster

Encodeur figé et petite tête : rapide, robuste, idéal avec peu d'exemples. Fine-tuning de tout ou partie du modèle : meilleur avec quelques milliers d'exemples, plus coûteux.

Taux d'apprentissage en fine-tuning

Nettement plus bas que pour un entraînement de zéro, pour ne pas effacer ce que le modèle sait déjà. On dégèle souvent les dernières couches d'abord.

Nombre d'exemples étiquetés

La courbe d'apprentissage dit s'il vaut la peine d'en étiqueter davantage : on entraîne avec 30, 100, 300 exemples et on regarde si le score progresse encore.

LE CODE MINIMAL

jeu d'exemple : avis_clients.csv ↓
# Avis clients avec peu d'étiquettes : apprentissage par transfert en Python
import pandas as pd
from sentence_transformers import SentenceTransformer
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

avis = pd.read_csv("avis_clients.csv")
# Seulement 30 avis étiquetés pour apprendre, tout le reste pour vérifier
X_train, X_test, y_train, y_test = train_test_split(avis["texte"], avis["sentiment"], train_size=30,
                                                    random_state=42, stratify=avis["sentiment"])
# Avis reformulés avec des mots absents des 30 exemples
reformules = ["Le paquet est arrivé en miettes, je suis furieux.", "Article impeccable, j'en suis ravi.",
              "Personne ne décroche au téléphone depuis une semaine.", "Expédition éclair et emballage parfait.",
              "Ça dépanne, sans plus."]

# Avec transfert : encodeur public multilingue déjà entraîné (MiniLM, environ 120 M de paramètres), gardé figé
encodeur = SentenceTransformer("sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")
tete = LogisticRegression(max_iter=1000).fit(encodeur.encode(list(X_train)), y_train)
print("Exactitude test avec transfert :", round(tete.score(encodeur.encode(list(X_test)), y_test), 3))

# Sans transfert : même classifieur sur TF-IDF, qui ne connaît que les mots des 30 exemples
tfidf = TfidfVectorizer().fit(X_train)
base = LogisticRegression(max_iter=1000).fit(tfidf.transform(X_train), y_train)
print("Exactitude test sans transfert :", round(base.score(tfidf.transform(X_test), y_test), 3))

print(pd.DataFrame({"avis": reformules, "avec transfert": tete.predict(encodeur.encode(reformules)),
                    "sans transfert": base.predict(tfidf.transform(reformules))}).to_string(index=False))

En R, le transfert se pratique surtout sur l'image avec keras3 (modèles pré-entraînés application_*) ; pour le texte, l'écosystème de référence est Python (sentence-transformers, transformers).

QUESTIONS FRÉQUENTES

Quelle différence entre apprentissage par transfert et fine-tuning ?

Le transfert désigne l'idée générale : réutiliser ce qu'un modèle a appris ailleurs. Le fine-tuning en est une forme, où l'on continue d'entraîner les poids du modèle sur ses données. L'autre forme courante garde le modèle figé et n'entraîne qu'une petite couche au-dessus.

Combien de données faut-il pour faire du transfert ?

Avec un encodeur figé, quelques dizaines d'exemples par classe donnent souvent un premier modèle utile. Le fine-tuning complet demande plutôt quelques centaines à quelques milliers d'exemples. Le plus sûr est de tracer le score en fonction du nombre d'exemples.

Où trouver des modèles pré-entraînés ?

Sur Hugging Face pour le texte, l'image et le son, et dans les bibliothèques torchvision ou Keras pour l'image. Il faut vérifier la licence, les langues couvertes et la taille avant de choisir.

LES ALGOS VOISINS

à comparer avant de choisir
l'étape suivante

Fine-tuning et LoRA

Ajuster les poids du modèle lui-même, en totalité ou via de petites matrices ajoutées (LoRA). Plus puissant, plus exigeant.

Voir la fiche →
ce que l'encodeur produit

Embeddings

Les vecteurs qui résument le sens d'un texte ou d'une image. Ils servent aussi à la recherche et au regroupement.

Voir la fiche →
un modèle source classique

BERT

Le modèle pré-entraîné le plus utilisé pour le transfert sur le texte, décliné en français (CamemBERT, FlauBERT).

Voir la fiche →
— formation

Passer de la fiche à la pratique

Dataistudio forme les équipes au machine learning et à l'IA, sur des cas concrets.

Voir les formations →