Token-Embedding
Der Computer erhält eine Zahl, die ein Textfragment bezeichnet. Die Zahl 17 allein sagt ihm weder, was dieses Fragment ist, noch wie es mit anderen zusammenhängt. Er braucht eine nützliche numerische Beschreibung, die er bei Berechnungen umwandeln kann.
Token Embedding wandelt die Kennung eines Tokens — eines Textstücks aus dem Vokabular — in einen Vektor, also eine Zahlenliste, um. Im typischen Verfahren zeigt die Zahl auf eine Zeile einer gelernten Tabelle. Hat das Token die Nummer 17, lesen wir die entsprechende siebzehnte Zeile, statt die Zahl 17 als Maß für die Bedeutung zu behandeln.
Die Tabellenwerte werden beim Lernen angepasst. Dasselbe Token erhält zunächst unabhängig vom Satz dieselbe Beschreibung. Erst spätere Schichten können sie unter Einbeziehung des Kontexts verändern: „Bank am Fluss“ und „Bank für Geldgeschäfte“ benötigen unterschiedliche Umgebungen.
Ein Embedding ist also weder eine fertige Wortdefinition noch ein Beweis für das Verständnis der Bedeutung. Es ist eine Eingabebeschreibung, mit der weitere Mechanismen wie Self-attention arbeiten.
Quelle des Mechanismus: Embedding-Schicht in Keras.
Mechanismus und Details
Von der ID zum Vektor
Stellen wir uns einen Tabellenausschnitt mit drei Koordinaten vor:
| ID | Vektor |
|---|---|
| 6 | [0,2; −0,1; 0,5] |
| 9 | [−0,4; 0,3; 0,8] |
Für die Eingabe [6, 9, 6] holen wir zuerst die erste, dann die zweite und nochmals die erste der gezeigten Zeilen. Dies sind erfundene Werte; die Semikolons trennen die Koordinaten. Eine wiederholte ID liefert denselben Vektor aus derselben Tabelle, auch wenn sie an einer anderen Stelle des Satzes auftritt.
Das Token-Embedding enthält noch kein Ergebnis einer Analyse benachbarter Tokens. Self-Attention kann den beiden Vorkommen später unterschiedliche, kontextabhängige Repräsentationen geben. Positionskodierung liefert separat Informationen über die Position in der Sequenz.
Labor: vom Token zum Lernen
Unten lassen sich der Tabellenabruf, die Umbenennung von IDs, die Änderung einer Koordinate und ein Lernschritt verfolgen. Alle vier Teile verwenden dieselbe Tabelle. Das eigene Beispiel hat sechs Tokens und sechs Koordinaten pro Token; Wörter behandeln wir als unteilbare Einheiten. Ein echter Tokenizer kann Wörter in kleinere Teile zerlegen.
Woher die Vektorwerte kommen
Im ursprünglichen Transformer wurden die Embeddings gemeinsam mit dem Modell trainiert; ein vorheriges Word2Vec-Training war nicht erforderlich. Das beschreibt Attention Is All You Need, §3.4.
Die Tabelle mit Dimensionen enthält Parameter: ist die Anzahl der Tokens im Vokabular und die Länge jedes Vektors. Der Abruf von drei IDs liefert eine Matrix . Eine Umbenennung der IDs zusammen mit dem Umordnen der zugehörigen Zeilen erhält das Abrufresultat. Eine Änderung des Zeileninhalts verändert dagegen den Vektor, der bei jedem Vorkommen dieses Tokens abgerufen wird. Form und trainierbaren Charakter der Tabelle beschreibt auch die PyTorch-Dokumentation zu Embedding.
Im Lernteil ist „kamienny“ die Eingabe und „zamek“ das korrekte nächste Token. Das Modell hat nur zwei mögliche Antworten: „zamek“ und „klucz“. Zwei feste Gewichtsvektoren wandeln das Eingabe-Embedding in Zahlenwerte, sogenannte Logits, um. Softmax macht daraus Wahrscheinlichkeiten. Die Kreuzentropie für dieses Beispiel beträgt ; das ist ein Spezialfall des in der PyTorch-Dokumentation beschriebenen Verlusts.
Der Lernknopf berechnet den Gradienten dieses Verlusts bezüglich der sechs Koordinaten des Eingabevektors und zieht den mit 0,4 multiplizierten Gradienten davon ab. Bei den Ausgangseinstellungen erhöht der erste Schritt die Zielwahrscheinlichkeit von ungefähr 47,0% auf 61,0% und senkt den Verlust von ungefähr 0,755 auf 0,495. Die Zeile „kamienny“ ändert sich, weil sie die Eingabe war; „zamek“ war das Ziellabel. Diese Zahlen stammen aus den Berechnungen des Beispiels.
In diesem Experiment sind die Ausgabegewichte eingefroren und von der Eingabetabelle getrennt, ohne Momentum [Polski] und Weight Decay. Dadurch wird allein die Aktualisierung einer ausgelesenen Zeile sichtbar. Im vollständigen Modell können das Trainingsverfahren und die gemeinsame Nutzung von Gewichten dazu führen, dass sich auch andere Parameter verändern. Eine Verbesserung an einer einzelnen Probe zeigt die Arbeitsweise der Optimierung, nicht die Qualität des Sprachmodells.
Wo Kontext ins Spiel kommt
„Oto kamienny zamek“ und „oto metalowy zamek“ verwenden im Labor dasselbe Token „zamek“ an derselben Position. Der Tabellenabruf liefert identische Vektoren. Auch das Hinzufügen derselben Positionskodierung erhält die Gleichheit der beiden Eingaben. Erst die Self-Attention-Berechnung berücksichtigt den Unterschied zwischen den vorherigen Tokens.
Die Demonstration berechnet einen Attention-Kopf mit Identitätsprojektionen für Q, K und V sowie sinusförmiger Positionskodierung nach Attention Is All You Need, §3.2 und §3.5. Alle Attention-Gewichte lassen sich ablesen und die Sätze angleichen, sodass die Ergebnisse wieder identisch werden. Das ist ein Modell des Kontexteinflusses mit festen Gewichten, kein trainierter Klassifikator für zwei Bedeutungen von „zamek“.
Mehr über die spätere Vektorumformung erklärt der Artikel über Attention [Polski]. Seine Bezeichnung „updated embeddings“ bezieht sich auf Repräsentationen nach den Berechnungen, die vom bloßen Tabellenabruf zu unterscheiden sind.
Quellen
- Keras: Embedding layer — Umwandlung von IDs in Vektoren.
- PyTorch: Embedding — Parametertabelle und Ergebnisform.
- PyTorch: CrossEntropyLoss — Verlust für ein Ziel in Form einer Klassen-ID.
- Vaswani et al., 2017, Attention Is All You Need — Embeddings, Self-Attention und Positionskodierung.