🚀 Testen Sie Zilliz Cloud, die vollständig verwaltete Milvus, kostenlos – erleben Sie 10x schnellere Leistung! Jetzt testen>>

milvus-logo
LFAI

HomeBlogsEinführung von Milvus 2.5: Volltextsuche, leistungsfähigere Metadatenfilterung und Verbesserungen der Benutzerfreundlichkeit!

Einführung von Milvus 2.5: Volltextsuche, leistungsfähigere Metadatenfilterung und Verbesserungen der Benutzerfreundlichkeit!

  • Engineering
December 17, 2024
Ken Zhang, Stefan Webb, Jiang Chen

Überblick

Wir freuen uns, die neueste Version von Milvus, 2.5, vorstellen zu können, die eine leistungsstarke neue Funktion einführt: die Volltextsuche, auch bekannt als lexikalische Suche oder Stichwortsuche. Die Volltextsuche ermöglicht es Ihnen, Dokumente zu finden, indem Sie nach bestimmten Wörtern oder Phrasen darin suchen, ähnlich wie bei der Suche in Google. Dies ergänzt unsere bestehenden semantischen Suchfunktionen, die die Bedeutung hinter Ihrer Suche verstehen und nicht nur exakte Wörter abgleichen.

Wir verwenden die branchenübliche BM25-Metrik für die Ähnlichkeit von Dokumenten, und unsere Implementierung basiert auf spärlichen Vektoren, die eine effizientere Speicherung und Abfrage ermöglichen. Für diejenigen, die mit dem Begriff nicht vertraut sind: Sparse Vectors sind eine Möglichkeit, Text darzustellen, bei dem die meisten Werte Null sind, wodurch sie sehr effizient gespeichert und verarbeitet werden können - stellen Sie sich eine riesige Tabellenkalkulation vor, bei der nur wenige Zellen Zahlen enthalten und der Rest leer ist. Dieser Ansatz passt gut in die Produktphilosophie von Milvus, bei der der Vektor die zentrale Sucheinheit ist.

Ein weiterer bemerkenswerter Aspekt unserer Implementierung ist die Möglichkeit, Text direkt einzufügen und abzufragen, anstatt dass der Benutzer den Text erst manuell in spärliche Vektoren umwandeln muss. Dies bringt Milvus einen Schritt näher an die vollständige Verarbeitung unstrukturierter Daten.

Aber das ist erst der Anfang. Mit der Veröffentlichung von 2.5 haben wir die Produkt-Roadmap von Milvus aktualisiert. In zukünftigen Produktgenerationen von Milvus werden wir uns darauf konzentrieren, die Fähigkeiten von Milvus in vier Hauptrichtungen weiterzuentwickeln:

  • Optimierte Verarbeitung unstrukturierter Daten;
  • Bessere Suchqualität und -effizienz;
  • Vereinfachtes Datenmanagement;
  • Senkung der Kosten durch algorithmische und gestalterische Fortschritte

Unser Ziel ist es, eine Dateninfrastruktur aufzubauen, die im Zeitalter der KI sowohl Informationen effizient speichern als auch effektiv abrufen kann.

Volltextsuche über Sparse-BM25

Obwohl die semantische Suche in der Regel ein besseres Bewusstsein für den Kontext und ein besseres Verständnis für die Absicht hat, liefert die Volltextsuche mit Schlüsselwortabgleich oft genauere Ergebnisse, wenn ein Benutzer nach bestimmten Eigennamen, Seriennummern oder einem vollständig übereinstimmenden Satz suchen muss.

Um dies anhand eines Beispiels zu verdeutlichen:

  • Die semantische Suche eignet sich hervorragend für die Frage: "Finde Dokumente über Lösungen für erneuerbare Energien".
  • Die Volltextsuche ist besser, wenn Sie Folgendes benötigen: "Finde Dokumente, in denen das Tesla Model 3 2024 erwähnt wird".

