Tokenisation : vocabulaire, one-hot et byte pair encoding en Python
Les réseaux de neurones ne comprennent que les nombres, donc le texte est d'abord découpé en tokens, et chaque token reçoit un identifiant. Les modèles de langage comme GPT utilisent le byte pair encoding, qui construit des tokens à partir de morceaux de mots fréquents.
Le concept en termes simples
Les réseaux de neurones ne comprennent que les nombres, donc le texte est d'abord découpé en tokens, et chaque token reçoit un identifiant. Les modèles de langage comme GPT utilisent le byte pair encoding, qui construit des tokens à partir de morceaux de mots fréquents.
Transformez du texte en nombres comme le font les modèles de langage : construisez un vocabulaire, encodez les mots en one-hot et apprenez des sous-mots avec BPE.
Idées clés
- Un token est une unité de texte, comme un mot, un morceau de mot ou un caractère.
- Les vecteurs one-hot sont simples mais deviennent très longs pour de grands vocabulaires.
- BPE gère les mots rares et nouveaux en les découpant en morceaux connus.
- Les modèles associent ensuite chaque identifiant de token à un vecteur appris appelé embedding.
Quand l’utiliser ?
- Comprendre ce qui se passe à l'intérieur des réseaux de neurones et des bibliothèques d'IA.
- Apprendre l'idée avant de l'implémenter dans les défis correspondants.
- Se préparer aux cours d'apprentissage automatique, aux entretiens et aux projets.
À vous de jouer
Tapez votre propre phrase pour construire un vocabulaire, puis appuyez sur Étape pour voir le byte pair encoding fusionner la paire la plus fréquente.
Code d’exemple
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)
Résultat attendu
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']
Fonctionnement
Le vocabulaire associe chaque mot distinct à un identifiant, et la phrase devient une liste d'identifiants. Un vecteur one-hot n'a un 1 qu'à la position de l'identifiant du mot. BPE compte les paires de symboles voisins et fusionne la plus fréquente, d'abord ('a', 'n') puis ('b', 'an').
Modifiez les valeurs et exécutez le programme avec le compilateur Python en ligne CodeUtility, sans installation locale.
Exercices pratiques
Modifiez les entrées et testez les cas limites avant d’utiliser des données plus volumineuses.
- Modifiez les entrées ou les poids et prédisez la sortie avant d'exécuter.
- Affichez les valeurs intermédiaires pour suivre chaque étape du calcul.
- Résolvez les défis liés ci-dessous pour implémenter l'idée vous-même.
S'entraîner avec un défi
Utilisez le contenu de cette leçon pour résoudre un vrai problème. Chaque défi s'exécute dans le navigateur, avec des tests instantanés et une revue par l'IA.
- Tokeniseur de mots et vocabulaire Découpez un texte en mots en minuscules et construisez un vocabulaire trié par fréquence, la première étape de tout modèle de langage. Facile
- Encodage one-hot Transformez des catégories en vecteurs contenant un seul 1, le format d'entrée des classifieurs et des embeddings. Facile
- Fusions de Byte Pair Encoding (BPE) Apprenez des fusions de sous-mots comme les tokeniseurs GPT : fusionnez à répétition la paire de symboles voisins la plus fréquente. Moyen