Tokens

Tokens Tokens

Ahora que están en auge los LLMs, no paramos de escuchar el número de tokens que admite cada modelo, pero ¿qué son los tokens? Son las unidades mínimas de representación de las palabras

Para explicar qué son los tokens, primero veámoslo con un ejemplo práctico, vamos a usar el tokenizador de OpenAI, llamado tiktoken.

Así que, primero instalamos el paquete:

pip install tiktoken

Una vez instalado creamos un tokenizador usando el modelo cl100k_base, que en el notebook de ejemplo How to count tokens with tiktoken explica que es el usado por los modelos gpt-4, gpt-3.5-turbo y text-embedding-ada-002

	
import tiktoken
encoder = tiktoken.get_encoding("cl100k_base")
Copied

Ahora creamos una palabra de ejemplo para tokenizarla

	
example_word = "breakdown"
Copied

Y la tokenizamos

	
tokens = encoder.encode(example_word)
tokens
Copied
	
[9137, 2996]

Se ha dividido la palabra en 2 tokens, el 9137 y el 2996. Vamos a ver a qué palabras corresponden

	
word1 = encoder.decode([tokens[0]])
word2 = encoder.decode([tokens[1]])
word1, word2
Copied
	
('break', 'down')

El tokenizador de OpenAI ha dividido la palabra breakdown en las palabras break y down. Es decir, ha dividido la palabra en 2 más sencillas.

Esto es importante, ya que cuando se dice que un LLM admite x tokens no se refiere a que admite x palabras, sino a que admite x unidades mínimas de representación de las palabras.

Si tienes un texto y quieres ver el número de tokens que tiene para el tokenizador de OpenAI, puedes verlo en la página Tokenizer, que muestra cada token en un color diferente

tokenizer

Hemos visto el tokenizador de OpenAI, pero cada LLM podrá usar otro

Como hemos dicho, los tokens son las unidades mínimas de representación de las palabras, así que vamos a ver cuántos tokens distintos tiene tiktoken

	
n_vocab = encoder.n_vocab
print(f"Vocab size: {n_vocab}")
Copied
	
Vocab size: 100277

Vamos a ver cómo tokeniza otro tipo de palabras

	
def encode_decode(word):
tokens = encoder.encode(word)
decode_tokens = []
for token in tokens:
decode_tokens.append(encoder.decode([token]))
return tokens, decode_tokens
Copied
	
word = "dog"
tokens, decode_tokens = encode_decode(word)
print(f"Word: {word} ==> tokens: {tokens}, decode_tokens: {decode_tokens}")
word = "tomorrow..."
tokens, decode_tokens = encode_decode(word)
print(f"Word: {word} ==> tokens: {tokens}, decode_tokens: {decode_tokens}")
word = "artificial intelligence"
tokens, decode_tokens = encode_decode(word)
print(f"Word: {word} ==> tokens: {tokens}, decode_tokens: {decode_tokens}")
word = "Python"
tokens, decode_tokens = encode_decode(word)
print(f"Word: {word} ==> tokens: {tokens}, decode_tokens: {decode_tokens}")
word = "12/25/2023"
tokens, decode_tokens = encode_decode(word)
print(f"Word: {word} ==> tokens: {tokens}, decode_tokens: {decode_tokens}")
word = "😊"
tokens, decode_tokens = encode_decode(word)
print(f"Word: {word} ==> tokens: {tokens}, decode_tokens: {decode_tokens}")
Copied
	
Word: dog ==> tokens: [18964], decode_tokens: ['dog']
Word: tomorrow... ==> tokens: [38501, 7924, 1131], decode_tokens: ['tom', 'orrow', '...']
Word: artificial intelligence ==> tokens: [472, 16895, 11478], decode_tokens: ['art', 'ificial', ' intelligence']
Word: Python ==> tokens: [31380], decode_tokens: ['Python']
Word: 12/25/2023 ==> tokens: [717, 14, 914, 14, 2366, 18], decode_tokens: ['12', '/', '25', '/', '202', '3']
Word: 😊 ==> tokens: [76460, 232], decode_tokens: ['�', '�']

Por último vamos a verlo con palabras en otro idioma

	
word = "perro"
tokens, decode_tokens = encode_decode(word)
print(f"Word: {word} ==> tokens: {tokens}, decode_tokens: {decode_tokens}")
word = "perra"
tokens, decode_tokens = encode_decode(word)
print(f"Word: {word} ==> tokens: {tokens}, decode_tokens: {decode_tokens}")
word = "mañana..."
tokens, decode_tokens = encode_decode(word)
print(f"Word: {word} ==> tokens: {tokens}, decode_tokens: {decode_tokens}")
word = "inteligencia artificial"
tokens, decode_tokens = encode_decode(word)
print(f"Word: {word} ==> tokens: {tokens}, decode_tokens: {decode_tokens}")
word = "Python"
tokens, decode_tokens = encode_decode(word)
print(f"Word: {word} ==> tokens: {tokens}, decode_tokens: {decode_tokens}")
word = "12/25/2023"
tokens, decode_tokens = encode_decode(word)
print(f"Word: {word} ==> tokens: {tokens}, decode_tokens: {decode_tokens}")
word = "😊"
tokens, decode_tokens = encode_decode(word)
print(f"Word: {word} ==> tokens: {tokens}, decode_tokens: {decode_tokens}")
Copied
	
