Tokens y tokenización: entender qué consume un LLM
Un LLM no lee palabras ni letras: lee tokens, fragmentos de texto obtenidos mediante una segmentación llamada tokenización. Esta unidad invisible lo determina todo: cuánto puede memorizar tu modelo, a qué velocidad responde y por qué el mismo texto en francés «pesa» más que en inglés. Esta guía explica de forma concreta qué es un token, cómo funciona la tokenización de un LLM y qué cambia cuando ejecutas un modelo en local.
#¿Por qué hablar de tokens?
Cuando hablas con un LLM local a través de Ollama o LM Studio, escribes frases. El modelo, en cambio, nunca ve tus frases tal cual. Antes incluso del primer cálculo, tu texto se convierte en una secuencia de números, cada uno de los cuales representa un token. Todo lo que hace el modelo —entender, generar— ocurre a nivel de esos tokens, no de las palabras.
Entender los tokens no es un detalle académico. Es lo que explica tres cosas muy concretas: por qué un documento «entra» o no en la ventana de contexto, por qué tu modelo genera a una velocidad determinada (los famosos tokens por segundo) y por qué una facturación de API en la nube o un límite de contexto se cuenta siempre en tokens, nunca en palabras.
#¿Qué es exactamente un token?
Tu ChatGPT privado y gratuito en tu máquina en 1 hora — LM Studio, Ollama, Open WebUI, tus documentos, sin nube.
- Espacio en línea de por vida
- PDF + archivos
- Reembolsado 30 j
Un token es un fragmento de texto: a veces una palabra entera, a menudo una parte de palabra, a veces un solo carácter o un signo de puntuación. No es una letra ni una palabra en sentido estricto: es una unidad estadística elegida por el algoritmo de tokenización para representar el texto de la forma más eficiente posible.
La regla empírica más útil: en inglés, 1 token ≈ 4 caracteres ≈ 0,75 palabra. Es decir, 100 tokens equivalen a aproximadamente 75 palabras en inglés. Para el francés, la relación es claramente menos favorable; volveremos sobre ello más abajo.
- "chat"
- Una palabra frecuente y corta: a menudo, 1 solo token.
- "anticonstitutionnellement"
- Una palabra poco frecuente y larga: dividida en varios tokens (anti / constitution / nelle / ment…).
- " " (espacio)
- El espacio suele ir unido al principio del token siguiente, no como un token aislado.
- "123456"
- Los números suelen dividirse cifra por cifra o en pequeños grupos.
- 😀
- Un emoji puede costar varios tokens por sí solo.
A las palabras muy comunes se les asigna un único token porque aparecen por todas partes en los datos de entrenamiento. Las palabras poco frecuentes, técnicas o de un idioma poco representado se reconstruyen a partir de fragmentos más pequeños, lo que las hace más «caras» en tokens.
#Cómo se divide realmente un texto
La mayoría de los LLM modernos utilizan una familia de algoritmos llamada BPE (Byte Pair Encoding) o sus variantes (WordPiece, Unigram). El principio: partir de los caracteres en bruto y fusionar progresivamente los pares de símbolos más frecuentes del corpus de entrenamiento hasta obtener un vocabulario de tamaño fijo, normalmente de 32.000 a 200.000 tokens según el modelo.
- 01Segmentación inicialEl texto se reduce a sus bytes o caracteres básicos. Nada se pierde: toda cadena puede representarse.
- 02Fusiones aprendidasEl tokenizer aplica la lista de fusiones aprendidas durante el entrenamiento (por ejemplo, « t » + « ion » → « tion ») en orden de frecuencia.
- 03Conversión a identificadoresCada token final se reemplaza por su número en el vocabulario. El modelo solo manipula estos enteros.
Consecuencia importante: el vocabulario queda fijado durante el entrenamiento. Un modelo entrenado principalmente en inglés tendrá un vocabulario optimizado para el inglés y dividirá el francés en fragmentos más pequeños y numerosos. Esta es la raíz del sobrecoste de usar el francés.
#¿Por qué el francés cuesta más que el inglés?
Con el mismo contenido, un texto en francés suele consumir entre un 15 y un 30 % más de tokens que su traducción al inglés. En algunos modelos muy centrados en el inglés, la diferencia puede superar el 50 %. Se suman tres razones.
- Vocabulario desequilibrado
- Los tokenizers están entrenados principalmente en inglés: las palabras inglesas comunes tienen su token dedicado, no las palabras francesas.
- Acentos y caracteres especiales
- é, è, à, ç, œ… son menos frecuentes en el vocabulario y a veces se descomponen en varios tokens (o incluso en bytes).
- Morfología más rica
- Las conjugaciones, las concordancias y las elisiones (l', d', qu') multiplican las formas de una misma palabra, que quedan peor cubiertas por el vocabulario.
Ejemplo concreto: la frase inglesa «The cat is on the table» ocupa unos 6 tokens. Su versión francesa, «Le chat est sur la table», suele ocupar entre 7 y 8, según el modelo. En un párrafo completo, la diferencia se vuelve significativa y se paga dos veces: en espacio dentro de la ventana de contexto y en tiempo de generación.
#Tokens y ventana de contexto
La ventana de contexto de un modelo se mide en tokens, no en palabras ni en caracteres. Un modelo anunciado con 32.768 tokens de contexto puede «ver» en un instante dado el equivalente a aproximadamente 24.000 palabras en inglés — pero solo entre 18.000 y 20.000 palabras en francés, debido al costo adicional de tokenización.
Esta ventana incluye todo: el prompt de sistema, el historial de la conversación, tu mensaje actual, los documentos pegados y la respuesta que se está generando. Cuando el total supera el límite, el modelo recorta el contenido —generalmente el más antiguo— y «olvida» el inicio de la conversación.
- System prompt
- Se contabiliza en cada llamada. Un prompt del sistema demasiado largo consume espacio de contexto continuamente.
- Historial
- Cada turno de conversación se acumula. Una larga discusión termina saturando la ventana.
- Documentos (RAG, copiar-pegar)
- Un PDF de 10 páginas puede sumar fácilmente varios miles de tokens.
- Respuesta generada
- La salida ocupa también espacio: hay que reservar espacio para responder.
#Tokens y velocidad de ejecución local
La velocidad de un LLM se mide en tokens por segundo (tok/s). Es la unidad universal de los benchmarks. Hay que distinguir dos momentos que a menudo se confunden.
- Prompt / prefill
- El tiempo necesario para «leer» tu prompt completo. Cuantos más tokens haya en la entrada, más tardará en empezar la primera respuesta.
- Generación / decodificación
- La velocidad a la que salen los tokens de respuesta, uno a uno. Es el tok/s que se observa en pantalla.
Consecuencia directa para el francés: como el mismo contenido representa más tokens, tu modelo necesariamente tarda más en procesar un prompt en francés y en generar una respuesta en francés de longitud equivalente. La sensación de que «es más lento en francés» no es subjetiva: es una cuestión de cantidad de tokens.
La velocidad de decodificación depende principalmente del modelo y del hardware (parámetros activos por token, ancho de banda de memoria, cuantización). Pero, con el mismo hardware, reducir el número de tokens de entrada —un prompt de sistema más corto, un historial recortado— reduce notablemente el tiempo hasta el primer token.
#Contar tú mismo los tokens de un texto
La mejor forma de desarrollar la intuición es medir. Aquí tienes tres enfoques, desde el más sencillo hasta el más preciso.
#Estimar a ojo
Para una estimación rápida sin instalar nada: divide el número de caracteres entre 4 para el inglés y entre un valor de 3 a 3,5 para el francés. Es una aproximación poco precisa, pero suficiente para saber si un documento cabe en una ventana de contexto.
#Contar en Python con el tokenizador real
Para un conteo exacto, utiliza el tokenizador del modelo. La biblioteca tokenizers / transformers de Hugging Face carga el tokenizador real de un modelo de pesos abiertos:
Ejecutar este script con tus propios textos es el ejercicio más revelador: ves con tus propios ojos qué palabras francesas se descomponen y en qué medida el inglés es más compacto.
#Leer el conteo desde la API Ollama
Ollama ya muestra los conteos de tokens en sus respuestas. El daemon escucha por defecto en http://localhost:11434; una llamada a la API devuelve prompt_eval_count (tokens del prompt) y eval_count (tokens generados):
Allí también encontrarás eval_duration: divide eval_count entre la duración para obtener tu velocidad real en tokens por segundo, en tu máquina, con tu cuantización.
#Ahorrar tokens sin perder calidad
Dado que cada token consume espacio de contexto y afecta a la velocidad, unos cuantos hábitos sencillos marcan una diferencia real, especialmente en francés.
- Prompt de sistema conciso
- Se vuelve a enviar en cada llamada. Cada frase innecesaria se paga en cada turno.
- Recortar el historial
- Resume o recorta los intercambios antiguos en lugar de arrastrar toda la conversación.
- RAG en lugar de pegar todo
- Introduce solo los pasajes relevantes de un documento, no el documento completo.
- Establecer la longitud de salida
- Pedir una respuesta corta genera menos tokens y, por tanto, tarda menos.
#Para ir más allá
Los tokens son el hilo que une varias nociones básicas. Tres guías complementan directamente esta: la primera detalla la ventana de contexto que los tokens llenan, la segunda explica cómo la cuantización influye en la velocidad medida en tokens por segundo y la tercera muestra cómo el transformador procesa estos tokens internamente.
¿Un comentario, un error, una precisión? Avísanos, eso mejora la guía para todos.