KI-Begriffe

Embedding

Wie aus Wörtern Punkte in einem Raum werden, in dem ähnliche Bedeutungen nah beieinanderliegen – die Sprache, in der ein Sprachmodell eigentlich rechnet.

Lesestand

Ein Embedding ist ein Vektor – eine Liste von Hunderten bis Tausenden Zahlen –, der die Bedeutung eines Tokens, Wortes oder ganzen Textes darstellt. Die Zahlen sind so gelernt, dass ähnliche Bedeutungen nah beieinanderliegen: „Hund“ liegt nahe bei „Katze“, weit weg von „Steuererklärung“.

Embeddings sind der erste Schritt in jedem Sprachmodell (Token-ID → Vektor). Außerdem sind sie die Grundlage für semantische Suche: Texte nach Bedeutung finden statt nach gleichen Wörtern.

Ein Raum der Bedeutungen

Eine Token-ID ist nur eine Nummer; sie sagt nichts über die Bedeutung. Das Modell schlägt deshalb zu jeder ID einen Vektor nach. Man kann sich jeden Vektor als Punkt in einem Raum vorstellen – nur dass dieser Raum nicht zwei oder drei, sondern Tausende Dimensionen hat.

Zum Anschauen hier stark vereinfacht auf zwei Dimensionen. Klick ein Wort an:

Bedeutungskarte

Ausgedachte Positionen, die zeigen, wie echte Embeddings aussehen, wenn man sie auf zwei Dimensionen herunterprojiziert. Achte auf die Grenzgänger: „Java“ liegt zwischen Programmiersprachen und Inseln, „Maus“ zwischen Tieren und Computerzubehör.

Woher die Zahlen kommen

Niemand legt fest, wo „Hund“ liegt. Die Embedding-Tabelle gehört zu den Parametern und wird beim Training mitgelernt. Anfangs sind alle Vektoren Zufall. Weil das Modell aber ständig das nächste Wort vorhersagen muss, werden Wörter, die in ähnlichen Zusammenhängen vorkommen, nach und nach ähnlich dargestellt – das hilft bei der Vorhersage.

Der Hund schläft auf dem Sofa.
Der Kater schläft auf dem Sofa.
Ich muss mit dem Hund zum Tierarzt.
Ich muss mit dem Kater zum Tierarzt.
„Hund“ und „Kater“ tauchen in sehr ähnlichen Umgebungen auf. Also landen ihre Vektoren nah beieinander – ohne dass das Modell je eine Definition gelesen hat.
Der Sprachwissenschaftler John Rupert Firth hat das 1957 so zusammengefasst: „You shall know a word by the company it keeps.“ – Man erkennt ein Wort an der Gesellschaft, in der es sich aufhält. Embeddings sind die mathematische Umsetzung dieses Gedankens.

Rechnen mit Bedeutung

2013 stellten Forscher bei Google mit word2vec ein Verfahren vor, dessen Ergebnis berühmt wurde: In den gelernten Vektoren stecken nicht nur Ähnlichkeiten, sondern auch Beziehungen als Richtungen. Der Abstand von „Mann“ zu „Frau“ zeigt ungefähr in dieselbe Richtung wie der von „König“ zu „Königin“. Deshalb kann man rechnen:

Vektor-Arithmetik
−+≈?

Spielzeug-Vektoren mit nur vier Dimensionen, die hier sogar Namen haben, damit man das Prinzip sieht. In echten Embeddings sind die Achsen nicht benannt und nicht so sauber – die Beziehung „männlich ↔ weiblich“ ist über viele Dimensionen verteilt. Probier auch Onkel − Mann + Frau oder Prinzessin − Mädchen + Junge.

In echten Modellen klappt das nicht immer so glatt, und berühmte Beispiele sind teilweise sorgfältig ausgewählt. Das Grundprinzip – Beziehungen als Richtungen im Raum – ist aber gut belegt und steckt auch in heutigen Sprachmodellen.

Wie man Nähe misst

Für die Ähnlichkeit zweier Embeddings nimmt man fast immer die Kosinus-Ähnlichkeit: Sie misst den Winkel zwischen den Vektoren, nicht deren Länge. Zeigen beide in dieselbe Richtung, ist sie 1; stehen sie senkrecht, 0; zeigen sie entgegengesetzt, −1.

Kosinus-Ähnlichkeit
                    a · b              Σ aᵢ·bᵢ
cos(a, b)  =  ─────────────  =  ─────────────────────
               |a| · |b|        √Σ aᵢ²  ·  √Σ bᵢ²

