Chapitre 3 : Choisir le bon modèle d'embedding
Introduction
Sélectionner le bon modèle d'embedding dépend de vos exigences spécifiques : qualité, coût, latence, support linguistique et contraintes de déploiement.
Cadre de décision
Benchmarks MTEB
Le Massive Text Embedding Benchmark (MTEB) est la norme pour comparer les modèles d'embedding :
Classement (Meilleurs modèles)
| Rang | Modèle | Score moyen | Dimensions |
|---|---|---|---|
| 1 | text-embedding-3-large | 64.59 | 3072 |
| 2 | Cohere embed-v3 | 64.47 | 1024 |
| 3 | BGE-large-en-v1.5 | 64.23 | 1024 |
| 4 | E5-large-v2 | 62.25 | 1024 |
| 5 | text-embedding-3-small | 62.26 | 1536 |
Performance spécifique aux tâches
| Modèle | Récupération | STS | Classification |
|---|---|---|---|
| text-embedding-3-large | 59.2 | 65.4 | 71.2 |
| Cohere embed-v3 | 58.9 | 64.8 | 70.1 |
| BGE-large | 57.8 | 63.9 | 69.5 |
Analyse des coûts
Par million de tokens
def calculate_monthly_cost(
docs_per_month: int,
avg_tokens_per_doc: int,
model: str
):
prices = {
"text-embedding-3-small": 0.02,
"text-embedding-3-large": 0.13,
"cohere-embed-v3": 0.10,
"self-hosted": 0.0 # Infrastructure costs separate
}
total_tokens = docs_per_month * avg_tokens_per_doc
millions = total_tokens / 1_000_000
return millions * prices[model]
# Exemple : 1M documents, 500 tokens chacun
cost = calculate_monthly_cost(1_000_000, 500, "text-embedding-3-small")
# Résultat : 10 $/mois pour l'embedding
Comparaison des coûts totaux
| Échelle | OpenAI Small | OpenAI Large | Auto-hébergé |
|---|---|---|---|
| 100K docs | 1 $ | 6,50 $ | ~50 $/mois (infra) |
| 1M docs | 10 $ | 65 $ | ~100 $/mois |
| 10M docs | 100 $ | 650 $ | ~200 $/mois |
Considérations de latence
Latence de l'API
| Modèle | Latence moyenne | Latence P99 |
|---|---|---|
| text-embedding-3-small | 50ms | 150ms |
| text-embedding-3-large | 80ms | 200ms |
| Cohere embed-v3 | 60ms | 180ms |
| Auto-hébergé (GPU) | 10ms | 30ms |
Stratégie de batching
import asyncio
from openai import AsyncOpenAI
client = AsyncOpenAI()
async def batch_embed(texts, batch_size=100):
"""Batching efficace pour les grands ensembles de données"""
embeddings = []
for i in range(0, len(texts), batch_size):
batch = texts[i:i + batch_size]
response = await client.embeddings.create(
input=batch,
model="text-embedding-3-small"
)
embeddings.extend([e.embedding for e in response.data])
return embeddings
Support linguistique
Modèles multilingues
| Modèle | Langues | Qualité |
|---|---|---|
| text-embedding-3 | 100+ | Excellent |
| Cohere multilingual | 100+ | Excellent |
| BGE-m3 | 100+ | Excellent |
| paraphrase-multilingual | 50+ | Bon |
Spécifique à la langue
# Pour des langues spécifiques, des modèles dédiés peuvent être meilleurs
models_by_language = {
"en": "BAAI/bge-large-en-v1.5",
"zh": "BAAI/bge-large-zh-v1.5",
"multilingual": "BAAI/bge-m3"
}
Options de déploiement
Option 1 : API (Recommandée pour la plupart)
# Avantages : Pas d'infrastructure, toujours à jour
# Inconvénients : Coût continu, latence, les données quittent votre réseau
from langchain.embeddings import OpenAIEmbeddings
embeddings = OpenAIEmbeddings()
Option 2 : Auto-hébergé
# Avantages : Pas de coût par token, latence réduite, les données restent internes
# Inconvénients : Coût d'infrastructure, maintenance
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('BAAI/bge-large-en-v1.5')
# Charger une fois, utiliser plusieurs fois
Option 3 : Hybride
# Utiliser l'auto-hébergement pour les gros volumes, l'API pour les cas particuliers
def get_embeddings(texts, use_api=False):
if use_api or len(texts) < 10:
return api_embeddings.embed_documents(texts)
else:
return local_model.encode(texts)
Liste de vérification pour la sélection
| Facteur | Question | Recommandation |
|---|---|---|
| Budget | Budget mensuel ? | >100 $ : API, <100 $ : Auto-hébergé |
| Volume | Documents/mois ? | >10M : Considérer l'auto-hébergement |
| Latence | Temps réel nécessaire ? | <20ms : Auto-hébergement requis |
| Langues | Multilingue ? | Utiliser des modèles multilingues |
| Confidentialité | Sensibilité des données ? | Auto-héberger si critique |
| Qualité | Précision critique ? | Payer pour le meilleur modèle |
Matrice de recommandation
| Cas d'utilisation | Modèle recommandé |
|---|---|
| Startup / MVP | text-embedding-3-small |
| Entreprise (qualité) | text-embedding-3-large |
| Entreprise (coût) | BGE-large (auto-hébergé) |
| Multilingue | Cohere multilingual |
| Edge / Hors ligne | all-MiniLM-L6-v2 |
| Qualité maximale | Cohere embed-v3 |
Résumé
- Commencez avec l'API (OpenAI small) pour le prototypage
- Évaluez les scores MTEB pour votre type de tâche
- Calculez les coûts à votre échelle prévue
- Envisagez l'auto-hébergement à haut volume
- Testez avec vos données avant de vous engager
Prochaines étapes
Testez vos connaissances avec le Quiz du Module 3 !