For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
Hauptnavigation

Vektor-Embeddings

Erfahre, wie du Text in Zahlen umwandelst und damit Anwendungsfälle wie die Suche ermöglichst.

New embedding models
text-embedding-3-small and text-embedding-3-large, our newest and most performant embedding models, are now available. They feature lower costs, higher multilingual performance, and new parameters to control the overall size.

Was sind Embeddings?

Die Text-Embeddings von OpenAI messen, wie eng Texte inhaltlich miteinander zusammenhängen. Embeddings werden häufig für folgende Zwecke verwendet:

  • Suchen (Ergebnisse werden nach ihrer Relevanz für eine Suchanfrage sortiert)
  • Clustering (Texte werden nach ihrer Ähnlichkeit gruppiert)
  • Empfehlungen (Elemente mit inhaltlich verwandten Texten werden empfohlen)
  • Anomalieerkennung (Ausreißer mit geringer inhaltlicher Ähnlichkeit werden erkannt)
  • Messung der Diversität (Ähnlichkeitsverteilungen werden analysiert)
  • Klassifikation (Texte werden dem Label zugeordnet, dem sie am ähnlichsten sind)

Ein Embedding ist ein Vektor (eine Liste) aus Gleitkommazahlen. Der Abstand zwischen zwei Vektoren misst ihre Ähnlichkeit. Kleine Abstände deuten auf eine hohe Ähnlichkeit hin, große Abstände auf eine geringe.

Auf unserer Preisseite findest du Informationen zu den Preisen für Embeddings. Anfragen werden anhand der Anzahl der Token in der Eingabe abgerechnet.

So erhältst du Embeddings

Um ein Embedding zu erhalten, sende deinen Text zusammen mit dem Namen des Embedding-Modells (z. B. text-embedding-3-small) an den API-Endpunkt für Embeddings:

Beispiel: Embeddings abrufen
import OpenAI from "openai";
const openai = new OpenAI();

const embedding = await openai.embeddings.create({
  model: "text-embedding-3-small",
  input: "Your text string goes here",
  encoding_format: "float",
});

console.log(embedding);

Die Antwort enthält den Embedding-Vektor (eine Liste aus Gleitkommazahlen) sowie zusätzliche Metadaten. Du kannst den Embedding-Vektor extrahieren, in einer Vektordatenbank speichern und für viele verschiedene Anwendungsfälle nutzen.

{
  "object": "list",
  "data": [
    {
      "object": "embedding",
      "index": 0,
      "embedding": [
        -0.006929283495992422, -0.005336422007530928, -4.547132266452536e-5,
        -0.024047505110502243
      ]
    }
  ],
  "model": "text-embedding-3-small",
  "usage": {
    "prompt_tokens": 5,
    "total_tokens": 5
  }
}

Standardmäßig beträgt die Länge des Embedding-Vektors 1536 bei text-embedding-3-small bzw. 3072 bei text-embedding-3-large. Um die Anzahl der Dimensionen des Embeddings zu reduzieren, ohne dass es seine Fähigkeit verliert, Konzepte abzubilden, übergib den Parameter dimensions. Weitere Informationen zu Embedding-Dimensionen findest du im Abschnitt zu Anwendungsfällen für Embeddings.

Embedding-Modelle

OpenAI bietet zwei leistungsstarke Embedding-Modelle der dritten Generation an (erkennbar an -3 in der Modell-ID). Weitere Informationen findest du im Blogbeitrag zur Ankündigung der Embedding-Modelle v3.

Die Nutzung wird pro Eingabetoken abgerechnet. Die folgende Tabelle zeigt beispielhaft, wie viele Textseiten du für 1 USD verarbeiten kannst (bei etwa 800 Token pro Seite):

ModellCa. Seiten pro USDLeistung bei der MTEB-EvaluationMaximale Eingabe
text-embedding-3-small62.50062,3 %8192
text-embedding-3-large9.61564,6 %8192
text-embedding-ada-00212.50061,0 %8192

Anwendungsfälle

Hier zeigen wir einige typische Anwendungsfälle anhand des Datensatzes mit Amazon-Lebensmittelrezensionen.

Embeddings abrufen

