Conceptos de IA en Python

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

Ejecutar código →
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)

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.

  1. Cambia las entradas o los pesos y predice la salida antes de ejecutar.
  2. Imprime los valores intermedios para seguir cada paso del cálculo.
  3. Resuelve los retos enlazados abajo para implementar la idea por tu cuenta.
Ejecutar en el IDE de Python →

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.

Todos los retos