Capítulo 02 · Tokenización · 8 min

Del texto a los tokens

Cómo el texto se convierte en números. BPE, subpalabras, y por qué los LLMs tienen dificultades para contar letras.

¿Por qué tokens?

Un modelo de lenguaje no puede manipular texto directamente. Manipula números. El primer paso, cada vez que hablas con un LLM, es transformar el texto en una secuencia de enteros: los token IDs.

La tokenización es el corte que hace posible esa conversión.

¿Por qué no un token por palabra?

A primera vista podríamos imaginar: una palabra = un token. Simple.

Pero no funciona:

  • La lengua contiene millones de palabras posibles (flexiones, neologismos, nombres propios, erratas...). Tener un token por palabra exige un vocabulario gigantesco.
  • El modelo no puede hacer nada con una palabra que nunca ha visto.
  • Algunas lenguas (chino, japonés) ni siquiera tienen espacios entre palabras.

La solución adoptada por casi todos los LLM modernos: las subpalabras.

Tokenización por subpalabras

Con un tokenizer de subpalabras:

  • Las palabras frecuentes se vuelven un solo token (the, y, son)
  • Las palabras raras se parten en piezas más pequeñas (tokenizacióntoken + ización)
  • Los caracteres desconocidos siempre pueden descomponerse hasta la letra

El resultado: un vocabulario de tamaño razonable (normalmente de 30.000 a más de 250.000 tokens: la horquilla sube con los años, porque los tokenizers recientes cubren muchas más lenguas) que puede representar cualquier texto.

El algoritmo más usado se llama BPE (Byte Pair Encoding). Empieza con caracteres individuales y fusiona iterativamente las parejas más frecuentes del corpus de entrenamiento.

BPE en treinta segundos

Imagina un mini-corpus de tres palabras: low, lower, lowest. Empezamos tokenizando a nivel de carácter:

l o w
l o w e r
l o w e s t

En cada iteración, buscamos la pareja de tokens adyacentes más frecuente. Aquí, l o aparece tres veces — la fusionamos en lo:

lo w
lo w e r
lo w e s t

Ahora lo w es la pareja más frecuente. La fusionamos:

low
low e r
low e s t

Seguimos hasta alcanzar el tamaño de vocabulario deseado. Las piezas que vuelven a menudo (low) se convierten en un solo token. Las raras (est) quedan descompuestas. Eso es exactamente lo que hace BPE — sobre miles de millones de palabras en vez de tres, y sobre bytes más que sobre caracteres en los modelos modernos (byte-level BPE), lo que garantiza que ninguna entrada sea jamás "desconocida".

Algunos primos que conviene conocer: WordPiece (BERT) y Unigram LM (T5, mT5) son, como BPE, algoritmos de construcción del vocabulario. Cuidado con una confusión habitual: SentencePiece, citado a menudo al mismo nivel, no es un algoritmo sino una biblioteca — implementa BPE y Unigram, y es la que se usó en T5, mT5 y los primeros Llama (1 y 2). Desde Llama 3 (2024), Meta pasó a un BPE byte-level de 128.000 tokens, en la línea de tiktoken. Todos comparten la misma idea — un vocabulario de subpalabras — con heurísticas distintas.

Tokens especiales

Más allá de las subpalabras del texto, el tokenizer reserva unos cuantos tokens especiales que nunca aparecen de forma natural:

  • <|im_start|>, <|im_end|> (OpenAI), [INST]…[/INST] (Llama 2 y Mistral), <|start_header_id|><|eot_id|> (Llama 3 y siguientes), <|user|> / <|assistant|> — delimitan los turnos de una conversación. Cada familia de modelos tiene su formato, y cambia de una generación a otra.
  • <|endoftext|> — fin de documento.
  • <|fim_prefix|>, <|fim_middle|> — para fill-in-the-middle, usado en compleciones de código.

Es lo que permite transformar un diálogo "Usuario dijo X, Asistente respondió Y" en una secuencia lineal de tokens, procesable por el modelo. Cuando envías un mensaje a ChatGPT, esos marcadores se añaden automáticamente antes de la tokenización.

Prueba

Las subpalabras aparecen a la derecha: cada token es un fragmento reutilizable, no necesariamente una palabra completa. Las palabras frecuentes caben en un solo token; las raras se descomponen en varios trozos.

Cosas que observar:

  • Las palabras cortas y frecuentes rara vez se cortan.
  • Las palabras largas o raras a menudo terminan en varias piezas.
  • El espacio antes de una palabra forma parte del token (por eso · hello y hello son tokens distintos).
  • En español, la relación token/palabra suele ser un poco más alta que en inglés (aprox. 1.3-1.7 contra 1.2-1.4 en los tokenizers de la generación GPT-3/GPT-4), entre otras cosas porque los modelos han visto más inglés durante el entrenamiento. Los tokenizers recientes, con vocabularios mucho más grandes y más multilingües, han estrechado esa brecha. No la han borrado: el español sigue saliendo más caro que el inglés.

Consecuencias prácticas

Esta historia de tokens tiene implicaciones inesperadas:

  • Los LLM cuentan mal las letras. "¿Cuántas R hay en strawberry?" fue la trampa célebre de 2024: muchos modelos respondían 2 en vez de 3, porque la palabra les llega en pocos tokens, no como letras separadas. Hoy los grandes modelos aciertan — pero la causa estructural no se ha movido ni un milímetro. Han aprendido a esquivarla, deletreando la palabra letra por letra antes de contar. Si le haces la pregunta a un modelo reciente, mira su razonamiento: ese paso de deletreo suele estar ahí. Es la confesión de que el conteo directo sigue sin funcionar.
  • Los precios de API se calculan en tokens, no en palabras. El español puede costar un poco más de procesar que el inglés.
  • Las ventanas de contexto (128k tokens, 200k tokens...) también se miden en tokens. Un libro de 100.000 palabras en español puede representar alrededor de 140.000 tokens.

Para el modelo, "tokenización" y "tok·en·iza·ción" son lo mismo. Solo ve piezas.

Lo siguiente

Ahora que tu texto se ha convertido en una secuencia de enteros, esos enteros entran en el modelo. Primer paso dentro: se transforman en vectores, en un espacio de cientos de dimensiones donde el significado se convierte en una posición geométrica.

Ese es el tema del siguiente capítulo.

Actualizado el