🔎Guide de fine-tuning des modèles d'embedding avec Unsloth

Apprenez à fine-tuner facilement des modèles d'embedding avec Unsloth.

Le fine-tuning des modèles d’embedding peut largement améliorer les performances de retrieval et de RAG sur des tâches spécifiques. Il aligne les vecteurs du modèle sur votre domaine et sur le type de « similarité » qui compte pour votre cas d’usage, ce qui améliore la recherche, le RAG, le clustering et les recommandations sur vos données.

Exemple : les titres « Google lance le Pixel 10 » et « Qwen publie Qwen3 » pourraient être encodés comme similaires si vous les étiquetez simplement tous les deux comme « Tech », mais pas comme similaires si vous faites de la recherche sémantique, car ils portent sur des sujets différents. Le fine-tuning aide le modèle à produire le « bon » type de similarité pour votre cas d’usage, réduisant les erreurs et améliorant les résultats.

Unslotharrow-up-right prend désormais en charge l’entraînement des embeddings, classifieur, BERT, reranker modèles ~1,8 à 3,3x plus rapide avec 20 % de mémoire en moins et un contexte 2x plus long que les autres implémentations de Flash Attention 2 — sans dégradation de la précision. EmbeddingGemma-300M fonctionne avec seulement 3 Go de VRAM. Vous pouvez utiliser votre modèle entraîné partout: transformers, LangChain, Ollama, vLLM, llama.cpp, etc.

Unsloth utilise SentenceTransformersarrow-up-right pour prendre en charge des modèles compatibles comme Qwen3-Embedding, BERT et d’autres. Même s’il n’y a pas de notebook ou de téléversement, c’est toujours pris en charge.

Nous avons créé des notebooks de fine-tuning gratuits, avec 3 principaux cas d’utilisation :

  • All-MiniLM-L6-v2: produit des embeddings de phrases compacts, spécifiques à un domaine, pour la recherche sémantique, le retrieval et le clustering, ajustés sur vos propres données.

  • tomaarsen/miriad-4.4M-split: encode les questions médicales et les articles biomédicaux pour une recherche sémantique médicale et un RAG de haute qualité.

  • electroglyph/technical: capture mieux le sens et la similarité sémantique dans les textes techniques (docs, spécifications et discussions d’ingénierie).

Vous pouvez voir le reste de nos modèles téléversés dans notre collection iciarrow-up-right.

Un grand merci au contributeur Unsloth electroglypharrow-up-right, dont le travail a été déterminant pour permettre cela. Vous pouvez consulter les modèles personnalisés d’electroglyph sur Hugging Face iciarrow-up-right.

🦥 Fonctionnalités d’Unsloth

  • LoRA/QLoRA ou fine-tuning complet pour les embeddings, sans avoir besoin de réécrire votre pipeline

  • Meilleur support pour les modèles SentenceTransformer à encodeur uniquement (avec un modules.json)

  • Les modèles cross-encoder sont confirmés comme s’entraînant correctement même via le chemin de secours

  • Cette version prend également en charge transformers v5

La prise en charge des modèles sans modules.json est limitée (nous attribuerons automatiquement des SentenceTransformers modules de pooling par défaut). Si vous faites quelque chose de personnalisé (têtes personnalisées, pooling non standard), vérifiez bien des éléments comme le comportement de l’embedding poolé.

Certains modèles nécessitant des ajouts personnalisés, comme MPNet ou DistilBERT, ont été activés en intégrant le gradient checkpointing dans les modèles transformers .

🛠️ Workflow de fine-tuning

Le nouveau flux de fine-tuning est centré autour de FastSentenceTransformer.

Principales méthodes de sauvegarde/publication :

  • save_pretrained() Enregistre les adaptateurs LoRA dans un dossier local

  • save_pretrained_merged() Enregistre le modèle fusionné dans un dossier local

  • push_to_hub() Publie les adaptateurs LoRA sur Hugging Face

  • push_to_hub_merged() Publie le modèle fusionné sur Hugging Face

Et un détail très important : le chargement pour l’inférence nécessite for_inference=True

from_pretrained() est similaire aux autres classes rapides de Lacker, avec une exception:

  • Pour charger un modèle pour l’inférence en utilisant FastSentenceTransformer, vous devez passer : for_inference=True

Votre chargement pour l’inférence devrait donc ressembler à :

Pour l’autorisation Hugging Face, si vous exécutez :

dans le même virtualenv avant d’appeler les méthodes du hub, alors :

  • push_to_hub() et push_to_hub_merged() n’exigent pas d’argument token.

✅ Inférence et déploiement partout !

Votre modèle Unsloth fine-tuné peut être utilisé et déployé avec tous les principaux outils : transformers, LangChain, Weaviate, sentence-transformers, Text Embeddings Inference (TEI), vLLM et llama.cpp, API d’embedding personnalisée, pgvector, FAISS/bases de données vectorielles, et n’importe quel framework RAG.

Il n’y a pas d’enfermement propriétaire, car le modèle fine-tuné peut ensuite être téléchargé localement sur votre propre appareil.

📊 Benchmarks Unsloth

Les avantages d’Unsloth incluent la vitesse pour le fine-tuning des embeddings ! Nous montrons que nous sommes constamment 1,8 à 3,3x plus rapides sur une grande variété de modèles d’embedding et sur différentes longueurs de séquence, de 128 à 2048 et au-delà.

EmbeddingGemma-300M QLoRA fonctionne avec seulement 3 Go de VRAM et LoRA fonctionne avec 6 Go de VRAM.

Ci-dessous figurent nos benchmarks Unsloth sous forme de heatmap vs. SentenceTransformers + Flash Attention 2 (FA2) pour du QLoRA 4 bits. Pour du QLoRA 4 bits, Unsloth est 1,8x à 2,6x plus rapide :

Ci-dessous figurent nos benchmarks Unsloth sous forme de heatmap vs. SentenceTransformers + Flash Attention 2 (FA2) pour du LoRA 16 bits. Pour du LoRA 16 bits, Unsloth est 1,2x à 3,3x plus rapide :

🔮 Prise en charge des modèles

Voici quelques modèles d’embedding populaires pris en charge par Unsloth (tous les modèles ne sont pas listés ici) :

La plupart des modèles courantsarrow-up-right sont déjà pris en charge. S’il existe un modèle à encodeur uniquement que vous aimeriez avoir et qui ne l’est pas, n’hésitez pas à ouvrir un ticket GitHubarrow-up-right pour le demander.

Mis à jour

Ce contenu vous a-t-il été utile ?