Choisir des modèles d'embedding pour le RAG
Comparez les modèles d'embedding en 2025 : OpenAI, Cohere, alternatives open-source. Trouvez le meilleur pour votre cas d'usage.
Paysage des modèles d'embedding (novembre 2025)
L'espace des embeddings a considérablement évolué. Voici ce qui mène :
Top modèles par score MTEB
1. OpenAI text-embedding-3-large
- Dimensions : 3072 (configurable jusqu'à 256)
- Score MTEB : 64.6
- Coût : $0.13 par 1M tokens
- Meilleur pour : Usage général, haute précision
2. Cohere embed-v4
- Dimensions : 1024
- Score MTEB : 65.2 (le plus élevé en nov 2025)
- Coût : $0.10 par 1M tokens
- Meilleur pour : Multilingue, optimisé recherche
3. Voyage AI voyage-2
- Dimensions : 1536
- Score MTEB : 63.8
- Coût : $0.12 par 1M tokens
- Meilleur pour : Ajustement spécifique au domaine
4. BGE-M3 (open-source)
- Dimensions : 1024
- Score MTEB : 63.0
- Coût : Gratuit (auto-hébergé)
- Meilleur pour : Budget limité, confidentialité
5. all-MiniLM-L6-v2
- Dimensions : 384
- Score MTEB : 56.3
- Coût : Gratuit
- Meilleur pour : Prototypage rapide, dev local
Facteurs de décision clés
1. Précision vs Coût
DEVELOPERpython# High accuracy: OpenAI or Cohere from openai import OpenAI client = OpenAI() response = client.embeddings.create( model="text-embedding-3-large", input="Your text here" ) embedding = response.data[0].embedding # Budget option: Open-source from sentence_transformers import SentenceTransformer model = SentenceTransformer('BAAI/bge-large-en-v1.5') embedding = model.encode("Your text here")
2. Taille de dimension
Plus petit = plus rapide, stockage moins cher, mais moins précis
DEVELOPERpython# OpenAI: Configurable dimensions response = client.embeddings.create( model="text-embedding-3-large", input="text", dimensions=512 # vs default 3072 )
3. Support linguistique
Leaders multilingues (nov 2025) :
- Cohere embed-v4 : 100+ langues
- BGE-M3 : 100+ langues
- OpenAI-3-large : Fort multilingue
- E5-mistral-7b-instruct : Open-source multilingue
4. Spécialisation par domaine
Code : OpenAI text-embedding-3-small, Voyage code-2 Juridique : BGE fine-tuné sur corpus juridique Médical : BioGPT embeddings, PubMedBERT
Benchmarker votre cas d'usage
Ne faites pas confiance aux benchmarks génériques - testez sur VOS données :
DEVELOPERpythonfrom sentence_transformers import SentenceTransformer, util def benchmark_model(model_name, queries, documents): model = SentenceTransformer(model_name) # Embed query_embs = model.encode(queries) doc_embs = model.encode(documents) # Calculate similarities similarities = util.cos_sim(query_embs, doc_embs) return similarities # Test multiple models models = [ "text-embedding-3-large", "BAAI/bge-large-en-v1.5", "sentence-transformers/all-MiniLM-L6-v2" ] for model in models: scores = benchmark_model(model, test_queries, test_docs) print(f"{model}: {scores.mean()}")
Embeddings Matryoshka (innovation 2025)
Les nouveaux modèles supportent des dimensions variables depuis le même embedding :
DEVELOPERpython# Generate once at full dimension full_embedding = model.encode(text, dimension=1024) # Truncate later as needed small_embedding = full_embedding[:256] # Just use first 256 medium_embedding = full_embedding[:512] # Quality degrades gracefully, not catastrophically
Modèles supportant ceci :
- OpenAI text-embedding-3-*
- Nomic embed-v1.5
- Jina embeddings v2
Fine-tuning pour votre domaine
DEVELOPERpythonfrom sentence_transformers import SentenceTransformer, InputExample, losses from torch.utils.data import DataLoader # Load base model model = SentenceTransformer('BAAI/bge-base-en-v1.5') # Create training examples train_examples = [ InputExample(texts=['query', 'positive_doc', 'negative_doc']) ] train_dataloader = DataLoader(train_examples, shuffle=True, batch_size=16) # Fine-tune train_loss = losses.MultipleNegativesRankingLoss(model) model.fit( train_objectives=[(train_dataloader, train_loss)], epochs=1, warmup_steps=100 )
Analyse de coûts (1M documents, nov 2025)
| Modèle | Coût Embedding | Stockage (1024d) | Inférence |
|---|---|---|---|
| OpenAI-3-large | $130 | $50/mois | $0.13/1M requêtes |
| Cohere v4 | $100 | $50/mois | $0.10/1M requêtes |
| BGE (auto-hébergé) | $0 | $50/mois | GPU: $100/mois |
| all-MiniLM | $0 | $20/mois | CPU: $20/mois |
Recommandations par cas d'usage
Startup/MVP : all-MiniLM-L6-v2 (gratuit, rapide) Production (qualité importante) : Cohere embed-v4 Production (budget important) : BGE-large auto-hébergé Multilingue : Cohere embed-v4 ou BGE-M3 Recherche de code : Voyage code-2 Critique pour la confidentialité : BGE auto-hébergé
Stratégie de migration
Changer d'embeddings nécessite de tout ré-embedder :
DEVELOPERpython# Gradual migration def hybrid_search(query, old_index, new_index, alpha=0.5): # Search both indices old_results = old_index.search(old_model.encode(query)) new_results = new_index.search(new_model.encode(query)) # Blend results return blend_rankings(old_results, new_results, alpha)
Le modèle d'embedding est la fondation de votre RAG. Choisissez judicieusement, benchmarkez minutieusement, et soyez prêt à mettre à niveau au fur et à mesure que les modèles s'améliorent.
Tags
Articles connexes
Embeddings : Les Fondations de la Recherche Sémantique
Plongée profonde dans les modèles d'embedding, les représentations vectorielles et comment choisir la bonne stratégie d'embedding pour votre système RAG.
Embeddings Multilingues pour un RAG Global
Construisez des systèmes RAG qui fonctionnent dans toutes les langues en utilisant des modèles d'embeddings multilingues et la récupération inter-langues.
Affiner les Embeddings pour Votre Domaine
Augmentez la précision de récupération de 30% : affinez les modèles d'embeddings sur vos documents et requêtes spécifiques.