Aller au contenu principal

Introduction aux Embeddings

Qu’est-ce qu’un embedding ?

Un embedding est une représentation numérique d’un texte sous forme de vecteur dans un espace multidimensionnel. Chaque mot, phrase ou document est transformé en une liste de nombres — un vecteur — qui capture sa signification sémantique.

Pourquoi est-ce fondamental ? Parce que les ordinateurs ne comprennent pas le texte brut. Ils travaillent avec des nombres. Les embeddings permettent de traduire le langage humain en un format que les algorithmes peuvent manipuler, comparer et analyser.

Vecteurs et espace sémantique

Imaginez un espace à plusieurs dimensions (1024 dimensions pour mistral-embed, par exemple). Chaque texte occupe une position précise dans cet espace. Les textes ayant des significations proches se retrouvent proches géométriquement.

# Un embedding est simplement une liste de nombres
embedding_exemple = [0.0234, -0.1567, 0.0891, 0.0456]  # 1024 valeurs en réalité

# Deux phrases similaires auront des vecteurs proches
phrase_1 = "Le chat dort sur le canapé"     # -> vecteur A
phrase_2 = "Le félin sommeille sur le sofa"  # -> vecteur B (proche de A)
phrase_3 = "La bourse a chuté hier"          # -> vecteur C (éloigné de A et B)

Cette propriété est ce qui rend les embeddings si puissants : la proximité géométrique reflète la proximité sémantique.

1024
Dimensions mistral-embed (texte)
3072
Dimensions codestral-embed (code)
5
Types de précision (dtype)
< 1s
Latence API par requête

La distance comme mesure de similarité

Pour déterminer si deux textes sont proches, vous mesurez la distance entre leurs vecteurs. Plusieurs métriques existent :

  • Distance euclidienne : la ligne droite entre deux points. Plus elle est petite, plus les textes sont similaires.
  • Similarité cosinus : mesure l’angle entre deux vecteurs. Un angle de 0° (cosinus = 1) signifie des textes identiques sémantiquement.
  • Produit scalaire : rapide à calculer, souvent utilisé pour le classement.
import numpy as np

def cosine_similarity(vec_a, vec_b):
    """Calcule la similarité cosinus entre deux vecteurs."""
    dot_product = np.dot(vec_a, vec_b)
    norm_a = np.linalg.norm(vec_a)
    norm_b = np.linalg.norm(vec_b)
    return dot_product / (norm_a * norm_b)

# Résultat entre -1 et 1
# 1.0 = identique, 0.0 = aucun rapport, -1.0 = opposé

Applications des embeddings

Les embeddings sont à la base de nombreuses applications modernes :

  • Recherche sémantique : trouver des documents par signification, pas par mots-clés exacts
  • RAG (Retrieval-Augmented Generation) : enrichir les réponses d’un LLM avec des données pertinentes
  • Classification de textes : catégoriser automatiquement des documents
  • Détection de doublons : identifier les contenus similaires dans une base
  • Clustering : regrouper des documents par thème sans étiquettes prédéfinies
  • Systèmes de recommandation : suggérer du contenu similaire

Pourquoi Mistral pour les embeddings ?

Mistral propose deux modèles d’embedding spécialisés :

  1. mistral-embed — pour le texte naturel (1024 dimensions)
  2. codestral-embed — pour le code source (jusqu’à 3072 dimensions)

Ces modèles sont accessibles via une API simple, avec un excellent rapport qualité/coût. Dans les leçons suivantes, vous apprendrez à les utiliser concrètement.

Points clés à retenir

  • Un embedding transforme du texte en vecteur numérique multidimensionnel
  • La proximité géométrique entre vecteurs reflète la similarité sémantique
  • La similarité cosinus est la métrique la plus courante pour comparer des embeddings
  • Mistral propose deux modèles : mistral-embed (texte) et codestral-embed (code)
  • Les embeddings sont le fondement du RAG, de la recherche sémantique et du clustering