Embeddings
Übersicht über Embeddings
Text-Embeddings sind numerische Darstellungen von Textzeichenketten, die als Vektor von Gleitkommazahlen dargestellt werden. Sie können den Abstand zwischen zwei eingebetteten Textstücken (seien es Wörter, Phrasen oder Sätze) verwenden, um zu messen, wie verwandt diese Textstücke miteinander sind. Ein beliebtes Maß ist die Kosinus-Ähnlichkeit, aber Sie können die Ähnlichkeit auch über andere Distanzfunktionen wie die euklidische Distanz oder Skalarprodukte messen (siehe FAQ unten). Im Allgemeinen sagen kleinere Abstände eine höhere Verwandtschaft in Bezug auf die semantische oder syntaktische Beziehung zwischen Texten voraus.
Der Vergleich der Ähnlichkeit von Zeichenketten oder die Gruppierung von Zeichenketten nach ihrem Abstand zueinander ermöglicht eine Vielzahl von Anwendungen, darunter Suche (beliebt in RAG-Architekturen), Empfehlungen und Anomalieerkennung.
Wie man Embeddings mit Anthropic erhält
Bei der Auswahl eines Embedding-Anbieters können Sie je nach Ihren Bedürfnissen und Vorlieben mehrere Faktoren berücksichtigen:
- Datensatzgröße & Domänenspezifität: Größe des Modeltrainingsdatensatzes und seine Relevanz für die Domäne, die Sie einbetten möchten. Größere oder domänenspezifischere Daten erzeugen im Allgemeinen bessere domänenspezifische Embeddings
- Modellarchitektur: Modelldesign und -komplexität. Modernere Techniken und Architekturen wie Transformer lernen und produzieren tendenziell Embeddings von höherer Qualität
- Inferenzleistung: Embedding-Lookup-Geschwindigkeit und End-to-End-Latenz. Dies ist eine besonders wichtige Überlegung für groß angelegte Produktionsbereitstellungen
- Anpassung: Optionen für die Weiterbildung mit privaten Daten oder die Spezialisierung von Modellen für sehr spezifische Domänen. Dies kann die Leistung bei einzigartigen Vokabularen verbessern
Anthropic bietet kein eigenes Embedding-Modell an. Ein Embedding-Anbieter, der eine große Vielfalt an Optionen und Fähigkeiten bietet, die alle vier oben genannten Überlegungen umfassen, ist Voyage AI. Voyage AI erstellt modernste Embedding-Modelle und bietet maßgeschneiderte Modelle für bestimmte Branchenbereiche wie Finanzen und Gesundheitswesen oder maßgeschneiderte Modelle für einzelne Kunden.
Der Rest dieses Leitfadens ist für Voyage AI, aber wir empfehlen Ihnen, eine Vielzahl von Embedding-Anbietern zu bewerten, um die beste Lösung für Ihren spezifischen Anwendungsfall zu finden.
Erste Schritte mit Voyage AI
Sehen Sie sich unser Embeddings-Notebook an, um ein Beispiel für eine Voyage AI-Implementierung zu sehen.
So greifen Sie auf Voyage-Embeddings zu:
- Melden Sie sich auf der Voyage AI-Website an
- Holen Sie sich einen API-Schlüssel
- Setzen Sie den API-Schlüssel zur Vereinfachung als Umgebungsvariable:
export VOYAGE_API_KEY="<your secret key>"
Sie können die Embeddings entweder mit dem offiziellen voyageai Python-Paket oder mit HTTP-Anfragen ausführen, wie unten beschrieben.
Voyage Python-Paket
Das voyageai
-Paket kann mit dem folgenden Befehl installiert werden:
pip install -U voyageai
Dann können Sie ein Client-Objekt erstellen und es verwenden, um Ihre Texte einzubetten:
import voyageai
vo = voyageai.Client()
# Dies verwendet automatisch die Umgebungsvariable VOYAGE_API_KEY.
# Alternativ können Sie vo = voyageai.Client(api_key="<your secret key>") verwenden
texts = ["Beispieltext 1", "Beispieltext 2"]
result = vo.embed(texts, model="voyage-2", input_type="document")
print(result.embeddings[0])
print(result.embeddings[1])
result.embeddings
wird eine Liste von zwei Embedding-Vektoren sein, die jeweils 1024 Gleitkommazahlen enthalten.
Nach dem Ausführen des obigen Codes werden die beiden Embeddings auf dem Bildschirm ausgegeben:
[0.02012746, 0.01957859, ...] # Embedding für "Beispieltext 1"
[0.01429677, 0.03077182, ...] # Embedding für "Beispieltext 2"
Beim Erstellen der Embeddings können Sie der Funktion embed()
einige weitere Argumente übergeben. Hier ist die Spezifikation:
voyageai.Client.embed(texts : List[str], model : str, input_type : Optional[str] = None, truncation : Optional[bool] = None)
- texts (List[str]) - Eine Liste von Texten als Liste von Zeichenketten, wie z.B.
["Ich mag Katzen", "Ich mag auch Hunde"]
. Derzeit beträgt die maximale Länge der Liste 128 und die Gesamtzahl der Token in der Liste höchstens 320K fürvoyage-2
und 120K fürvoyage-large-2
/voyage-code-2
. - model (str) - Name des Modells. Empfohlene Optionen:
voyage-2
,voyage-large-2
,voyage-code-2
. - input_type (str, optional, Standardwert
None
) - Typ des Eingabetextes. Standardwert istNone
. Andere Optionen:query
,document
- Wenn der input_type auf
None
gesetzt ist, wird der Eingabetext direkt vom Embedding-Modell von Voyage codiert. Wenn die Eingaben Dokumente oder Abfragen sind, können die Benutzer alternativinput_type
aufquery
bzw.document
setzen. In solchen Fällen fügt Voyage dem Eingabetext eine spezielle Eingabeaufforderung voran und sendet die erweiterten Eingaben an das Embedding-Modell - Für Retrieval-/Suchanwendungsfälle empfehlen wir, dieses Argument beim Codieren von Abfragen oder Dokumenten anzugeben, um die Retrieval-Qualität zu verbessern. Embeddings, die mit und ohne das Argument
input_type
erzeugt wurden, sind kompatibel
- Wenn der input_type auf
- truncation (bool, optional, Standardwert
None
) - Ob die Eingabetexte abgeschnitten werden sollen, um in die Kontextlänge zu passen.- Wenn
True
, werden zu lange Eingabetexte abgeschnitten, um in die Kontextlänge zu passen, bevor sie vom Embedding-Modell vektorisiert werden - Wenn
False
, wird ein Fehler ausgelöst, wenn ein gegebener Text die Kontextlänge überschreitet - Wenn nicht angegeben (Standardwert
None
), kürzt Voyage den Eingabetext, bevor er an das Embedding-Modell gesendet wird, wenn er die Kontextfensterlänge leicht überschreitet. Wenn er die Kontextfensterlänge deutlich überschreitet, wird ein Fehler ausgelöst
- Wenn
Voyage HTTP API
Sie können Embeddings auch abrufen, indem Sie die Voyage HTTP API anfordern. Zum Beispiel können Sie 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": ["Beispieltext 1", "Beispieltext 2"],
"model": "voyage-2"
}'
Die Antwort, die Sie erhalten würden, ist ein JSON-Objekt, das die Embeddings und die Token-Nutzung enthält:
{
"object": "list",
"data": [
{
"embedding": [0.02012746, 0.01957859, ...],
"index": 0
},
{
"embedding": [0.01429677, 0.03077182, ...],
"index": 1
}
],
"model": "voyage-2",
"usage": {
"total_tokens": 10
}
}
Der Embedding-Endpunkt von Voyage AI ist https://api.voyageai.com/v1/embeddings
(POST). Der Anfrage-Header muss den API-Schlüssel enthalten. Der Anfrage-Body ist ein JSON-Objekt, das die folgenden Argumente enthält:
- input (str, List[str]) - Eine einzelne Textzeichenkette oder eine Liste von Texten als Liste von Zeichenketten. Derzeit beträgt die maximale Länge der Liste 128 und die Gesamtzahl der Token in der Liste höchstens 320K für
voyage-2
und 120K fürvoyage-large-2
/voyage-code-2
. - model (str) - Name des Modells. Empfohlene Optionen:
voyage-2
,voyage-large-2
,voyage-code-2
. - input_type (str, optional, Standardwert
None
) - Typ des Eingabetextes. Standardwert istNone
. Andere Optionen:query
,document
- truncation (bool, optional, Standardwert
None
) - Ob die Eingabetexte abgeschnitten werden sollen, um in die Kontextlänge zu passen- Wenn
True
, werden zu lange Eingabetexte abgeschnitten, um in die Kontextlänge zu passen, bevor sie vom Embedding-Modell vektorisiert werden - Wenn
False
, wird ein Fehler ausgelöst, wenn ein gegebener Text die Kontextlänge überschreitet - Wenn nicht angegeben (Standardwert
None
), kürzt Voyage den Eingabetext, bevor er an das Embedding-Modell gesendet wird, wenn er die Kontextfensterlänge leicht überschreitet. Wenn er die Kontextfensterlänge deutlich überschreitet, wird ein Fehler ausgelöst
- Wenn
- encoding_format (str, optional, Standardwert
None
) - Format, in dem die Embeddings codiert sind. Voyage unterstützt derzeit zwei Optionen:- Wenn nicht angegeben (Standardwert
None
): die Embeddings werden als Listen von Gleitkommazahlen dargestellt "base64"
: die Embeddings werden in Base64-Codierungen komprimiert
- Wenn nicht angegeben (Standardwert
Voyage Embedding-Beispiel
Jetzt, da wir wissen, wie man Embeddings mit Voyage erhält, lassen Sie uns das mit einem kurzen Beispiel in Aktion sehen.
Nehmen wir an, wir haben einen kleinen Korpus von sechs Dokumenten, aus denen wir abrufen können
documents = [
"Die mediterrane Ernährung betont Fisch, Olivenöl und Gemüse, von denen angenommen wird, dass sie chronische Krankheiten reduzieren.",
"Die Photosynthese in Pflanzen wandelt Lichtenergie in Glukose um und produziert lebenswichtigen Sauerstoff.",
"Innovationen des 20. Jahrhunderts, vom Radio bis zum Smartphone, konzentrierten sich auf elektronische Fortschritte.",
"Flüsse liefern Wasser, Bewässerung und Lebensraum für Wasserlebewesen, die für Ökosysteme lebenswichtig sind.",
"Apples Telefonkonferenz zur Besprechung der Ergebnisse des vierten Geschäftsquartals und der Geschäftsupdates ist für Donnerstag, den 2. November 2023 um 14:00 Uhr PT / 17:00 Uhr ET geplant.",
"Shakespeares Werke wie 'Hamlet' und 'Ein Sommernachtstraum' überdauern in der Literatur."
]
Wir werden zunächst Voyage verwenden, um jedes von ihnen in einen Embedding-Vektor umzuwandeln
import voyageai
vo = voyageai.Client()
# Dokumente einbetten
doc_embds = vo.embed(
documents, model="voyage-2", input_type="document"
).embeddings
Die Embeddings ermöglichen es uns, semantische Suche/Retrieval im Vektorraum durchzuführen. Wir können dann eine Beispielabfrage,
query = "Wann ist die Telefonkonferenz von Apple geplant?"
in ein Embedding umwandeln und dann eine Nearest-Neighbor-Suche durchführen, um das relevanteste Dokument basierend auf der Distanz im Embedding-Raum zu finden.
import numpy as np
# Abfrage einbetten
query_embd = vo.embed(
[query], model="voyage-2", input_type="query"
).embeddings[0]
# Ähnlichkeit berechnen
# Voyage-Embeddings sind auf Länge 1 normiert, daher sind Skalarprodukt
# und Kosinus-Ähnlichkeit gleich.
similarities = np.dot(doc_embds, query_embd)
retrieved_id = np.argmax(similarities)
print(documents[retrieved_id])
Beachten Sie, dass wir input_type="document"
und input_type="query"
für das Einbetten des Dokuments bzw. der Abfrage verwenden. Weitere Spezifikationen finden Sie hier.
Die Ausgabe wäre das 5. Dokument, das tatsächlich am relevantesten für die Abfrage ist:
Apples Telefonkonferenz zur Besprechung der Ergebnisse des vierten Geschäftsquartals und der Geschäftsupdates ist für Donnerstag, den 2. November 2023 um 14:00 Uhr PT / 17:00 Uhr ET geplant.
Verfügbare Voyage-Modelle
Voyage empfiehlt die Verwendung der folgenden Embedding-Modelle:
Modell | Kontextlänge | Embedding-Dimension | Beschreibung |
---|---|---|---|
voyage-large-2 | 16000 | 1536 | Voyage AIs leistungsstärkstes generalistisches Embedding-Modell. |
voyage-code-2 | 16000 | 1536 | Optimiert für Code-Retrieval (17% besser als Alternativen) und auch SoTA auf allgemeinen Korpora. Siehe diesen Voyage Blog-Beitrag für Details. |
voyage-2 | 4000 | 1024 | Basis-generalistisches Embedding-Modell, optimiert sowohl für Latenz als auch für Qualität. |
voyage-lite-02-instruct | 4000 | 1024 | Anweisungsoptimiert für Klassifizierungs-, Clustering- und Satz-Textähnlichkeitsaufgaben, die die einzigen empfohlenen Anwendungsfälle für dieses Modell sind. |
voyage-2
und voyage-large-2
sind generalistische Embedding-Modelle, die domänenübergreifend Spitzenleistungen erzielen und eine hohe Effizienz beibehalten. voyage-code-2
ist für den Code-Bereich optimiert und bietet die 4-fache Kontextlänge für eine flexiblere Nutzung, allerdings mit einer relativ höheren Latenz.
Voyage entwickelt aktiv fortschrittlichere und spezialisierte Modelle und bietet auch Fine-Tuning-Dienste an, um maßgeschneiderte Modelle für einzelne Kunden anzupassen. Wenden Sie sich per E-Mail an Ihren Anthropic-Account-Manager oder an den Anthropic-Support, um weitere Informationen zu maßgeschneiderten Modellen zu erhalten.
voyage-finance-2
: demnächst verfügbarvoyage-law-2
: demnächst verfügbarvoyage-multilingual-2
: demnächst verfügbarvoyage-healthcare-2
: demnächst verfügbar
Voyage auf dem AWS Marketplace
Voyage-Embeddings sind auch auf dem AWS Marketplace verfügbar. Hier sind die Anweisungen für den Zugriff auf Voyage auf AWS:
- Abonnieren Sie das Modellpaket
- Navigieren Sie zur Modellpaket-Listenseite und wählen Sie das zu implementierende Modell aus
- Klicken Sie auf die Schaltfläche
Continue to subscribe
- Überprüfen Sie sorgfältig die Details auf der Seite
Subscribe to this software
. Wenn Sie mit der Standard-Endbenutzer-Lizenzvereinbarung (EULA), den Preisen und den Support-Bedingungen einverstanden sind, klicken Sie auf “Accept Offer” - Nachdem Sie
Continue to configuration
ausgewählt und eine Region ausgewählt haben, wird Ihnen ein Product Arn angezeigt. Dies ist die Modellpaket-ARN, die für die Erstellung eines einsetzbaren Modells mit Boto3 erforderlich ist- Kopieren Sie die ARN, die Ihrer ausgewählten Region entspricht, und verwenden Sie sie in der folgenden Zelle
- Stellen Sie das Modellpaket bereit
Erstellen Sie von hier aus einen JupyterLab-Bereich in Sagemaker Studio, laden Sie das Notebook von Voyage hoch und folgen Sie den darin enthaltenen Anweisungen.
Häufig gestellte Fragen
Wie berechne ich den Abstand zwischen zwei Embedding-Vektoren?
Die Kosinus-Ähnlichkeit ist eine beliebte Wahl, aber die meisten Distanzfunktionen funktionieren gut. Voyage-Embeddings sind auf Länge 1 normiert, daher ist die Kosinus-Ähnlichkeit im Wesentlichen das Gleiche wie das Skalarprodukt zwischen zwei Vektoren. Hier ist ein Code-Snippet, das Sie zur Berechnung der Kosinus-Ähnlichkeit zwischen zwei Embedding-Vektoren verwenden können.
import numpy
similarity = np.dot(embd1, embd2)
# Voyage-Embeddings sind auf Länge 1 normiert, daher ist die Kosinus-Ähnlichkeit
# das Gleiche wie das Skalarprodukt.
Wenn Sie die K nächstgelegenen Embedding-Vektoren über einen großen Korpus finden möchten, empfehlen wir die Verwendung der in den meisten Vektordatenbanken integrierten Funktionen.
Kann ich die Anzahl der Token in einer Zeichenkette zählen, bevor ich sie einbette?
Ja! Sie können dies mit dem folgenden Code tun.
import voyageai
vo = voyageai.Client()
total_tokens = vo.count_tokens(["Beispieltext"])
Preise
Besuchen Sie die Preisseite von Voyage für die aktuellsten Preisinformationen.