Die Qualität der Vektorsuche hängt nicht nur von der Datenbank ab. Sie beginnt mit der Mathematik, die Sie zur Vergleich von Embeddings verwenden. Teams wählen oft eine Ähnlichkeitsmetrik fast zufällig aus und fragen sich dann, warum die Abrufqualität inkonsistent wirkt.
Der praktische Unterschied
Kosinusähnlichkeit kümmert sich um den Winkel, was bedeutet, dass sie misst, ob zwei Vektoren in dieselbe Richtung zeigen. Das Skalarprodukt kombiniert Winkel und Größe.
Dieser Unterschied ist wichtig, da einige Embedding-Modelle normalisierte Vektoren erzeugen und andere nicht. Wenn Vektoren auf die Einheitlänge normalisiert sind, werden Kosinusähnlichkeit und Skalarprodukt eng miteinander verbunden:
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);
}
Warum das im Abruf wichtig ist
Wenn die Größe in Ihrem Embedding-Pipeline Bedeutung hat, kann das Skalarprodukt nützlich sein. Wenn nur die gerichtete Ähnlichkeit zählt, ist der Kosinus oft das sicherere Maß.
Das bedeutet, dass die richtige Metrik von Folgendem abhängt:
- ob Embeddings normalisiert sind
- ob die Vektorgroße nützliche Signale kodiert
- was Ihr Abrufmodell erwartet
Bessere Regel
Wählen Sie nicht Kosinus oder Skalarprodukt, weil es ein Tutorial vorgegeben hat. Überprüfen Sie die Dokumentation des Embedding-Modells, untersuchen Sie, ob Vektoren normalisiert sind, und bewerten Sie die Metrik anhand Ihrer tatsächlichen Relevanzurteile.
Vektorsuche ist Mathematik plus Daten plus Produkterwartungen. Das Weglassen eines dieser drei Elemente führt normalerweise zu schwachem Abruf.
Weiterführende Literatur