Einbettung - Überblick
Embedding ist ein Konzept des maschinellen Lernens zur Abbildung von Daten in einem hochdimensionalen Raum, in dem Daten mit ähnlicher Semantik nahe beieinander angeordnet werden. Bei dem Einbettungsmodell handelt es sich in der Regel um ein Deep Neural Network von BERT oder anderen Transformer-Familien, das die Semantik von Text, Bildern und anderen Datentypen durch eine Reihe von Zahlen, die als Vektoren bezeichnet werden, effektiv darstellen kann. Ein wesentliches Merkmal dieser Modelle ist, dass der mathematische Abstand zwischen Vektoren im hochdimensionalen Raum die Ähnlichkeit der Semantik von Originaltexten oder -bildern anzeigen kann. Diese Eigenschaft ermöglicht zahlreiche Anwendungen für die Informationsgewinnung, z. B. Web-Suchmaschinen wie Google und Bing, Produktsuche und -empfehlungen auf E-Commerce-Websites und das kürzlich populäre Retrieval Augmented Generation (RAG)-Paradigma in der generativen KI.
Es gibt zwei Hauptkategorien von Einbettungen, die jeweils eine andere Art von Vektor erzeugen:
Dense Embedding: Die meisten Einbettungsmodelle stellen Informationen als Gleitkomma-Vektor mit Hunderten bis Tausenden von Dimensionen dar. Die Ausgabe wird als "dichte" Vektoren bezeichnet, da die meisten Dimensionen Nicht-Null-Werte haben. Das beliebte Open-Source-Einbettungsmodell BAAI/bge-base-de-v1.5 beispielsweise gibt Vektoren mit 768 Fließkommazahlen aus (768-dimensionaler Float-Vektor).
Spärliche Einbettung: Im Gegensatz dazu haben die Ausgangsvektoren von spärlichen Einbettungen die meisten Dimensionen Null, nämlich "spärliche" Vektoren. Diese Vektoren haben oft viel höhere Dimensionen (Zehntausende oder mehr), was durch die Größe des Token-Vokabulars bestimmt wird. Sparse Vektoren können durch Deep Neural Networks oder statistische Analyse von Textkorpora erzeugt werden. Aufgrund ihrer Interpretierbarkeit und der beobachteten besseren Verallgemeinerungsfähigkeiten außerhalb der Domäne werden Sparse Embeddings von Entwicklern zunehmend als Ergänzung zu Dense Embeddings eingesetzt.
Milvus ist eine Vektordatenbank, die für die Verwaltung, Speicherung und den Abruf von Vektordaten entwickelt wurde. Durch die Integration von Mainstream-Embedding- und Reranking-Modellen können Sie den Originaltext einfach in durchsuchbare Vektoren umwandeln oder die Ergebnisse mithilfe leistungsstarker Modelle ranken, um genauere Ergebnisse für RAG zu erzielen. Diese Integration vereinfacht die Textumwandlung und macht zusätzliche Komponenten für die Einbettung oder das Reranking überflüssig, wodurch die Entwicklung und Validierung von RAGs rationalisiert wird.
Um Einbettungen in Aktion zu erstellen, siehe Verwendung des PyMilvus-Modells zur Generierung von Texteinbettungen.
Einbettung Funktion | Typ | API oder Open-Source |
---|---|---|
openai | Dichtes | API |
Satzumwandler | Dicht | Open-Source |
Splade | Spärlich | Open-sourced |
bge-m3 | Hybride | Open-source |
voyageai | Dichtes | API |
jina | Dichtes | API |
kohärent | Dicht | API |
Ausbilder | Dichtes | Open-Source |
Mistral AI | Dicht | API |
Nomic | Dichtes | API |
mGTE | Hybride | Offen zugänglich |
Beispiel 1: Verwendung der Standard-Einbettungsfunktion zur Erzeugung dichter Vektoren
Um Einbettungsfunktionen mit Milvus zu verwenden, installieren Sie zunächst die PyMilvus-Client-Bibliothek mit dem Unterpaket model
, das alle Dienstprogramme für die Einbettungserzeugung enthält.
pip install "pymilvus[model]"
Das Unterpaket model
unterstützt verschiedene Einbettungsmodelle, von OpenAI, Sentence Transformers, BGE M3 bis hin zu vortrainierten SPLADE-Modellen. Der Einfachheit halber wird in diesem Beispiel das Modell DefaultEmbeddingFunction
verwendet, das ein reines MiniLM-L6-v2-Satztransformatormodell ist. Das Modell ist etwa 70 MB groß und wird bei der ersten Verwendung heruntergeladen:
from pymilvus import model
# This will download "all-MiniLM-L6-v2", a light weight model.
ef = model.DefaultEmbeddingFunction()
# Data from which embeddings are to be generated
docs = [
"Artificial intelligence was founded as an academic discipline in 1956.",
"Alan Turing was the first person to conduct substantial research in AI.",
"Born in Maida Vale, London, Turing was raised in southern England.",
]
embeddings = ef.encode_documents(docs)
# Print embeddings
print("Embeddings:", embeddings)
# Print dimension and shape of embeddings
print("Dim:", ef.dim, embeddings[0].shape)
Die erwartete Ausgabe ist ähnlich wie die folgende:
Embeddings: [array([-3.09392996e-02, -1.80662833e-02, 1.34775648e-02, 2.77156215e-02,
-4.86349640e-03, -3.12581174e-02, -3.55921760e-02, 5.76934684e-03,
2.80773244e-03, 1.35783911e-01, 3.59678417e-02, 6.17732145e-02,
...
-4.61330153e-02, -4.85207550e-02, 3.13997865e-02, 7.82178566e-02,
-4.75336798e-02, 5.21207601e-02, 9.04406682e-02, -5.36676683e-02],
dtype=float32)]
Dim: 384 (384,)
Beispiel 2: Erzeugen von dichten und spärlichen Vektoren in einem Aufruf mit dem BGE M3-Modell
In diesem Beispiel verwenden wir das BGE M3-Hybridmodell, um Text sowohl in dichte als auch in spärliche Vektoren einzubetten und sie zum Auffinden relevanter Dokumente zu verwenden. Die allgemeinen Schritte sind wie folgt:
Einbettung des Textes in dichte und spärliche Vektoren mit dem BGE-M3-Modell;
Einrichten einer Milvus-Sammlung zum Speichern der dichten und spärlichen Vektoren;
Einfügen der Daten in Milvus;
Suchen und Prüfen des Ergebnisses.
Zuerst müssen wir die notwendigen Abhängigkeiten installieren.
from pymilvus.model.hybrid import BGEM3EmbeddingFunction
from pymilvus import (
utility,
FieldSchema, CollectionSchema, DataType,
Collection, AnnSearchRequest, RRFRanker, connections,
)
Verwenden Sie BGE M3, um Dokumente und Abfragen für die Einbettung zu kodieren.
# 1. prepare a small corpus to search
docs = [
"Artificial intelligence was founded as an academic discipline in 1956.",
"Alan Turing was the first person to conduct substantial research in AI.",
"Born in Maida Vale, London, Turing was raised in southern England.",
]
query = "Who started AI research?"
# BGE-M3 model can embed texts as dense and sparse vectors.
# It is included in the optional `model` module in pymilvus, to install it,
# simply run "pip install pymilvus[model]".
bge_m3_ef = BGEM3EmbeddingFunction(use_fp16=False, device="cpu")
docs_embeddings = bge_m3_ef(docs)
query_embeddings = bge_m3_ef([query])