Word: perro ==> tokens: [716, 299], decode_tokens: ['per', 'ro']
Word: perra ==> tokens: [79, 14210], decode_tokens: ['p', 'erra']
Word: mañana... ==> tokens: [1764, 88184, 1131], decode_tokens: ['ma', 'ñana', '...']
Word: inteligencia artificial ==> tokens: [396, 39567, 8968, 21075], decode_tokens: ['int', 'elig', 'encia', ' artificial']
Word: Python ==> tokens: [31380], decode_tokens: ['Python']
Word: 12/25/2023 ==> tokens: [717, 14, 914, 14, 2366, 18], decode_tokens: ['12', '/', '25', '/', '202', '3']
Word: 😊 ==> tokens: [76460, 232], decode_tokens: ['�', '�']

Podemos ver para palabras similares, en español se generan más tokens que en inglés, por lo que para un mismo texto, con un número similar de palabras, el número de tokens será mayor en español que en inglés

Seguir leyendo

MCP Durability: Servidor y Cliente con Persistencia para Tareas de Larga Duración

MCP Durability: Servidor y Cliente con Persistencia para Tareas de Larga Duración

Aprende a crear un servidor y cliente MCP con durabilidad para tareas de larga duración. Tutorial completo sobre Model Context Protocol con persistencia de datos usando SQLite, gestión de tareas en background y monitoreo en tiempo real. Implementa migración de datos, procesamiento por lotes y entrenamiento de modelos ML que sobreviven a reinicios del servidor. Código Python con FastMCP, recursos, herramientas y patrones de durabilidad para aplicaciones enterprise.

Últimos posts -->

¿Has visto estos proyectos?

Horeca chatbot

Horeca chatbot Horeca chatbot
Python
LangChain
PostgreSQL
PGVector
React
Kubernetes
Docker
GitHub Actions

Chatbot conversacional para cocineros de hoteles y restaurantes. Un cocinero, jefe de cocina o camaeror de un hotel o restaurante puede hablar con el chatbot para obtener información de recetas y menús. Pero además implementa agentes, con los cuales puede editar o crear nuevas recetas o menús

Naviground

Naviground Naviground

Subtify

Subtify Subtify
Python
Whisper
Spaces

Generador de subtítulos para videos en el idioma que desees. Además a cada persona le pone su subtítulo de un color

Ver todos los proyectos -->

¿Quieres aplicar la IA en tu proyecto? Contactame!

¿Quieres ver alguna charla?

Agentes del Mañana: Descifrando los Enigmas de Planificación, UX y Memoria

Agentes del Mañana: Descifrando los Enigmas de Planificación, UX y Memoria

Los agentes IA, impulsados por LLMs, prometen transformar aplicaciones. Pero, ¿son hoy simples ejecutores o futuros colaboradores inteligentes? Para alcanzar su verdadero potencial, debemos superar barreras críticas. Esta charla se adentra en los 3 enigmas que definirán la próxima generación de agentes: 1. Planificación Avanzada (El Cerebro): Los agentes actuales a menudo tropiezan con tareas complejas. Exploraremos cómo, más allá de las llamadas a funciones básicas, las arquitecturas cognitivas permiten trazar planes robustos, anticipar problemas y razonar con profundidad. ¿Cómo hacerlos "pensar" varios pasos adelante? 2: UX Revolucionaria (El Alma): La interacción con un agente no puede ser una fuente de frustración. Analizaremos cómo trascender el chat tradicional hacia interfaces "human-on-the-loop", UX colaborativas, generativas y accesibles. ¿Cómo diseñar experiencias que enganchen? 3. Memoria Persistente (El Legado): Un agente que olvida lo aprendido está condenado a la ineficiencia. Veremos técnicas para dotarlos de memoria significativa que vaya más allá del historial, permitiendo que aprendan y cada interacción sea más inteligente. Con ejemplos prácticos, no solo comprenderemos la magnitud de estos desafíos, sino que nos llevaremos ideas concretas y una visión clara para contribuir a construir los agentes del mañana: más inteligentes, más intuitivos y verdaderamente capaces. ¿Te unes a la expedición para descifrar el siguiente capítulo de los agentes IA?

Últimas charlas -->

¿Quieres mejorar con estos tips?

Últimos tips -->

Usa esto en local

Los espacios de Hugging Face nos permite ejecutar modelos con demos muy sencillas, pero ¿qué pasa si la demo se rompe? O si el usuario la elimina? Por ello he creado contenedores docker con algunos espacios interesantes, para poder usarlos de manera local, pase lo que pase. De hecho, es posible que si pinchas en alún botón de ver proyecto te lleve a un espacio que no funciona.

Flow edit

Flow edit Flow edit

Edita imágenes con este modelo de Flow. Basándose en SD3 o FLUX puedes editar cualquier imagen y generar nuevas

FLUX.1-RealismLora

FLUX.1-RealismLora FLUX.1-RealismLora
Ver todos los contenedores -->

¿Quieres aplicar la IA en tu proyecto? Contactame!

¿Quieres entrenar tu modelo con estos datasets?

short-jokes-dataset

Dataset de chistes en inglés

opus100

Dataset con traducciones de inglés a español

netflix_titles

Dataset con películas y series de Netflix

Ver más datasets -->