In unserer vorherigen Version (Milvus 2.4) mussten die Benutzer ihren Text mit einem separaten Tool (dem BM25EmbeddingFunction-Modul von PyMilvus) auf ihren eigenen Rechnern vorverarbeiten, bevor sie ihn durchsuchen konnten. Dieser Ansatz hatte mehrere Einschränkungen: Er konnte wachsende Datenmengen nicht gut verarbeiten, erforderte zusätzliche Einrichtungsschritte und machte den gesamten Prozess komplizierter als nötig. Für technisch Interessierte waren die wichtigsten Einschränkungen, dass es nur auf einem einzigen Rechner funktioniert, dass das Vokabular und andere Korpusstatistiken, die für die BM25-Bewertung verwendet werden, nicht aktualisiert werden können, wenn sich der Korpus ändert, und dass die Konvertierung von Text in Vektoren auf der Client-Seite weniger intuitiv ist als die direkte Arbeit mit Text.

Milvus 2.5 vereinfacht alles. Jetzt können Sie direkt mit Ihrem Text arbeiten:

  • Speichern Sie Ihre ursprünglichen Textdokumente so, wie sie sind
  • Suchen Sie mit natürlichsprachlichen Abfragen
  • Erhalten Sie die Ergebnisse in lesbarer Form zurück

Hinter den Kulissen wickelt Milvus alle komplexen Vektorumwandlungen automatisch ab und erleichtert so die Arbeit mit Textdaten. Dies nennen wir unseren "Doc in, Doc out"-Ansatz - Sie arbeiten mit lesbarem Text, und wir erledigen den Rest.

Technische Umsetzung

Für diejenigen, die an den technischen Details interessiert sind, fügt Milvus 2.5 die Fähigkeit zur Volltextsuche durch seine eingebaute Sparse-BM25-Implementierung hinzu, einschließlich:

  • Ein Tokenizer auf Basis von tantivy: Milvus integriert sich jetzt in das florierende tantivy-Ökosystem
  • Fähigkeit zum Einlesen und Abrufen von Rohdokumenten: Unterstützung für die direkte Aufnahme und Abfrage von Textdaten
  • BM25 Relevanz-Scoring: Internalisierung der BM25-Bewertung, implementiert auf der Basis von Sparse Vectors

Wir haben uns entschieden, mit dem gut entwickelten tantivy-Ökosystem zu arbeiten und den Milvus-Text-Tokenizer auf tantivy aufzubauen. In Zukunft wird Milvus weitere Tokenizer unterstützen und den Tokenisierungsprozess offenlegen, um den Nutzern ein besseres Verständnis der Retrievalqualität zu ermöglichen. Wir werden auch auf Deep Learning basierende Tokenizer und Stemmer-Strategien untersuchen, um die Leistung der Volltextsuche weiter zu optimieren. Im Folgenden finden Sie einen Beispielcode für die Verwendung und Konfiguration des Tokenizers:

# Tokenizer configuration
schema.add_field(
    field_name='text',
    datatype=DataType.VARCHAR,
    max_length=65535,
    enable_analyzer=True, # Enable tokenizer on this column
    analyzer_params={"type": "english"},  # Configure tokenizer parameters, here we choose the english template, fine-grained configuration is also supported
    enable_match=True, # Build an inverted index for Text_Match
)

Nach der Konfiguration des Tokenizers im Sammlungsschema können Benutzer den Text über die add_function-Methode in der bm25-Funktion registrieren. Diese wird intern auf dem Milvus-Server ausgeführt. Alle nachfolgenden Datenflüsse, wie z. B. Hinzufügungen, Löschungen, Änderungen und Abfragen, können abgeschlossen werden, indem der rohe Textstring im Gegensatz zur Vektordarstellung bearbeitet wird. Im folgenden Codebeispiel wird gezeigt, wie man mit der neuen API Text einliest und eine Volltextsuche durchführt:

