Embeddings
Text-Embeddings sind numerische Darstellungen von Text, die das Messen semantischer Ähnlichkeit ermöglichen. Dieser Leitfaden führt in Embeddings, ihre Anwendungen und die Verwendung von Embedding-Modellen für Aufgaben wie Suche, Empfehlungen und Anomalieerkennung ein.
Vor der Implementierung von Embeddings
Bei der Auswahl eines Embeddings-Anbieters gibt es mehrere Faktoren, die du je nach deinen Bedürfnissen und Vorlieben berücksichtigen kannst:
- Datensatzgröße und Domänenspezifität: Größe des Trainingsdatensatzes des Modells und seine Relevanz für die Domäne, die du einbetten möchtest. Größere oder domänenspezifischere Daten erzeugen im Allgemeinen bessere domäneninterne Embeddings
- Inferenzleistung: Geschwindigkeit der Embedding-Abfrage und End-to-End-„Latency“ (Latenz). Dies ist ein besonders wichtiger Aspekt für groß angelegte Produktionsbereitstellungen
- Anpassung: Optionen für fortgesetztes Training auf privaten Daten oder die Spezialisierung von Modellen für sehr spezifische Domänen. Dies kann die Leistung bei einzigartigen Vokabularen verbessern
So erhältst du Embeddings mit Anthropic
Anthropic bietet kein eigenes Embedding-Modell an. Ein Embeddings-Anbieter, der eine große Vielfalt an Optionen und Fähigkeiten bietet, die alle vorgenannten Überlegungen abdecken, ist Voyage AI.
Voyage AI entwickelt hochmoderne Embedding-Modelle und bietet angepasste Modelle für bestimmte Branchendomänen wie Finanzen und Gesundheitswesen sowie maßgeschneiderte, per „Fine-tuning“ (Feinabstimmung) angepasste Modelle für einzelne Kunden an.
Der Rest dieses Leitfadens bezieht sich auf Voyage AI, aber du solltest verschiedene Embeddings-Anbieter prüfen, um die beste Lösung für deinen spezifischen Anwendungsfall zu finden.
Verfügbare Modelle
Voyage empfiehlt die Verwendung der folgenden Text-Embedding-Modelle:
Voyage 4 (neueste Generation)
| Modell | Kontextlänge | Embedding-Dimension | Beschreibung |
|---|---|---|---|
voyage-4-large | 32.000 | 1024 (Standard), 256, 512, 2048 | Die beste allgemeine und mehrsprachige Retrieval-Qualität. Siehe den Voyage-4-Blogbeitrag für Details. |
voyage-4 | 32.000 | 1024 (Standard), 256, 512, 2048 | Optimiert für allgemeine und mehrsprachige Retrieval-Qualität. Balanciert Qualität und Effizienz. Siehe den Voyage-4-Blogbeitrag für Details. |
voyage-4-lite | 32.000 | 1024 (Standard), 256, 512, 2048 | Optimiert für Latenz und Kosten. Siehe den Voyage-4-Blogbeitrag für Details. |
voyage-4-nano | 32.000 | 1024 (Standard), 256, 512, 2048 | Open-Weight-Modell (Apache-2.0-Lizenz), verfügbar auf Hugging Face. Siehe den Voyage-4-Blogbeitrag für Details. |
Vorherige Generation
| Modell | Kontextlänge | Embedding-Dimension | Beschreibung |
|---|---|---|---|
voyage-3-large | 32.000 | 1024 (Standard), 256, 512, 2048 | Die beste allgemeine und mehrsprachige Retrieval-Qualität. Siehe den voyage-3-large-Blogbeitrag für Details. |
voyage-3.5 | 32.000 | 1024 (Standard), 256, 512, 2048 | Optimiert für allgemeine und mehrsprachige Retrieval-Qualität. Siehe den voyage-3.5-Blogbeitrag für Details. |
voyage-3.5-lite | 32.000 | 1024 (Standard), 256, 512, 2048 | Optimiert für Latenz und Kosten. Siehe den voyage-3.5-Blogbeitrag für Details. |
voyage-code-3 | 32.000 | 1024 (Standard), 256, 512, 2048 | Optimiert für Code-Retrieval. Siehe den voyage-code-3-Blogbeitrag für Details. |
voyage-finance-2 | 32.000 | 1024 | Optimiert für Finanz-Retrieval und RAG. Siehe den voyage-finance-2-Blogbeitrag für Details. |
voyage-law-2 | 16.000 | 1024 | Optimiert für juristisches und Long-Context-Retrieval und RAG. Außerdem verbesserte Leistung über alle Domänen hinweg. Siehe den voyage-law-2-Blogbeitrag für Details. |
Zusätzlich empfiehlt Voyage die folgenden multimodalen Embedding-Modelle:
| Modell | Kontextlänge | Embedding-Dimension | Beschreibung |
|---|---|---|---|
voyage-multimodal-3.5 | 32.000 | 1024 (Standard), 256, 512, 2048 | Leistungsfähiges multimodales Embedding-Modell, das verschachtelten Text, Bilder und Videos vektorisieren kann. Enthält Video-Unterstützung als erstes produktionsreifes Video-Embedding-Modell. Siehe den voyage-multimodal-3.5-Blogbeitrag für Details. |
voyage-multimodal-3 | 32.000 | 1024 | Leistungsfähiges multimodales Embedding-Modell, das verschachtelten Text und inhaltsreiche Bilder wie Screenshots von PDFs, Folien, Tabellen, Abbildungen und mehr vektorisieren kann. Siehe den voyage-multimodal-3-Blogbeitrag für Details. |
Die folgenden kontextualisierten Chunk-Embedding-Modelle erzeugen Vektoren auf Chunk-Ebene, die den vollständigen Dokumentkontext ohne manuelle Metadaten-Anreicherung erfassen. Rufe diese Modelle mit contextualized_embed() statt embed() auf:
| Modell | Kontextlänge | Embedding-Dimension | Beschreibung |
|---|---|---|---|
voyage-context-4 | 120.000 | 1024 (Standard), 256, 512, 2048 | Kontextualisierte Chunk-Embeddings, optimiert für allgemeine und mehrsprachige Retrieval-Qualität. Siehe den voyage-context-4-Blogbeitrag für Details. |
voyage-context-3 | 120.000 | 1024 (Standard), 256, 512, 2048 | Kontextualisierte Chunk-Embeddings, optimiert für allgemeine und mehrsprachige Retrieval-Qualität. Siehe den voyage-context-3-Blogbeitrag für Details. |
Voyage AI bietet außerdem Reranker an, die eine Abfrage und eine Liste von Dokumenten entgegennehmen und diese nach Relevanz für die Abfrage sortiert zurückgeben. Rufe diese Modelle mit rerank() auf:
| Modell | Kontextlänge | Beschreibung |
|---|---|---|
rerank-2.5 | 32.000 | Höchste Genauigkeit. Empfohlen für die meisten Anwendungen. Siehe den rerank-2.5-Blogbeitrag für Details. |
rerank-2.5-lite | 32.000 | Optimiert für Latenz und Kosten. Siehe den rerank-2.5-Blogbeitrag für Details. |
Brauchst du Hilfe bei der Entscheidung, welches Text-Embedding-Modell du verwenden sollst? Sieh dir die Voyage AI FAQ an.
Erste Schritte mit Voyage AI
So greifst du auf Voyage-Embeddings zu:
- Registriere dich auf der Website von Voyage AI.
- Besorge dir einen API-Key.
- Setze den API-Key der Einfachheit halber als Umgebungsvariable:
export VOYAGE_API_KEY="<your secret key>"Du kannst die Embeddings entweder über das offizielle voyageai-Python-Paket oder über HTTP-Anfragen erhalten, wie in den folgenden Abschnitten beschrieben.
Voyage-Python-Bibliothek
Installiere das voyageai-Paket mit dem folgenden Befehl:
pip install -U voyageaiAnschließend kannst du ein Client-Objekt erstellen und damit beginnen, deine Texte einzubetten:
import voyageai
vo = voyageai.Client()
# Dies verwendet automatisch die Umgebungsvariable VOYAGE_API_KEY.
# Alternativ kannst du vo = voyageai.Client(api_key="<your secret key>") verwenden
texts = ["Sample text 1", "Sample text 2"]
result = vo.embed(texts, model="voyage-4", input_type="document")
print(result.embeddings[0])
print(result.embeddings[1])result.embeddings ist eine Liste von zwei Embedding-Vektoren, die jeweils 1024 Gleitkommazahlen enthalten. Nach dem Ausführen des obigen Codes werden die beiden Embeddings auf dem Bildschirm ausgegeben:
[-0.013131560757756233, 0.019828535616397858, ...] # embedding for "Sample text 1"
[-0.0069352793507277966, 0.020878976210951805, ...] # embedding for "Sample text 2"Beim Erstellen der Embeddings kannst du der Funktion embed() einige weitere Argumente übergeben.
Weitere Informationen zum Voyage-Python-Paket findest du in der Dokumentation des Voyage-Python-Pakets.
Voyage HTTP API
Du kannst Embeddings auch durch Anfragen an die Voyage HTTP API erhalten. Zum Beispiel kannst du eine HTTP-Anfrage über den Befehl curl in einem Terminal senden:
curl https://api.voyageai.com/v1/embeddings \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $VOYAGE_API_KEY" \
-d '{
"input": ["Sample text 1", "Sample text 2"],
"model": "voyage-4"
}'Die Antwort, die du erhältst, ist ein JSON-Objekt, das die Embeddings und die Token-Nutzung enthält:
{
"object": "list",
"data": [
{
"embedding": [-0.013131560757756233, 0.019828535616397858 /* ... */],
"index": 0
},
{
"embedding": [-0.0069352793507277966, 0.020878976210951805 /* ... */],
"index": 1
}
],
"model": "voyage-4",
"usage": {
"total_tokens": 10
}
}Weitere Informationen zur Voyage HTTP API findest du in der Dokumentation der Voyage HTTP API.
AWS Marketplace
Voyage-Embeddings sind auf dem AWS Marketplace verfügbar. Anleitungen für den Zugriff auf Voyage über AWS findest du in der Voyage-AWS-Marketplace-Dokumentation.
Schnellstart-Beispiel
Das folgende kurze Beispiel zeigt, wie du Embeddings verwendest.
Angenommen, du hast einen kleinen Korpus von sechs Dokumenten, aus dem abgerufen werden soll
documents = [
"The Mediterranean diet emphasizes fish, olive oil, and vegetables, believed to reduce chronic diseases.",
"Photosynthesis in plants converts light energy into glucose and produces essential oxygen.",
"20th-century innovations, from radios to smartphones, centered on electronic advancements.",
"Rivers provide water, irrigation, and habitat for aquatic species, vital for ecosystems.",
"Apple's conference call to discuss fourth fiscal quarter results and business updates is scheduled for Thursday, November 2, 2023 at 2:00 p.m. PT / 5:00 p.m. ET.",
"Shakespeare's works, like 'Hamlet' and 'A Midsummer Night's Dream,' endure in literature.",
]Verwende zunächst Voyage, um jedes Dokument in einen Embedding-Vektor umzuwandeln.
import voyageai
vo = voyageai.Client()
# Bette die Dokumente ein
doc_embds = vo.embed(documents, model="voyage-4", input_type="document").embeddingsDie Embeddings ermöglichen dir semantische Suche / Retrieval im Vektorraum. Gegeben sei eine Beispielabfrage,
query = "When is Apple's conference call scheduled?"Wandle sie als Nächstes in ein Embedding um und führe eine Nächste-Nachbarn-Suche durch, um das relevanteste Dokument anhand der Distanz im Embedding-Raum zu finden.
import numpy as np
# Bette die Abfrage ein
query_embd = vo.embed([query], model="voyage-4", input_type="query").embeddings[0]
# Berechne die Ähnlichkeit
# Voyage-Embeddings sind auf Länge 1 normalisiert, daher sind Skalarprodukt
# und Kosinus-Ähnlichkeit identisch.
similarities = np.dot(doc_embds, query_embd)
retrieved_id = np.argmax(similarities)
print(documents[retrieved_id])Beachte, dass input_type="document" und input_type="query" für das Einbetten des Dokuments bzw. der Abfrage verwendet werden. Weitere Spezifikationen findest du unter Voyage-Python-Bibliothek.
Die Ausgabe ist das fünfte Dokument, das tatsächlich das relevanteste für die Abfrage ist:
Apple's conference call to discuss fourth fiscal quarter results and business updates is scheduled for Thursday, November 2, 2023 at 2:00 p.m. PT / 5:00 p.m. ET.Wenn du nach einer detaillierten Sammlung von Rezepten suchst, wie du RAG mit Embeddings einschließlich Vektordatenbanken umsetzt, sieh dir das RAG-Rezept an.
FAQ
Embedding-Modelle stützen sich auf leistungsstarke neuronale Netze, um semantischen Kontext zu erfassen und zu komprimieren, ähnlich wie generative Modelle. Das Team erfahrener KI-Forscher von Voyage optimiert jede Komponente des Embedding-Prozesses, darunter:
- Modellarchitektur
- Datenerhebung
- Verlustfunktionen
- Auswahl des Optimierers
Erfahre mehr über den technischen Ansatz von Voyage im Voyage AI Blog.
Für allgemeine Embeddings sind die empfohlenen Modelle:
voyage-4-large: Beste Qualitätvoyage-4-lite: Niedrigste Latenz und Kostenvoyage-4: Ausgewogene Leistung
Verwende für Retrieval den Parameter input_type, um anzugeben, ob der Text vom Typ Abfrage oder Dokument ist.
Domänenspezifische Modelle:
- Juristische Aufgaben:
voyage-law-2 - Code und Programmierdokumentation:
voyage-code-3 - Finanzbezogene Aufgaben:
voyage-finance-2
Für Retrieval auf Chunk- und Dokumentebene: voyage-context-4
Du kannst Voyage-Embeddings entweder mit Skalarprodukt-Ähnlichkeit, Kosinus-Ähnlichkeit oder euklidischer Distanz verwenden. Eine Erklärung zur Embedding-Ähnlichkeit findest du in diesem Leitfaden zur Vektorähnlichkeit.
Voyage-AI-Embeddings sind auf die Länge 1 normalisiert, was bedeutet, dass:
- Kosinus-Ähnlichkeit äquivalent zur Skalarprodukt-Ähnlichkeit ist, wobei letztere schneller berechnet werden kann.
- Kosinus-Ähnlichkeit und euklidische Distanz zu identischen Rangfolgen führen.
Siehe den Voyage-Leitfaden zur Tokenisierung.
Verwende für alle Retrieval-Aufgaben und Anwendungsfälle (zum Beispiel RAG) den Parameter input_type, um anzugeben, ob der Eingabetext eine Abfrage oder ein Dokument ist. Lass input_type nicht weg und setze nicht input_type=None. Die Angabe, ob der Eingabetext eine Abfrage oder ein Dokument ist, kann bessere dichte Vektordarstellungen für das Retrieval erzeugen, was zu einer besseren Retrieval-Qualität führen kann.
Bei Verwendung des Parameters input_type werden dem Eingabetext vor dem Einbetten spezielle Prompts vorangestellt. Konkret:
📘 Mit
input_typeverknüpfte Prompts
- Für eine Abfrage lautet der Prompt „Represent the query for retrieving supporting documents: “.
- Für ein Dokument lautet der Prompt „Represent the document for retrieval: “.
- Beispiel
- Bei
input_type="query"wird eine Abfrage wie „When is Apple's conference call scheduled?“ zu „Represent the query for retrieving supporting documents: When is Apple's conference call scheduled?“- Bei
input_type="document"wird eine Abfrage wie „Apple's conference call to discuss fourth fiscal quarter results and business updates is scheduled for Thursday, November 2, 2023 at 2:00 p.m. PT / 5:00 p.m. ET." zu „Represent the document for retrieval: Apple's conference call to discuss fourth fiscal quarter results and business updates is scheduled for Thursday, November 2, 2023 at 2:00 p.m. PT / 5:00 p.m. ET."
voyage-large-2-instruct ist, wie der Name vermuten lässt, darauf trainiert, auf zusätzliche Anweisungen zu reagieren, die dem Eingabetext vorangestellt werden. Für Klassifizierung, Clustering oder andere MTEB-Teilaufgaben verwende die voyage-large-2-instruct-Anweisungen.
Quantisierung bei Embeddings wandelt hochpräzise Werte, wie 32-Bit-Gleitkommazahlen einfacher Genauigkeit, in Formate geringerer Genauigkeit wie 8-Bit-Ganzzahlen oder 1-Bit-Binärwerte um, wodurch Speicherplatz, Arbeitsspeicher und Kosten um das 4-Fache bzw. 32-Fache reduziert werden. Unterstützte Voyage-Modelle ermöglichen Quantisierung durch Angabe des Ausgabedatentyps mit dem Parameter output_dtype:
float: Jedes zurückgegebene Embedding ist eine Liste von 32-Bit-(4-Byte-)Gleitkommazahlen einfacher Genauigkeit. Dies ist der Standard und bietet die höchste Präzision / Retrieval-Genauigkeit.int8unduint8: Jedes zurückgegebene Embedding ist eine Liste von 8-Bit-(1-Byte-)Ganzzahlen im Bereich von -128 bis 127 bzw. 0 bis 255.binaryundubinary: Jedes zurückgegebene Embedding ist eine Liste von 8-Bit-Ganzzahlen, die bitgepackte, quantisierte Einzelbit-Embedding-Werte darstellen:int8fürbinaryunduint8fürubinary. Die Länge der zurückgegebenen Liste von Ganzzahlen beträgt 1/8 der tatsächlichen Dimension des Embeddings. Der Binärtyp verwendet die Offset-Binär-Methode, über die du in den Embeddings-FAQ mehr erfahren kannst.
Beispiel für binäre Quantisierung
Betrachte die folgenden acht Embedding-Werte: -0.03955078, 0.006214142, -0.07446289, -0.039001465, 0.0046463013, 0.00030612946, -0.08496094 und 0.03994751. Bei binärer Quantisierung werden Werte kleiner oder gleich null zu einer binären Null und positive Werte zu einer binären Eins quantisiert, was die folgende Binärsequenz ergibt: 0, 1, 0, 0, 1, 1, 0, 1. Diese acht Bits werden dann in eine einzelne 8-Bit-Ganzzahl gepackt, 01001101 (mit dem Bit ganz links als höchstwertigem Bit).
ubinary: Die Binärsequenz wird direkt umgewandelt und als vorzeichenlose Ganzzahl (uint8) 77 dargestellt.binary: Die Binärsequenz wird als vorzeichenbehaftete Ganzzahl (int8) -51 dargestellt, berechnet mit der Offset-Binär-Methode (77 - 128 = -51).
Matryoshka-Learning erzeugt Embeddings mit Grob-zu-fein-Darstellungen innerhalb eines einzelnen Vektors. Voyage-Modelle wie voyage-code-3, die mehrere Ausgabedimensionen unterstützen, erzeugen solche Matryoshka-Embeddings. Du kannst diese Vektoren kürzen, indem du die führende Teilmenge der Dimensionen beibehältst. Der folgende Python-Code zeigt beispielsweise, wie du 1024-dimensionale Vektoren auf 256 Dimensionen kürzt:
import voyageai
import numpy as np
def embd_normalize(v: np.ndarray) -> np.ndarray:
"""
Normalize the rows of a 2D numpy array to unit vectors by dividing each row by its Euclidean
norm. Raises a ValueError if any row has a norm of zero to prevent division by zero.
"""
row_norms = np.linalg.norm(v, axis=1, keepdims=True)
if np.any(row_norms == 0):
raise ValueError("Cannot normalize rows with a norm of zero.")
return v / row_norms
vo = voyageai.Client()
# Erzeuge voyage-code-3-Vektoren, die standardmäßig 1024-dimensionale Gleitkommazahlen sind
embd = vo.embed(["Sample text 1", "Sample text 2"], model="voyage-code-3").embeddings
# Lege eine kürzere Dimension fest
short_dim = 256
# Passe die Vektoren auf die kürzere Dimension an und normalisiere sie
resized_embd = embd_normalize(np.array(embd)[:, :short_dim]).tolist()Preise
Besuche die Preisseite von Voyage für die aktuellsten Preisdetails.
Was this page helpful?