Direkt zum Inhalt

Transformers v5 Tokenisierung: Leitfaden für Architektur und Migration

Aktualisiere auf Transformers v5. Ein praktischer Leitfaden zum einheitlichen Rust-Backend, zu API-Änderungen und zu parallelen Migrationsmustern für die Codierung und den Chat zwischen Version 4 und Version 5.
Aktualisiert 27. Jan. 2026  · 8 Min. lesen

Tokenisierung ist ein Teil des HuggingFace Transformer, den wir kaum bemerken, bis er sich in deinen Ausgaben bemerkbar macht. Schon ein kleines Leerzeichen kann die Token-Grenzen durcheinanderbringen, beim Entschlüsseln können komische Zeichenfolgen rauskommen und Chat-Eingabeaufforderungen können beim Erstellen von Vorlagen einfach so kaputtgehen. 

Transformers v5 geht diese Probleme mit einem neuen Tokenisierungsdesign an, das das Verhalten über verschiedene Implementierungen hinweg standardisiert, die API-Oberfläche vereinfacht und die internen Abläufe des Tokenizers bei der Fehlersuche leichter überprüfbar macht.

In diesem Tutorial erkläre ich dir erst mal, was Tokenisierung eigentlich macht und wie die Pipeline läuft. Danach zeige ich dir, was sich in Version 5 aus praktischer Sicht und mit Blick auf die Migration wirklich ändert. Du siehst die Codemuster von Version 4 und Version 5 für die Codierung, Decodierung, Chat-Vorlagen und Serialisierung nebeneinander, damit du deine Codebasen aktualisieren kannst.

Wenn du noch keine Erfahrung mit Tokenisierung hast, empfehle ich dir, den Kurs Kurs „Einführung in die Verarbeitung natürlicher Sprache in Python“.

Was ist Tokenisierung?

Eine echt gängige Definition von Tokenisierung ist, dass sie Text in Token-IDs umwandelt, was zwar stimmt, aber nicht alles sagt. In der Produktion ist es besser, die Tokenisierung als einen Vertrag zu sehen. Ausgehend von einem Rohtext muss der Tokenizer eine strukturierte Kodierung erzeugen, die das Modell sicher verarbeiten kann.

Dieser Vertrag muss mindestens Folgendes beinhalten:

  • input_idsDas sind ganzzahlige Token-IDs, die in die Einbettungstabelle des Modells indexieren.
  • Es enthält auch die „ attention_mask “, die angibt, welche Positionen echten Tokens entsprechen und welche nur Füllzeichen sind.
  • Offsets/Ausrichtungen (falls vorhanden) ordnen Token-Spannen wieder Zeichen- oder Wortspannen im Originaltext zu, was für Hervorhebungen, NER und Zuordnungen wichtig ist.
  • Die spezielle Token-Semantik muss beibehalten werden, was bedeutet, dass die Platzierung und IDs von BOS/EOS/PAD/UNK mit den Konventionen übereinstimmen müssen, die beim Training des Modells verwendet wurden.
  • Bei Chat-Modellen gehört die Chat-Formatierung zum Deal, also nehmen wir normalerweise die Chat-Vorlage des Modells, bevor wir die Tokenisierung machen.

In Transformers sind diese Aufgaben in der Tokenizer-Schicht (nicht im Model Forward Pass) angesiedelt, deshalb ist ` AutoTokenizer ` der Standard-Einstiegspunkt. Hier ist ein einfaches Beispiel:

from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("HuggingFaceTB/SmolLM3-3B")
enc = tokenizer("Hello world")
print(enc["input_ids"])
print(tokenizer.convert_ids_to_tokens(enc["input_ids"]))

Hier ist das, was du als Ergebnis erwarten kannst:

[9906, 1917]
['Hello', 'Ġworld']

Hier ist „ enc ” ein „ BatchEncoding ”-Objekt (ein dict-ähnlicher Container), das die vom Tokenizer erzeugten modellfertigen Felder enthält (wie „ input_ids ” und oft „ attention_mask ”). Die Ausgabe gibt „ [9906, 1917] “ zurück, also die ganzzahligen Token-IDs für die Eingabezeichenfolge, zusammen mit „ ['Hello', 'Ġworld'] “, was die entsprechenden Token-Zeichenfolgen anzeigt. 

