Wie Vektordatenbanken die Suche nach unstrukturierten Daten in KI-Anwendungen revolutionieren
Vektordatenbanken sind zu einem wichtigen Instrument geworden, um die Suche in unstrukturierten Daten innerhalb von KI-Anwendungen zu revolutionieren. Eine ihrer weithin anerkannten Rollen liegt in der Retrieval-Augmented Generation (RAG), einem Prozess, der relevante Dokumente mit LLMs verbindet. Ihre Anwendungen und Fähigkeiten gehen jedoch weit über RAG hinaus; sie sind allgemeiner für eine Vielzahl verschiedener Arten unstrukturierter Daten anwendbar, d. h. für jede Art von Daten, die keinem vordefinierten Datenmodell entsprechen, wie Text, Bilder, Audio, Moleküle und Graphen.
Beim jüngsten Brazil Unstructured Data Meetup sprach Frank Liu, der Leiter für Artificial intelligence und machine learning bei Zilliz, darüber, wie Vektordatenbanken die Landschaft der Suche in unstrukturierten Daten in KI-Anwendungen verändern. Seine Einblicke beleuchteten die umfassenden und wirkungsvollen Fähigkeiten dieser Datenbanken.
Sehen Sie sich die Aufzeichnung von Franks Meetup-Vortrag an Folgen Sie der Demo
Was sind Vektoren?
Bevor wir auf Vektordatenbanken und ihre Rolle in KI-Anwendungen eingehen, ist es wichtig zu verstehen, was Vektoren sind, da sie die Bausteine von Vektordatenbanken bilden. Ein Vektor ist eine Liste von Zahlen, die Informationen so kodiert, dass Computer sie verarbeiten können. Stellen Sie sich vor, Sie haben ein Bild, wie das unten gezeigte:
Abb. 1- Ein Bild im Vektorformat dargestellt
Für Sie ist es eine schöne Blume, aber für einen Computer muss dieses Bild in ein Format umgewandelt werden, das er verstehen kann. Hier kommen Vektoreinbettungen ins Spiel.
Das Bild der oben gezeigten Blume wird in eine Vektoreinbettung umgewandelt — ein strukturiertes Array von Zahlen. Jede Zahl im Vektor repräsentiert ein bestimmtes Merkmal des Bildes, wie Farbe, Textur oder Form. Die Kombination dieser Zahlen bietet eine kompakte und effiziente Darstellung des Bildes, die der Computer für verschiedene Aufgaben nutzen kann, etwa zur Suche nach ähnlichen Bildern, zur Kategorisierung von Objekten oder sogar zur Erzeugung neuer Bilder. Hier ist eine Visualisierung, wie die Vektoreinbettungen erzeugt und in einer Vektordatenbank wie Milvus gespeichert werden.
Abb. 2- Prozess der Erzeugung und Speicherung von Vektoreinbettungen
Der Prozess beginnt mit einer Wissensbasis, die verschiedene Arten von Daten enthält. Die Daten werden anschließend von Einbettungsmodellen verarbeitet, die sie in Vektoren umwandeln. Schließlich werden die Vektoren in einer Vektordatenbank wie Milvus gespeichert und stehen zur Abfrage bereit.
Dateneinbettung ist nicht auf Bilder beschränkt. Text, Audio und sogar komplexere Datentypen wie Moleküle und Graphen können in Vektoreinbettungen umgewandelt werden. Indem wir Daten als Vektoren darstellen, können wir die Leistungsfähigkeit von Vektordatenbanken nutzen, um effiziente und präzise Suchen durchzuführen.
Sehen wir uns an, wie Vektordatenbanken in den verschiedenen Bereichen genutzt werden.
Verschiedene Anwendungsfälle, die durch Vektordatenbanken ermöglicht werden
Vektordatenbanken verändern die Art und Weise, wie wir unstrukturierte Daten in einer Vielzahl von Anwendungen handhaben und durchsuchen. Von der Verbesserung der Fähigkeiten von KI-Systemen bis hin zu effektiveren Empfehlungen sind die Möglichkeiten umfangreich und wirkungsvoll. Lassen Sie uns einige konkrete Anwendungsfälle betrachten, die durch Vektordatenbanken ermöglicht werden.
Retrieval-Augmented Generation (RAG)
Vektordatenbanken transformieren RAG, indem sie eine effizientere und semantisch aussagekräftigere Abfrage relevanter Informationen ermöglichen. Traditionelle schlüsselwortbasierte Suchmethoden stoßen bei komplexen Abfragen oder nuancierten Kontexten häufig an ihre Grenzen. Vektordatenbanken beheben diese Einschränkung, indem sie Daten auf Grundlage semantischer Ähnlichkeit statt exakter Übereinstimmungen speichern und durchsuchen.
In RAG werden Dokumente in hochdimensionale Vektoren umgewandelt, die ihre semantische Bedeutung erfassen. Wenn eine Abfrage eingeht, wird sie ebenfalls in einen Vektor umgewandelt, und die Vektordatenbank findet schnell die semantisch ähnlichsten Dokumente. Dieser Ansatz ermöglicht eine nuanciertere und kontextbewusstere Informationsabfrage, was für die Generierung genauer und relevanter Antworten entscheidend ist.
Betrachten Sie einen Kundensupport-Chatbot für ein Technologieunternehmen. Wenn ein Benutzer fragt: „Wie behebe ich ein Problem mit meinem Gerät, das sich nicht einschalten lässt?“, kann die Vektordatenbank relevante Dokumente abrufen, auch wenn sie nicht genau diese Wörter enthalten. Sie könnte Informationen zu Stromversorgungsproblemen, Batterieproblemen und allgemeinen Schritten zur Fehlerbehebung liefern. Das LLM nutzt dann diese abgerufenen Informationen, um eine umfassende und kontextuell relevante Antwort zu generieren, wodurch die Qualität des Kundensupports erheblich verbessert wird.
Empfehlungssystem
Vektordatenbanken revolutionieren Empfehlungssysteme, indem sie anspruchsvollere und effizientere Ähnlichkeitsberechnungen ermöglichen. Traditionelle Empfehlungssysteme haben oft Schwierigkeiten mit dem „Cold-Start“-Problem und können bei der Verarbeitung großer Datensätze rechenintensiv sein. Vektordatenbanken lösen diese Probleme, indem sie schnelle Approximate-Nearest-Neighbor-Suchen in hochdimensionalen Räumen ermöglichen.
In einem von einer Vektordatenbank unterstützten Empfehlungssystem werden sowohl Benutzer als auch Elemente als Vektoren in einem gemeinsamen Einbettungsraum dargestellt. Diese Einbettungen erfassen komplexe Merkmale und Präferenzen und ermöglichen dadurch nuanciertere Empfehlungen. Die Vektordatenbank kann schnell ähnliche Benutzer oder Elemente finden und ermöglicht so Echtzeit-Personalisierung selbst bei riesigen Datensätzen.
Zum Beispiel nutzt ein Musik-Streaming-Dienst wie Spotify Vektordatenbanken, um seine Empfehlungsmaschine zu betreiben. Jeder Song wird als Vektor dargestellt, der verschiedene Attribute wie Genre, Tempo, Stimmung und Hörmuster erfasst. Benutzerpräferenzen werden ebenfalls als Vektoren codiert. Wenn ein Benutzer einen neuen Song anhört, kann das System schnell ähnliche Songs im Vektorraum finden, wodurch die Entdeckung neuer Musik ermöglicht wird, die dem Geschmack des Benutzers entspricht, selbst wenn sie von einem unbekannten Künstler oder aus einem unbekannten Genre stammt.
Molekulare Ähnlichkeitssuche
Vektordatenbanken verändern die molekulare Ähnlichkeitssuche in der Wirkstoffforschung, indem sie eine effizientere und genauere Identifizierung ähnlicher Verbindungen ermöglichen. Traditionelle Methoden stützen sich oft auf die Ähnlichkeit von 2D-Strukturen, wodurch wichtige 3D-Konformationsähnlichkeiten oder Beziehungen funktioneller Gruppen übersehen werden können.
Mit Vektordatenbanken werden Bilder von Molekülen als hochdimensionale Vektoren dargestellt, die komplexe strukturelle und chemische Eigenschaften erfassen. Dadurch können Forscher nach Molekülen mit ähnlichen Eigenschaften oder potenziellen biologischen Aktivitäten suchen, selbst wenn ihre 2D-Strukturen unterschiedlich erscheinen. Die Geschwindigkeit von Vektordatenbanken ermöglicht außerdem ein schnelles Screening riesiger chemischer Bibliotheken.
Nehmen wir das Beispiel eines Pharmaunternehmens, das nach neuen Antibiotikakandidaten sucht. Es verfügt über ein bekanntes Antibiotikamolekül, das gut wirkt, aber starke Nebenwirkungen hat. Mithilfe einer Vektordatenbank kann das Unternehmen schnell Millionen von Verbindungen durchsuchen, um Moleküle mit ähnlichen antibakteriellen Eigenschaften, aber potenziell unterschiedlichen Nebenwirkungsprofilen zu finden. Die Vektordarstellung könnte Merkmale wie Ladungsverteilung, potenzielle Bindungsstellen und 3D-Form erfassen und so die Entdeckung strukturell vielfältiger, aber funktionell ähnlicher Moleküle ermöglichen, die traditionelle 2D-Ähnlichkeitssuchen möglicherweise übersehen würden.
Multimodale Ähnlichkeitssuche
Vektordatenbanken revolutionieren die multimodale Suche, indem sie eine einheitliche Möglichkeit bieten, verschiedene Datentypen (Text, Bilder, Audio usw.) darzustellen und zu durchsuchen. Traditionelle Suchsysteme haben oft Schwierigkeiten mit modalitätsübergreifenden Abfragen oder damit, Beziehungen zwischen verschiedenen Datentypen zu finden.
In einem durch Vektordatenbanken betriebenen multimodalen System werden alle Datentypen in einen gemeinsamen hochdimensionalen Raum projiziert, in dem Ähnlichkeiten unabhängig vom ursprünglichen Datentyp berechnet werden können. Dies ermöglicht flexiblere und leistungsfähigere Suchfunktionen und erlaubt es uns, verwandte Inhalte über verschiedene Modalitäten hinweg zu finden.
Zum Beispiel implementiert eine E-Commerce-Plattform ein multimodales Suchsystem mithilfe von Vektordatenbanken. Ein Nutzer kann ein Bild eines Möbelstücks hochladen, das ihm gefällt, und eine Textbeschreibung der gewünschten Farbe und des gewünschten Materials bereitstellen. Das System wandelt sowohl das Bild als auch den Text in Vektoren in einem gemeinsamen Raum um. Anschließend durchsucht es die Vektordatenbank, um Produkte zu finden, die sowohl zum visuellen Stil des Bildes als auch zu den spezifischen Attributen aus der Textbeschreibung passen. Dadurch können Nutzer genau das finden, wonach sie suchen, selbst wenn sie es nicht vollständig allein in Worte fassen können, was das Einkaufserlebnis erheblich verbessert.
Dies sind nur einige Anwendungsfälle, die durch Vektordatenbanken revolutioniert werden. Frank teilte die folgende Folie mit noch mehr Anwendungsfällen.
Abb. 3- Anwendungsfälle von Vektordatenbanken
Die obige Liste ist nicht vollständig. Sie ist lediglich eine Darstellung dessen, was möglich ist, wenn es darum geht, die Datensuche in KI-Anwendungen durch Vektordatenbanken zu verbessern.
Da Sie nun die Bedeutung von Vektordatenbanken in verschiedenen Bereichen verstehen. Lassen Sie uns einen der Anwendungsfälle implementieren, damit Sie sie in Aktion sehen können. Wir werden Milvus verwenden, da es gemessen an GitHub-Sternen die beliebteste Vektordatenbank ist.
Implementierung eines multimodalen Ähnlichkeitssuchsystems mit Milvus, Radient, ImageBind und Meta-Chameleon-7b
Um ein multimodales Ähnlichkeitssuchsystem mit den oben genannten Tools zu implementieren. Sie müssen sie in Ihrer Umgebung installieren und importieren.
Einrichtung Ihrer Umgebung
Beginnen Sie mit der Installation der erforderlichen Bibliotheken und dem Herunterladen der notwendigen Modelle.
!pip install -U radient
!pip install -U yt-dlp
!pip install pymilvus
!pip install -U git+https://github.com/facebookresearch/chameleon.git@main
!git clone https://huggingface.co/eastwind/meta-chameleon-7b
!yt-dlp "https://www.youtube.com/watch?v=wwk1QIDswcQ" -o ~/google_io_preshow.mp4
!pip install git+https://github.com/fzliu/ImageBind@main
Hier ist, was jede der oben genannten Bibliotheken tut:
Radient: Erstellt und führt Workflows aus, um multimodale Daten zu verarbeiten und zu analysieren, indem verschiedene Datenverarbeitungsschritte integriert werden.
yt-dlp: Ein Befehlszeilentool zum Herunterladen von Videos von YouTube. In diesem Artikel werden wir dieses Video von Googles Pre-Show verwenden.
PyMilvus: Das Python SDK für die Interaktion mit der Milvus-Vektordatenbank und Milvus lite, das eine effiziente Ähnlichkeitssuche und den Abruf großer Datenmengen ermöglicht.
Chameleon: Ein von Meta AI entwickeltes Vision-Language-Modell, das in der Lage ist, Text auf Grundlage visueller Eingaben zu verstehen und zu generieren, nützlich für die Integration multimodaler Dateneingaben.
Meta-Chameleon-7b: Ein spezifisches Modell aus der Chameleon-Serie, das für fortgeschrittene Vision-Language-Aufgaben entwickelt wurde und kontextbewusste Antworten durch die Integration visueller und textueller Daten bereitstellt.
ImageBind: Ein multimodales Einbettungsmodell.
Nach der Installation der Bibliotheken müssen wir sie in Ihren Code importieren, um ihre Funktionen verwenden zu können.
from pathlib import Path
from radient import make_operator
from radient import Workflow
Beachten Sie, dass wir nur radient importieren. Das liegt daran, dass Radient die Integration und Nutzung des Einbettungsmodells und von PyMilvus innerhalb seiner Workflows übernimmt. Daher müssen wir sie nicht manuell importieren.
Die Funktion make_operator ermöglicht es uns, verschiedene Operatoren zu erstellen, die die Bausteine unseres Workflows bilden werden. Die Klasse Workflow wird diese Operatoren in einer logischen Reihenfolge miteinander verketten.
Nach den Importen sind Sie bereit, das multimodale Ähnlichkeitssuchsystem zu implementieren.
Erstellen von Operatoren
Beginnen Sie damit, die spezifischen Aufgaben festzulegen, die der Workflow ausführen soll.
path = Path('/content/google.mp4') // pass the youtube downloaded video path here
read = make_operator(optype="source", method="local", task_params={"path": str(path)})
demux = make_operator(optype="transform", method="video-demux", task_params={"interval": 5.8})
vectorize = make_operator (optype="vectorizer", method="imagebind", modality="multimodal", task_params={})
store = make_operator (optype="sink", method="milvus", task_params={"operation": "insert"})
Lassen Sie uns jeden Operator im Detail aufschlüsseln:
read: Dies ist einsource-Operator, der die lokale Videodatei liest. Er nimmt den Dateipfad als Parameter und ist dafür verantwortlich, die Videodaten in unseren Workflow zu laden.demux: Dies ist eintransform-Operator, der das Video in Intervallen von 5,8 Sekunden in Frames demuxt (trennt). Dieser Schritt ist entscheidend, um den kontinuierlichen Videostream in einzelne Bilder aufzuteilen, die individuell verarbeitet werden können.vectorize: Dieser Operator verwendet dasImageBind-Modell, um Vektoreinbettungen für multimodale Daten zu erstellen. ImageBind ist ein leistungsstarkes Modell, das einheitliche Einbettungen für verschiedene Modalitäten (wie Bilder, Text und Audio) erstellen kann, sodass wir unsere Videoframes in einem hochdimensionalen Vektorraum darstellen können.store: Dies ist ein Sink-Operator, der die vektorisierten Daten in Milvus lite einfügt. Eine leichtgewichtige Version von Milvus
Nach dem Erstellen der Operatoren besteht der nächste Schritt darin, mit ihnen einen Workflow zu erstellen.
Erstellen des Einfüge-Workflows
Als Nächstes erstellen wir einen Workflow, um unsere verarbeiteten Videodaten in die Milvus-Datenbank einzufügen:
insert_wf = (Workflow()
.add(read, name="read")
.add(demux, name="demux")
.add(vectorize, name="vectorize")
.add(store, name="store")
)
insert_wf()
Dieser Workflow beginnt mit dem Lesen der Videodatei und dem anschließenden Demuxen in einzelne Frames. Jeder Frame wird anschließend mit dem ImageBind-Modell vektorisiert. Die resultierenden Vektoren werden in der Milvus-Datenbank gespeichert.
Wenn alles reibungslos läuft, sollten Sie eine Ausgabe ähnlich der folgenden sehen:
Abb. 4 – Ergebnisse des Einfügevorgangs
Die Ausgabe zeigt eine Bestätigung, dass Ihr Video verarbeitet und in Milvus eingefügt wurde. Sie zeigt das Ergebnis des Einfügevorgangs an, einschließlich der Anzahl der eingefügten Datensätze, ihrer IDs und der Rechenkosten.
Einrichten des Such-Workflows
Nach dem Einfügen unserer Daten müssen wir einen Workflow für die Suche einrichten. Dieser Workflow ermöglicht es uns, relevante Videoframes basierend auf Textabfragen zu finden:
vectorize = make_operator("vectorizer", "imagebind", modality="text")
search = make_operator("sink", "milvus", task_params={"operation": "search", "output_fields": None})
search_wf = (Workflow()
.add(vectorize, name="vectorize")
.add(search, name="search")
)
Dieser Such-Workflow besteht aus zwei Hauptschritten:
Der
vectorize-Operator nimmt Texteingaben entgegen und wandelt sie mithilfe von ImageBind in eine Vektoreinbettung um. Dadurch können wir unsere Textabfrage im selben Vektorraum wie unsere Videoframes darstellen.Der
search-Operator verwendet dann diesen Vektor, um eine Ähnlichkeitssuche in der Milvus-Datenbank durchzuführen und die Videoframes zu finden, die unserer Abfrage am ähnlichsten sind.
Da wir den Such-Workflow haben, führen wir eine Suche durch.
Durchführen einer multimodalen Suche
Dies ist eine multimodale Suche, da wir Text verwenden, um ein Video zu durchsuchen. Genauer gesagt durchsuchen wir die Videoframes.
prompt = "What was unusual about the coffee mug?"
search_wf(data=prompt)
search_vars = {
"limit": 1, # top-k limit
"output_fields": ["*"] # output fields
}
results = search_wf(
extra_vars={"search": search_vars},
data=prompt
)
results[0][0][0]["entity"]["data"]
Hier definieren wir einen Suchprompt, der nach einer ungewöhnlichen Kaffeetasse fragt. Das Dictionary search_vars gibt an, dass wir das Top-1-Ergebnis und alle Ausgabefelder möchten.
Dann führen wir den Such-Workflow mit diesen Eingaben aus. Der Workflow vektorisiert unseren Textprompt, sucht in Milvus nach ähnlichen Vektoren und gibt die Ergebnisse zurück. Die verschachtelte Indizierung [0][0][0] greift auf das erste (und in diesem Fall einzige) Suchergebnis zu, und ["entity"]["data"] ruft die tatsächlich mit diesem Ergebnis verknüpften Daten ab.
Der obige Code gibt den Pfad des Frames zurück, der am besten zu unserer Abfrage passt.
/root/.radient/data/video_demux/6bc783e9-c789-4340-b45c-204621145f2b/frame_0001.png
Visualisieren wir diesen zurückgegebenen Frame, um zu sehen, was an der Tasse ungewöhnlich ist.
from PIL import Image
image_path = "/root/.radient/data/video_demux/6bc783e9-c789-4340-b45c-204621145f2b/frame_0001.png"
image = Image.open(image_path)
import matplotlib.pyplot as plt
plt.imshow(image)
plt.show()
Dieser Code öffnet die Bilddatei, die unserem Suchergebnis entspricht, mithilfe von PIL (Python Imaging Library) und zeigt sie mit matplotlib an. Diese visuelle Darstellung hilft uns zu verstehen, was das System als Antwort auf unsere Abfrage nach einer ungewöhnlichen Kaffeetasse gefunden hat.
Hier ist die Ausgabe:
Abb. 5 – Eine Person, die aus einer Tasse herauskommt
Wie Sie sehen können, zeigt dieser Frame eine ungewöhnliche Tasse, da in eine normale Tasse keine Person hineinpasst. Die ungewöhnliche Aktivität besteht darin, dass eine Person aus einer Tasse herauskommt.
Nutzung von Meta-Chameleon-7b zur Bildbeschreibung
Um unser multimodales Suchsystem weiter zu verbessern, können wir das Modell Meta-Chameleon-7b verwenden, um eine Beschreibung des Bildes zu generieren:
from chameleon.inference.chameleon import ChameleonInferenceModel
import os
# Verify the file path and existence
image_path = '/root/.radient/data/video_demux/6bc783e9-c789-4340-b45c-204621145f2b/frame_0001.png'
print(f"Image path: {image_path}")
print(f"File exists: {os.path.exists(image_path)}")
print(f"File size: {os.path.getsize(image_path)} bytes")
# Initialize the model
model = ChameleonInferenceModel(
"./meta-chameleon-7b/models/7b/",
"./meta-chameleon-7b/tokenizer/text_tokenizer.json",
"./meta-chameleon-7b/tokenizer/vqgan.yaml",
"./meta-chameleon-7b/tokenizer/vqgan.ckpt",
)
try:
tokens = model.generate(
prompt_ui=[
{"type": "image", "value": f"file:{image_path}"}, # Remove the space after 'file:'
{"type": "text", "value": prompt},
{"type": "sentinel", "value": "<END-OF-TURN>"},
]
)
result = model.decode_text(tokens)[0]
print("Generated description:")
print(result)
except Exception as e:
print(f"Error: {e}")
import traceback
traceback.print_exc()
Dieser Code initialisiert das Modell Meta-Chameleon-7b, ein Vision-Language-Modell, das Bilder im Kontext verstehen und beschreiben kann. Wir stellen ihm sowohl das Bild als auch unseren ursprünglichen Textprompt zur Verfügung, sodass es eine Beschreibung generieren kann, die für unsere Abfrage relevant ist.
Die Methode generate nimmt eine Liste von Eingaben entgegen, einschließlich des Bilddateipfads, unseres Textprompts und eines Sentinel-Tokens, um das Ende der Eingabe zu markieren. Das Modell generiert dann eine Sequenz von Tokens, die wir in menschenlesbaren Text dekodieren. Hier ist ein Beispiel dafür, wie die Ausgabe aussehen sollte:
Abb. 6 – Ausgabe der Beschreibung eines Bildes mithilfe eines Vision-Language-Modells
Diese Implementierung zeigt, wie Vektordatenbanken wie Milvus in größere KI-Systeme integriert werden können, wodurch eine effiziente Ähnlichkeitssuche über verschiedene Modalitäten hinweg ermöglicht wird.
Fazit
Frank hat gute Arbeit geleistet, indem er uns gezeigt hat, wie Vektordatenbanken als transformative Technologie im Bereich KI und maschinelles Lernen entstanden sind, insbesondere für den Umgang mit unstrukturierten Daten. Wie gezeigt wurde, gehen ihre Anwendungen weit über einfache Retrieval-Augmented-Generation-(RAG)-Systeme hinaus und revolutionieren verschiedene Bereiche, darunter Kundensupport, Empfehlungssysteme, Wirkstoffentdeckung und multimodale Suche. Mach weiter und implementiere noch ausgefeiltere KI-Anwendungen, die von Vektordatenbanken unterstützt werden. Hier sind einige Ressourcen zu deiner Referenz.
Für ein detaillierteres Verständnis, einschließlich der Geschichte von Embeddings, sieh dir die Aufzeichnung des Meetup-Vortrags an.
Weitere Ressourcen
Weiterlesen

Introducing Functions and Model Inference on Zilliz Cloud: Automatic Embedding and Reranking with Hosted Models
Zilliz Cloud Functions auto-generate embeddings via OpenAI, Voyage AI, Cohere, or Zilliz Hosted Models. Built-in reranking — just insert text and search.

Zilliz Cloud Enterprise Vector Search Powers High-Performance AI on AWS
Zilliz Cloud on AWS powers secure, scalable, ultra-fast vector search for enterprise AI apps, with BYOC, sub-10ms latency, and zero-DevOps simplicity.

Expanding Our Global Reach: Zilliz Cloud Launches in Azure Central India
Zilliz Cloud expands to Azure Central India. This new region helps customers meet compliance, reduce latency, and optimize cloud costs when building AI applications.


