- Embeddings sind das semantische Grundgerüst von LLMs und wandeln Text in numerische Vektoren um, damit das Modell ihn verstehen kann
- Die Entwicklung von Embeddings hat viele Veränderungen durchlaufen, von statistischen Verfahren wie Count-basierten Methoden und TF-IDF bis hin zu modernen Ansätzen wie Word2Vec, BERT und der GPT-Familie
- Bei guten Embeddings ist die Balance zwischen der Erhaltung semantischer Ähnlichkeit von Wörtern und der Steuerung der Dimensionszahl entscheidend; in LLMs werden sie gemeinsam mit dem Modell trainiert und auf Trainingsdaten sowie Aufgaben optimiert
- Repräsentative Embedding-Verfahren wie TF-IDF, Word2Vec und BERT werden mit Beispielen und Visualisierungen erklärt; insbesondere werden bei LLMs Eingabetokens zunächst in hochdimensionale Vektoren umgewandelt und dann je nach Kontext schichtweise aktualisiert
- Mit Praxiscode wie Torch-Embedding-Layern und Graphanalysen von Embedding-Vektoren sowie visuellen Materialien wird ein intuitives Verständnis der tatsächlichen Funktionsweise von Embeddings vermittelt
Was sind Embeddings?
- Embeddings sind ein Verfahren, um Daten wie Text, Bilder oder Audio in hochdimensionale Vektoren umzuwandeln
- Besonders im NLP ist es der Prozess, Wörter oder Tokens in Vektoren zu transformieren und so in eine Form zu bringen, die Computer verstehen können
- Embeddings lassen sich nicht nur auf Text, sondern auf verschiedene Datentypen anwenden; in diesem Artikel liegt der Schwerpunkt jedoch auf Text-Embeddings
Entwicklung und Arten von Embeddings
- Frühe Embedding-Verfahren wurden vor allem von statistischen Ansätzen wie Count-Vektoren, TF-IDF und Co-Occurrence-Matrizen geprägt
- Später entstanden neuronale Embeddings wie Word2Vec, GloVe und FastText, die begannen, semantische Ähnlichkeit im Vektorraum abzubilden
- In transformerbasierten Modellen wie BERT und GPT werden die Embeddings jedes Tokens nach der Eingabe schichtweise unter Einbezug von Kontextinformation aktualisiert (dynamische/kontextualisierte Embeddings)
Bedingungen für gute Embeddings
Semantische Repräsentation (semantic representation)
- Wörter mit ähnlicher Bedeutung liegen auch im Vektorraum nahe beieinander
Beispiel: "cat" und "dog" werden ähnlicher abgebildet als "dog" und "strawberry"
Größe der Dimensionen (dimensionality)
- Ist die Embedding-Dimension zu klein, fehlt Ausdruckskraft; ist sie zu groß, drohen Speicherverschwendung und Overfitting
Beispiel: GPT-2 hat eine Embedding-Dimension von mindestens 768
Traditionelles Embedding-Verfahren: TF-IDF
- TF-IDF berechnet die Wichtigkeit eines Wortes, indem Wortfrequenz und Seltenheit (inverse Dokumentfrequenz) multipliziert werden
- TF: wie häufig ein Wort in einem Dokument vorkommt
- IDF: wie selten ein Wort im gesamten Dokumentkorpus ist
- Die Ergebnisse von TF-IDF werden für einfache Analysen wie Information Retrieval und Keyword-Extraktion genutzt, bilden semantische Ähnlichkeit jedoch nur unzureichend ab
- In Visualisierungen liegen die meisten Wörter in einem Cluster, die semantische Trennschärfe ist gering
Word2Vec
- Word2Vec ist ein neuronales Embedding-Verfahren, das semantische Beziehungen effektiv im Vektorraum abbildet
- Es gibt Verfahren wie CBOW (Vorhersage des Zielworts aus umgebenden Wörtern) und Skipgram (Vorhersage der Umgebung aus dem Zielwort)
- Durch das Training wird die Embedding-Matrix der versteckten Schicht als semantischer Vektor der Wörter genutzt
- Mit Optimierungstechniken wie Negative Sampling ist auch auf großen Datenmengen effizientes Training möglich
- In Visualisierungen mit dem TensorFlow Embedding Projector ist zu sehen, dass semantisch ähnliche Wörter geclustert werden
BERT und transformerbasierte Embeddings
- BERT ist ein Encoder-only-Transformer-Modell, das mit jeder Schicht Kontextinformationen dynamisch stärker einbezieht
- Eingabeschritt: Text mit einem Tokenizer tokenisieren → in Token-Embedding-Vektoren umwandeln → mit Positional Embeddings addieren
- Anschließend durchlaufen die Daten mehrere Transformer-Schichten, wobei die Embeddings dynamisch verändert werden, um Kontextinformationen einzubeziehen
- Mit Special Tokens wie [CLS] und [SEP] werden auch Informationen über den gesamten Satz bzw. Abgrenzungen verarbeitet
- Seit BERT setzen viele LLMs auf dynamische (kontextualisierte) Embeddings
Struktur und Training von LLM-Embeddings
- LLM-Embeddings werden als erste Schicht (Lookup-Tabelle) implementiert, die Eingabetokens in hochdimensionale Vektoren umwandelt
- Sie bestehen in Form einer Tabelle, die wie
torch.nn.Embedding Token-IDs entgegennimmt und den jeweiligen Embedding-Vektor zurückgibt
- Im Training optimieren LLMs auch die Gewichte der Embedding-Schicht gemeinsam, sodass die Embeddings an Daten und Zielsetzung des Modells angepasst werden
- Beispiel: Das Modell DeepSeek-R1-Distill-Qwen-1.5B verwendet Embedding-Vektoren mit 1536 Dimensionen
Visualisierung und Graphanalyse von Embeddings
- Auf Basis der Ähnlichkeit zwischen Embedding-Vektoren (z. B. Cosine Similarity) kann der Embedding-Raum als Graph analysiert werden
- Beispiel: Der Satz "AI agents will be the most hot topic..." kann tokenisiert werden, und Tokens mit hoher Ähnlichkeit in ihren Embeddings lassen sich zur Visualisierung verbinden
- Auch verschiedene Varianten eines einzelnen Wortes (z. B. "list", "_list", "List") haben oft ähnliche Embeddings
Fazit
- Embeddings sind ein Kernelement von LLMs und NLP, das Eingabedaten in numerische Vektoren umwandelt, damit das Modell semantische Strukturen und Kontextinformationen verarbeiten kann
- Auch im Zeitalter der LLMs haben sich die grundlegenden Prinzipien und Strukturen von Embeddings nicht wesentlich verändert und spielen weiterhin eine sehr wichtige Rolle für Modellleistung und Interpretierbarkeit
- Mit intuitiven Codebeispielen und Visualisierungsmaterialien lässt sich die tatsächliche Funktionsweise von Embeddings leicht nachvollziehen
2 Kommentare
king - man + woman = queen
Hacker-News-Kommentare
Es ist wirklich erstaunlich, dass Embeddings zu den am wenigsten diskutierten Teilen des LLM-Stacks gehören, obwohl ich intuitiv dachte, dass sie einen enormen Einfluss darauf haben, wie gut ein Netzwerk semantische Verbindungen erschließen kann, und trotzdem sprechen die Leute kaum darüber
Das Problem mit Embeddings ist, dass sie außer für das Modell selbst fast unlesbar sind. Embeddings kodieren zwar eindeutig die Bedeutung der Eingabesequenz, aber diese Information wird im Trainingsprozess so stark komprimiert, dass nur noch der Decoder-Head des Modells sie entschlüsseln kann. Anthropic hat eine Studie veröffentlicht, in der interne Features von Sonnet 3 in interpretierbare Formen gebracht wurden, aber dafür musste parallel ein separates Netzwerk trainiert werden, um die Aktivierungen der internen Layer zu interpretieren, was teuer ist
Das Seltsame an hochdimensionalen Räumen ist, dass die meisten Werte zueinander orthogonal sind und sehr weit auseinander liegen. Umso faszinierender ist es, dass man mit Dimensionalitätsreduktion selbst in 50.000 Dimensionen Konzepte clustern kann
Als ich Embeddings zum ersten Mal tiefer verstanden habe, dachte ich: „Mindestens ein Drittel der Magie von LLMs kommt aus den Embeddings.“ Dass Wörter bereits semantisch sinnvoll angeordnet sind, nimmt dem Mysterium von LLMs ein wenig den Zauber, auch wenn es natürlich immer noch beeindruckend ist — man bekommt nur einen kleinen Blick hinter den Vorhang
Embeddings wirken wie eine Art „Stein von Rosetta“, der es Computern ermöglicht, menschliche Sprache zu quantifizieren. Ich denke, das müsste eigentlich ein viel wichtigeres Thema sein, verstehe aber auch, dass der Versuch, einen 1.000-dimensionalen Vektorraum zu begreifen, ziemlich einschüchternd ist
Ich verstehe die Aussage nicht ganz, dass zu wenig über Embeddings gesprochen werde. Gerade bei RAG-Anwendungsfällen oder Vektor-DBs sind Embeddings doch fast immer ein zentrales Thema
Das Tutorial war sehr gut — der Unterschied zwischen kontextuellen Embeddings und statischen Embeddings ist wichtig. Viele kennen word2vec (statische Embeddings), aber kontextuelle Embeddings sind oft deutlich mächtiger. (Nebenbei: Die Seite betreibt heftiges Browser-History-Hijacking und fügt allein beim Scrollen massenhaft Einträge zur Historie hinzu)
Was aus Embedding-Sicht etwas fortgeschrittener erklärt werden müsste, ist der Unterschied zwischen Encoder-Decoder-Transformern (BERT) und Decoder-only-Generierungsmodellen
Kleine Korrektur: BERT ist ein Encoder (kein Encoder-Decoder), ChatGPT ist ein Decoder. Encoder-Modelle wie BERT können den gesamten Satz sehen und sind daher bei Bedeutungsrepräsentation im Vorteil. In „The bank was steep and muddy“ kann etwa die Bedeutung von
bank(Flussufer oder Finanzinstitut) anhand des ganzen Satzes bestimmt werden. GPT-artige Modelle (Decoder-Modelle) sehen dagegen nur die Reihenfolge von links nach rechts und können spätere Satzinformationen bei der Vorhersage nicht nutzen. Weitere Informationen dazu gibt es im modernBERT-Post von Hugging Face sowie im neoBERT-PaperErgänzend zu dust42s Erklärung: BERT ist ein Encoder, GPT ein Decoder und T5 ein Encoder-Decoder. Encoder-Decoder sind derzeit weniger populär. Encoder-Modelle werden oft für Klassifikation, Information Extraction und Retrieval verwendet, Decoder für Textgenerierung, Zusammenfassung und Übersetzung. Auch neuere Forschung bestätigt das (Ettin-Paper). Da beide Transformer sind, kann man einen Encoder auch in einen Decoder umwandeln und umgekehrt. Der architektonische Unterschied liegt in bidirektionaler Attention (alle Tokens können alle Tokens sehen) versus autoregressiver Attention (nur frühere Tokens sind sichtbar)
Mit dem Embedding Projector kann man nicht nur mehr als 50 Wörter untersuchen, sondern auch ein Gefühl für 3D-Datenvisualisierung entwickeln. Siehe Tensorflow Embedding Projector
Ein wirklich hervorragender visueller Leitfaden! Ich habe mit einem ähnlichen Konzept bei app.vidyaarthi.ai eine LLM-Embedding-Lektion im Stil Visual+Audio+Quiz erstellt, um ein tieferes Verständnis von Deep Learning zu fördern. Hier kann man es direkt ausprobieren. Der Ansatz ist „durch Ausprobieren lernen“, um abstrakte Konzepte intuitiver und interaktiver zu machen. Feedback ist willkommen (keine Eigenwerbung, ich habe das Tool wirklich mit viel Leidenschaft gebaut)
Scheint nicht richtig zu funktionieren, die Konsole ist voll mit Fehlermeldungen wie „Content-Security-Policy: The page’s settings blocked an inline style…“
Ich denke, eine Wortwolken-Visualisierung oder das Anzeigen von Top-k-Ergebnissen für Queries wäre intuitiver. Ich würde empfehlen, im Tensorflow Embedding Projector ein Wort einzugeben und dann die UMAP-Projektion auszuwählen
Eine etwas praxisnähere Erklärung gibt es auch in diesem Embeddings-Erklärartikel von sgnt.ai, den ich selbst geschrieben habe
Danke für das großartige Material! So wie ich es verstehe, haben LLMs drei große Probleme:
Dein Ansatz ist deutlich intuitiver. Ich habe mich gefragt, warum keine Embedding-Beispiele für kategoriale/skalarische Merkmale gezeigt wurden
Ein sehr lehrreicher und gut strukturierter Artikel, danke an den Autor
Die Embeddings eines LLMs sind normalerweise Teil der Eingabelayer und werden im Training aktualisiert, anders als vortrainierte Modelle wie Word2Vec.
Eine zusätzliche Frage dazu: In der Inferenz sind Embeddings eine Lookup-Tabelle der Form „Token-ID -> Vektor“.
Mathematisch gesehen kann man die Token-ID als langen One-Hot-Vektor kodieren und dann durch einen linearen Layer schicken, um den Embedding-Vektor zu erhalten.
Wird dieselbe Struktur auch beim Training der Embeddings verwendet — also werden Embeddings als linearer Layer betrachtet und per Backpropagation gelernt?
Embeddings sind ebenfalls Teil des normalen Backpropagation-Prozesses, allerdings verwendet man aus Effizienzgründen in der Praxis kein One-Hot-Encoding.
Stattdessen wird das Indexing differenzierbar implementiert, sodass nur durch den ausgewählten Vektor Gradienten fließen.
Ein konkretes Beispiel findet sich im Quellcode meiner Mini-Deep-Learning-Bibliothek SmallPebble
Um einen anderen Kommentar etwas genauer zu erläutern:
Indexing und die Multiplikation mit einem One-Hot-Vektor sind mathematisch identisch.
Wenn das Vokabular zum Beispiel N Einträge und die Sequenz die Länge L hat, müsste man eine dünn besetzte NxL-Matrix mit der Embedding-Matrix multiplizieren.
In der Praxis genügt es aber, pro Spalte genau einen Index zu kennen, daher wird intern einfach eine einzelne Zahl (der Index) gespeichert.
Auf dieser Basis implementiert man neben dem Forward-Pass auch den Backward-Pass separat für das Indexing,
damit die Gradienten an die ausgewählten Embedding-Vektoren weitergegeben werden