Multimodale Embeddings mit FiftyOne und Milvus erkunden
Was ist der erste Schritt zum Aufbau einer multimodalen retrieval augmented generation (RAG)-App? Multimodale vector embeddings erhalten. In gewisser Weise ist es eine Fehlbezeichnung, ein Embedding als multimodal zu bezeichnen. Es gibt viele Möglichkeiten, mit mehreren Modalitäten innerhalb von Vektoren zu arbeiten, aber in diesem Tutorial konzentrieren wir uns auf Vektor-Embeddings, die von multimodalen Modellen erzeugt werden.
In diesem Beitrag behandeln wir:
- Was bedeutet „multimodal“?
- Wie verarbeitet Milvus multimodale Embeddings?
- Beispiele für multimodale Modelle
- Verwendung von FiftyOne und Milvus zur Exploration multimodaler Embeddings
- Exploration multimodaler Embeddings für CIFAR 10 über FiftyOne und CLIP
- Wie können wir FiftyOne für die Datenexploration mit Milvus weiter anpassen?
- Zusammenfassung der Exploration multimodaler Embeddings mit FiftyOne und Milvus
Was bedeutet „multimodal“?
Wenn wir über „multimodal“ sprechen, beziehen wir uns auf die Fähigkeiten der Modelle. Sowohl das Large Language Model/Foundation Model als auch das Embedding-Modell in einem RAG-Stack können multimodal sein. Für dieses Beispiel untersuchen wir multimodale Embeddings aus einem Open-Source-Modell. Wie erhalten wir ein Vektor-Embedding? Vektor-Embeddings stammen aus der vorletzten Schicht eines Embedding-Modells.
Das liegt daran, dass jede Schicht des Modells einige Informationen über die Eingabe lernt und die letzte Schicht eine Vorhersage trifft. Da wir keine Vorhersage wollen, sondern mit einer numerischen Darstellung der Daten arbeiten möchten, schneiden wir die letzte Schicht ab und nehmen die Ausgabe der vorletzten Schicht, die alle Informationen enthält, die das Modell gelernt hat. Wir verwenden FiftyOne, um die Exploration zu erleichtern, und Milvus, um die Vektoren zu speichern.
Wie verarbeitet Milvus multimodale Embeddings?
Das Praktische an multimodalen Embeddings oder Vektor-Embeddings im Allgemeinen ist, dass sie keine besondere Behandlung benötigen. Vektor-Embeddings sind lediglich numerische Darstellungen einer bestimmten Art von Eingabedaten. Was den eigentlichen Datentyp betrifft, sind Vektor-Embeddings einfach Vektoren, also eine Liste von Zahlen. Milvus verarbeitet all diese Vektoren auf dieselbe Weise.
Vektoren können dicht oder spärlich sein. Dichte Vektoren bestehen typischerweise aus Floats und werden von Deep-Learning-Modellen erzeugt; ein Beispiel dafür werden wir heute sehen. Spärliche Vektoren werden manchmal als binäre Vektoren bezeichnet und bestehen aus 0en und 1en. Beim Arbeiten mit Vektoren ist wichtig zu beachten, dass nur Vektoren derselben Größe oder Dimensionalität verglichen werden können. Darüber hinaus können selbst bei gleicher Größe Embeddings, die von unterschiedlichen Modellen erzeugt wurden, nicht unbedingt eins zu eins verglichen werden.
Multimodale Embeddings sind besonders knifflig. Die meisten Deep-Learning-Modelle sind darauf ausgelegt, mit einem Datentyp oder einer Modalität umzugehen. Das könnten Bilder, Text, Video oder etwas Spezielleres sein. Da diese Modelle jedoch nur für einen Datentyp optimiert sind, können sie andere Modalitäten nicht verarbeiten oder darstellen — ein Modell, das darauf trainiert wurde, Texteingaben zu akzeptieren, wird typischerweise keine Bilder akzeptieren können.
Multimodale Modelle werden darauf trainiert, mit mehreren Datentypen zu interagieren. Für unsere Zwecke interessieren wir uns für multimodale Modelle, die Vektor-Embeddings für mehrere Datenmodalitäten erzeugen. Insbesondere interessieren wir uns für Modelle, die Text- und Bilddaten in denselben Raum einbetten, sodass die Dimensionen der erzeugten Vektoren gleich sind und wir sie sinnvoll ähnlich behandeln können.
Das gängigste multimodale Modell zur Erzeugung von Text- und Bild-Embeddings ist CLIP von OpenAI, das kontrastive Techniken verwendet, um die Bild-Embeddings von Fotografien mit den Text-Embeddings ihrer Bildunterschriften abzugleichen.
Verwendung von FiftyOne und Milvus zur Exploration multimodaler Embeddings
FiftyOne ist die führende Open-Source-Bibliothek für die Kuratierung und Visualisierung unstrukturierter Daten. FiftyOne integriert sich mit mehreren Vector-Store-Backends, wobei Milvus besonders gut geeignet ist, um flexibel mit großen, wachsenden Datensätzen zu arbeiten. In diesem Beispiel verwenden wir Milvus Lite, eine eingebettete Version von Milvus, die du direkt in deinem Notebook starten kannst. Für einen ausführlichen Einblick sieh dir diesen End-to-End-Leitfaden zu Milvus Lite an.
Bevor du in den Code eintauchst, stelle sicher, dass alle erforderlichen Voraussetzungen installiert sind. Du musst pip install milvus pymilvus fiftyone torch torchvision ausführen. Der erste Schritt besteht darin, unsere Milvus-Lite-Instanz zu starten. Das können wir tun, indem wir default_server aus Milvus importieren und die Funktion start() aufrufen.
from milvus import default_server
default_server.start()
Jetzt, da wir eine einsatzbereite Milvus-Instanz haben, können wir sie mit FiftyOne verknüpfen, um Vektoreinbettungen zu vergleichen. Wir importieren FiftyOne, das FiftyOne Brain und den FiftyOne Zoo und laden den Test-Split des Datensatzes CIFAR 10.
import fiftyone as fo
import fiftyone.brain as fob
import fiftyone.zoo as foz
# Step 1: Load your data into FiftyOne
dataset = foz.load_zoo_dataset("cifar10", split="test")
In diesem Beispiel verwenden wir das CLIP-Modell, um unsere Bilder einzubetten. Anschließend verwenden wir die Funktion compute_similarity aus dem FiftyOne Brain. Diese Funktion erzeugt zunächst Einbettungen für unsere Samples mithilfe eines angegebenen Modells, erstellt dann aus diesen Einbettungen eine Milvus-Collection und hängt sie an die FiftyOne-Sample-Collection an. Mit FiftyOne und Vector-Search-Backends kannst du einen Ähnlichkeitsindex über Bilder, Objekt-Patches und sogar Videoframes erstellen!
Die Funktion compute_similarity nimmt das FiftyOne-Dataset und verschiedene benannte Parameter entgegen. Der brain_key ist ein eindeutiger Schlüssel, den FiftyOne verwendet, um Läufe nachzuverfolgen. Der Schlüssel backend teilt FiftyOne mit, welches Vektordatenbank-Backend verwendet werden soll, und model nimmt den Namen des Modells entgegen, das FiftyOne zur Erstellung der Einbettungen nutzt.
fob.compute_similarity(
dataset,
brain_key="clip_sim",
backend="milvus",
model="clip-vit-base32-torch",
)
Der letzte Schritt, den wir uns hier vor der Erkundung ansehen, besteht darin, FiftyOne zu verwenden, um die FiftyOne App zu starten. Wir übergeben das Dataset und setzen auto=False, damit sich das Fenster nicht im Notebook öffnet, sondern über einen Chrome-Tab unter localhost:5151 aufgerufen werden kann.
session = fo.launch_app(dataset, auto=False)
Multimodale Einbettungserkundung für CIFAR 10 über FiftyOne und CLIP
Es ist Zeit zum Erkunden! Sehen wir uns an, wie man Text verwendet, um semantisch ähnliche Bilder zu finden. Betrachten wir drei Wörter: Ferrari, Mustang und Pony.
Unsere erste Suche nach einem Ferrari ist ein Auto.
Die nächste Suche, „pony“, liefert uns eindeutig Bilder von Pferden.
Wenn wir jedoch nach „mustang“ suchen, erhalten wir eine Mischung.
Dieser Schritt zeigt, dass es unerlässlich ist, deinen Datensatz zu bewerten und den Kontext deiner Daten zu verstehen!
Wie können wir FiftyOne für die Datenerkundung mit Milvus weiter anpassen?
Um Milvus als Standard-„Backend“ für die Vektorsuche in FiftyOne festzulegen, können wir die folgende Umgebungsvariable sourcen:
export FIFTYONE_BRAIN_DEFAULT_SIMILARITY_BACKEND=milvus
Für einen beliebigen Index können wir außerdem den Namen der Collection angeben, welches Konsistenzniveau verwendet werden soll und welche Metrik zur Bewertung der Ähnlichkeit genutzt werden soll. Hier ist ein zweiter Ähnlichkeitsindex, der eine euklidische Metrik und Bounded-Konsistenz verwendet:
fob.compute_similarity(
dataset,
brain_key="clip_euclid",
model="clip-vit-base32-torch",
metric="euclidean",
consistency_level="Bounded"
)
Wenn wir mehrere Ähnlichkeitsindizes auf einem Dataset haben, können wir in der App auswählen, welchen wir verwenden möchten, indem wir auf das Zahnradsymbol neben der Suchleiste unter der Lupe klicken und den Index anhand seines Brain Keys auswählen:
Wir können auch ein anderes multimodales Modell verwenden, um unsere Bild- und Text-Embeddings zu erzeugen. Tatsächlich können wir dies mit jedem OpenCLIP-Modell tun (wir werden hier in ein paar Tagen einen besseren Link haben) oder mit jedem Zero-Shot-Prediction-Modell aus der Transformers-Bibliothek von Hugging Face. Als Beispiel ist hier ein mit AltCLIP erstellter Index:
!pip install transformers
fob.compute_similarity(
dataset,
brain_key="altclip",
model="zero-shot-classification-transformer-torch",
name_or_path="BAAI/AltCLIP",
)
Zusammenfassung der Erkundung multimodaler Embeddings mit FiftyOne und Milvus
Dieser Beitrag hat untersucht, wie multimodale Embeddings mit FiftyOne und Milvus funktionieren. Wir haben gezeigt, wie Sie ein beliebtes multimodales Modell – CLIP – auf einem beliebten Dataset – CIFAR 10 – erkunden können. Sie verwenden CLIP, um die Embeddings der Eingabedaten zu erstellen, Milvus, um die Embeddings der multimodalen Daten zu speichern (manchmal als „multimodale Embeddings“ bezeichnet), und FiftyOne, um die Embeddings zu erkunden.
Die Verwendung von CLIP auf diese Weise ermöglicht es Ihnen, Bilder mit Text zu durchsuchen. Damit haben wir den Raum mithilfe natürlicher Sprache erkundet, um Bilder von Wörtern zu vergleichen, die in unterschiedlichen Kontexten unterschiedliche Bedeutungen haben können. Wir haben gesehen, dass „pony“ eindeutig ein Pferd ist, „Ferrari“ eindeutig ein Auto ist, „mustang“ jedoch beides sein könnte.
Weiterlesen

My Wife Wanted Dior. I Spent $600 on Claude Code to Vibe-Code a 2M-Line Database Instead.
Write tests, not code reviews. How a test-first workflow with 6 parallel Claude Code sessions turns a 2M-line C++ codebase into a daily shipping pipeline.

Migrating from S3 Vectors to Zilliz Cloud: Unlocking the Power of Tiered Storage
Learn how Zilliz Cloud bridges cost and performance with tiered storage and enterprise-grade features, and how to migrate data from AWS S3 Vectors to Zilliz Cloud.

Will Amazon S3 Vectors Kill Vector Databases—or Save Them?
AWS S3 Vectors aims for 90% cost savings for vector storage. But will it kill vectordbs like Milvus? A deep dive into costs, limits, and the future of tiered storage.