# Define the mapping relationship between raw text data and vectors on the schema
bm25_function = Function(
    name="text_bm25_emb",
    input_field_names=["text"], # Input text field
    output_field_names=["sparse"], # Internal mapping sparse vector field
    function_type=FunctionType.BM25, # Model for processing mapping relationship
)

schema.add_function(bm25_function)
...
# Support for raw text in/out
MilvusClient.insert('demo', [
    {'text': 'Artificial intelligence was founded as an academic discipline in 1956.'},
    {'text': 'Alan Turing was the first person to conduct substantial research in AI.'},
    {'text': 'Born in Maida Vale, London, Turing was raised in southern England.'},
])

MilvusClient.search(
    collection_name='demo',
    data=['Who started AI research?'],
    anns_field='sparse',
    limit=3
)

Wir haben eine Implementierung der BM25-Relevanzbewertung eingeführt, die Abfragen und Dokumente als Sparse-Vektoren darstellt, genannt Sparse-BM25. Dies ermöglicht viele Optimierungen, die auf Sparse-Vektoren basieren, wie zum Beispiel:

Milvus erreicht hybride Suchfunktionen durch seine innovative Sparse-BM25-Implementierung, die die Volltextsuche in die Vektor-Datenbankarchitektur integriert. Durch die Darstellung von Termhäufigkeiten als Sparse-Vektoren anstelle von traditionellen invertierten Indizes ermöglicht Sparse-BM25 fortschrittliche Optimierungen wie Graph-Indizierung, Produktquantisierung (PQ) und Skalarquantisierung (SQ). Diese Optimierungen minimieren die Speichernutzung und beschleunigen die Suchleistung. Ähnlich wie beim invertierten Indexansatz unterstützt Milvus die Eingabe von Rohtext und die interne Generierung spärlicher Vektoren. Dadurch ist es in der Lage, mit jedem Tokenizer zu arbeiten und jedes beliebige Wort im sich dynamisch verändernden Korpus zu erfassen.

Darüber hinaus werden durch heuristisches Pruning Sparse-Vektoren mit geringem Wert aussortiert, was die Effizienz weiter steigert, ohne die Genauigkeit zu beeinträchtigen. Im Gegensatz zu früheren Ansätzen, die spärliche Vektoren verwenden, kann er sich an einen wachsenden Korpus anpassen, nicht an die Genauigkeit der BM25-Bewertung.

  1. Aufbau von Graph-Indizes auf dem Sparse-Vektor, der bei Abfragen mit langem Text besser abschneidet als ein invertierter Index, da ein invertierter Index mehr Schritte benötigt, um die Token in der Abfrage zu finden;
  2. Nutzung von Annäherungstechniken zur Beschleunigung der Suche mit nur geringen Auswirkungen auf die Abfragequalität, wie z. B. Vektorquantisierung und heuristisches Pruning;
  3. Vereinheitlichung der Schnittstelle und des Datenmodells für die Durchführung der semantischen Suche und der Volltextsuche, wodurch die Benutzerfreundlichkeit verbessert wird.
# Creating an index on the sparse column
index_params.add_index(
    field_name="sparse",
    index_type="AUTOINDEX",  # Default WAND index
    metric_type="BM25" # Configure relevance scoring through metric_type
)

# Configurable parameters at search time to speed up search
search_params = {
    'params': {'drop_ratio_search': 0.6}, # WAND search parameter configuration can speed up search
}

Zusammenfassend lässt sich sagen, dass Milvus 2.5 seine Suchfunktionalität über die semantische Suche hinaus durch die Einführung der Volltextsuche erweitert hat, was es den Nutzern erleichtert, qualitativ hochwertige KI-Anwendungen zu erstellen. Dies sind nur erste Schritte im Bereich der Sparse-BM25-Suche und wir gehen davon aus, dass es in Zukunft weitere Optimierungsmaßnahmen geben wird.

Textübereinstimmende Suchfilter

