LLM Foundation: Tokenisierung und Training

LLM Foundation: Tokenisierung und Training

Entdecken Sie die wichtigsten Unterschiede zwischen Tokenisierung und Embeddings in großen Sprachmodellen (LLMs) wie GPT. Erfahren Sie, wie die Tokenisierung Text in handhabbare Einheiten zerlegt, während Embeddings reichhaltige Vektordarstellungen dieser Tokens bereitstellen. Das Verständnis dieser Prozesse ist entscheidend, um das Potenzial von LLMs in Aufgaben der natürlichen Sprachverarbeitung zu erschließen.

Einleitung

Tokenisierung und Embeddings sind grundlegende Komponenten großer Sprachmodelle (LLMs) wie GPT und entscheidend für das Verständnis und die Generierung von Text. Tokenisierung umfasst die Zerlegung von Rohtext in handhabbare Einheiten, sogenannte Tokens, während Embeddings reichhaltige Vektordarstellungen dieser Tokens bereitstellen. Das Verständnis der Unterschiede zwischen Tokenisierung und Embeddings ist wesentlich, um die Feinheiten zu erfassen, wie LLMs Sprachdaten verarbeiten.

Was ist Tokenisierung?

Tokens werden in der KI-Forschung häufig diskutiert, zum Beispiel im Llama-2-Papier, in dem die Autoren das Training mit 2 Billionen Tokens von Daten erwähnen. Tokens dienen als grundlegende Einheit, vergleichbar mit dem „Atom“, für große Sprachmodelle (LLMs). Tokenisierung umfasst die Übersetzung von Zeichenketten (d.h. Text) in Sequenzen von Tokens und umgekehrt.

Im Bereich des maschinellen Lernens entspricht ein Token in der Regel nicht einem einzelnen Wort. Stattdessen kann es eine kleinere Einheit darstellen, wie ein Zeichen oder einen Teil eines Wortes, oder eine größere, wie eine ganze Phrase. Die Größe der Tokens variiert je nach verwendetem Tokenisierungsansatz.

Die Tokenisierung wird normalerweise von einer Komponente namens „Tokenizer“ übernommen. Dieses Modul arbeitet unabhängig vom großen Sprachmodell und hat seinen eigenen Trainingsdatensatz von Text, der sich vollständig von den LLM-Trainingsdaten unterscheiden kann.

Warum ist Tokenisierung wichtig?

Die Tokenisierung liegt vielen Besonderheiten zugrunde, die bei großen Sprachmodellen (LLMs) beobachtet werden. Während einige Probleme zunächst auf die neuronale Netzwerkarchitektur oder das LLM selbst zurückzuführen scheinen, können sie tatsächlich auf die Tokenisierung zurückgeführt werden. Hier ist eine unvollständige Liste von Problemen, die auf die Tokenisierung zurückgeführt werden können:

  • Ungenauigkeiten in der Rechtschreibung
  • Schwierigkeiten bei einfachen Zeichenkettenverarbeitungsaufgaben, wie dem Umkehren einer Zeichenkette
  • Geringere Leistung in nicht-englischen Sprachen, wie Japanisch
  • Unterdurchschnittliche Leistung bei grundlegenden arithmetischen Operationen
  • Herausforderungen bei Programmieraufgaben, wie Python, mit denen GPT-2 konfrontiert war
  • Probleme wie nachgestellte Leerzeichen
  • Fälle, in denen frühere Versionen von GPT unberechenbares Verhalten zeigten, wenn sie nach „SolidGoldMagikarp“ gefragt wurden
  • Bevorzugung von YAML gegenüber JSON bei der Verarbeitung strukturierter Daten

In diesem Beitrag werden wir näher darauf eingehen, wie die Tokenisierung zu diesen Problemen beiträgt.

Details zur Tokenisierung

Hier ist ein Überblick über die Schritte, die bei der Tokenisierung beteiligt sind. Einige dieser Schritte sind möglicherweise nicht sofort klar, aber wir werden sie im Verlauf dieses Beitrags genauer erläutern.

Vortraining: Aufbau des Vokabulars

  1. Trainingsdaten sammeln: Stellen Sie einen großen Korpus von Textdaten zusammen, aus dem das Modell lernen wird.
  2. Anfängliche Tokenisierung: Verwenden Sie anfängliche Tokenisierungsmethoden, um den Text in grundlegende Einheiten wie Wörter, Unterwörter oder Zeichen zu unterteilen.
  3. Vokabularerstellung: Wählen Sie einen Tokenisierungsalgorithmus wie Byte Pair Encoding (BPE), WordPiece oder SentencePiece, um einen handhabbaren und effizienten Satz von Tokens zu generieren.
  4. Algorithmus anwenden: Implementieren Sie den ausgewählten Algorithmus auf den anfänglichen Tokens, um einen Satz von Unterwort-Tokens oder Zeichen zu erzeugen, die die sprachlichen Nuancen in den Trainingsdaten erfassen.
  5. ID-Zuweisung: Weisen Sie jedem Token im resultierenden Vokabular eine eindeutige ganzzahlige ID zu.

