La qualité de la recherche vectorielle ne dépend pas seulement de la base de données. Tout commence par les mathématiques que vous utilisez pour comparer les embeddings. Les équipes choisissent souvent une métrique de similarité presque par accident, puis se demandent pourquoi la qualité de la recherche semble inconstante.
La différence pratique
La similarité cosinus se soucie de l'angle, ce qui signifie qu'elle mesure si deux vecteurs pointent dans la même direction. Le produit scalaire combine l'angle et la magnitude.
Cette différence est importante car certains modèles d'embeddings produisent des vecteurs normalisés et d'autres non. Si les vecteurs sont normalisés à une longueur unitaire, la similarité cosinus et le produit scalaire deviennent étroitement liés :
function dot(a: number[], b: number[]) {
return a.reduce((sum, value, index) => sum + value * b[index], 0);
}
function cosine(a: number[], b: number[]) {
const normA = Math.sqrt(dot(a, a));
const normB = Math.sqrt(dot(b, b));
return dot(a, b) / (normA * normB);
}
Pourquoi cela a de l'importance dans la recherche
Si la magnitude a une signification dans votre pipeline d'embeddings, le produit scalaire peut être utile. Si seule la similarité directionnelle compte, la similarité cosinus est souvent l'option la plus sûre.
Cela signifie que la bonne métrique dépend de :
- si les embeddings sont normalisés
- si la magnitude du vecteur encode un signal utile
- ce que votre modèle de recherche attend
Meilleure règle
Ne choisissez pas la similarité cosinus ou le produit scalaire simplement parce qu'un tutoriel l'a fait. Consultez la documentation du modèle d'embeddings, examinez si les vecteurs sont normalisés et évaluez la métrique par rapport à vos jugements de pertinence réels.
La recherche vectorielle est composée de mathématiques plus de données plus des attentes de produit. Omettre l'un de ces trois éléments produit généralement une recherche faible.
Lectures supplémentaires