Encoder
Ein Text wird als Ganzes gelesen, und daraus entsteht eine kompakte Darstellung: ein Zahlenvektor, der die Bedeutung des Textes abbildet. Genau das leistet ein Encoder. Er ist darauf spezialisiert, Text zu verstehen, nicht Text zu erzeugen.
Die meisten Embedding-Modelle basieren auf der Encoder-Architektur. Der Grund: Ein Encoder verarbeitet alle Wörter eines Satzes gleichzeitig und kann so den Kontext in beide Richtungen berücksichtigen. Wenn das Wort "Bank" in einem Satz vorkommt, kennt der Encoder sowohl die Wörter davor als auch danach. Er kann unterscheiden, ob es sich um ein Kreditinstitut oder eine Sitzgelegenheit handelt.
Dieses Prinzip heißt Bidirektionalität. Es unterscheidet den Encoder grundlegend vom Decoder, der Text sequenziell von links nach rechts erzeugt und zukünftige Wörter nicht sehen darf.
Wie ein Encoder Text verarbeitet
Der Encoder nimmt eine Folge von Tokens entgegen und gibt für jedes Token einen Vektor zurück. Diese Vektoren enthalten kontextabhängige Bedeutungsinformation. Das gleiche Wort erhält unterschiedliche Vektoren, je nachdem, in welchem Satz es steht.
Beispiel: Der Satz "Die Bank am Fluss ist morsch" ergibt für "Bank" einen Vektor, der in die Nähe von "Sitzgelegenheit" und "Holz" rückt. Im Satz "Die Bank erhöht den Zinssatz" zeigt der Vektor in Richtung "Finanzen" und "Kredit".
Die Verarbeitung läuft in mehreren Schichten. Jede Schicht verfeinert die Repräsentation. In der ersten Schicht erfasst das Modell lokale Beziehungen zwischen benachbarten Wörtern. In tieferen Schichten entstehen abstraktere Muster: syntaktische Strukturen, semantische Rollen, thematische Zusammenhänge.
Beispiel: In einem 12-Schichten-Modell wie BERT-Base erkennen die unteren Schichten, dass "nicht" ein Negationswort ist. Die mittleren Schichten erfassen, dass "nicht schlecht" eine positive Bewertung ausdrückt. Die oberen Schichten ordnen den gesamten Satz als positiv ein.
Der Mechanismus, mit dem ein Encoder Kontext erfasst
In jedem Verarbeitungsschritt berechnet der Encoder, wie stark jedes Wort auf jedes andere Wort achten soll. Dieses Verfahren heißt Self-Attention. Es erlaubt dem Modell, beliebig weit entfernte Wörter miteinander in Beziehung zu setzen.
Beispiel: Im Satz "Der Entwickler, der seit zehn Jahren an verteilten Systemen arbeitet, bevorzugt asynchrone Kommunikation" verbindet Self-Attention das Subjekt "Entwickler" mit dem Prädikat "bevorzugt" über elf dazwischenliegende Wörter hinweg.
Self-Attention berechnet drei Projektionen pro Token: eine Anfrage (Query), einen Schlüssel (Key) und einen Wert (Value). Die Aufmerksamkeitsgewichte ergeben sich aus dem Skalarprodukt von Query und Key, normalisiert durch die Wurzel der Dimension. Das Ergebnis ist eine gewichtete Summe der Value-Vektoren.
Beispiel: Wenn der Encoder den Satz "Python ist langsam, aber die Bibliotheken sind schnell" verarbeitet, erzeugt "langsam" hohe Aufmerksamkeit auf "Python" und "schnell" hohe Aufmerksamkeit auf "Bibliotheken". So entstehen präzise Zuordnungen trotz komplexer Satzstruktur.
Encoder verwenden Multi-Head Attention: Mehrere Attention-Köpfe arbeiten parallel, jeder mit eigenen Gewichten. Ein Kopf kann syntaktische Beziehungen lernen, ein anderer semantische, ein dritter referenzielle. BERT-Base nutzt 12 Köpfe pro Schicht.
Fachliche Einordnung: Die Beziehung zwischen Attention-Köpfen und linguistischen Phänomenen ist empirisch beobachtbar, aber nicht deterministisch. Pruning-Studien (Michel et al., 2019) zeigen, dass viele Köpfe entfernt werden können, ohne die Leistung wesentlich zu beeinträchtigen. Die Spezialisierung einzelner Köpfe auf bestimmte Aufgaben variiert je nach Trainingskorpus und Zufallsinitialisierung.
Wie ein Encoder lernt: Masked Language Modeling
Encoder-Modelle lernen durch eine Aufgabe, bei der einzelne Wörter im Eingabetext verdeckt werden. Das Modell muss die verdeckten Wörter aus dem verbleibenden Kontext rekonstruieren. Dieses Verfahren heißt Masked Language Modeling (MLM).
Beispiel: Aus dem Satz "Der Server [MASK] auf Port 8080" soll das Modell vorhersagen, dass das maskierte Wort "läuft" oder "hört" lautet. Dafür muss es verstehen, was ein Server ist, was Ports sind und welche Verben in diesem technischen Kontext üblich sind.
Beim Training werden zufällig 15 Prozent der Tokens maskiert. Davon werden 80 Prozent durch das [MASK]-Token ersetzt, 10 Prozent durch ein zufälliges Token und 10 Prozent bleiben unverändert. Diese Verteilung verhindert, dass das Modell sich auf das [MASK]-Token als Signal verlässt.
Beispiel: Im Trainingskorpus steht der Satz "Die API gibt JSON zurück". Das Modell sieht "Die API gibt [MASK] zurück" und lernt, dass an dieser Stelle Datenformate wie "JSON", "XML" oder "HTML" wahrscheinlich sind, nicht aber Wörter wie "Pizza" oder "Musik".
Durch MLM entwickelt der Encoder ein tiefes Verständnis für Wortbedeutungen im Kontext. Nach dem Vortraining kann das Modell per Fine-Tuning auf spezifische Aufgaben angepasst werden.
Encoder und Decoder im Vergleich
Die Transformer-Architektur definiert zwei Grundbausteine: Encoder und Decoder. Beide nutzen Self-Attention, unterscheiden sich aber in einem entscheidenden Punkt. Der Encoder sieht alle Tokens gleichzeitig. Der Decoder sieht nur die Tokens, die bereits erzeugt wurden.
Beispiel: Wenn ein Decoder den Satz "Die Datenbank speichert ..." erzeugt und gerade das vierte Wort vorhersagt, kennt er nur "Die", "Datenbank" und "speichert". Ein Encoder, der denselben Satz analysiert, kennt alle Wörter gleichzeitig und kann das vierte Wort im Licht des gesamten Satzes interpretieren.
Aus diesem Unterschied ergeben sich verschiedene Stärken. Encoder eignen sich für Aufgaben, bei denen der gesamte Text vorliegt und verstanden werden muss: Klassifikation, Informationsextraktion, semantische Suche. Decoder eignen sich für Aufgaben, bei denen Text erzeugt werden muss: Übersetzung, Zusammenfassung, Dialogsysteme.
Beispiel: Ein Support-System empfängt eine Kundenanfrage "Mein Deployment schlägt seit dem letzten Update fehl". Der Encoder erzeugt einen Vektor, der diese Anfrage repräsentiert. Ein Vergleich mit gespeicherten Vektoren früherer Anfragen findet ähnliche Fälle. Der Decoder erzeugt anschließend eine Antwort.
Hybride Architekturen wie T5 kombinieren Encoder und Decoder. Der Encoder liest den Eingabetext, der Decoder erzeugt den Ausgabetext. Bei reinen Verständnisaufgaben wie Embedding-Erzeugung bleibt der reine Encoder die effizientere Wahl, weil kein Decoder-Overhead anfällt.
Verbreitete Encoder-Modelle
BERT (Bidirectional Encoder Representations from Transformers) war 2018 das erste Modell, das die Encoder-Architektur für breite Sprachverständnisaufgaben etablierte. Google trainierte BERT auf englischen Wikipedia- und BookCorpus-Daten. Die Varianten BERT-Base (110 Millionen Parameter, 12 Schichten) und BERT-Large (340 Millionen Parameter, 24 Schichten) setzten zum Veröffentlichungszeitpunkt neue Bestwerte auf elf NLP-Benchmarks.
Beispiel: In einem Benchmark zur semantischen Ähnlichkeit erhält das Modell zwei Sätze: "Der Container wurde neu gestartet" und "Der Pod wurde recycelt". Der Encoder erzeugt für beide Sätze Vektoren, deren Cosine Similarity die inhaltliche Nähe quantifiziert.
XLM-RoBERTa erweitert das Prinzip auf 100 Sprachen. Das Modell wurde auf 2,5 Terabyte CommonCrawl-Daten trainiert und erzeugt sprachunabhängige Repräsentationen. Ein Satz auf Deutsch und seine Übersetzung ins Japanische erhalten ähnliche Vektoren.
Sentence-Transformers bauen auf Encoder-Modellen auf und optimieren sie gezielt für Satz-Embeddings. Durch kontrastives Training lernen diese Modelle, semantisch ähnliche Sätze nah beieinander und unähnliche Sätze weit voneinander entfernt im Vektorraum zu platzieren.
Beispiel: Ein Sentence-Transformer wird mit Paaren trainiert: "Wie setze ich den Server zurück?" und "Anleitung zum Server-Reset" sollen nahe Vektoren erhalten. "Wie setze ich den Server zurück?" und "Welche Programmiersprache ist am beliebtesten?" sollen entfernte Vektoren erhalten.
Vom Token-Vektor zum Satz-Embedding
Der Encoder gibt einen Vektor pro Token zurück. Für viele Anwendungen wird aber ein einzelner Vektor benötigt, der den gesamten Text repräsentiert. Die Umwandlung von Token-Vektoren in einen Satz-Vektor heißt Pooling.
Das gängigste Verfahren ist Mean Pooling: Der Durchschnitt aller Token-Vektoren ergibt den Satz-Vektor. Alternativ kann der Vektor des [CLS]-Tokens verwendet werden, ein spezielles Token, das BERT an den Anfang jeder Eingabe setzt. Mean Pooling liefert in der Praxis meist bessere Ergebnisse als CLS-Pooling, weil es Information aus allen Positionen berücksichtigt.
Beispiel: Ein Satz mit 15 Tokens erzeugt 15 Vektoren mit je 768 Dimensionen (bei BERT-Base). Mean Pooling berechnet den elementweisen Durchschnitt und liefert einen einzelnen 768-dimensionalen Vektor. Dieser Vektor kann in einer Vektordatenbank gespeichert und für Suche oder Vergleich verwendet werden.
Beispiel: Ein Dokumentenmanagementsystem indexiert technische Handbücher. Jeder Abschnitt wird per Chunking in Textblöcke zerlegt. Der Encoder erzeugt Token-Vektoren, Mean Pooling aggregiert sie zu einem Chunk-Embedding. Bei einer Suchanfrage wird das Anfrage-Embedding mit allen Chunk-Embeddings verglichen.
Fachliche Einordnung: Die Wahl der Pooling-Strategie beeinflusst die Qualität der Embeddings erheblich. Reimers und Gurevych (2019) zeigten, dass CLS-Pooling ohne Fine-Tuning oft schlechtere Ergebnisse liefert als einfache Wortdurchschnitte mit GloVe. Erst durch kontrastives Training (wie bei Sentence-BERT) werden die Satz-Embeddings für Vergleichsaufgaben brauchbar.
Grenzen und Einschränkungen
Encoder-Modelle unterliegen einer festen Kontextlänge. BERT verarbeitet maximal 512 Tokens. Text, der diese Grenze überschreitet, muss gekürzt oder in mehrere Segmente aufgeteilt werden. Neuere Modelle wie Longformer oder BigBird erweitern die Kontextlänge auf 4.096 oder mehr Tokens, handeln sich dafür aber höheren Rechenaufwand ein.
Beispiel: Ein juristischer Vertrag mit 3.000 Wörtern ergibt nach dem Tokenizer etwa 4.500 Tokens. BERT kann diesen Text nicht in einem Durchgang verarbeiten. Das System muss den Vertrag in überlappende Abschnitte zerlegen, jeden Abschnitt separat encodieren und die Ergebnisse aggregieren.
Die Rechenkosten von Self-Attention wachsen quadratisch mit der Eingabelänge. Bei 512 Tokens berechnet jede Attention-Schicht eine 512×512-Matrix. Bei 4.096 Tokens wächst diese Matrix auf das 64-fache. Effiziente Attention-Varianten (Sparse Attention, Linear Attention) reduzieren diesen Aufwand, gehen aber mit Approximationen einher.
Beispiel: Ein Retrieval-System verarbeitet 10.000 Dokumente pro Sekunde mit BERT-Base (512 Tokens). Dieselbe Hardware schafft mit einem Longformer-Modell (4.096 Tokens) nur etwa 1.200 Dokumente pro Sekunde bei gleicher Batchgröße.
Encoder-Modelle erzeugen Repräsentationen, die vom Trainingskorpus abhängen. Ein Modell, das auf allgemeinen Webdaten trainiert wurde, bildet domänenspezifische Fachbegriffe unter Umständen unzureichend ab. Fine-Tuning auf domänenspezifischen Daten kann diese Lücke schließen, erfordert aber gelabelte Trainingsbeispiele.
Fachliche Einordnung: Die quadratische Komplexität von Self-Attention (O(n²)) ist ein aktives Forschungsfeld. Ansätze wie FlashAttention (Dao et al., 2022) beschleunigen die Berechnung durch optimierte Speicherzugriffsmuster, ändern aber nicht die asymptotische Komplexität. Für produktive Embedding-Systeme mit hohem Durchsatz bleibt die Kontextlänge ein kritischer Entwurfsparameter.