Tokenisierung: Vokabular, One-Hot und Byte Pair Encoding in Python
Neuronale Netze verstehen nur Zahlen, daher wird Text zuerst in Tokens zerlegt, und jedes Token erhält eine ID. Sprachmodelle wie GPT nutzen Byte Pair Encoding, das Tokens aus häufigen Wortteilen bildet.
Das Konzept in einfachen Worten
Neuronale Netze verstehen nur Zahlen, daher wird Text zuerst in Tokens zerlegt, und jedes Token erhält eine ID. Sprachmodelle wie GPT nutzen Byte Pair Encoding, das Tokens aus häufigen Wortteilen bildet.
Verwandle Text in Zahlen wie Sprachmodelle: Baue ein Vokabular, kodiere Wörter als One-Hot und lerne Teilwort-Tokens mit BPE.
Die wichtigsten Ideen
- Ein Token ist eine Texteinheit, etwa ein Wort, ein Wortteil oder ein Zeichen.
- One-Hot-Vektoren sind einfach, werden bei großen Vokabularen aber sehr lang.
- BPE behandelt seltene und neue Wörter, indem es sie in bekannte Teile zerlegt.
- Modelle bilden danach jede Token-ID auf einen gelernten Vektor ab, das sogenannte Embedding.
Wann wird dieser Ansatz verwendet?
- Verstehen, was in neuronalen Netzen und KI-Bibliotheken passiert.
- Die Idee lernen, bevor du sie in den passenden Challenges umsetzt.
- Dich auf Kurse zu maschinellem Lernen, Vorstellungsgespräche und Projekte vorbereiten.
Selbst ausprobieren
Tippe einen eigenen Satz, um ein Vokabular zu bauen, und klicke dann auf Schritt, um zu sehen, wie Byte Pair Encoding das häufigste Paar verschmilzt.
Beispielcode
from collections import Counter
text = "the cat sat on the mat"
# 1. Build a vocabulary: every distinct word gets an id.
words = text.split()
vocab = {word: i for i, word in enumerate(sorted(set(words)))}
print("vocab:", vocab)
print("ids:", [vocab[w] for w in words])
# 2. One-hot encoding: a vector with a single 1 at the word's id.
def one_hot(word):
return [1 if vocab[word] == i else 0 for i in range(len(vocab))]
print("one-hot 'cat':", one_hot("cat"))
# 3. Byte pair encoding: repeatedly merge the most frequent pair of symbols.
tokens = list("banana")
for _ in range(2):
pairs = Counter(zip(tokens, tokens[1:]))
best = max(pairs, key=pairs.get)
merged, i = [], 0
while i < len(tokens):
if i + 1 < len(tokens) and (tokens[i], tokens[i + 1]) == best:
merged.append(tokens[i] + tokens[i + 1])
i += 2
else:
merged.append(tokens[i])
i += 1
tokens = merged
print("merge", best, "->", tokens)
Erwartete Ausgabe
vocab: {'cat': 0, 'mat': 1, 'on': 2, 'sat': 3, 'the': 4}
ids: [4, 0, 3, 2, 4, 1]
one-hot 'cat': [1, 0, 0, 0, 0]
merge ('a', 'n') -> ['b', 'an', 'an', 'a']
merge ('b', 'an') -> ['ban', 'an', 'a']
So funktioniert es
Das Vokabular ordnet jedem unterschiedlichen Wort eine ID zu, und der Satz wird zu einer Liste von IDs. Ein One-Hot-Vektor hat nur an der ID des Wortes eine 1. BPE zählt benachbarte Symbolpaare und verschmilzt das häufigste, zuerst ('a', 'n') und dann ('b', 'an').
Ändere die Werte und führe das Programm im CodeUtility Python Online-Compiler aus, ohne Python lokal zu installieren.
Übungsaufgaben
Verändere Eingaben und Randfälle, bevor du die Lösung mit größeren Datenmengen testest.
- Ändere Eingaben oder Gewichte und sage die Ausgabe vor dem Ausführen voraus.
- Gib die Zwischenwerte aus, um jeden Rechenschritt zu verfolgen.
- Löse die verlinkten Challenges unten, um die Idee selbst umzusetzen.
Mit einer Challenge üben
Nutze den Inhalt dieser Lektion, um ein echtes Problem zu lösen. Jede Challenge läuft im Browser, mit sofortigen Tests und einem KI-Review.
- Wort-Tokenizer und Vokabular Zerlege Text in kleingeschriebene Wörter und baue ein nach Häufigkeit sortiertes Vokabular, der erste Schritt jedes Sprachmodells. Einfach
- One-Hot-Kodierung Verwandle Kategorien in Vektoren mit einer einzigen 1, das Eingabeformat für Klassifikatoren und Embeddings. Einfach
- Byte-Pair-Encoding-Merges (BPE) Lerne Subwort-Merges wie GPT-Tokenizer: Verschmelze wiederholt das häufigste Paar benachbarter Symbole. Mittel