Tokens: el alfabeto del modelo
¿Qué lee realmente un modelo de lenguaje, y por qué importa?
Lección completa
Si quieres:
En la lección anterior dijimos que el modelo predice la siguiente palabra. Era una simplificación. Veamos qué recibe de verdad cuando le escribes esta frase.
Sin voz: la lección avanza sola con subtítulos.
La voz de esta lección está en preparación: por ahora avanza sola con subtítulos.
Modo revisiónComentar este pasoTerminé la lección
Qué lograrás
- Explicar qué recibe de verdad un modelo de lenguaje: tokens, piezas de texto de un vocabulario fijo, convertidas en números.
- Describir cómo BPE arma el vocabulario contando las parejas de piezas vecinas y fusionando la más frecuente, una y otra vez.
- Estimar el costo de un texto en tokens y anticipar cuándo cuesta más: palabras raras, otros idiomas, otro tokenizador.
Ideas clave
- Un modelo de lenguaje no lee letras ni palabras: un tokenizador corta el texto en tokens, piezas de un vocabulario fijo, y al modelo solo le llega el número de cada pieza.
- BPE arma el vocabulario contando las parejas de piezas vecinas en mucho texto y fusionando la más frecuente, una y otra vez. Lo frecuente acaba en una sola pieza; lo raro se arma con trozos.
- Más piezas acortan los textos pero agrandan el modelo: los vocabularios reales tienen de unas treinta y dos mil a unas doscientas mil piezas. En inglés, cien tokens son unas setenta y cinco palabras.
- Se cobra, y se limita, por token. El mismo contenido en español necesita más tokens que en inglés: en mil doce frases medidas, un tercio más con el tokenizador de GPT-4o y casi el doble con el de GPT-2.
- Como el modelo ve tokens y no letras, contar letras o hacer cuentas con cifras largas le resulta torpe. Deletrear o usar una herramienta suele ayudar.
Lo que mucha gente cree
Creencia común Un token es una palabra, y el modelo lee el texto como nosotros: palabra por palabra o letra por letra.
Lo correcto Un token es una pieza de tamaño variable: una palabra común puede ser uno, una rara se parte en varios, y a veces es una sola letra o un código básico. Al modelo no le llega el texto, solo los números de las piezas.
Compruébalo
Cuatro preguntas. Sin nota ni cuenta: sirven para ver si la idea quedó.
Por dentroPara quien quiere las fórmulas y el código. No hace falta para seguir el curso.
BPE paso a paso
Sea un corpus de palabras con frecuencias y un alfabeto inicial . En cada vuelta se cuenta cuántas veces aparece cada pareja de piezas vecinas , pesando por la frecuencia de la palabra:
Se elige , se sustituye esa pareja por una pieza nueva en todo el corpus y se añade al vocabulario: . Tras fusiones, . Para tokenizar un texto nuevo se aplican las fusiones en el orden en que se aprendieron. La idea viene de un algoritmo de compresión (Gage, 1994) que reemplazaba la pareja de bytes más frecuente por un byte sin usar; Sennrich, Haddow y Birch (2016) la adaptaron para partir las palabras raras en traducción automática, fusionando letras en lugar de bytes. No es el único método para armar un vocabulario, pero es el que usan GPT-2, Llama 2 y los tokenizadores de OpenAI (tiktoken es un tokenizador BPE).
En el ejemplo pequeño de la escena (gato ×5, gatos ×3, pato ×4, patos ×2, gatita ×1), la pareja «a t» suma y gana; después «at o» suma ; luego nacen gato (8), pato (6), gatos (3) y patos (2). «Gatita» se queda en g · at · i · t · a porque ninguna de sus parejas llega a aparecer dos veces.
Bytes: por qué nada queda fuera
Los tokenizadores de GPT-2 en adelante parten de los valores posibles de un byte. En la codificación UTF-8, una letra sin acento ocupa un byte, una letra con acento como «ó» o «ñ» ocupa dos y muchos emojis ocupan cuatro, así que cualquier texto se puede escribir con esas piezas: lo que el vocabulario no cubre baja a bytes sueltos. Por eso, en la escena, la «ó» de Quetzalcóatl aparece al principio como dos piezas (los bytes 195 y 179) unidas por un borde punteado. Antes de fusionar, GPT-2 corta el texto en trozos (una palabra con su espacio inicial, un número, unos signos) y las fusiones nunca cruzan de un trozo a otro, para no llenar el vocabulario de variantes como «dog.», «dog!» y «dog?». Por eso muchas piezas llevan pegado el espacio de delante: « gato» y «gato» son tokens distintos. En la escena omitimos ese espacio al dibujar los cortes de GPT-4o, para que se lean mejor.
El tokenizador de juguete de la lección es un BPE a nivel de bytes con esa misma pretokenización, entrenado con unas mil setecientas palabras escritas para el curso (casi todas en inglés): y , así que . GPT-2 usa bytes, fusiones y un símbolo especial de fin de texto: , la cifra que da su artículo.
Tamaño del vocabulario
Cada pieza necesita una fila en la tabla de embeddings , es decir, parámetros, y la capa final del modelo produce una puntuación por pieza. Con y (el GPT-2 más pequeño), la tabla tiene millones de parámetros. A cambio, un vocabulario mayor comprime más: el informe de Llama 3 dice que su vocabulario de 128 mil piezas (frente a las 32 mil de Llama 2) sube de 3.17 a 3.94 los caracteres por token en una muestra de inglés.
Costo
Con precios por millón de tokens distintos para entrada () y salida ():
Para inglés, . Ejemplo con un precio supuesto de 2 dólares por millón: un informe de 3 000 palabras son unos 4 000 tokens; mil informes, 4 millones de tokens y 8 dólares. En la lista de precios de Anthropic (consultada en octubre de 2026), los tokens de salida cuestan cinco veces los de entrada en todos los modelos de la tabla.
El idioma, medido
Con las 1 012 frases paralelas en inglés y español del conjunto FLORES-200 (devtest), contadas con tiktoken 0.14.0:
| tokenizador | inglés | español | razón |
|---|---|---|---|
GPT-2 (gpt2) |
27 044 | 53 578 | 1.98 |
GPT-4 (cl100k_base) |
27 182 | 41 974 | 1.54 |
GPT-4o (o200k_base) |
26 873 | 35 415 | 1.32 |
Parte de la diferencia es que la traducción al español usa más palabras (26 081 frente a 21 901); el resto, que cada palabra en español se parte en más piezas. En inglés salen 0.81 palabras por token, cerca de la regla práctica de ¾. Petrov et al. (2023) midieron diferencias de hasta quince veces entre idiomas para un mismo texto traducido. Las cuatro frases del «tu turno» las escribimos nosotros: sirven para ilustrar, no para presupuestar.
Por qué fallan las letras y las cifras
El modelo recibe identificadores, no caracteres: tiene que haber aprendido de los datos cómo se escribe cada pieza. Con el tokenizador de GPT-4o, « carretera» y « strawberry» (con su espacio inicial, como aparecen dentro de una pregunta) son un solo token cada uno. Edman, Schmid y Fraser (2024) encontraron que la mayoría de los modelos parecen conocer la ortografía de sus tokens, pero no la usan bien para manipular texto. Con los números, GPT-3.5 y GPT-4 tienen tokens para cada número de una, dos y tres cifras y cortan de izquierda a derecha; Singh y Strouse (2024) encontraron que forzar el corte de derecha a izquierda (separando los miles con comas) mejora mucho la aritmética. Llama 2, en cambio, parte todos los números en cifras sueltas.
En código
Un BPE completo en veinte líneas de Python, sobre el corpus de la animación:
from collections import Counter
def entrenar_bpe(palabras, max_fusiones):
"""palabras: {palabra: frecuencia}. Devuelve las fusiones (a, b, cuenta) y cómo queda cada palabra."""
piezas = {w: list(w) for w in palabras}
fusiones = []
for _ in range(max_fusiones):
cuentas = Counter()
for w, p in piezas.items():
for a, b in zip(p, p[1:]):
cuentas[(a, b)] += palabras[w] # pesa por la frecuencia de la palabra
if not cuentas or max(cuentas.values()) < 2:
break
a, b = min(cuentas, key=lambda par: (-cuentas[par], par)) # la más frecuente; empate: orden alfabético
fusiones.append((a, b, cuentas[(a, b)]))
for p in piezas.values():
i = 0
while i < len(p) - 1:
if p[i] == a and p[i + 1] == b:
p[i:i + 2] = [a + b]
else:
i += 1
return fusiones, piezas
corpus = {"gato": 5, "gatos": 3, "pato": 4, "patos": 2, "gatita": 1}
fusiones, piezas = entrenar_bpe(corpus, 10)
for a, b, n in fusiones:
print(f"{a} + {b} -> {a + b} ({n} veces)")
print(piezas["gatos"], piezas["gatita"])
# a + t -> at (15 veces)
# at + o -> ato (14 veces)
# g + ato -> gato (8 veces)
# p + ato -> pato (6 veces)
# gato + s -> gatos (3 veces)
# pato + s -> patos (2 veces)
# ['gatos'] ['g', 'at', 'i', 't', 'a']
Y con un tokenizador real (pip install tiktoken; salida medida con la versión 0.14.0):
import tiktoken
enc = tiktoken.get_encoding("o200k_base") # el tokenizador de GPT-4o
for texto in ["Mi gato se llama Quetzalcóatl.", "¿Cuántas erres tiene carretera?", "1234567"]:
ids = enc.encode(texto)
print(len(ids), ids, [enc.decode([i]) for i in ids])
print(enc.n_vocab)
# 10 [28716, 99767, 458, 69693, 3106, 21156, 27187, 531, 69282, 13] ['Mi', ' gato', ' se', ' llama', ' Qu', 'etz', 'alc', 'ó', 'atl', '.']
# 8 [102091, 41826, 288, 1111, 430, 10647, 96244, 30] ['¿Cu', 'ánt', 'as', ' er', 'res', ' tiene', ' carretera', '?']
# 3 [7633, 19354, 22] ['123', '456', '7']
# 200019
Lo que viene
Cada número de token selecciona una fila de la tabla de embeddings (lección 14); a partir de ahí el modelo solo ve vectores. En la lección 21 veremos cómo cada token decide a cuáles otros mirar (atención). El costo de generar token por token vuelve en la lección 26 (inferencia), y el tamaño del contexto, también medido en tokens, en la lección 30.
Lente de decisión
Qué significa esta idea si tu trabajo es decidir, no programar.
- El costo y los límites se miden en tokens, no en palabras ni en páginas. Antes de presupuestar, cuenta los tokens de tus propios documentos con el tokenizador del proveedor, y calcula entrada y salida por separado: la salida suele costar varias veces más por token.
- Tu idioma importa. En mil doce frases traducidas, el español necesitó un tercio más de tokens que el inglés con el tokenizador de GPT-4o, y casi el doble con el de GPT-2. Mide con mensajes reales en tu idioma, no con ejemplos en inglés.
- El tokenizador cambia entre modelos y versiones, y con él la factura. Anthropic documenta que el tokenizador de sus modelos Claude 4.7 y posteriores produce alrededor de un treinta por ciento más tokens para el mismo texto.
- Señales de alerta: precios «por palabra» o «por página» sin decir cómo se convierten a tokens, y confiar en el modelo para contar letras, comparar cifras largas o hacer cuentas sin verificar. Pide que deletree o que use una herramienta de cálculo.
Términos de la lección
- Token Pieza de texto (una palabra, un trozo de palabra, un signo o un código básico) tomada del vocabulario. Es la unidad que el modelo lee y genera, y por la que se cobra.
- Tokenizador Programa que corta el texto en tokens y da a cada uno su número (y hace el camino de vuelta). Se construye antes de entrenar el modelo y queda fijo.
- BPE (codificación por pares de bytes) Algoritmo que arma el vocabulario fusionando, una y otra vez, la pareja de piezas vecinas más frecuente en un texto de entrenamiento. Nació como técnica de compresión (Gage, 1994) y se adaptó al lenguaje (Sennrich et al., 2016).
- Vocabulario Lista de todas las piezas (tokens) que un tokenizador puede producir, cada una con su número. Los reales tienen de unas treinta y dos mil a unas doscientas mil; el de juguete de la lección, 656.
- Modelo de lenguaje Modelo que, dado un texto (el contexto), da una probabilidad a cada palabra o pieza que puede seguir. Escribe agregando una pieza a la vez.
- Autorregresión Escribir una pieza a la vez usando como entrada lo ya escrito: cada palabra producida pasa a formar parte del contexto de la siguiente.
- Embedding Vector de números, aprendido de los datos, que representa algo (una palabra, una frase, una imagen) de modo que lo parecido quede cerca. Cada palabra tiene una fila en una tabla de embeddings.
- Vector Lista ordenada de números. En aprendizaje automático, cada ejemplo llega al modelo como un vector.
Transcripción completa
Fuentes
- Sennrich, R., Haddow, B., Birch, A. (2016). Neural Machine Translation of Rare Words with Subword Units (ACL 2016)
- Gage, P. (1994). A New Algorithm for Data Compression (The C Users Journal, 12(2), 23–38; copia archivada del artículo)
- Radford, A., Wu, J., Child, R., Luan, D., Amodei, D., Sutskever, I. (2019). Language Models are Unsupervised Multitask Learners (GPT-2)
- Touvron, H., et al. (2023). Llama 2: Open Foundation and Fine-Tuned Chat Models
- Grattafiori, A., et al. (Llama Team, AI @ Meta) (2024). The Llama 3 Herd of Models
- OpenAI (2022). tiktoken: tokenizadores de OpenAI (gpt2, cl100k_base para GPT-4, o200k_base para GPT-4o); versión 0.14.0 usada para todas las mediciones
- OpenAI (2025). What are tokens and how to count them? (OpenAI Help Center): 1 token ≈ ¾ de palabra en inglés
- Anthropic (2026). Pricing (documentación de la plataforma de Claude): precios por millón de tokens de entrada y de salida; tokenizador de Claude 4.7 y posteriores
- NLLB Team, Costa-jussà, M. R., et al. (2022). No Language Left Behind: Scaling Human-Centered Machine Translation (conjunto FLORES-200, CC BY-SA 4.0)
- Petrov, A., La Malfa, E., Torr, P. H. S., Bibi, A. (2023). Language Model Tokenizers Introduce Unfairness Between Languages (NeurIPS 2023)
- Edman, L., Schmid, H., Fraser, A. (2024). CUTE: Measuring LLMs’ Understanding of Their Tokens (EMNLP 2024)
- Singh, A. K., Strouse, D. J. (2024). Tokenization counts: the impact of tokenization on arithmetic in frontier LLMs
ComentariosConversación pública de esta lección: dudas, datos por revisar, ideas.
Los comentarios viven en GitHub Discussions, en el repositorio público del curso; para escribir se necesita una cuenta de GitHub. Se cargan desde giscus.app al abrir esta sección. Las personas que revisan el curso los leen, y si un cambio se acepta, se aplica en los dos idiomas. Abrir el hilo en GitHub