Embedding : transformer le sens en nombres pour l’IA
- Categorie
- Representation vectorielle / NLP
- Dimensions
- 256 a 3 072 selon le modele
- Modeles
- text-embedding-3 (OpenAI), embed-v3 (Cohere), BGE-M3
- Stockage
- Bases vectorielles
- Usage principal
- RAG, recherche semantique, classification
Qu’est-ce qu’un embedding ?
Les ordinateurs ne comprennent pas les mots. Ils manipulent des nombres. Un embedding est le pont entre ces deux mondes : il transforme un texte en une liste de nombres (un vecteur) qui capture son sens semantique.
Prenons un exemple concret. Le mot « roi » pourrait etre represente par le vecteur [0.21, -0.45, 0.78, …] avec 1 536 dimensions. Le mot « reine » aurait un vecteur tres proche, car ces mots partagent un champ semantique similaire. Le mot « voiture » aurait un vecteur distant, car il n’a rien a voir semantiquement.
La propriete la plus fascinante des embeddings est qu’ils capturent des relations semantiques. L’operation vectorielle « roi – homme + femme » produit un vecteur proche de « reine ». Cette arithmetique du sens est ce qui rend les embeddings si puissants.
Comment fonctionnent les embeddings ?
Le processus de creation
Un modele d’embedding prend un texte en entree et produit un vecteur de dimension fixe en sortie. Ce modele est un reseau de neurones entraine sur des millions de paires de textes pour apprendre que les textes similaires doivent avoir des vecteurs proches.
Le processus technique : le texte est d’abord tokenise, puis chaque token passe a travers les couches du transformer. La derniere couche produit un vecteur par token. Ces vecteurs sont agreges (generalement par moyenne ou pooling) pour produire un vecteur unique representant l’ensemble du texte.
Les dimensions d’un embedding
Un embedding est un vecteur a N dimensions. Plus N est grand, plus l’embedding peut capturer de nuances semantiques, mais plus il consomme de memoire et de calcul.
| Modele | Dimensions | Performance MTEB | Cout (1M tokens) |
|---|---|---|---|
| text-embedding-3-small (OpenAI) | 1 536 | 62,3 % | 0,02 $ |
| text-embedding-3-large (OpenAI) | 3 072 | 64,6 % | 0,13 $ |
| embed-v3 (Cohere) | 1 024 | 66,3 % | 0,10 $ |
| BGE-M3 (open source) | 1 024 | 65,1 % | Gratuit (auto-heberge) |
| Voyage-3 (Voyage AI) | 1 024 | 67,1 % | 0,06 $ |
| Gecko (Google) | 768 | 66,3 % | Variable |
Mesurer la similarite
Pour comparer deux embeddings, on utilise la similarite cosinus : l’angle entre les deux vecteurs. Un cosinus de 1 signifie que les textes sont identiques semantiquement, 0 signifie qu’ils sont sans rapport, et -1 qu’ils sont opposes.
import numpy as np
def cosine_similarity(v1, v2):
return np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2))
# Exemple : "chat domestique" vs "felin de compagnie" -> ~0.92
# Exemple : "chat domestique" vs "python langage" -> ~0.15
Cas d’usage des embeddings
Recherche semantique
La recherche traditionnelle par mots-cles echoue quand l’utilisateur utilise des synonymes ou des formulations differentes. Avec les embeddings, la requete « comment nourrir mon chat » trouvera un article intitule « Alimentation feline : guide complet » meme s’il ne contient pas les mots « nourrir » ni « chat ».
RAG (Retrieval-Augmented Generation)
Le RAG est le cas d’usage phare des embeddings. Chaque document est transforme en embedding, stocke dans une base vectorielle, puis interroge par similarite quand un utilisateur pose une question au LLM.
Classification de texte
Les embeddings permettent de classifier des textes sans entrainer de modele specifique. Vous definissez les categories (embeddings de reference) et classez chaque nouveau texte dans la categorie dont l’embedding est le plus proche.
Detection d’anomalies et de doublons
En comparant les embeddings de tickets de support, d’emails ou de publications, vous pouvez detecter les doublons (embeddings quasi identiques) et les anomalies (embeddings tres eloignes de la distribution normale).
Systemes de recommandation
Les plateformes de contenu utilisent les embeddings pour recommander des articles, videos ou produits similaires a ceux que l’utilisateur a deja consultes. « Les gens qui ont lu cet article pourraient aussi aimer… » est souvent pilote par la proximite des embeddings.
Implementation pratique
from openai import OpenAI
client = OpenAI()
# Generer un embedding
response = client.embeddings.create(
model="text-embedding-3-small",
input="L'intelligence artificielle transforme l'industrie"
)
vecteur = response.data[0].embedding
print(f"Dimensions : {len(vecteur)}") # 1536
print(f"Premiers elements : {vecteur[:5]}")
# Comparer deux textes
textes = [
"L'IA revolutionne les entreprises",
"Le machine learning change l'industrie",
"La recette du gateau au chocolat"
]
response = client.embeddings.create(
model="text-embedding-3-small",
input=textes
)
embeddings = [r.embedding for r in response.data]
# Texte 1 vs 2 : ~0.87 (proches semantiquement)
# Texte 1 vs 3 : ~0.12 (sans rapport)
Bonnes pratiques
Choisissez le bon modele pour votre langue. Tous les modeles d’embedding ne sont pas egaux sur le francais. Les modeles multilingues (embed-v3, BGE-M3) performent mieux que les modeles anglophones sur les textes en francais.
Normalisez vos textes. Supprimez les espaces en trop, uniformisez la casse si pertinent, et nettoyez les caracteres speciaux. Un texte propre produit un meilleur embedding.
Utilisez le meme modele partout. Les embeddings de differents modeles ne sont pas compatibles entre eux. Si vous indexez vos documents avec text-embedding-3-small, vous devez utiliser le meme modele pour les requetes.
Reduisez les dimensions si possible. OpenAI permet de reduire les dimensions de text-embedding-3-large de 3 072 a 256. La perte de precision est minimale pour la plupart des cas d’usage, et le gain en stockage et en vitesse est considerable.
Testez sur votre domaine. Les benchmarks generaux (MTEB) ne refletent pas forcement les performances sur votre cas d’usage specifique. Creez un petit jeu de test avec des paires pertinentes/non pertinentes de votre domaine et mesurez la performance reelle.
L’evolution des embeddings
Les embeddings ont considerablement evolue. Word2Vec (2013) a pose les bases avec des embeddings par mot. GloVe (2014) a ameliore la methode avec des statistiques globales. BERT (2018) a introduit les embeddings contextuels : le meme mot a un vecteur different selon son contexte. Les modeles actuels produisent des sentence embeddings qui capturent le sens de phrases et paragraphes entiers.
FAQ
Quelle est la difference entre un embedding et un token ?
Un token est un fragment de texte identifie par un numero entier dans un vocabulaire fixe. Un embedding est un vecteur dense a haute dimension qui represente le sens de ce texte. La tokenisation est l’etape de decoupage, l’embedding est l’etape de representation semantique. Un token est discret (un identifiant), un embedding est continu (un vecteur de nombres reels).
Combien coute la generation d’embeddings ?
Les couts sont tres faibles. Avec text-embedding-3-small d’OpenAI, 1 million de tokens coute 0,02 $. Un document de 10 pages represente environ 3 000 tokens, soit 0,00006 $. Indexer 10 000 documents coute environ 0,60 $. Les modeles open source comme BGE-M3 sont gratuits si vous les hebergez vous-meme. Le cout principal du RAG n’est pas l’embedding mais les appels au LLM.
Peut-on visualiser des embeddings ?
Oui, grace a des techniques de reduction de dimension comme t-SNE ou UMAP, qui projettent les vecteurs a haute dimension sur un plan 2D ou 3D. Ces visualisations revelent les clusters semantiques : les textes sur un meme sujet forment des groupes visuels distincts. C’est utile pour comprendre la structure de votre base documentaire et detecter des anomalies.
Faut-il re-generer les embeddings quand le modele est mis a jour ?
Oui. Quand un fournisseur publie une nouvelle version de son modele d’embedding, les vecteurs produits sont differents et incompatibles avec les anciens. Il faut re-indexer l’integralite de votre base documentaire. C’est pourquoi il est important de choisir un modele stable et de planifier les migrations. OpenAI s’engage a maintenir ses modeles d’embedding sans changement cassant.
Les embeddings fonctionnent-ils pour les images et l’audio ?
Oui. Les modeles comme CLIP (OpenAI) produisent des embeddings dans un espace partage texte-image : vous pouvez chercher une image avec une requete textuelle ou trouver des images similaires. Pour l’audio, des modeles comme CLAP (Contrastive Language-Audio Pretraining) font de meme. Les modeles multimodaux unifient progressivement les embeddings de toutes les modalites.