Ich möchte einen n-dimensionalen Merkmalsvektor speichern, z.B. <1.00, 0.34, 0.22, ..., 0>
, mit jedem Dokument, und stellen Sie dann einen anderen Feature-Vektor als eine Abfrage, mit den Ergebnissen in der Reihenfolge der Cosinus-Ähnlichkeit sortiert. Ist das mit Elastic Search möglich?Ist es möglich, Elastic Search mit einem Feature-Vektor abzufragen?
Antwort
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.
- 1. Ist es möglich, Unternehmensnachrichten mit Office Graph API abzufragen?
- 2. Ist es möglich, TextView Scrolled Position abzufragen?
- 3. Elastic Search Script Regex Aggregation
- 4. Ist es möglich, Nest API-Ratenbeschränkungen abzufragen?
- 5. Ist es möglich, Wörterbuch auf parse.com abzufragen?
- 6. Ist es möglich, mehrere Datenbanken mit WCF Data Services abzufragen?
- 7. Elastic Search „und“ Operator mit mehreren Werten
- 8. Elastic Search Percolate Boolean Abfragen
- 9. Elastic Search Ungültige Muster Gegeben
- 10. Ist es in Sequelize möglich, basierend auf einer Zuordnung abzufragen?
- 11. Wie man CouchDB mit Elastic Search indiziert River: Im Klartext
- 12. Elastic Search Aggregate in Buckets unter Bedingungen
- 13. Ordnungsgemäße Zugriffsrichtlinie für Amazon Elastic Search Cluster
- 14. Wie man mit Elastic Search mit scala client
- 15. Elastic search 2.0 migration: "inFilter" entspricht
- 16. Daten von Redshift zur Elastic Search übertragen?
- 17. Elastic Search nicht Indizierung ** einige ** der Dokumente
- 18. NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.directExecutor konfliert auf Elastic Search jar
- 19. Elastic Search-Suche Zeichenfolge mit Leerzeichen und Sonderzeichen in es mit C#
- 20. Ist es möglich, vergangene Ereignisse mit der Facebook Graph API abzufragen?
- 21. So beheben Sie Clustergesundheit gelb mit Elastic Search
- 22. Ist es möglich, die Elastic IP-Adresse mit Boto nur mithilfe von IAM-Benutzeranmeldeinformationen abzurufen?
- 23. Ist es möglich, LDAP mit folgenden Parametern abzufragen username, serverIP, domain to check Benutzer exists
- 24. Ist es möglich, eine Amazon RDS-Instanz direkt über API Gateway abzufragen?
- 25. Ist es möglich, CMFCToolBar einem Dialog hinzuzufügen?
- 26. Elastic Search - ausschließen Index und Typ von Json Antwort
- 27. Wie Neo4j UUID und Neo4j Elastic Search Plugins
- 28. Was sind die grundlegenden Änderungen in Elastic Search 1.7.5?
- 29. Ist es möglich, Solr zu verwenden, um mehrere, Lucene und Nicht-Lucene-Indizes abzufragen
- 30. Ist es möglich, benutzerdefinierte Attribute in C# während der Kompilierzeit abzufragen (keine Laufzeit)
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. –
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. –
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