Der Datensatz enthält insgesamt 568.454 Lebensmittelrezensionen, die bis Oktober 2012 auf Amazon veröffentlicht wurden. Zur Veranschaulichung verwenden wir eine Teilmenge mit den 1000 neuesten Rezensionen. Die Rezensionen sind auf Englisch und fallen tendenziell positiv oder negativ aus. Jede Rezension enthält die Felder ProductId, UserId, Score, einen Rezensionstitel (Summary) und einen Rezensionstext (Text). Zum Beispiel:

Produkt-IDNutzungs-IDBewertungZusammenfassungText
B001E4KFG0A3SGXH7AUHU8GW5Hochwertiges HundefutterIch habe mehrere Dosen Vitality gekauft …
B00813GRG4A1D87F6ZCVE5NK1Nicht wie beworbenDas Produkt kam mit der Aufschrift „Jumbo Salted Peanut“ …

Im Folgenden fassen wir die Zusammenfassung und den Text der Rezension zu einem einzigen Text zusammen. Das Modell kodiert diesen kombinierten Text und gibt ein einzelnes Vektor-Embedding aus.

Get_embeddings_from_dataset.ipynb
import { mkdir, writeFile } from "node:fs/promises";
import OpenAI from "openai";

const client = new OpenAI();
const reviews = ["A rich cup of coffee.", "A bright herbal tea."];

const response = await client.embeddings.create({
  model: "text-embedding-3-small",
  input: reviews.map((review) => review.replaceAll("\n", " ")),
});

const csvField = (value) => `"${value.replaceAll('"', '""')}"`;
const rows = response.data.map(({ embedding }, index) =>
  [csvField(reviews[index]), csvField(JSON.stringify(embedding))].join(",")
);

await mkdir("output", { recursive: true });
await writeFile(
  "output/embedded_1k_reviews.csv",
  ["combined,ada_embedding", ...rows].join("\n") + "\n"
);

Um die Daten aus einer gespeicherten Datei zu laden, kannst du folgenden Code ausführen:

import pandas as pd

df = pd.read_csv("output/embedded_1k_reviews.csv")
df["ada_embedding"] = df.ada_embedding.apply(eval).apply(np.array)

Häufige Fragen

Wie kann ich die Anzahl der Token in einer Zeichenfolge ermitteln, bevor ich ein Embedding dafür erstelle?

In Python kannst du eine Zeichenfolge mit dem Tokenizer tiktoken von OpenAI in Token aufteilen.

Beispielcode:

import tiktoken


def num_tokens_from_string(string: str, encoding_name: str) -> int:
    """Returns the number of tokens in a text string."""
    encoding = tiktoken.get_encoding(encoding_name)
    num_tokens = len(encoding.encode(string))
    return num_tokens


num_tokens_from_string("tiktoken is great!", "cl100k_base")

Verwende für Embedding-Modelle der dritten Generation wie text-embedding-3-small die Kodierung cl100k_base.

Weitere Details und Beispielcode findest du in der Anleitung Token mit tiktoken zählen im OpenAI Cookbook.

Wie kann ich die K nächstgelegenen Embedding-Vektoren schnell abrufen?

Um große Mengen von Vektoren schnell zu durchsuchen, empfehlen wir eine Vektordatenbank. Beispiele für die Arbeit mit Vektordatenbanken und der OpenAI API findest du in unserem Cookbook auf GitHub.

Welche Distanzfunktion sollte ich verwenden?

Wir empfehlen die Kosinusähnlichkeit. Die Wahl der Distanzfunktion macht in der Regel keinen großen Unterschied.

OpenAI-Embeddings sind auf die Länge 1 normiert. Das bedeutet:

  • Die Kosinusähnlichkeit lässt sich allein mit einem Skalarprodukt etwas schneller berechnen
  • Kosinusähnlichkeit und euklidische Distanz ergeben dieselbe Rangfolge

Kann ich meine Embeddings online teilen?

Ja, unserer Kundschaft gehören ihre Eingaben und die Ausgaben unserer Modelle. Das gilt auch für Embeddings. Du bist dafür verantwortlich, dass die Inhalte, die du an unsere API übermittelst, weder gegen geltendes Recht noch gegen unsere Nutzungsbedingungen verstoßen.

Kennen die V3-Embedding-Modelle aktuelle Ereignisse?

Nein, die Modelle text-embedding-3-large und text-embedding-3-small haben kein Wissen über Ereignisse nach September 2021. Das ist in der Regel weniger einschränkend als bei Modellen zur Textgenerierung, kann aber in bestimmten Ausnahmefällen die Leistung beeinträchtigen.