Echtzeit-Tokenisierungsprozess

  1. Transformieren Sie den eingehenden Text basierend auf dem etablierten Vokabular in Tokens, um eine vollständige Abdeckung des gesamten Texts sicherzustellen.
  2. Ordnen Sie jedes Token seiner jeweiligen ganzzahligen ID zu, wie im vorab festgelegten Vokabular definiert.
  3. Fügen Sie alle notwendigen speziellen Tokens in die Sequenz ein, um die Modellverarbeitungsanforderungen zu erfüllen.

Verständnis der Herausforderungen bei der Tokenisierung

Sie können Sätze eingeben und beobachten, wie Tokens generiert werden (und beachten Sie den entsprechenden Anstieg der Tokenanzahl und des Preises pro Prompt).

Bewegen Sie die Maus über den Text auf der rechten Seite, nachdem Sie das Kontrollkästchen „Show whitespace“ aktiviert haben, und Sie werden die hervorgehobenen Tokens sehen. Diese Tokens bestehen typischerweise aus „Blöcken“, die oft das Leerzeichen am Anfang enthalten.

Hier ist ein weiteres Beispiel:

Beachten Sie, wie die Tokenblöcke und ihre numerischen Darstellungen variieren, basierend auf:

  • Dem Vorhandensein eines Leerzeichens vor dem Wort
  • Dem Vorhandensein von Satzzeichen
  • Der Groß-/Kleinschreibung

Das große Sprachmodell (LLM) muss aus Rohdaten lernen, dass diese Wörter trotz der Unterschiede in den Tokens dasselbe Konzept darstellen oder zumindest extrem ähnlich sind. Diese Variabilität kann die Leistung verringern.

Andere menschliche Sprachen

Wenn man die Blockgröße für Englisch mit anderen Sprachen vergleicht, stellt man oft eine deutlich höhere Anzahl von Tokens für andere Sprachen als Englisch fest. Dieser Unterschied rührt daher, dass Blöcke für andere Sprachen tendenziell fragmentierter sind, was zu einer aufgeblähten Sequenzlänge in Dokumenten führt.

Im Aufmerksamkeitsmechanismus von maschinellen Lerntransformern ist die Wahrscheinlichkeit höher, dass der Kontext für nicht-englische Sprachen ausgeht. Selbst bei der Übermittlung derselben Nachricht werden mehr Tokens verbraucht, weil die Blöcke kleiner sind. Diese Diskrepanz wird sowohl durch den Trainingssatz des Tokenizers als auch durch den Tokenizer selbst beeinflusst.

Letztendlich führt diese ineffiziente Nutzung des Kontextfensters für nicht-englische Sprachen zu einer schlechteren Leistung des großen Sprachmodells (LLM) bei der Verarbeitung nicht-englischer Abfragen.

Tokenisierung und Code — Python

Im Fall von Python verbrauchte der GPT-2-Encoder von OpenAI oft zahlreiche Tokens für einzelne Leerzeichen, die in der Einrückung von Python-Codeabschnitten verwendet wurden. Dieses Verhalten, ähnlich den Herausforderungen bei nicht-englischen Sprachen, führt zu einer erheblichen Aufblähung des Kontextfensters des limitierten Sprachmodells (LLM) und folglich zu einem Leistungsabfall.

Konfiguration: YAML vs. JSON

Es wurde festgestellt, dass YAML eine höhere Dichte als JSON aufweist und weniger Tokens benötigt, um dieselbe Aufgabe zu erfüllen.

Hier ist eine einfache Veranschaulichung:

JSON: 46 Tokens

Die erhöhte Aufblähung für JSON führt zu:

  1. Schwierigerem Verständnis für das LLM (geringere Dichte, anfälliger für Überschreitung des Kontextfensters).
  2. Höheren Kosten für die Benutzer (da sie im Wesentlichen pro Token bei API-Aufrufen an OpenAI bezahlen).

Probleme bei der Tokenisierung

