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.