Das Schöne daran: Es funktioniert in zwei Dimensionen genauso wie in 3 072 – nur zeichnen kann man es nicht mehr.

Statisch und im Kontext

Bei word2vec hat jedes Wort genau einen Vektor. „Bank“ ist dann ein unscharfer Mittelwert aus Geldinstitut und Sitzgelegenheit. In einem Transformer ist das nur der Anfang:

Token-ID„Bank“ = 30411
→
Statisches Embeddingimmer derselbe Vektor, aus der Tabelle
→
Schicht für SchichtAufmerksamkeit mischt den Kontext hinein
→
Kontextuelles Embedding„Bank im Park“ ≠ „Bank mit Geld“
Am Eingang hat jedes Token seinen festen Vektor. Nach den Schichten des Transformers trägt es die Bedeutung, die es in diesem Satz hat – mehr dazu bei Aufmerksamkeit.

Semantische Suche

Embeddings gibt es nicht nur für einzelne Tokens, sondern auch für ganze Sätze und Dokumente. Dafür gibt es eigene, kleinere Embedding-Modelle: Text rein, ein Vektor raus. Damit lässt sich nach Bedeutung suchen statt nach Schlagworten:

Suchanfrage: „Ich komme nicht mehr in mein Konto“
Die besten Treffer rechts enthalten das Wort „Konto“ teilweise gar nicht – sie meinen aber dasselbe. Ähnlichkeitswerte ausgedacht.

Das Vorgehen ist immer gleich: Alle Dokumente einmal in Embeddings umrechnen und speichern. Bei einer Anfrage die Frage ebenfalls umrechnen und die nächsten Nachbarn suchen. Dafür gibt es Vektordatenbanken oder Erweiterungen wie pgvector für PostgreSQL. Genau das ist der „Nachschlagen“-Schritt bei RAG, mit dem Anwendungen einem Sprachmodell passende Dokumente ins Kontextfenster legen.

Für Entwickler übersetzt

BegriffEntspricht ungefähr
Embeddingein float[] mit fester Länge, z. B. 1 024 oder 3 072
Embedding-Tabelleein float[vokabular][dimensionen] – Token-ID ist der Zeilenindex
ÄhnlichkeitKosinus statt equals(): kein Ja/Nein, sondern eine Zahl zwischen −1 und 1
Embedding-Modelleine Funktion float[] embed(String text), meist als API oder lokale Bibliothek
Vektordatenbankein Index für „finde die nächsten Nachbarn“ – wie ein B-Baum, nur für Ähnlichkeit statt Sortierung (gängig: HNSW-Graphen)
static double kosinus(float[] a, float[] b) {
    double dot = 0, na = 0, nb = 0;
    for (int i = 0; i < a.length; i++) {
        dot += a[i] * b[i];
        na  += a[i] * a[i];
        nb  += b[i] * b[i];
    }
    return dot / (Math.sqrt(na) * Math.sqrt(nb));
}

// Semantische Suche, naiv (ohne Index)
float[] frage = embedder.embed("Ich komme nicht mehr in mein Konto");
List<Dokument> treffer = dokumente.stream()
    .sorted(Comparator.comparingDouble((Dokument d) -> kosinus(frage, d.embedding())).reversed())
    .limit(3)
    .toList();

Für Java gibt es dafür fertige Bausteine, etwa in Spring AI oder LangChain4j, die Embedding-Modelle und Vektordatenbanken einheitlich ansprechen.

Häufige Irrtümer

„Jede Dimension steht für eine Eigenschaft.“ – Fast nie. Eigenschaften wie „Geschlecht“ oder „Größe“ sind über viele Dimensionen verteilt; einzelne Zahlen lassen sich meist nicht deuten.
„Embedding und Token-ID sind dasselbe.“ – Die ID ist ein bedeutungsloser Index, das Embedding der dazugehörige Vektor mit Bedeutung.
„Embeddings bilden Bedeutung neutral ab.“ – Sie bilden ab, wie Wörter in den Trainingstexten benutzt werden – samt Vorurteilen. Ein bekannter Befund aus der word2vec-Zeit: Arzt − Mann + Frau landete in der Nähe von „Krankenschwester“.
„Ähnlich heißt gleichbedeutend.“ – Gegenteile liegen oft nah beieinander, weil sie in ähnlichen Zusammenhängen vorkommen: „heiß“ und „kalt“, „kaufen“ und „verkaufen“.

Verwandte Begriffe