Die Tokenisierung liegt vielen Anomalien zugrunde, die bei großen Sprachmodellen (LLMs) beobachtet werden. Mehrere Probleme, die zunächst auf die neuronale Netzwerkarchitektur oder das LLM selbst zurückzuführen scheinen, können tatsächlich auf die Tokenisierung zurückgeführt werden. Zum Beispiel:

  • LLMs haben Schwierigkeiten, Wörter zu buchstabieren oder einfache Zeichenkettenverarbeitungsaufgaben wie das Umkehren von Zeichenketten auszuführen.
  • Die Leistung tendiert dazu, sich für nicht-englische Sprachen zu verschlechtern.
  • LLMs zeigen unterdurchschnittliche Leistung bei der Verarbeitung einfacher Arithmetik.
  • GPT-2 hatte erhebliche Schwierigkeiten bei Programmieraufgaben in Python.
  • Es können eigenartige Warnungen bezüglich nachgestellter Leerzeichen auftreten.
  • Der Ausdruck „Solid Gold Magikarp“ führt LLMs oft dazu, in nicht zusammenhängende Abschweifungen abzudriften.
  • YAML wird gegenüber JSON bevorzugt, wenn mit LLMs gearbeitet wird.

Tokenisierung in großen Sprachmodellen

Beim Training großer Sprachmodelle (LLMs) werden Zeichenketten in ganze Zahlen aus einem vordefinierten Vokabular umgewandelt. Diese ganzen Zahlen werden dann verwendet, um Vektoren aus einer Einbettungstabelle abzurufen, die anschließend in das Transformermodell eingespeist werden. Dieser Prozess wird komplex, da nicht nur das grundlegende englische Alphabet unterstützt werden muss, sondern auch verschiedene Sprachen und Sonderzeichen wie Emojis.

Zeichenketten in Python und Unicode-Codepunkte

In Python sind Zeichenketten unveränderliche Sequenzen, die aus Unicode-Codepunkten bestehen. Diese Codepunkte werden vom Unicode-Konsortium im Unicode-Standard definiert, der derzeit etwa 150.000 Zeichen aus 161 Schriften umfasst. Der Unicode-Standard wird aktiv weiterentwickelt; die neueste Version 15.1 wurde im September 2023 veröffentlicht.

Um den Unicode-Codepunkt für ein einzelnes Zeichen in Python abzurufen, können wir die Funktion ord() verwenden. Zum Beispiel:

Dennoch ist es nicht praktikabel, diese rohen Codepunkt-Ganzzahlen für die Tokenisierung zu verwenden, da dies zu einem übermäßig großen Vokabular (150.000+) führen würde, das zudem instabil ist, da sich der Unicode-Standard ständig weiterentwickelt.

Unicode-Byte-Kodierungen

Auf der Suche nach einer effektiveren Tokenisierungslösung betrachten wir Unicode-Byte-Kodierungen wie ASCII, UTF-8, UTF-16 und UTF-32. Diese Kodierungen legen die Methoden fest, um abstrakte Unicode-Codepunkte in konkrete Bytes zu übersetzen, die für die Speicherung und Übertragung geeignet sind.

Unicode-Byte-Kodierungen: ASCII, UTF-8, UTF-16, UTF-32

Das Unicode-Konsortium beschreibt drei Arten von Kodierungen: UTF-8, UTF-16 und UTF-32. Diese Kodierungen dienen als Mittel zur Umwandlung von Unicode-Text in Binärdaten oder Byteströme.

Unter diesen Kodierungen ist UTF-8 die gebräuchlichste. Sie übersetzt jeden Unicode-Codepunkt in einen Bytestrom von einem bis vier Bytes, abhängig vom Codepunkt. Die ersten 128 Codepunkte (ASCII) benötigen nur ein Byte. Die nächsten 1.920 Codepunkte benötigen zwei Bytes zur Kodierung und umfassen die meisten lateinischen Alphabete. Drei Bytes werden für die restlichen 61.440 Codepunkte innerhalb der grundlegenden mehrsprachigen Ebene (BMP) benötigt. Vier Bytes umfassen andere Unicode-Ebenen, einschließlich weniger gebräuchlicher CJK-Zeichen, verschiedener historischer Schriften und mathematischer Symbole.

Die direkte Verwendung der rohen UTF-8-Bytes wäre für Sprachmodelle höchst ineffizient, da dies zu extrem langen Sequenzen mit einer begrenzten Vokabulargröße von nur 256 möglichen Bytewerten führen würde. Eine solche Einschränkung behindert die Fähigkeit des Modells, ausreichend lange Kontexte zu berücksichtigen.