Eine zweite Textsuchfunktion, die mit Milvus 2.5 eingeführt wurde, ist Text Match, die es dem Benutzer ermöglicht, die Suche auf Einträge zu filtern, die eine bestimmte Textzeichenfolge enthalten. Diese Funktion basiert ebenfalls auf der Tokenisierung und wird mit enable_match=True aktiviert.

Es ist erwähnenswert, dass bei Text Match die Verarbeitung des Abfragetextes auf der Logik von OR nach der Tokenisierung basiert. Im nachstehenden Beispiel wird das Ergebnis alle Dokumente zurückgeben (unter Verwendung des Feldes "Text"), die entweder "vector" oder "database" enthalten.

filter = "TEXT_MATCH(text, 'vector database')"

Wenn Ihr Szenario sowohl einen Abgleich mit 'vector' als auch mit 'database' erfordert, müssen Sie zwei separate Textabgleiche schreiben und diese mit AND überlagern, um Ihr Ziel zu erreichen.

filter = "TEXT_MATCH(text, 'vector') and TEXT_MATCH(text, 'database')"

Signifikante Verbesserung der skalaren Filterleistung

Unsere Betonung der skalaren Filterleistung geht auf unsere Entdeckung zurück, dass die Kombination von Vektorabfrage und Metadatenfilterung die Abfrageleistung und Genauigkeit in verschiedenen Szenarien erheblich verbessern kann. Diese Szenarien reichen von Bildsuchanwendungen wie z. B. der Identifizierung von Kurven beim autonomen Fahren bis hin zu komplexen RAG-Szenarien in Wissensdatenbanken von Unternehmen. Daher ist es für Unternehmensanwender sehr gut geeignet, um es in groß angelegten Datenanwendungsszenarien zu implementieren.

In der Praxis können viele Faktoren wie die Menge der zu filternden Daten, die Organisation der Daten und die Art der Suche die Leistung beeinflussen. Um dies zu berücksichtigen, führt Milvus 2.5 drei neue Arten von Indizes ein: BitMap Index, Array Inverted Index und den Inverted Index nach der Tokenisierung des Varchar Textfeldes. Diese neuen Indizes können die Leistung in realen Anwendungsfällen erheblich verbessern.

Im Einzelnen:

  1. BitMap Index kann verwendet werden, um die Tag-Filterung zu beschleunigen (gängige Operatoren sind include in, array_contains usw.), und eignet sich für Szenarien mit weniger Feldkategoriedaten (Datenkardinalität). Das Prinzip besteht darin, festzustellen, ob eine Datenzeile einen bestimmten Wert in einer Spalte hat, wobei 1 für ja und 0 für nein steht, und dann eine BitMap-Liste zu führen. Das folgende Diagramm zeigt den Vergleich der Leistungstests, die wir auf der Grundlage des Geschäftsszenarios eines Kunden durchgeführt haben. In diesem Szenario beträgt das Datenvolumen 500 Millionen, die Datenkategorie 20, die verschiedenen Werte haben unterschiedliche Verteilungsanteile (1 %, 5 %, 10 %, 50 %), und die Leistung bei unterschiedlichen Filterungsmengen variiert ebenfalls. Bei einer Filterung von 50 % können wir durch BitMap Index einen 6,8-fachen Leistungsgewinn erzielen. Es ist erwähnenswert, dass mit zunehmender Kardinalität Inverted Index im Vergleich zu BitMap Index eine ausgeglichenere Leistung aufweist.

  1. Text Match basiert auf dem Inverted Index, nachdem das Textfeld tokenisiert wurde. Seine Leistung übertrifft bei weitem die der Funktion Wildcard Match (d. h. wie + %), die wir in 2.4 bereitgestellt haben. Unseren internen Testergebnissen zufolge liegen die Vorteile von Text Match klar auf der Hand, insbesondere in Szenarien mit gleichzeitigen Abfragen, bei denen eine bis zu 400-fache QPS-Steigerung erzielt werden kann.