Anmerkung: Das Präfix „Ġ“ ist eine gängige Konvention, die sagt, dass das Token ein führendes Leerzeichen hat. Also steht „Ġworld“ für „ world“ und nicht für „world“ ohne Leerzeichen.

Tokenisierung als Pipeline: Wie v5 es debugbar macht

Tokenisierungsprobleme zeigen sich normalerweise als kleine Probleme wie zusätzliche Leerzeichen, komische Unicode-Trennungen, ein plötzlicher Sprung in der Tokenanzahl oder Chat-Eingabeaufforderungen, die den Rollen nicht richtig folgen. 

Der einfachste Weg, diese Probleme zu beheben, ist, die Tokenisierung wie eine Abfolge von Schritten zu sehen. Sobald du weißt, welche Phase für was zuständig ist, kannst du Probleme schnell eingrenzen, anstatt zu raten. Hier sind ein paar Tipps, die du beachten solltest:

Tokenisierung ist eine zusammensetzbare Pipeline.

Das erste Ziel ist, mit dem weit verbreiteten Irrglauben aufzuräumen, dass ein Tokenizer einfach nur ein WordPiece ist. Es ist eher eine Abfolge von verschiedenen Transformationsschritten, wie Normalisierung, Vor-Tokenisierung, Subword-Modellierung, Nachbearbeitung und Dekodierung. Jede Phase bestimmt einen anderen Teil des endgültigen Verhaltens.

Debugbares mentales Modell

Die Aufteilung der Tokenisierung in Phasen gibt uns einen zuverlässigen Plan für die Fehlerbehebung:

  • Leerzeichen-Probleme kommen meistens vom Pre-Tokenizer oder Decoder.
  • Unicode kommt normalerweise aus dem Normalisierer.
  • Token-Explosionen werden oft durch das Subword-Modell und seine Vokabeln/Zusammenführungen verursacht.
  • Fehler beim Formatieren von Chats kommen meistens von Vorlagen oder der Nachbearbeitung.

Von Grund auf klar und überprüfbar

Transformers v5 macht es einfacher, Tokenizer zu checken, vor allem solche, die auf der Rust-Tokenizer-Engine basieren. 

Wenn das Rust-Backend benutzt wird, können wir die zugrunde liegenden Komponenten über die „ tokenizer._tokenizer ” (Normalisierer, Vor-Tokenisierer, Modell, Nachbearbeiter, Decoder) checken. Wir benutzen „ _tokenizer “ nicht jeden Tag, aber es ist echt praktisch mit der Version v5, die die internen Abläufe sichtbar macht, wenn wir debuggen müssen.

Das führt natürlich zu der Unterscheidung zwischen Engine und Wrapper:

  • Engine (tokenizers): Die Low-Level-Implementierung in Rust, die die Kernmechanismen wie Normalisierung, Aufteilung, Segmentierung von Teilwörtern und Erstellung von Token-IDs (und Offsets, wenn verfügbar) übernimmt.
  • Wrapper (transformers): Das ist die modellorientierte Schicht, die diese Mechanismen in modellfertigeEingaben für „“ und „ umwandelt, indem sie Konventionen wie die Verarbeitung spezieller Token, Chat-Vorlagen, Regeln für Auffüllung/Kürzung und frameworkspezifische Tensor-Ausgaben durchsetzt.

Was hat sich in Transformers v5 geändert?

Transformers v5 ist eine große standardisierte Version, und die Tokenisierung ist einer der Bereiche, wo man die Änderungen sieht. Die Veröffentlichung reduziert doppelte Implementierungen, sorgt für ein einheitlicheres Verhalten der Tokenizer über verschiedene Modelle hinweg und macht es einfacher, Tokenizer zu überprüfen und (in manchen Fällen) von Grund auf neu zu trainieren. Hier sind die Änderungen, die für die täglichen Nutzer am wichtigsten sind.

Eine Tokenizer-Implementierung pro Modell

In früheren Versionen hatten viele Modelle:

  • ein langsamer Python-Tokenizer
  • Eine schnelle Tokenizer-Implementierung mit Rust

