KI-Pipelines intelligenter gestalten mit typisierten, mehrdimensionalen Vektoren
CocoIndex hat umfassende Unterstützung für typisierte Vektordaten eingeführt, die alles von grundlegenden numerischen Arrays bis hin zu komplexen, tief verschachtelten mehrdimensionalen Vektoren umfasst. Diese Erweiterung wurde entwickelt, um eine nahtlose Integration mit Hochleistungs-Vektordatenbanken wie Qdrant zu ermöglichen und erweiterte Arbeitsabläufe für Indexierung, Einbettung und Abfrage über verschiedene Datenmodalitäten hinweg zu realisieren.
Die Plattform unterstützt nun eine Reihe von Vektortypen mit robusten Typgarantien. Während CocoIndex die Typen für die meisten Datenflüsse automatisch ableiten kann, ist für benutzerdefinierte Funktionen eine explizite Typspezifikation verfügbar, die eine größere Kontrolle bietet.
Unterstützte Vektortypen
-
Eindimensionale Vektoren: Diese repräsentieren einfache Zahlenfolgen. CocoIndex unterstützt dynamische Dimensionen, bei denen die Vektorlänge variieren kann, oder feste Dimensionen, wie
Vector[Float32, Literal[384]]
für einen Vektor, der immer 384 Elemente enthält. Intern können diese NumPy-Arrays (numpy.typing.NDArray[np.float32]
) oder Python-Listen (list[float]
) entsprechen. Unterstützte Zahlentypen umfassen native Pythonfloat
undint
, CocoIndex-Typaliase (Float32
,Float64
,Int64
zur präzisen Bitgrößenkontrolle) und NumPy-Typen (numpy.float32
,numpy.float64
,numpy.int64
). -
Zweidimensionale Vektoren (Multivektoren): Dargestellt als
Vector[Vector[Float32, Literal[3]], Literal[2]]
, bezeichnen diese einen Vektor, der aus anderen Vektoren besteht – zum Beispiel zwei Vektoren, von denen jeder drei Elemente hat. Diese Struktur ist ideal für Szenarien, die mehrere Einbettungen pro Datenpunkt, Multi-View-Repräsentationen oder Batch-Kodierungen erfordern. Ihre zugrunde liegende Python-Repräsentation ist typischerweise eine verschachtelte Liste (list[list[float]]
) oder ein mehrdimensionales NumPy-Array (numpy.typing.NDArray
).
Mehrdimensionale Vektoren verstehen
Ein mehrdimensionaler Vektor ist im Grunde ein Vektor, dessen Elemente selbst Vektoren sind, ähnlich einer Matrix oder einer verschachtelten Liste. CocoIndex stellt diese Struktur mithilfe verschachtelter Vector
-Typen dar, wie Vector[Vector[T, N], M]
, wobei M
die Anzahl der inneren Vektoren und N
die Dimension jedes einzelnen Vektors bezeichnet. Während M
und N
innerhalb von CocoIndex dynamisch sein können, erfordern bestimmte Zielsysteme wie Qdrant möglicherweise eine feste innere Dimension (N
). Dieses Konzept ist in Deep-Learning- und multimodalen Anwendungen von entscheidender Bedeutung, da es reichere Datenrepräsentationen ermöglicht, wie z.B. ein Bild als Sammlung von Patch-Level-Einbettungen, ein Dokument als absatzweise Vektoren oder eine Benutzersitzung als Sequenz von Verhaltensvektoren. CocoIndex unterstützt diese komplexen Repräsentationen nativ und vermeidet die Notwendigkeit einer Abflachung.
Anwendungen von Multi-Vektor-Einbettungen
Multi-Vektor-Einbettungen sind in mehreren fortgeschrittenen Anwendungsfällen besonders vorteilhaft:
Vision: Patch-Einbettungen: In der Computer Vision könnte ein Vision Transformer (ViT) mehrere Vektoren für ein Bild ausgeben, einen für jeden Patch (z.B. 196 Patches, jeder mit einer 768-dimensionalen Einbettung). Dies ermöglicht die lokale Merkmalsanpassung und regionenbewusste Abfrage, dargestellt als
Vector[Vector[Float32, Literal[768]]]
.Text: Dokument mit Absätzen: Bei langen Dokumenten bewahrt die Aufteilung in absatz- oder satzweise Vektoren (z.B. 10 Absatzvektoren mit jeweils 384 Dimensionen) Kontext und Struktur besser als das Mittelwertbilden aller Vektoren. Dies ermöglicht die Suche innerhalb von Unterteilen eines Dokuments, das Abrufen von Dokumenten basierend auf einem einzigen relevanten Absatz und die Implementierung hierarchischer Suchen. Dies kann als
Vector[Vector[Float32, Literal[384]]]
typisiert werden.Benutzerverhalten: Sitzungen oder Zeitreihen: Eine Benutzersitzung kann als Abfolge von Aktionen oder Zuständen modelliert werden, wobei jeder Schritt ein Vektor ist (z.B. 20 Schritte, jeder ein 16-dimensionaler Vektor). Dies ist wertvoll bei E-Commerce-Klicksequenzen, Finanzzeitreihen oder UX-Analysen für mehrstufige Interaktionen, dargestellt als
Vector[Vector[Float32, Literal[16]]]
.Wissenschaft & Biomedizin: Multi-View-Einbettungen: Komplexe Entitäten wie Moleküle oder Proteine können mehrere Konformationen oder Messmodalitäten aufweisen. Die Darstellung dieser als mehrere Vektoren (z.B. 5 verschiedene Ansichten, jede 128-dimensional) ermöglicht umfassende Vergleiche über ihre latenten Räume hinweg, typisiert als
Vector[Vector[Float32, Literal[128]]]
.
Vorteile gegenüber flachen Vektoren
Obwohl es möglich ist, einen Multivektor abzuflachen (z.B. [[1,2,3],[4,5,6]]
in [1,2,3,4,5,6]
umzuwandeln), führt dies zum Verlust semantischer Grenzen. Echte Multivektoren bewahren die Bedeutung jedes Untervektors und ermöglichen so das Abgleichen und Abfragen auf Untervektorebene. Vektordatenbanken wie Qdrant können dies nutzen, indem sie über mehrere Einbettungen hinweg bewerten und die beste Übereinstimmung aus einer Reihe verwandter Vektoren identifizieren (z.B. den nächstgelegenen Bildpatch oder relevanten Absatz). Entscheidend ist, dass der innere Vektor eine feste Dimension beibehalten kann, auch wenn die äußere Dimension variiert, was eine häufige Anforderung für die effiziente Vektorindexierung in den meisten Datenbanken ist.
CocoIndex zu Qdrant Typzuordnung
Qdrant, eine weit verbreitete Vektordatenbank, unterstützt sowohl dichte Vektoren als auch Multivektoren. CocoIndex ordnet seine Vektortypen intelligent Qdrant-kompatiblen Formaten zu:
Ein CocoIndex
Vector[Float32, Literal[N]]
wird einem Qdrant Dense Vector zugeordnet.Ein CocoIndex
Vector[Vector[Float32, Literal[N]]]
wird einem Qdrant MultiVector zugeordnet.Jeder andere Vektortyp oder Vektoren mit dynamischen Dimensionen, die von Qdrant nicht unterstützt werden, werden als Teil des Qdrant-JSON-Payloads gespeichert.
Qdrant erfordert speziell, dass Vektoren für die Indexierung eine feste Dimension haben. CocoIndex erkennt Vektorformen automatisch und verwaltet diese Zuordnung, um die Kompatibilität sicherzustellen.
CocoIndex Datenmodellübersicht
Innerhalb von CocoIndex werden Daten in Zeilen und Feldern organisiert. Jede Zeile entspricht einem Qdrant-Punkt. Ein Feld kann entweder ein benannter Vektor sein, wenn es den Vektorbeschränkungen von Qdrant entspricht, oder es kann Teil des Payloads für nicht konforme Typen sein. Dieser hybride Ansatz bietet die Flexibilität strukturierter Metadaten kombiniert mit der Leistungsfähigkeit der Vektorsuche.
Durch die Unterstützung tief typisierter Vektoren und mehrdimensionaler Einbettungen bietet CocoIndex Struktur und semantische Klarheit für Vektordaten-Pipelines. Sein Typsystem gewährleistet Kompatibilität, Debugbarkeit und Korrektheit im großen Maßstab, sei es beim Indexieren von Bildern, Text, Audio oder abstrakten Graphenrepräsentationen.