1. Tokenizing
Tokenisierung
Tokenisierung ist der Prozess, Daten, wie z.B. Text, in kleinere, handhabbare Teile, die Tokens genannt werden, zu zerlegen. Jedes Token erhält dann eine eindeutige numerische Kennung (ID). Dies ist ein grundlegender Schritt bei der Vorbereitung von Text für die Verarbeitung durch maschinelle Lernmodelle, insbesondere im Bereich der natürlichen Sprachverarbeitung (NLP).
Das Ziel dieser ersten Phase ist sehr einfach: Teile die Eingabe in Tokens (IDs) auf eine Weise, die Sinn macht.
Wie Tokenisierung funktioniert
Text aufteilen:
Einfacher Tokenizer: Ein einfacher Tokenizer könnte Text in einzelne Wörter und Satzzeichen aufteilen und Leerzeichen entfernen.
Beispiel: Text:
"Hallo, Welt!"
Tokens:["Hallo", ",", "Welt", "!"]
Erstellen eines Vokabulars:
Um Tokens in numerische IDs umzuwandeln, wird ein Vokabular erstellt. Dieses Vokabular listet alle einzigartigen Tokens (Wörter und Symbole) auf und weist jedem eine spezifische ID zu.
Spezielle Tokens: Dies sind spezielle Symbole, die dem Vokabular hinzugefügt werden, um verschiedene Szenarien zu behandeln:
[BOS]
(Beginn der Sequenz): Kennzeichnet den Beginn eines Textes.[EOS]
(Ende der Sequenz): Kennzeichnet das Ende eines Textes.[PAD]
(Padding): Wird verwendet, um alle Sequenzen in einem Batch auf die gleiche Länge zu bringen.[UNK]
(Unbekannt): Stellt Tokens dar, die nicht im Vokabular enthalten sind.Beispiel: Wenn
"Hallo"
die ID64
zugewiesen wird,","
ist455
,"Welt"
ist78
, und"!"
ist467
, dann:"Hallo, Welt!"
→[64, 455, 78, 467]
Umgang mit unbekannten Wörtern: Wenn ein Wort wie
"Tschüss"
nicht im Vokabular enthalten ist, wird es durch[UNK]
ersetzt."Tschüss, Welt!"
→["[UNK]", ",", "Welt", "!"]
→[987, 455, 78, 467]
&#xNAN;(Angenommen,[UNK]
hat die ID987
)
Fortgeschrittene Tokenisierungsmethoden
Während der einfache Tokenizer gut für einfache Texte funktioniert, hat er Einschränkungen, insbesondere bei großen Vokabularen und dem Umgang mit neuen oder seltenen Wörtern. Fortgeschrittene Tokenisierungsmethoden adressieren diese Probleme, indem sie Text in kleinere Untereinheiten zerlegen oder den Tokenisierungsprozess optimieren.
Byte Pair Encoding (BPE):
Zweck: Reduziert die Größe des Vokabulars und behandelt seltene oder unbekannte Wörter, indem sie in häufig vorkommende Byte-Paare zerlegt werden.
Wie es funktioniert:
Beginnt mit einzelnen Zeichen als Tokens.
Fügt iterativ die häufigsten Paare von Tokens zu einem einzigen Token zusammen.
Fährt fort, bis keine häufigeren Paare mehr zusammengeführt werden können.
Vorteile:
Beseitigt die Notwendigkeit eines
[UNK]
-Tokens, da alle Wörter durch die Kombination vorhandener Subwort-Tokens dargestellt werden können.Effizienteres und flexibleres Vokabular.
Beispiel:
"spielend"
könnte als["spiel", "end"]
tokenisiert werden, wenn"spiel"
und"end"
häufige Subwörter sind.
WordPiece:
Verwendet von: Modellen wie BERT.
Zweck: Ähnlich wie BPE, zerlegt es Wörter in Subwort-Einheiten, um unbekannte Wörter zu behandeln und die Vokabulargröße zu reduzieren.
Wie es funktioniert:
Beginnt mit einem Basisvokabular aus einzelnen Zeichen.
Fügt iterativ das häufigste Subwort hinzu, das die Wahrscheinlichkeit der Trainingsdaten maximiert.
Verwendet ein probabilistisches Modell, um zu entscheiden, welche Subwörter zusammengeführt werden sollen.
Vorteile:
Balanciert zwischen einer handhabbaren Vokabulargröße und einer effektiven Darstellung von Wörtern.
Behandelt seltene und zusammengesetzte Wörter effizient.
Beispiel:
"Unglück"
könnte als["Un", "glück"]
oder["Un", "glücklich", "keit"]
tokenisiert werden, abhängig vom Vokabular.
Unigram-Sprachmodell:
Verwendet von: Modellen wie SentencePiece.
Zweck: Verwendet ein probabilistisches Modell, um die wahrscheinlichste Menge von Subwort-Tokens zu bestimmen.
Wie es funktioniert:
Beginnt mit einer großen Menge potenzieller Tokens.
Entfernt iterativ Tokens, die die Wahrscheinlichkeit der Trainingsdaten am wenigsten verbessern.
Finalisiert ein Vokabular, in dem jedes Wort durch die wahrscheinlichsten Subwort-Einheiten dargestellt wird.
Vorteile:
Flexibel und kann Sprache natürlicher modellieren.
Führt oft zu effizienteren und kompakteren Tokenisierungen.
Beispiel:
"Internationalisierung"
könnte in kleinere, bedeutungsvolle Subwörter wie["international", "isierung"]
tokenisiert werden.
Codebeispiel
Lass uns das besser anhand eines Codebeispiels von https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb verstehen:
Referenzen
Last updated