In Version 5 wird Transformers zu einer einzigen Tokenizer-Datei pro Modell zusammengefasst und der Rust-gestützte Pfad wird bevorzugt. Hier ist der Grund, warum der Rust-basierte Tokenizer funktioniert:

  • Es beseitigt doppelte langsame und schnelle Implementierungen.
  • Es reduziert Paritätsfehler, die durch kleine Unterschiede im Verhalten zwischen diesen Implementierungen entstehen.
  • Diese Tokenizer-Implementierung macht die Testoberfläche kleiner und einfacher, weil es nur einen Hauptcodepfad zu überprüfen gibt.
  • Außerdem schafft es eine einheitliche „Quelle der Wahrheit“ für das Verhalten des Tokenizers über alle Modelle hinweg.

Umstellung der API-Verschlüsselung

Die v4-API „ encode_plus() “ ist veraltet, weil man jetzt lieber direkt den Tokenizer aufruft. Hier ist der Unterschied zwischen Version 4 und Version 5:

Version v4

enc = tokenizer.encode_plus(
    text,
    truncation=True,
    padding="max_length",
    max_length=128,
    return_tensors="pt",
)

Version 5

enc = tokenizer(
    text,
    truncation=True,
    padding="max_length",
    max_length=128,
    return_tensors="pt",
)

Der Wechsel von „ encode_plus() ” zu einem einzigen Einstiegspunkt „ tokenizer() ” reduziert echte Fehlermodi, die im Produktionscode auftreten. 

In Version 4 konnte es wegen der vielen verschiedenen Kodierungsmethoden zu kleinen Unterschieden bei Auffüllung, Kürzung, Batching oder Tensor-Konvertierung kommen, je nachdem, welchen Pfad man benutzt hat. Diese Unterschiede sind oft nur beim Wechsel von einzelnen Eingaben zu Batch-Workloads aufgefallen. 

v5 macht alles auf einem einzigen Kodierungspfad einheitlich, der immer ein „ BatchEncoding “ zurückgibt. Das macht das Verhalten berechenbarer und reduziert sowohl Randfallfehler als auch die Menge an Code, die nötig ist, um die Tokenisierungspipelines konsistent zu halten.

Entschlüsselung der API-Migration

v5 macht die Dekodierung einheitlich, sodass „ decode() “ sowohl einzelne als auch gebündelte Eingaben verarbeitet und das Dekodierungsverhalten an das Kodierungsverhalten anpasst.

Version v4

texts = tokenizer.batch_decode(batch_ids, skip_special_tokens=True)

Version 5

texts = tokenizer.decode(batch_ids, skip_special_tokens=True)

In Version 5 ist die Dekodierung so gemacht, dass sie die Kodierung widerspiegelt. Genau wie „ tokenizer() “ eine einzelne Zeichenfolge oder mehrere Zeichenfolgen akzeptieren kann, kann „ decode() “ eine einzelne Folge von Token-IDs oder mehrere Folgen akzeptieren. 

Das Wichtigste hier ist der Rückgabetyp, d. h. wenn du eine Sequenz übergibst, bekommst du eine einzelne Zeichenfolge zurück, aber wenn du einen Stapel übergibst (wie list[list[int]]), bekommst du eine Liste von Zeichenfolgen. Das macht die API insgesamt übersichtlicher, aber es heißt auch, dass jeder Code, der davon ausgeht, dass „ decode() “ immer eine Zeichenfolge zurückgibt, angepasst werden sollte, um beide Fälle zu behandeln.

Chat-Vorlagen

In Version 4 hat „ apply_chat_template “ aus Gründen der Abwärtskompatibilität Roh input_ids en zurückgegeben. In Version 5 gibt es wie andere Tokenizer-Methoden ein „ BatchEncoding “ zurück.

Version v4

input_ids = tokenizer.apply_chat_template(messages, return_tensors="pt")

Version 5

enc = tokenizer.apply_chat_template(messages, return_tensors="pt")
input_ids = enc["input_ids"]
attention_mask = enc["attention_mask"]

In Version 5 wird „ apply_chat_template() “ wie ein richtiger Tokenizer-Einstiegspunkt behandelt und nicht mehr wie ein spezieller Hilfsfall. Anstatt nur input_ids zurückzugeben, wird ein komplettes BatchEncoding -Objekt zurückgegeben (mit Feldern wie input_ids und attention_mask). 

Das ist wichtig, weil Eingaben im Chat-Format jetzt in denselben Workflow für Batching, Padding, Trunkierung und Tensor-Rückgabe eingebunden werden wie die normale Tokenisierung. Wir brauchen also keinen zusätzlichen Code, um Masken neu zu erstellen oder Formate manuell anzupassen, bevor wir Eingaben an das Modell schicken.