Im Hinblick auf die Verarbeitung von JSON-Daten planen wir, in den nachfolgenden Versionen von 2.5.x die Erstellung von invertierten Indizes für benutzerdefinierte Schlüssel und die standardmäßige Aufzeichnung von Standortinformationen für alle Schlüssel einzuführen, um das Parsing zu beschleunigen. Wir erwarten, dass diese beiden Bereiche die Abfrageleistung von JSON und Dynamic Field erheblich verbessern werden. Wir planen, weitere Informationen in zukünftigen Versionshinweisen und technischen Blogs zu veröffentlichen, also bleiben Sie dran!

Neue Verwaltungsschnittstelle

Für die Verwaltung einer Datenbank sollte man kein Informatikstudium absolvieren müssen, aber wir wissen, dass Datenbankadministratoren leistungsstarke Tools benötigen. Aus diesem Grund haben wir die Cluster Management WebUI eingeführt, eine neue webbasierte Schnittstelle, die über die Adresse Ihres Clusters auf Port 9091/webui zugänglich ist. Dieses Beobachtungstool bietet:

  • Echtzeit-Überwachungs-Dashboards mit clusterweiten Metriken
  • Detaillierte Speicher- und Leistungsanalysen pro Knoten
  • Segmentinformationen und Verfolgung langsamer Abfragen
  • Systemzustandsindikatoren und Knotenstatus
  • Einfach zu verwendende Tools zur Fehlerbehebung bei komplexen Systemproblemen

Diese Schnittstelle befindet sich zwar noch in der Betaphase, wird aber auf der Grundlage des Benutzerfeedbacks von Datenbankadministratoren aktiv weiterentwickelt. Zukünftige Updates werden KI-unterstützte Diagnosen, interaktivere Verwaltungsfunktionen und verbesserte Funktionen zur Überwachung von Clustern umfassen.

Dokumentation und Entwicklererfahrung

Wir haben unsere Dokumentation und SDK/API komplett überarbeitet, um Milvus zugänglicher zu machen und gleichzeitig die Tiefe für erfahrene Benutzer zu erhalten. Die Verbesserungen umfassen:

  • Ein neu strukturiertes Dokumentationssystem mit einer klareren Progression von grundlegenden zu fortgeschrittenen Konzepten
  • Interaktive Tutorien und Beispiele aus der Praxis, die praktische Implementierungen veranschaulichen
  • Umfassende API-Referenzen mit praktischen Codebeispielen
  • Ein benutzerfreundlicheres SDK-Design, das gängige Operationen vereinfacht
  • Illustrierte Anleitungen, die komplexe Konzepte leichter verständlich machen
  • Ein KI-gestützter Dokumentationsassistent (ASK AI) für schnelle Antworten

Das aktualisierte SDK/API konzentriert sich auf die Verbesserung der Entwicklererfahrung durch intuitivere Schnittstellen und eine bessere Integration in die Dokumentation. Wir sind überzeugt, dass Sie diese Verbesserungen bei der Arbeit mit der 2.5.x-Serie bemerken werden.

Wir wissen jedoch, dass die Entwicklung von Dokumentation und SDK ein fortlaufender Prozess ist. Wir werden sowohl die Inhaltsstruktur als auch das SDK-Design auf der Grundlage des Feedbacks der Community weiter optimieren. Treten Sie unserem Discord-Kanal bei, um Ihre Vorschläge mitzuteilen und uns bei der weiteren Verbesserung zu helfen.

Zusammenfassung

Milvus 2.5 enthält 13 neue Funktionen und mehrere Optimierungen auf Systemebene, die nicht nur von Zilliz, sondern auch von der Open-Source-Community beigesteuert wurden. Wir haben in diesem Beitrag nur ein paar davon angesprochen und empfehlen Ihnen, unsere Release Note und die offiziellen Dokumente für weitere Informationen zu besuchen!

Like the article? Spread the word

Weiterlesen