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 que tokens?

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

La tokenizacion es el corte que hace posible esa conversion.

Por que no un token por palabra?

A primera vista podriamos 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, japones) ni siquiera tienen espacios entre palabras.

La solucion adoptada por casi todos los LLM modernos: las subpalabras.

Tokenizacion 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 mas pequeñas (tokenizaciontoken + izacion)
  • Los caracteres desconocidos siempre pueden descomponerse hasta la letra

El resultado: un vocabulario de tamaño razonable (normalmente entre 30.000 y 200.000 tokens) que puede representar cualquier texto.

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

BPE en treinta segundos

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

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

En cada iteracion, buscamos la pareja de tokens adyacentes mas frecuente. Aqui, 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 mas 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 mas que sobre caracteres en los modelos modernos (byte-level BPE), lo que garantiza que ninguna entrada sea jamas "desconocida".

Algunos primos que conviene conocer: WordPiece (BERT), SentencePiece (T5, Llama), Unigram LM (mT5). Comparten la misma idea — un vocabulario de subpalabras — con heuristicas de fusion distintas.

Tokens especiales

Mas alla 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), <|user|> / <|assistant|> — delimitan los turnos de una conversacion.
  • <|endoftext|> — fin de documento.
  • <|fim_prefix|>, <|fim_middle|> — para fill-in-the-middle, usado en compleciones de codigo.

Es lo que permite transformar un dialogo "Usuario dijo X, Asistente respondio Y" en una secuencia lineal de tokens, procesable por el modelo. Cuando envias un mensaje a ChatGPT, esos marcadores se añaden automaticamente antes de la tokenizacion.

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 relacion token/palabra suele ser un poco mas alta que en ingles (aprox. 1.3-1.7 contra 1.2-1.4), entre otras cosas porque los modelos han visto mas ingles durante el entrenamiento.

Consecuencias practicas

Esta historia de tokens tiene implicaciones inesperadas:

  • Los LLM cuentan mal las letras. "Cuantas R hay en strawberry?" — a menudo responden 2 en vez de 3, porque la palabra les llega en pocos tokens, no como letras separadas.
  • Los precios de API se calculan en tokens, no en palabras. El español puede costar un poco mas de procesar que el ingles.
  • Las ventanas de contexto (128k tokens, 200k tokens...) tambien se miden en tokens. Un libro de 100.000 palabras en español puede representar alrededor de 140.000 tokens.

Para el modelo, "tokenizacion" y "tok·en·iza·cion" 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 posicion geometrica.

Ese es el tema del siguiente capitulo.

Actualizado el

Del texto a los tokens: la tokenización en LLMs · Step by Token