Serialisierung des Tokenizers

In Version 5 wird die Tokenizer-Serialisierung vereinfacht, indem Metadaten für spezielle Token und hinzugefügte Token in weniger Artefakten zusammengefasst werden, während ältere Dateien aus Gründen der Abwärtskompatibilität weiterhin unterstützt werden. Das verringert das Risiko, dass mehrere „Source of Truth“-Dateien nicht mehr synchron sind, und macht es einfacher, Tokenizer-Assets in Tools zu laden und wiederzuverwenden, die außerhalb der Transformers-Bibliothek laufen.

Tokenizer als konfigurierbare Strukturen

In Version 5 ist die wichtigste Änderung, dass ein Tokenizer jetzt wie eine festgelegte Pipeline mit gelernten Artefakten behandelt wird und nicht mehr nur etwas ist, das wir aus serialisierten Dateien laden.

  • Die Tokenizer-Klasse legt fest, wie Text normalisiert, in Teile zerlegt, in Teilwort-Token umgewandelt und schließlich wieder in Text zurückverwandelt wird.
  • Das Vokabular und die Zusammenführungsregeln sind erlernte Sachen, also die trainierten Teile, die bestimmen, welche Token es gibt und wie Text in Token-IDs gepackt wird.
  • Diese Trennung macht Workflows möglich, bei denen die Architektur im Vordergrund steht. Bei den unterstützten Tokenizern kannst du einen Tokenizer erstellen, der dem Design eines Modells folgt, und dann das Vokabular/die Zusammenführungen separat laden oder trainieren, was die Anpassung und das erneute Training viel einfacher macht.

Abschließende Gedanken 

Die Tokenisierung von Transformers v5 ist ein großer Schritt in Richtung Standardisierung und Vereinfachung. Es gibt jetzt einen kanonischeren Verhaltenspfad (der langsame/schnelle Abweichungen reduziert), eine vereinfachte API-Oberfläche, Chat-Vorlagen, die dasselbe strukturierte Objekt „ BatchEncoding “ wie die normale Tokenisierung zurückgeben, und eine konsolidierte Serialisierung, die fragile Annahmen auf Dateiebene reduziert. 

Außerdem wird ein Architektur-First-Ansatz gefördert, bei dem Tokenizer einfacher zu überprüfen sind und in bestimmten Fällen von Grund auf neu trainiert werden können. Für einen reibungslosen Umstieg von v4 solltest du encode_plus() durch tokenizer() ersetzen, batch_decode() durch decode() ersetzen, apply_chat_template() -Aufrufe so anpassen, dass sie mit BatchEncoding funktionieren, beim Speichern keine alten Tokenizer-Dateinamen fest einprogrammieren und damit rechnen, dass sich langsame Tokenizer-Eigenheiten dem Verhalten der Tokenizer-Unterstützung annähern.

Wenn du mehr über die neuesten Versionen erfahren möchtest, findest du hier die Release Notes. Ich empfehle auch den Hugging Face Fundamentals Lernpfad, um ein bisschen praktische Erfahrung zu sammeln.

Häufig gestellte Fragen zu Tokenisierung v5

Muss ich mich immer noch zwischen den Tokenizer-Klassen „Fast“ (Rust) und „Slow“ (Python) entscheiden?

Nein. Transformers v5 fasst diese zu einer einzigen Implementierung pro Modell zusammen. Die Bibliothek nutzt jetzt standardmäßig das superoptimierte Rust-Backend (tokenizers -Bibliothek) für alle unterstützten Modelle, sodass man nicht mehr manuell zwischen LlamaTokenizerFast und LlamaTokenizer wählen muss.

Hört mein aktueller encode_plus-Code sofort auf zu funktionieren?

Nicht sofort, aber es wird nicht mehr unterstützt. Auch wenn v5 im Moment „ encode_plus “ mit einer Warnung unterstützt, solltest du besser auf die direkte Methode „ tokenizer(__call__) “ umsteigen. So bekommst du die neuen einheitlichen Batch-Verhaltensweisen und machst deinen Code zukunftssicher.

Warum gibt apply_chat_template jetzt ein BatchEncoding-Dict statt einer Zeichenfolge zurück?

