KI-Konzepte in Python

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

Code ausführen →
main.py
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.

  1. Ändere Eingaben oder Gewichte und sage die Ausgabe vor dem Ausführen voraus.
  2. Gib die Zwischenwerte aus, um jeden Rechenschritt zu verfolgen.
  3. Löse die verlinkten Challenges unten, um die Idee selbst umzusetzen.
In der Python-IDE ausführen →

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.

Alle Challenges