Die Lösung liegt in der Verwendung eines Byte-Pair-Encoding-Algorithmus (BPE), um diese Bytesequenzen variabel zu komprimieren. Dieser Ansatz ermöglicht die effiziente Darstellung von Text mit einer größeren, aber anpassbaren Vokabulargröße.

Was ist der Unterschied zwischen Tokenisierung und Embeddings?

Tokenisierung und Embeddings sind separate, jedoch miteinander verbundene Prozesse innerhalb großer Sprachmodelle (LLMs) wie GPT, die dazu beitragen, wie diese Modelle Text verstehen und generieren. Hier ist ein kurzer Überblick über beide und ihre Unterschiede:

LLM-Tokenisierung

Ziel: Die Tokenisierung zielt darauf ab, Rohtext in eine Sequenz von Tokens umzuwandeln, die je nach gewähltem Tokenisierungsansatz Wörter, Unterwörter oder Zeichen umfassen können.

Vorgehen: Sie beinhaltet die Zerlegung des Textes in handhabbare Segmente, die das Modell interpretieren kann. Dies kann zunächst eine Segmentierung des Textes auf der Grundlage von Leerzeichen und Satzzeichen umfassen, gefolgt von einer weiteren Segmentierung in Unterwörter oder Zeichen, wenn diese im vordefinierten Vokabular des Modells fehlen.

Ergebnis: Das Ergebnis ist eine Token-Sequenz, die den ursprünglichen Text in einem für die Modellverarbeitung geeigneten Format darstellt. Jeder Token erhält eine eindeutige ganzzahlige ID, die dem Vokabular des Modells entspricht.

Embeddings

Ziel: Embeddings sind kompakte, niedrigdimensionale, kontinuierliche Vektordarstellungen von Tokens. Sie kodieren semantische und syntaktische Bedeutungen und erleichtern das Verständnis von Sprachnuancen durch das Modell.

Vorgehen: Nach der Tokenisierung wird jeder Token (repräsentiert durch seine ganzzahlige ID) mit einem Einbettungsvektor assoziiert. Diese Vektoren werden während der Trainingsphase des Modells erlernt und in einer Einbettungsmatrix oder -tabelle gespeichert.

Ergebnis: Die Embeddings dienen als Eingabe für die neuronalen Netzwerkschichten des LLM und ermöglichen es dem Modell, Berechnungen an den Tokens durchzuführen und Beziehungen und Muster im Datensatz zu erkennen.

Ausführlichere Informationen zu LLM-Embeddings finden Sie in unserem Blog: Was sind LLM-Embeddings: Alles, was Sie wissen müssen

upload in progress, 0

Unterscheidungsmerkmale

Verarbeitungsstufe: Die Tokenisierung dient als anfänglicher Vorverarbeitungsschritt, der Text in ein für das Modell verständliches Format (Tokens) umwandelt, während Embeddings nach der Tokenisierung erfolgen und Tokens in detaillierte Vektordarstellungen übersetzen.

Funktion: Die Tokenisierung befasst sich hauptsächlich mit der strukturellen Zerlegung und Darstellung von Text, während Embeddings darauf abzielen, die semantischen und syntaktischen Bedeutungen, die in Tokens eingebettet sind, zu erfassen und zu nutzen.

Darstellung: Die Tokenisierung liefert diskrete, ganzzahlige Darstellungen von Textkomponenten, während Embeddings diese Ganzzahlen in kontinuierliche Vektoren umwandeln, die sprachliche Informationen kodieren.

Fazit

Zusammenfassend lässt sich sagen, dass Tokenisierung und Embeddings eine zentrale Rolle bei der Funktionsweise großer Sprachmodelle spielen. Während die Tokenisierung Text in Tokens strukturiert, verleihen Embeddings diesen Tokens durch Vektordarstellungen semantische und syntaktische Bedeutungen. Durch das Verständnis dieser Prozesse gewinnen wir Einblick, wie LLMs Text interpretieren und generieren, was zu Fortschritten in der natürlichen Sprachverarbeitung beiträgt.

novita.ai, die Komplettplattform für grenzenlose Kreativität, die Ihnen Zugang zu über 100 APIs bietet. Von Bildgenerierung und Sprachverarbeitung bis hin zur Audioverbesserung und Videobearbeitung, kostengünstiges Pay-as-you-go-Modell, das Sie von GPU-Wartungsaufwänden befreit, während Sie Ihre eigenen Produkte entwickeln. Testen Sie es kostenlos.

Empfohlene Lektüre

Was ist der Unterschied zwischen LLM und GPT

LLM-Rangliste 2024: Vorhersagen enthüllt

Novita AI LLM-Inferenz-Engine: der größte Durchsatz und die günstigste Inferenz verfügbar