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
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.
- Cambia gli input o i pesi e prevedi l'output prima di eseguire.
- Stampa i valori intermedi per seguire ogni passo del calcolo.
- Risolvi le sfide collegate qui sotto per implementare l'idea da solo.
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.
- Tokenizzatore di parole e vocabolario Dividi un testo in parole minuscole e costruisci un vocabolario ordinato per frequenza, il primo passo di ogni modello linguistico. Facile
- Codifica one-hot Trasforma le categorie in vettori con un solo 1, il formato di input per classificatori ed embedding. Facile
- Fusioni Byte Pair Encoding (BPE) Impara fusioni di sottoparole come i tokenizzatori GPT: fondi ripetutamente la coppia di simboli vicini più frequente. Media