🔎Guide d'ajustement des modèles d'embeddings avec Unsloth

Apprenez comment affiner facilement les modèles d'embeddings avec Unsloth.

L'affinage (fine-tuning) des modèles d'embeddings peut grandement améliorer la récupération et les performances RAG sur des tâches spécifiques. Il aligne les vecteurs du modèle avec votre domaine et le type de « similarité » qui compte pour votre cas d'utilisation, 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 deux comme « Tech », mais pas similaires si vous effectuez une recherche sémantique car ils portent sur des choses différentes. L'affinage aide le modèle à établir le type de similarité « correct » pour votre cas d'utilisation, réduisant les erreurs et améliorant les résultats.

Unslotharrow-up-right prend désormais en charge l'entraînement d'embeddings, classificateur, BERT, réordonnanceur modèles ≈1,8 à 3,3x plus rapide avec 20 % de mémoire en moins et un contexte 2x plus long que d'autres implémentations de Flash Attention 2 - sans dégradation de la précision. EmbeddingGemma-300M fonctionne sur seulement 3 Go de VRAM. Vous pouvez utiliser votre modèle n'importe où : 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 d'upload, c'est toujours pris en charge.

Nous avons créé des notebooks gratuits pour l'affinage, avec 3 cas d'utilisation principaux :

  • All-MiniLM-L6-v2 : produire des embeddings de phrases compacts et spécifiques au domaine pour la recherche sémantique, la récupération et le clustering, ajustés sur vos propres données.

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

  • electroglyph/technical : mieux capter 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 uploadés dans notre collection iciarrow-up-right.

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

🦥 Fonctionnalités d'Unsloth

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

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

  • Les modèles cross-encoder sont confirmés comme pouvant s'entraîner correctement même via le chemin de repli

  • Cette version prend également en charge transformers v5

Il y a un support limité pour les modèles sans modules.json (nous assignerons automatiquement des SentenceTransformers modules de pooling). Si vous faites quelque chose de personnalisé (têtes personnalisées, pooling non standard), vérifiez soigneusement les sorties comme le comportement de l'embedding poolé.

Certains modèles nécessitaient des ajouts personnalisés tels que MPNet ou DistilBERT ont été rendus possibles en patchant le checkpointing de gradient dans le transformers modèles.

🛠️ Flux de travail d'affinage

Le nouveau flux d'affinage est centré autour de FastSentenceTransformer.

Principales méthodes de sauvegarde/poussée :

  • save_pretrained() Sauvegarde adaptateurs LoRA dans un dossier local

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

  • push_to_hub() Pousse adaptateurs LoRA vers Hugging Face

  • push_to_hub_merged() Pousse le modèle fusionné vers 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 vous devez passer : for_inference=True

Ainsi vos chargements pour l'inférence devraient ressembler à :

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

dans le même virtualenv avant d'appeler les méthodes 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 affiné 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 tout framework RAG.

Il n'y a pas d'enfermement propriétaire car le modèle affiné peut ensuite être téléchargé localement sur votre propre appareil.

📊 Benchmarks Unsloth

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

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

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

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

🔮 Support de modèles

Voici quelques modèles d'embeddings 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 y a un modèle uniquement encodeur que vous souhaitez et qui ne l'est pas, n'hésitez pas à ouvrir une GitHub issuearrow-up-right demande pour cela.

Mis à jour

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