Tokens y tokenización: por qué los LLM no ven letras

Fuentes: Tokens and Tokenization: Why LLMs Never See the Letters

Los modelos de lenguaje grandes (LLM) como GPT-4 no procesan texto directamente: lo fragmentan en unidades llamadas tokens, las únicas entidades que el modelo realmente percibe. Cada modelo dispone de un vocabulario fijo de tokens decidido durante su entrenamiento, por eso GPT-4 y Llama 3 descomponen la misma frase en secuencias de identificadores enteros distintas. Este detalle explica errores aparentemente absurdos, como que GPT-4 cuente dos "r" en "strawberry" cuando en realidad hay tres: el modelo nunca ve las letras, solo los tokens en los que se descompone la palabra.

El algoritmo dominante para construir esos vocabularios se llama Byte Pair Encoding (BPE). Su mecánica es sorprendentemente sencilla. Parte de un corpus y de un tamaño de vocabulario objetivo, normalmente entre 30.000 y 100.000 tokens. Inicialmente, cada carácter del corpus es un token. En cada iteración, el algoritmo cuenta los pares de tokens adyacentes, identifica el más frecuente y lo fusiona en un nuevo token que se añade al vocabulario. El proceso se repite hasta alcanzar el tamaño deseado. No hay redes neuronales ni funciones de puntuación: es un trabajo puramente estadístico basado en frecuencias.

El resultado es que los fragmentos de texto muy comunes —sufijos como "ing", "ción", palabras completas como "the"— terminan con un único token, mientras que los términos raros se descomponen en sub-piezas más pequeñas. En un corpus mínimo con "cat" apareciendo tres veces y "mat" dos veces, el algoritmo fusiona primero "a"+"t" en "at" y después "c"+"at" en "cat", porque es la palabra más frecuente.

Una variante extendida, el byte-level BPE, resuelve el problema de los caracteres no presentes en el corpus. En lugar de partir de los caracteres del corpus, parte de los 256 valores posibles de un byte, lo que garantiza que cualquier texto representable en un ordenador —incluidos emojis, caracteres chinos o acentos— pueda tokenizarse sin quedarse fuera del vocabulario. La codificación UTF-8, que mapea cada carácter Unicode a entre uno y cuatro bytes, encaja de forma natural con este esquema. Así, la fragmentación en tokens, aunque invisible para el usuario, condiciona directamente lo que un modelo puede "ver" y, por tanto, lo que puede aprender y responder.