← Zurück

Vektorähnlichkeitsmetriken: „ L2 “, „Cosine“ und „Inneres Produkt“

Ziehen Sie den Abfragepunkt und wechseln Sie die Metriken, um zu sehen, wie sich die nächsten Nachbarn ändern.

Die 5 nächsten Nachbarn(niedriger = näher)

#1P1842.1
#2P1074.0
#3P17111.6
#4P14122.8
#5P13126.9
Ähnlichkeitsmaß
L2
Angezeigter Wert
Euklidischer Abstand

L2 (Euklidischer Abstand)

Misst die geradlinige Entfernung zwischen zwei Punkten. Die konzentrischen Kreise zeigen äquidistante Zonen an – alle Punkte auf demselben Kreis sind gleich „weit“ von der Abfrage entfernt.

Was ist eine Metrik?

Eine Metrik ist lediglich eine Funktion, die zwei Vektoren als Eingabe nimmt und eine einzige Zahl zurückgibt, die angibt, wie ähnlich (oder unterschiedlich) diese sind. Bei der Vektorsuche geht es im Kern darum, „die K Vektoren mit dem besten Metrikwert für meine Abfrage zu finden“. Alles andere – Indizes, Cluster, Graphen – dient lediglich der Verwaltung, um zu vermeiden, dass dieser Wert für jeden einzelnen Vektor in der Datenbank berechnet werden muss.

Die von Ihnen gewählte Metrik definiert, was „ähnlich“ für Ihre Daten bedeutet. Zwei Einbettungen können unter einer Metrik „nahe“ und unter einer anderen „weit“ sein – gleiche Daten, unterschiedliches Ergebnis. Deshalb erfolgt diese Auswahl, bevor Sie überhaupt einen Index erstellen.

Die drei Begriffe, die Ihnen in der Praxis begegnen werden

  • L2 (Euklidisch): geradlinige Entfernung. Je niedriger, desto besser. Verwenden, wenn sowohl Richtung als auch Größe eine Rolle spielen – Bild-Embeddings, geografische Koordinaten, Rohdaten von Sensoren. Die Standardeinstellung für die meisten CV-Modelle.
  • Kosinus: Winkel zwischen Vektoren, ohne Berücksichtigung der Länge. Je höher, desto besser. Verwenden Sie diesen Wert, wenn nur die Richtung von Bedeutung ist – beispielsweise bei Text-Embeddings (BERT, OpenAI usw.) sowie bei Empfehlungssystemen, bei denen die „Beliebtheit“ eines Vektors nicht dominieren sollte.
  • Inneres Produkt (IP): Skalarprodukt, berücksichtigt sowohl die Ausrichtung als auch die Größe. Je höher, desto besser. Zu verwenden mit Modellen, die explizit auf „ IP “ (DPR, viele Abrufmodelle) normalisieren. Mathematisch identisch mit dem Kosinus, wenn die Vektoren Einheitslänge haben.

Zwei praktische Regeln

  • Passen Sie die Metrik an das Modell an. Einbettungsmodelle werden unter Berücksichtigung einer bestimmten Metrik trainiert. Die Verwendung einer anderen Metrik bei der Suche wird Ihren Recall unbemerkt beeinträchtigen. Überprüfen Sie die Modellkarte, bevor Sie eine Auswahl treffen.
  • Bleiben Sie konsistent. Alle Vektoren in einer Sammlung müssen dieselbe Metrik verwenden. Sie dürfen diese innerhalb eines einzelnen Indexes nicht mischen, und Sie können Werte verschiedener Metriken nicht sinnvoll miteinander vergleichen.

Probieren Sie Folgendes aus: Ziehen Sie den Abfragepunkt in die Nähe des Ursprungs und wechseln Sie zwischen „Cosine“ und „ L2 “. Beobachten Sie, wie „Cosine“ nur darauf achtet, in welche „Richtung“ die Abfrage zeigt – Punkte auf der gegenüberliegenden Seite des Ursprungs können bei „ L2 “ „nah“ sein, bei „Cosine“ jedoch „weit“. Diese visuelle Darstellung verdeutlicht das gesamte Konzept.

Festlegen des Metriktyps in Milvus

In „ Milvus “ wird die Metrik pro Index über „ metric_type “ festgelegt — L2, IPoder COSINE für dichte Vektoren — festgelegt, wenn Sie den Index erstellen. Jede Suche in dieser Sammlung verwendet dann dieselbe Funktion, mit der Sie oben experimentiert haben. Die zuverlässigste Regel überhaupt: Verwenden Sie die Metrik, mit der Ihr Einbettungsmodell trainiert wurde; diese ist auf praktisch jeder Modellkarte aufgeführt.

Zwei nützliche Abkürzungen. Die meisten modernen Text-Embedding-APIs (OpenAI, Cohere, Voyage und die meisten „Sentence Transformers“) erzeugen Vektoren, die für die Kosinusähnlichkeit ausgelegt sind. Und wenn Ihre Vektoren auf Einheitslänge normiert sind, liefern Kosinus und Skalarprodukt identische Ranglisten – daher IP die Verwendung normalisierter Vektoren ist ein gängiger, etwas ressourcenschonenderer Ersatz für COSINE.

Häufig gestellte Fragen

Welche Ähnlichkeitsmetrik sollte ich für „ OpenAI “ oder andere Text-Embeddings verwenden?

Verwende die Kosinusähnlichkeit (metric_type „ COSINE “ in Milvus). Fast alle modernen Text-Embedding-Modelle – einschließlich der „text-embedding-3“-Familie von OpenAI – sind auf die Kosinusähnlichkeit trainiert. Da OpenAI -Embeddings auf die Einheitslänge normiert sind, liefert das Skalarprodukt (IP) identische Rangfolgen und ist eine gute Alternative.

Was ist der Unterschied zwischen Kosinusähnlichkeit und innerem Produkt?

Die Kosinusähnlichkeit misst nur den Winkel zwischen zwei Vektoren und ignoriert deren Längen. Das Skalarprodukt (Inneres Produkt) berücksichtigt sowohl die Ausrichtung als auch die Größe, sodass ein längerer Vektor, der in dieselbe Richtung zeigt, eine höhere Punktzahl erhält. Bei einheitsnormierten Vektoren sind die beiden mathematisch äquivalent.

Kann ich den metrischen Typ ändern, nachdem ich einen Index in „ Milvus “ erstellt habe?

Nein. Die Metrik wird beim Erstellen des Indexes fest eingebettet. Um die Metrik zu wechseln, müssen Sie den Index löschen und mit einem neuen `metric_type` neu erstellen. Die Bewertungen verschiedener Metriken sind zudem nicht miteinander vergleichbar; mischen Sie sie daher bei der Nachbearbeitung der Ergebnisse nicht.

Beeinflusst die Wahl der Metrik den Recall oder die Suchgeschwindigkeit?

Die Geschwindigkeit ist im Wesentlichen identisch – „ L2 “, „ IP “ und „cosine“ erfordern jeweils einen Durchlauf über den Vektor. Der Recall ist entscheidend: Die Suche mit einer anderen Metrik als der, für die Ihr Einbettungsmodell trainiert wurde, verschlechtert stillschweigend die Ergebnisqualität, oft dramatisch.

Mehr dazu: Lesen Sie die Dokumentation zu Ähnlichkeitsmetriken, um die vollständige Liste der von „ Milvus “ unterstützten Metriken zu erhalten, darunter Hamming und Jaccard für binäre Vektoren sowie BM25 für die Volltextsuche.

Erkunden Sie weiter