Concetti di IA in Python

Tokenizzazione: vocabolario, one-hot e byte pair encoding in Python

Le reti neurali capiscono solo i numeri, quindi il testo viene prima diviso in token e ogni token riceve un id. I modelli linguistici come GPT usano il byte pair encoding, che crea token da pezzi di parole frequenti.

Il concetto in parole semplici

Le reti neurali capiscono solo i numeri, quindi il testo viene prima diviso in token e ogni token riceve un id. I modelli linguistici come GPT usano il byte pair encoding, che crea token da pezzi di parole frequenti.

Trasforma il testo in numeri come fanno i modelli linguistici: costruisci un vocabolario, codifica le parole in one-hot e impara token di sottoparole con BPE.

Idee chiave

  • Un token è un'unità di testo, come una parola, una parte di parola o un carattere.
  • I vettori one-hot sono semplici ma diventano lunghissimi con vocabolari grandi.
  • BPE gestisce parole rare e nuove dividendole in pezzi noti.
  • Poi i modelli associano ogni id di token a un vettore appreso chiamato embedding.

Quando si usa?

  • Capire cosa succede dentro le reti neurali e le librerie di IA.
  • Imparare l'idea prima di implementarla nelle sfide corrispondenti.
  • Prepararti a corsi di machine learning, colloqui e progetti.

Guardalo in azione

Scrivi una tua frase per costruire un vocabolario, poi premi Passo per vedere il byte pair encoding unire la coppia più frequente.

Codice di esempio

Esegui codice →
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)

Output previsto

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']

Come funziona

Il vocabolario associa ogni parola distinta a un id, e la frase diventa una lista di id. Un vettore one-hot ha un 1 solo nella posizione dell'id della parola. BPE conta le coppie di simboli vicini e unisce la più frequente, prima ('a', 'n') e poi ('b', 'an').

Modifica i valori ed esegui il programma nel compilatore Python online CodeUtility senza installare Python.

Esercizi pratici

Modifica gli input e verifica i casi limite prima di usare dataset più grandi.

  1. Cambia gli input o i pesi e prevedi l'output prima di eseguire.
  2. Stampa i valori intermedi per seguire ogni passo del calcolo.
  3. Risolvi le sfide collegate qui sotto per implementare l'idea da solo.
Esegui nell’IDE Python →

Esercitati con una sfida

Usa ciò che questa lezione spiega per risolvere un problema reale. Ogni sfida gira nel browser, con test immediati e una revisione dell'IA.

Tutte le sfide