Qu'est-ce qu'un embedding ?

Un embedding est un vecteur de nombres qui encode le sens d'un texte. Deux phrases de sens proche produisent des vecteurs proches dans l'espace, même si elles ne partagent aucun mot. C'est ce qui rend possible la recherche sémantique, par opposition à la recherche par mots-clés.

Mesurer la proximité

La similarité se mesure le plus souvent par le cosinus entre deux vecteurs : proche de 1, les sens se ressemblent ; proche de 0, ils sont indépendants.

function cosine(a: number[], b: number[]): number {
  let dot = 0, na = 0, nb = 0;
  for (let i = 0; i < a.length; i++) {
    dot += a[i] * b[i]; na += a[i] ** 2; nb += b[i] ** 2;
  }
  return dot / (Math.sqrt(na) * Math.sqrt(nb));
}

Passer à l'échelle

Comparer la requête à chaque document devient coûteux à grande échelle. Les index ANN (Approximate Nearest Neighbors, comme HNSW) trouvent les voisins quasi optimaux en temps logarithmique. C'est ce qu'utilisent les bases vectorielles (pgvector, Qdrant, etc.).

Le piège classique

La recherche vectorielle seule rate parfois les correspondances exactes (un identifiant, un nom propre). La recherche hybride — vecteurs + lexical (BM25) — combine le meilleur des deux et reste la valeur sûre en production.