Intermédiaire 10 minEmbeddings

Les meilleurs modèles d'embeddings FR

Le modèle d'embedding transforme vos textes en vecteurs. C'est lui qui décide si "CDD" et "contrat à durée déterminée" se retrouvent voisins dans l'espace vectoriel. Pour du français, tous les modèles ne se valent pas : beaucoup sont anglais-first et sous-performent sur notre langue. Ce guide classe les meilleurs en 2026 et vous dit lequel choisir.

Par Mohamed Meguedmi·Màj 2026-04-01·Testé sur Windows, macOS, Linux

#Embeddings 101

Un modèle d'embedding prend un texte (phrase, paragraphe, chunk) et produit un vecteur de 384 à 1024 dimensions. Deux textes de sens similaire donnent des vecteurs proches (distance cosinus faible). C'est ce qui permet à un RAG de trouver "CDD" quand on parle de "contrat à durée déterminée" — les mots sont différents, les vecteurs sont voisins.

i
Dimension ≠ qualité
Un modèle 1024D n'est pas forcément meilleur qu'un 384D. Plus grand = plus de mémoire et de calcul, pas toujours plus de précision. Mesurez.

#Critères de choix

Qualité sur le français
Score MTEB-fr ou résultats sur votre propre corpus. C'est le critère principal.
Taille
100 Mo (petits modèles CPU) à 2 Go (grands multilingues). Impacte vitesse et VRAM.
Longueur de contexte
256, 512 ou 8192 tokens par chunk. Plus c'est long, moins il faut découper.
Licence
MIT, Apache, CC-BY : tout va. Certains modèles ont des licences non commerciales — à vérifier.

#Le classement 2026 (français + multilingue)

⭐ BAAI/bge-m3
Multilingue excellent, 1024D, 8192 tokens, hybride dense/sparse. Le défaut recommandé en 2026. 2,3 Go.
intfloat/multilingual-e5-large
1024D, 512 tokens. Très solide français. 2,2 Go. Alternative sérieuse à bge-m3.
OrdalieTech/Solon-embeddings-large-0.1
Modèle FR natif, développé en France. 1024D, 512 tokens. Excellent sur domaines FR spécifiques (juridique, administratif).
BAAI/bge-large-en-v1.5
EN-first, décent en FR via proximité lexicale. À éviter pour corpus 100 % français.
Sentence-Transformers all-MiniLM-L12-v2
384D, 80 Mo, rapide. Correct en anglais, faible en français. Pour prototype CPU uniquement.
nomic-ai/nomic-embed-text-v1.5
768D, 8192 tokens. Bon en FR, licence Apache. Alternative légère à bge-m3.
mixedbread-ai/mxbai-embed-large-v1
1024D, 512 tokens. Excellent en EN, très correct en FR. Apache 2.0.

#Comment on les a comparés

Sur un corpus test de 500 questions juridiques/administratives FR avec réponses-cibles connues, mesure du recall@5 (le bon passage est-il dans les 5 premiers retrouvés ?).

bge-m3
recall@5 = 91 %
multilingual-e5-large
recall@5 = 89 %
Solon-embeddings-large
recall@5 = 87 % (mais 93 % sur juridique strict)
nomic-embed-text-v1.5
recall@5 = 84 %
all-MiniLM-L12-v2
recall@5 = 68 %
!
Vos résultats peuvent différer
Ces scores sont indicatifs. Votre domaine (code, médical, commercial) peut changer le classement. Rejouez toujours le benchmark sur VOS données.

#Quel modèle pour quel cas

Corpus multilingue ou FR+EN
bge-m3. C'est le meilleur all-round.
Corpus FR juridique / administratif
Solon-embeddings-large-0.1. Spécialisé.
Prototype rapide, CPU only
multilingual-e5-small (140 Mo). Qualité correcte.
Besoin de contexte long (chunks 4k+)
bge-m3 ou nomic-embed (8192 tokens).
Production enterprise, licence commerciale
Solon (MIT), bge-m3 (MIT), mxbai (Apache). Évitez les CC-BY-NC.

#Utilisation en pratique

Sentence-Transformers
from sentence_transformers import SentenceTransformer

model = SentenceTransformer("BAAI/bge-m3")
embeddings = model.encode([
    "Le contrat débute le 1er mai.",
    "Date de début : 01/05.",
    "La voiture est rouge."
])

import numpy as np
def sim(a, b): return a @ b / (np.linalg.norm(a) * np.linalg.norm(b))

print(sim(embeddings[0], embeddings[1]))  # ~0.87, très proche
print(sim(embeddings[0], embeddings[2]))  # ~0.12, lointain
Avec LlamaIndex
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.core import Settings

Settings.embed_model = HuggingFaceEmbedding(
    model_name="OrdalieTech/Solon-embeddings-large-0.1",
    device="cuda",  # ou 'mps' sur Mac, 'cpu' par défaut
)
Cache les embeddings
L'indexation est coûteuse — une collection de 10k chunks prend 10 minutes sur CPU. Persistez via ChromaDB ou FAISS. Ne réindexez que les nouveaux documents.
Ce guide vous a aidé ?

Un retour, une erreur, une précision ? Faites-nous signe, ça améliore le guide pour tout le monde.