Tokenización: vocabulario, one-hot y byte pair encoding en Python
Las redes neuronales solo entienden números, así que el texto se divide primero en tokens y cada token recibe un id. Los modelos de lenguaje como GPT usan byte pair encoding, que crea tokens a partir de trozos frecuentes de palabras.
El concepto en palabras sencillas
Las redes neuronales solo entienden números, así que el texto se divide primero en tokens y cada token recibe un id. Los modelos de lenguaje como GPT usan byte pair encoding, que crea tokens a partir de trozos frecuentes de palabras.
Convierte texto en números como lo hacen los modelos de lenguaje: crea un vocabulario, codifica palabras en one-hot y aprende subpalabras con BPE.
Ideas clave
- Un token es una unidad de texto, como una palabra, parte de una palabra o un carácter.
- Los vectores one-hot son sencillos pero se vuelven muy largos con vocabularios grandes.
- BPE maneja palabras raras y nuevas dividiéndolas en trozos conocidos.
- Después, los modelos convierten cada id de token en un vector aprendido llamado embedding.
¿Cuándo se utiliza?
- Entender qué pasa dentro de las redes neuronales y las bibliotecas de IA.
- Aprender la idea antes de implementarla en los retos correspondientes.
- Prepararte para cursos de aprendizaje automático, entrevistas y proyectos.
Pruébalo en acción
Escribe tu propia frase para crear un vocabulario y pulsa Paso para ver cómo byte pair encoding une el par más frecuente.
Código de ejemplo
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)
Resultado esperado
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']
Cómo funciona
El vocabulario asigna un id a cada palabra distinta, y la frase se convierte en una lista de ids. Un vector one-hot solo tiene un 1 en el id de la palabra. BPE cuenta los pares de símbolos vecinos y une el más frecuente, primero ('a', 'n') y luego ('b', 'an').
Cambia los valores y ejecuta el programa en el compilador Python online de CodeUtility sin instalar Python.
Ejercicios prácticos
Modifica las entradas y prueba casos límite antes de usar conjuntos de datos mayores.
- Cambia las entradas o los pesos y predice la salida antes de ejecutar.
- Imprime los valores intermedios para seguir cada paso del cálculo.
- Resuelve los retos enlazados abajo para implementar la idea por tu cuenta.
Practica con un reto
Usa lo que cubre esta lección para resolver un problema real. Cada reto se ejecuta en el navegador, con pruebas al instante y una revisión de IA.
- Tokenizador de palabras y vocabulario Divide un texto en palabras en minúsculas y construye un vocabulario ordenado por frecuencia, el primer paso de todo modelo de lenguaje. Fácil
- Codificación one-hot Convierte categorías en vectores con un único 1, el formato de entrada de clasificadores y embeddings. Fácil
- Fusiones de Byte Pair Encoding (BPE) Aprende fusiones de subpalabras como los tokenizadores de GPT: fusiona repetidamente el par de símbolos vecinos más frecuente. Intermedio