Concepts d'IA en Python

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

Exécuter le code →
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)

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.

  1. Modifiez les entrées ou les poids et prédisez la sortie avant d'exécuter.
  2. Affichez les valeurs intermédiaires pour suivre chaque étape du calcul.
  3. Résolvez les défis liés ci-dessous pour implémenter l'idée vous-même.
Exécuter dans l’IDE Python →

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.

Tous les défis