Antwort

6

Ich habe keine Antwort speziell auf Elastic Search, weil ich es nie benutzt habe (ich verwende Lucene, auf dem elastische Suche gebaut wird). Ich versuche jedoch, eine allgemeine Antwort auf Ihre Frage zu geben. Es gibt zwei Standardmethoden zum Erhalten der nächsten Vektoren, die einen Abfragevektor erhalten, der wie folgt beschrieben wird.

K-D-Baum

Der erste Ansatz ist es, die Vektoren im Speicher mit Hilfe einer Datenstruktur zu speichern, die nächsten Nachbarn Abfragen unterstützt, z.B. k-d Bäume. A k-d tree ist eine Verallgemeinerung des binären Suchbaums in dem Sinn, dass jede Ebene des binären Suchbaums eine der Dimensionen in zwei Teile unterteilt. Wenn Sie genügend Platz haben, um alle Punkte im Speicher zu laden, können Sie die nearest neighbour search algorithm auf k-d-Bäume anwenden, um eine Liste der abgerufenen Vektoren zu erhalten, die nach den Cosinus-Ähnlichkeitswerten sortiert sind. Der offensichtliche Nachteil dieser Methode besteht darin, dass sie nicht zu großen Mengen von Punkten skaliert, wie es oft beim Informationsabruf auftritt.

Inverted Quantized Vectors

Der zweite Ansatz ist invertierte quantisierte Vektoren zu verwenden. Eine einfache bereichsbasierte Quantisierung ordnet den reellen Zahlen eines Vektors Pseudo-Terme oder Bezeichnungen zu, so dass diese später von Lucene (oder auch Elastic search) indiziert werden können.

Zum Beispiel kann man das Etikett A auf den Bereich [0, 0,1), B auf den Bereich [0,1, 0,2) usw ... Der Abtastvektor in Ihrem zuweisen Die Frage wird dann codiert als (J, D, C, .. A). (Weil [.9,1] J ist, [0.3.0.4) ist D und so weiter].

Folglich wird ein Vektor reeller Zahlen so in eine Zeichenkette umgewandelt (die wie ein Dokument behandelt werden kann) und daher mit einem Standardinformationsabrufwerkzeug (IR) indiziert. Ein Abfragevektor wird ebenfalls in einen Beutel mit Pseudo-Termen transformiert, und somit kann man eine Menge anderer ähnlicher Vektoren in der Sammlung berechnen, die am ähnlichsten (in Bezug auf Kosinusähnlichkeit oder ein anderes Maß) zu der aktuellen ist.

Der Hauptvorteil dieser Methode ist, dass sie sich gut skalieren lässt, um reelle nummerierte Vektoren zu sammeln. Der Hauptnachteil besteht darin, dass die berechneten Ähnlichkeitswerte nur Annäherungen an die echten Kosinusähnlichkeiten sind (aufgrund des bei der Quantisierung auftretenden Verlustes). Ein kleinerer Quantisierungsbereich erzielt eine bessere Leistung auf Kosten einer erhöhten Indexgröße.

+0

Es ist erwähnenswert, dass Ihre Behauptung, dass die mit quantisierten Vektoren gefundenen Werte Annäherungen an Kosinus-Ähnlichkeiten sind, äußerst überoptimistisch ist. Insbesondere ist in dieser "Näherung" 0,11 so weit von 0,1 entfernt, wie 0,1 von 0,99 ist. Es gibt keine Möglichkeit zu sagen, dass "a" näher an "b" als "b" an "z" ist. Diese Annäherung ist viel schlimmer als nichts, wenn es keine Möglichkeit gibt, dies zu korrigieren. Es wird aktiv jede Entfernungsinformation zerstören, die du hast. Bitte, bitte, bitte implementieren Sie dies nicht, Sie werden Ihre Bewerbung vernichten. –

+0

Es ist auch erwähnenswert, dass "invertierte quantisierte Vektoren" keine Sache sind. Buchstäblich der einzige Ort, an dem dieser Begriff im gesamten Internet auftaucht. Vektor-Quantisierung ist eine Sache, aber es ist absolut nicht das, was in dieser Antwort erwähnt wird. –

+0

Die Quantisierung würde Ihnen helfen, die Vektoren für jede Komponente zu lokalisieren, d. H., Sie würden feststellen, dass 0,11 zur Zelle [0,1, 0,2] gehört ... vorausgesetzt, Sie verwenden eine Intervallgröße von 0,1. Aber Sie können die Komponenten der Vektoren selbst speichern. Bei einem Abfragepunkt können dann exakte Entfernungen berechnet werden. Selbst wenn Sie die Vektoren quantisieren, wäre der Quantisierungsfehler, der bei der Entfernungsberechnung auftritt, nicht signifikant, wenn die Intervalle klein genug sind ... – Debasis

Verwandte Themen