Dice.com-Code zur Umsetzung der in den folgenden Vorträgen diskutierten Ideen:
Dies erweitert meine frühere Arbeit zu „Conceptual Search“, die hier zu finden ist – https://github.com/DiceTechJobs/ConceptualSearch (einschließlich Folien und Videolinks). In diesem Vortrag stelle ich verschiedene Ansätze für die maßstabsgetreue Suche nach Vektoren mithilfe eines invertierten Index vor. Dies implementiert Ansätze für die ungefähre Suche nach k-nächsten Nachbarn, einschließlich:
und beschreibt, wie diese Ideen innerhalb eines invertierten Index effizient umgesetzt und abgefragt werden können.
UPDATE: Nach einem Gespräch mit Trey Grainger und Erik Hatcher von LucidWorks empfahlen sie die Verwendung von Termhäufigkeiten anstelle von Payloads für die Lösungen, bei denen ich Termgewichte in den Index einbette und eine spezielle Payload-bewusste Ähnlichkeitsfunktion verwende (die ebenfalls nicht benötigt würde). Nutzlasten führen zu erheblichen Leistungseinbußen. Die Herausforderung dabei sind die negativen Gewichtungen. Ich gehe davon aus, dass es nicht möglich ist, negative Termhäufigkeiten zu kodieren, aber das kann umgangen werden, indem unterschiedliche Token für positiv und negativ gewichtete Token verwendet werden und ähnliche Anpassungen zur Abfragezeit vorgenommen werden (wo negative Boosts möglich sind). bei Bedarf in Solr angewendet werden).
Lucene-Dokumentation: Lucene Delimited Term Frequency Filter
Außerdem gab es kürzlich ein Update für den Lucene-Kern, das hier anwendbar ist und zum Zeitpunkt des Verfassens dieses Artikels bald Eingang in die elastische Suche finden wird: Block Max WAND. Dies führt zu einer erheblichen Beschleunigung bei großen booleschen ODER-Abfragen, bei denen Sie nicht die genaue Anzahl der Ergebnisse kennen müssen, sondern sich nur darum kümmern müssen, die Top-N-Ergebnisse so schnell wie möglich zu erhalten. Alle hier besprochenen Ansätze generieren relativ große OR-Abfragen und sind daher sehr relevant. Ich habe auch gelesen, dass die aktuelle Implementierung von „Minimum-Should-Match“ auch ähnliche Optimierungen beinhaltet, sodass die gleiche Art von Leistungssteigerung möglicherweise bereits mit geeigneten mm-Einstellungen erreicht werden kann, etwas, mit dem ich bereits in meinem Code experimentiert habe.
Aktivieren Sie 2018: „Vektoren in der Suche“
Haystack 2019: „Suchen mit Vektoren“
Simon Hughes (Chef-Datenwissenschaftler, Dice.com)