Chat-Eingaben wie alle anderen Modelleingaben behandeln. Durch die Rückgabe eines Wörterbuchs (mit input_ids und attention_mask) ermöglicht v5, dass Daten im Chat-Format sofort gebündelt, aufgefüllt und gekürzt werden können, ohne dass ein zweiter Tokenisierungsschritt nötig ist.

Kann ich weiterhin return_tensors="tf" oder return_tensors="jax" verwenden?

Nein. Als Teil der Änderungen an der v5-Architektur hat Transformers die offizielle Unterstützung für TensorFlow- und Flax/JAX-Backends eingestellt, um sich komplett auf PyTorch zu konzentrieren. Du musst das PyTorch-Backend nutzen oder Modelle in Formate wie ONNX/GGUF für andere Frameworks exportieren.

Wie kann ich „stille“ Tokenisierungsfehler in Version 5 beheben?

Nutze die überprüfbaren internen Komponenten. In Version 5 kannst du über „ tokenizer._tokenizer “ auf die zugrunde liegende Rust-Pipeline zugreifen. So kannst du bestimmte Phasen – wie den Normalisierer oder den Vor-Tokenisierer – einzeln checken, um genau zu sehen, wo eine Zeichenfolge unerwartet geteilt oder geändert wird.


Aashi Dutt's photo
Author
Aashi Dutt
LinkedIn
Twitter

Ich bin Google Developers Expertin für ML (Gen AI), dreifache Kaggle-Expertin und Women-Techmakers-Botschafterin mit über drei Jahren Erfahrung in der Tech-Branche. 2020 habe ich ein Health-Tech-Startup mitgegründet und absolviere derzeit einen Master in Informatik an der Georgia Tech mit Schwerpunkt Machine Learning.

Themen

Die besten DataCamp-Kurse

Lernpfad

Grundlagen von Hugging Face

12 Std.
Finde die neuesten Open-Source-KI-Modelle, Datensätze und Apps, entwickle KI-Agenten und optimiere LLMs mit Hugging Face. Werde noch heute Teil der größten KI-Community!
Details anzeigenRight Arrow
Kurs starten
Mehr anzeigenRight Arrow
Verwandt

Blog

Die 36 wichtigsten Fragen und Antworten zum Thema generative KI für 2026

Dieser Blog hat eine ganze Reihe von Fragen und Antworten zu generativer KI, von den Grundlagen bis hin zu fortgeschrittenen Themen.
Hesam Sheikh Hassani's photo

Hesam Sheikh Hassani

15 Min.

Blog

Arten von KI-Agenten: Ihre Rollen, Strukturen und Anwendungen verstehen

Lerne die wichtigsten Arten von KI-Agenten kennen, wie sie mit ihrer Umgebung interagieren und wie sie in verschiedenen Branchen eingesetzt werden. Verstehe einfache reflexive, modellbasierte, zielbasierte, nutzenbasierte, lernende Agenten und mehr.
Vinod Chugani's photo

Vinod Chugani

14 Min.

Blog

Die 50 wichtigsten AWS-Interviewfragen und Antworten für 2026

Ein kompletter Leitfaden, um die grundlegenden, mittleren und fortgeschrittenen AWS-Interviewfragen zu checken, zusammen mit Fragen, die auf echten Situationen basieren.
Zoumana Keita 's photo

Zoumana Keita

15 Min.

Tutorial

Python JSON-Daten: Ein Leitfaden mit Beispielen

Lerne, wie man mit JSON in Python arbeitet, einschließlich Serialisierung, Deserialisierung, Formatierung, Leistungsoptimierung, Umgang mit APIs und Verständnis der Einschränkungen und Alternativen von JSON.
Moez Ali's photo

Moez Ali

Tutorial

Python Switch Case Statement: Ein Leitfaden für Anfänger

Erforsche Pythons match-case: eine Anleitung zu seiner Syntax, Anwendungen in Data Science und ML sowie eine vergleichende Analyse mit dem traditionellen switch-case.
Matt Crabtree's photo

Matt Crabtree

Tutorial

Ein Leitfaden zu Python-Hashmaps

Finde heraus, was Hashmaps sind und wie sie in Python mit Hilfe von Wörterbüchern umgesetzt werden.
Javier Canales Luna's photo

Javier Canales Luna

Mehr anzeigenMehr anzeigen