Vergleich von Vektordatenbanken, Vektorsuchbibliotheken und Vektorsuch-Plugins
Hallo - willkommen zurück zu Vektordatenbank 101!
Die Zunahme von ChatGPT und anderen großen Sprachmodellen (LLMs) hat das Wachstum von Vektorsuchtechnologien vorangetrieben, die spezialisierte Vektordatenbanken wie Milvus und Zilliz Cloud neben Bibliotheken wie FAISS und integrierten Vektorsuch-Plugins in herkömmlichen Datenbanken umfassen.
In unserem letzten Beitrag der Serie haben wir uns mit den Grundlagen von Vektordatenbanken beschäftigt. In diesem Beitrag setzen wir die Erforschung des komplexen Bereichs der Vektorsuche fort und vergleichen Vektordatenbanken, Vektorsuch-Plugins und Vektorsuchbibliotheken.
Was ist Vektorsuche?
DieVektorsuche, auch bekannt als Vektorähnlichkeitssuche, ist eine Technik zum Abrufen der Top-k-Ergebnisse, die einem gegebenen Abfragevektor am ähnlichsten sind oder semantisch mit ihm verwandt sind, aus einer umfangreichen Sammlung von dichten Vektordaten. Bevor wir eine Ähnlichkeitssuche durchführen, nutzen wir neuronale Netze, um unstrukturierte Daten wie Texte, Bilder, Videos und Audiodaten in hochdimensionale numerische Vektoren, die sogenannten Einbettungsvektoren, umzuwandeln. Nach der Erzeugung von Einbettungsvektoren vergleichen Vektorsuchmaschinen den räumlichen Abstand zwischen dem Eingabeabfragevektor und den Vektoren in den Vektorspeichern. Je näher sie sich im Raum befinden, desto ähnlicher sind sie sich.
Auf dem Markt sind mehrere Vektorsuchtechnologien verfügbar, darunter Bibliotheken für maschinelles Lernen wie NumPy von Python, Vektorsuchbibliotheken wie FAISS, Vektorsuch-Plugins, die auf herkömmlichen Datenbanken aufbauen, und spezialisierte Vektordatenbanken wie Milvus und Zilliz Cloud.
Vektordatenbanken vs. Vektorsuchbibliotheken
Spezialisierte Vektordatenbanken sind nicht der einzige Stack für Ähnlichkeitssuchen. Vor dem Aufkommen von Vektordatenbanken wurden viele Vektorsuchbibliotheken, wie FAISS, ScaNN und HNSW, für die Vektorsuche verwendet.
Vektorsuchbibliotheken können Ihnen dabei helfen, schnell einen leistungsstarken Prototyp für ein Vektorsuchsystem zu erstellen. FAISS zum Beispiel ist ein Open-Source-Programm, das von Meta für eine effiziente Ähnlichkeitssuche und ein dichtes Vektorclustering entwickelt wurde. FAISS kann Vektorsammlungen beliebiger Größe verarbeiten, auch solche, die nicht vollständig in den Speicher geladen werden können. Darüber hinaus bietet FAISS Werkzeuge für die Auswertung und die Abstimmung der Parameter. Obwohl in C++ geschrieben, bietet FAISS eine Python/NumPy-Schnittstelle.
Vektorsuchbibliotheken sind jedoch lediglich leichtgewichtige ANN-Bibliotheken und keine verwalteten Lösungen, und sie haben nur eine begrenzte Funktionalität. Wenn Ihr Datensatz klein und begrenzt ist, können diese Bibliotheken für die Verarbeitung unstrukturierter Daten ausreichen, sogar für Systeme, die in der Produktion laufen. Wenn die Datenmengen jedoch größer werden und mehr Benutzer hinzukommen, wird das Skalierungsproblem immer schwieriger zu lösen. Außerdem lassen sie keine Änderungen an ihren Indexdaten zu und können beim Datenimport nicht abgefragt werden.
Im Gegensatz dazu sind Vektordatenbanken eine optimale Lösung für die Speicherung und Abfrage unstrukturierter Daten. Sie können Millionen oder sogar Milliarden von Vektoren speichern und abfragen und gleichzeitig Antworten in Echtzeit liefern; sie sind hoch skalierbar, um den wachsenden Geschäftsanforderungen der Benutzer gerecht zu werden.
Darüber hinaus verfügen Vektordatenbanken wie Milvus über wesentlich benutzerfreundlichere Funktionen für strukturierte/halbstrukturierte Daten: Cloud-Nativität, Mandantenfähigkeit, Skalierbarkeit usw. Diese Funktionen werden im weiteren Verlauf dieses Tutorials deutlich werden.
Außerdem arbeiten sie auf einer völlig anderen Abstraktionsebene als Vektorsuchbibliotheken - Vektordatenbanken sind vollwertige Dienste, während ANN-Bibliotheken dazu gedacht sind, in die von Ihnen entwickelte Anwendung integriert zu werden. In diesem Sinne sind ANN-Bibliotheken eine der vielen Komponenten, auf denen Vektordatenbanken aufgebaut sind, ähnlich wie Elasticsearch auf Apache Lucene aufgebaut ist.
Ein Beispiel dafür, warum diese Abstraktion so wichtig ist, ist das Einfügen eines neuen unstrukturierten Datenelements in eine Vektordatenbank. Das ist in Milvus super einfach:
from pymilvus import Collectioncollection = Collection('book')mr = collection.insert(data)
Es ist wirklich so einfach wie das - 3 Zeilen Code. Mit einer Bibliothek wie FAISS oder ScaNN gibt es leider keine einfache Möglichkeit, dies zu tun, ohne den gesamten Index an bestimmten Kontrollpunkten manuell neu zu erstellen. Selbst wenn dies möglich wäre, fehlt es den Vektorsuchbibliotheken immer noch an Skalierbarkeit und Mandantenfähigkeit, zwei der wichtigsten Eigenschaften von Vektordatenbanken.
Vektordatenbanken vs. Vektorsuch-Plugins für traditionelle Datenbanken
Gut, nachdem wir nun den Unterschied zwischen Vektorsuchbibliotheken und Vektordatenbanken festgestellt haben, lassen Sie uns einen Blick darauf werfen, wie sich Vektordatenbanken von Vektorsuch-Plugins unterscheiden.
Eine zunehmende Anzahl traditioneller relationaler Datenbanken und Suchsysteme wie Clickhouse und Elasticsearch enthalten integrierte Vektorsuch-Plugins. Elasticsearch 8.0 enthält zum Beispiel Vektoreingabe- und ANN-Suchfunktionen, die über Restful-API-Endpunkte aufgerufen werden können. Das Problem mit den Vektorsuch-Plugins sollte klar sein: Diese Lösungen verfolgen keinen ganzheitlichen Ansatz für das Einbettungsmanagement und die Vektorsuche. Stattdessen sind diese Plugins als Erweiterungen bestehender Architekturen gedacht, wodurch sie begrenzt und nicht optimiert sind. Die Entwicklung einer Anwendung für unstrukturierte Daten auf der Grundlage einer herkömmlichen Datenbank wäre so, als würde man versuchen, Lithiumbatterien und Elektromotoren in den Rahmen eines benzinbetriebenen Autos einzubauen - keine gute Idee!
Um zu verdeutlichen, warum das so ist, lassen Sie uns noch einmal die Liste der Funktionen durchgehen, die eine Vektordatenbank implementieren sollte (aus dem ersten Abschnitt). Den Vektorsuch-Plugins fehlen zwei dieser Eigenschaften - Abstimmbarkeit und benutzerfreundliche APIs/SDKs. Ich werde weiterhin die ANN-Engine von Elasticsearch als Beispiel verwenden; andere Vektorsuch-Plugins funktionieren sehr ähnlich, so dass ich nicht weiter ins Detail gehen werde. Elasticsearch unterstützt die Speicherung von Vektoren über den Datenfeldtyp dense_vector
und ermöglicht die Abfrage über knnsearch endpoint
:
PUT index
{
"mappings": {
"properties": {
"image-vector": {
"type": "dense_vector",
"dims": 128,
"index": true,
"similarity": "l2_norm"
}
}
}
}
PUT index/_doc
{
"image-vector": [0.12, 1.34, ...]
}
GET index/_knn_search
{
"knn": {
"field": "image-vector",
"query_vector": [-0.5, 9.4, ...],
"k": 10,
"num_candidates": 100
}
}
Das ANN-Plugin von Elasticsearch unterstützt nur einen Indizierungsalgorithmus: Hierarchical Navigable Small Worlds, auch bekannt als HNSW (ich denke gerne, dass der Schöpfer Marvel voraus war, als es um die Popularisierung des Multiversums ging). Darüber hinaus wird nur die L2/Euklidische Distanz als Distanzmetrik unterstützt. Das ist ein guter Anfang, aber vergleichen wir es mal mit Milvus, einer vollwertigen Vektordatenbank. Verwendung von pymilvus
:
>>> field1 = FieldSchema(name='id', dtype=DataType.INT64, description='int64', is_primary=True)
>>> field2 = FieldSchema(name='embedding', dtype=DataType.FLOAT_VECTOR, description='embedding', dim=128, is_primary=False)
>>> schema = CollectionSchema(fields=[field1, field2], description='hello world collection')
>>> collection = Collection(name='my_collection', data=None, schema=schema)
>>> index_params = {
'index_type': 'IVF_FLAT',
'params': {'nlist': 1024},
"metric_type": 'L2'}
>>> collection.create_index('embedding', index_params)
>>> search_param = {
'data': vector,
'anns_field': 'embedding',
'param': {'metric_type': 'L2', 'params': {'nprobe': 16}},
'limit': 10,
'expr': 'id_field > 0'
}
>>> results = collection.search(**search_param)
Während sowohl Elasticsearch als auch Milvus über Methoden zur Erstellung von Indizes, zum Einfügen von Einbettungsvektoren und zur Durchführung von Nearest-Neighbour-Suchen verfügen, geht aus diesen Beispielen klar hervor, dass Milvus eine intuitivere Vektorsuch-API (bessere benutzerorientierte API) und eine breitere Unterstützung von Vektorindizes und Distanzmetriken (bessere Abstimmbarkeit) bietet. Milvus plant außerdem, in Zukunft mehr Vektorindizes zu unterstützen und Abfragen über SQL-ähnliche Anweisungen zu ermöglichen, was sowohl die Abstimmbarkeit als auch die Benutzerfreundlichkeit weiter verbessert.
Wir haben soeben eine ganze Reihe von Inhalten durchgenommen. Dieser Abschnitt war zugegebenermaßen ziemlich lang. Für diejenigen, die ihn überflogen haben, hier eine kurze Zusammenfassung: Milvus ist besser als Vektorsuch-Plugins, weil Milvus von Grund auf als Vektordatenbank entwickelt wurde, was einen größeren Funktionsumfang und eine Architektur ermöglicht, die besser für unstrukturierte Daten geeignet ist.
Wie entscheidet man sich für eine der verschiedenen Vektorsuchtechnologien?
Vektordatenbanken sind nicht gleich Vektordatenbanken; jede besitzt einzigartige Eigenschaften, die auf bestimmte Anwendungen zugeschnitten sind. Vektorsuchbibliotheken und -plugins sind benutzerfreundlich und ideal für die Handhabung kleiner Produktionsumgebungen mit Millionen von Vektoren. Wenn Ihr Datenumfang gering ist und Sie nur grundlegende Vektorsuchfunktionen benötigen, sind diese Technologien für Ihr Unternehmen ausreichend.
Für datenintensive Unternehmen, die mit Hunderten von Millionen von Vektoren arbeiten und Antworten in Echtzeit benötigen, sollte jedoch eine spezialisierte Vektordatenbank Ihre erste Wahl sein. Milvus zum Beispiel verwaltet mühelos Milliarden von Vektoren und bietet blitzschnelle Abfragegeschwindigkeiten und umfangreiche Funktionen. Darüber hinaus erweisen sich vollständig verwaltete Lösungen wie Zilliz als noch vorteilhafter, da sie Sie von operativen Herausforderungen befreien und Ihnen die ausschließliche Konzentration auf Ihre Kerntätigkeiten ermöglichen.
Werfen Sie noch einen Blick auf die Vector Database 101 Kurse
- Einführung in unstrukturierte Daten
- Was ist eine Vektordatenbank?
- Vergleich von Vektordatenbanken, Vektorsuchbibliotheken und Vektorsuch-Plugins
- Einführung in Milvus
- Milvus Schnellstart
- Einführung in die Vektorähnlichkeitssuche
- Vektorindex-Grundlagen und der invertierte Dateiindex
- Skalarquantisierung und Produktquantisierung
- Hierarchische navigierbare kleine Welten (HNSW)
- Approximate Nearest Neighbors Oh Yeah (ANNOY)
- Auswahl des richtigen Vektorindex für Ihr Projekt
- DiskANN und der Vamana-Algorithmus
- Was ist Vektorsuche?
- Vektordatenbanken vs. Vektorsuchbibliotheken
- Vektordatenbanken vs. Vektorsuch-Plugins für traditionelle Datenbanken
- Wie entscheidet man sich für eine der verschiedenen Vektorsuchtechnologien?
- Werfen Sie noch einen Blick auf die Vector Database 101 Kurse
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word