Ein Vektor ist eine numerische Darstellung von Text, Bildern, Audio oder Video, die Funktionen/semantische Bedeutung der Daten kodiert, anstatt die tatsächlichen Inhalte wie die zugrunde liegenden Wörter oder Pixel. Ein Vektor ist eine Liste von numerischen Werten, die als Dimensionen bezeichnet werden, mit einem angegebenen Format.
Oracle AI Vector Search unterstützt Vektoren bis zu 65.535 Dimensionen.
AI Vector Search unterstützt die Formate INT8, Float32 und Float64.
Die Größe eines Vektors ist das Produkt der Anzahl der Dimensionen und der Größe jeder Dimension.
Beispiel: Ein Vektor mit 2.048 Dimensionen und dem Format INT8 (1 Byte) hat eine Größe von 2 KB. Ein Vektor mit 1.024 Dimensionen und dem Format FLOAT32 (4 Byte) hat eine Größe von 4 KB.
Vektoren werden aus verschiedenen Arten von Eingabedaten (Text, Bilder, Audio, Video usw.) von Deep-Learning-Modellen erstellt, die als Einbettungsmodelle bezeichnet werden. Sie können Vektoren außerhalb der Datenbank mit Ihren eigenen Einbettungsmodellen oder Einbettungsservices erstellen oder sie mit importierten Einbettungsmodellen über die SQL-Funktion VECTOR_EMBEDDING() in der Datenbank erstellen.
AI Vector Search sollte mit jedem gültigen Einbettungsmodell funktionieren, das Vektoren mit einem der unterstützten Formate und 65.535 oder weniger Dimensionen generiert.
Die Wahl des Einbettungsmodells hängt von vielen Faktoren ab, wie der Art Ihrer Daten, den von Ihnen priorisierten Leistungskennzahlen und den Kosten, die Sie zahlen möchten. Kostenlose Open-Source-Einbettungsmodelle, wie verschiedene Satztransformatoren, finden Sie auf Hugging Face und ähnlichen Websites. Diese Modelle können in ONNX konvertiert werden, um sie mit AI Vector Search in der Datenbank auszuführen. Darüber hinaus ist die von Hugging Face gehostete MTEB-Rangliste eine beliebte Quelle für die besten Texteinbettungsmodelle. Sie können sich auch an etablierte Modellanbieter wie OpenAI und Cohere wenden.
Es gibt mehrere mathematische Operationen, die auf Vektoren unterstützt werden, aber die wichtigste Operation ist die SQL-Funktion VECTOR_DISTANCE(). Diese findet den mathematischen Abstand zwischen zwei Vektoren basierend auf der gewählten Entfernungsformel. Es gibt viele Entfernungsformeln, die von Oracle AI Vector Search unterstützt werden, einschließlich der euklidischen Entfernung, der Kosinusähnlichkeit und der Hamming-Distanz. Die Wahl der Entfernungsfunktion wird typischerweise durch das Einbettungsmodell gesteuert, das zur Generierung der Vektoren verwendet wird.
Alle Arten von Vektoren teilen die gleiche Eigenschaft: Je ähnlicher zwei Entitäten sind, desto kleiner ist der mathematische Abstand zwischen ihnen. Zum Beispiel sind die Vektoren für "Apfel" und "Orange" näher zusammen als die Vektoren für "Apfel" und "Hund". Diese Eigenschaft von Vektoren ermöglicht es ihnen, Daten nach semantischer Ähnlichkeit zu suchen.
Es gibt einfache und intuitive SQL-Erweiterungen, mit denen AI Vector Search problemlos in Ihre Anwendungen integriert werden kann. Da die Vektorentfernung ein Maß für die Ähnlichkeit ist, besteht die KI-Vektorsuche einfach darin, die Menge der Kandidatenvektoren nach ihrer Entfernung von einem Suchvektor zu sortieren und die K besten Übereinstimmungen zurückzugeben. Beispiel: Die folgende Abfrage ermittelt die Top-10-Produkte, deren Fotos am besten mit dem Suchfoto des Benutzers übereinstimmen:
SELECT product_name, product_photo
FROM Product
ORDER BY VECTOR_DISTANCE(product_photo_vector, :search_photo_vector)
FETCH FIRST 10 ROWS ONLY;
AI Vector Search kann in anspruchsvollen Abfragen mit Filtern, Joins, Aggregationen, Gruppierungen usw. verwendet werden. Zum Beispiel kann die folgende Abfrage verwendet werden, um die Top 10 passenden Produkte nach Foto für Produkte zu finden, die im Bundesstaat Kalifornien hergestellt werden.
SELECT Product.name, Product.photo, Manufacturer.name
FROM Product p JOIN Manufacturer m ON (p.mfr_id = m.id)
WHERE Manufacturer.state = ‘CA’
ORDER BY VECTOR_DISTANCE(product_photo_vector, :search_photo_vector)
FETCH FIRST 10 ROWS ONLY;
Herkömmliche Datenbankindizes werden verwendet, um Suchvorgänge basierend auf übereinstimmenden Werten zu beschleunigen. Ein B*-Baumindex beschleunigt beispielsweise wertbasierte Lookups und wertbasierte Range Scans. Vektorindizes hingegen sind so konzipiert, dass die Top-K-ähnlichsten Übereinstimmungen basierend auf semantischer Ähnlichkeit anstelle genau übereinstimmender Werte gefunden werden. Zum Beispiel kann ein Vektorindex verwendet werden, um die Top-K-Wörter zu finden, die in der Bedeutung von „Apfel“ in einem Korpus bestehender Wörter am ähnlichsten sind. Die Verwendung eines Vektorindex führt zu einer ungefähren Suche, die eine gewisse Suchgenauigkeit für bis zu 100X höhere Leistung abhandelt, da es vermeidet, jeden einzelnen Vektor innerhalb einer Spalte zu untersuchen.
Neben SQL und PL/SQL können AI Vector Search-Anwendungen in einer Vielzahl von Programmiersprachen erstellt werden. AI Vector Search umfasst native Treiberunterstützung für Vektoren in gängigen Sprachen wie Java, Python, JavaScript und C#.
AI Vector Search kann im bekannten Retrieval-Augmented Generation(RAG)-Workflow verwendet werden, um die Genauigkeit und kontextbezogene Relevanz von Unterhaltungen in natürlicher Sprache mit dem GenAI Large Language Model (LLMs) zu verbessern. Mit RAG wird die Frage eines Benutzers zunächst in einen Vektor konvertiert und dann über AI Vector Search den relevantesten Dokumenten in der Datenbank zugeordnet. Anschließend werden die Frage des Benutzers und die unterstützenden relevanten Dokumente an das LLM weitergeleitet, damit es eine fundierte Antwort basierend auf seinem eigenen allgemeinen Wissen und dem Fachwissen aus dem Vektorspeicher generieren kann.
AI Vector Search kann für RAG mit Open-Source-LLMs wie Llama2 oder Llama3 sowie LLMs von Anbietern wie OpenAI und Cohere verwendet werden.
AI Vector Search ist in LangChain integriert, ein sehr beliebtes Open-Source-Framework für den Aufbau von RAG-basierten Lösungen.
Alle umfangreichen Skalierbarkeitsmechanismen von Oracle – wie Parallel Execution, Partitionierung, RAC, Sharding und Exadata – können verwendet werden, um die KI-Vektorsuche auf praktisch jede Datengröße und -anzahl zu skalieren.