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.
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.
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.
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.
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).
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.
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.
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.
Le transfert se règle par des choix de méthode plus que par des hyperparamètres.
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.
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.
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.
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.
# 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).
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.
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.
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.
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 produitLes 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 classiqueLe modèle pré-entraîné le plus utilisé pour le transfert sur le texte, décliné en français (CamemBERT, FlauBERT).
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