Del Texto al Token: El papel de la Tokenización en ChatGPT
![]() |
---|
Figura 1. Imagen de Mariia Shalabaieva en Unsplash. |
Hoy en día, la Inteligencia Artificial (IA) es un tema recurrente en diversas plataformas, y no necesariamente por personas dentro del ámbito científico. El torrente de aplicaciones que ha traído esta tecnología es realmente impactante; permeando en campos como el diseño gráfico, programación, medicina, y la vida cotidiana misma.
Entre todas estas aplicaciones, ChatGPT se ha destacado como una de las más disruptivas. Y es que ChatGPT ha llevado la interacción humano-máquina a un nuevo nivel, permitiendo a la máquina responder de manera coherente a preguntas o instrucciones, y resolver tareas en cualquier contexto, desde la programación hasta la cocina. Sin embargo, ¿Alguna vez se han preguntado cómo realmente funciona ChatGPT? ¿Cómo procesa una instrucción y genera una respuesta? En este blog, exploraremos un paso esencial dentro del funcionamiento de ChatGPT: la Tokenización. Analizaremos detalladamente cómo este proceso descompone el texto en unidades más manejables, permitiendo a ChatGPT comprender una instrucción y generar una respuesta coherente.
ChatGPT es un modelo Generativo
ChatGPT fue desarrollado con el mismo objetivo que InstructGPT—para seguir instrucciones. Teniendo como base el modelo GPT(Generative Pre-trained Transformer), ChatGPT se adaptó para seguir instrucciones. Este proceso involucró a un grupo de personas que proporcionaron preguntas y diálogos para guiar al modelo en su aprendizaje. El resultado fue un modelo capaz de generar respuestas coherentes y contextualmente relevantes.
Pero retrocedamos un poco, ¿Qué tecnología esta detrás de ChatGPT? ChatGPT es un Large Languaje Model (LLM), cuyo objetivo es generar la siguiente palabra a partir de las anteriores—pronto veremos que no se limita solo a palabras. La palabra generar es clave aquí, es la escencia de los modelos Generativos. Por lo tanto, podemos categorizar a ChatGPT como un modelo Generativo dentro del campo de la Inteligencia Artificial.
Entonces, ¿Qué es un modelo Generativo? Permítanme explicarles utilizando un artículo publicado en el 2001 por Andrew Ng y Michael Jordan. En este trabajo se habla de dos tipos de Clasificadores, el Discriminativo y el Generativo. Entienda el lector un clasificador como un modelo de Inteligencia Artificial capaz de predecir una etiqueta para una muestra. Por ejemplo, predecir si una imagen contiene un perro o un gato. Un clasificador Discriminativo se encarga de predecir la etiqueta de una muestra de manera directa, a través de una red neuronal, por ejemplo. Mientras que un clasificador Generativo, primero aprende como las muestras y las etiquetas están distribuidas de manera conjunta, para luego clasificarlas según su etiqueta más probable. Al aprender la distribución conjunta, el clasificador generativo es capaz de generar muestras nuevas a través de una etiqueta—es esta la característica de un modelo Generativo. Por ejemplo, si sabemos como están distribuidos los rostros humanos (en que ubicación está la boca, los ojos, la nariz, el cabello) podemos dibujar un nuevo rostro en base a alguna etiqueta— por ejemplo, dibujar un hombre con lentes y barba.
Esta propiedad es la que hace que ChatGPT pueda aprender como están distribuidas las palabras. Saber, por ejemplo, que palabra es más probable que siga después de la siguiente oración:
Tuvo un accidente con el
Para ChatGPT, las palabras más probables de aparecer a continuación son las siguientes:
Rpta #1: auto (50%) Rpta #2: vehículo (35%) Rpta #3: camión (15%)
Según estas opciones, la palabra más probable es auto
, por lo tanto, ChatGPT generará esta palabra como respuesta a la oración anterior (Tuvo un accidente con el auto
). Pero, ¿Cómo sabe ChatGPT que auto
es la palabra más probable? La respuesta es simple, ChatGPT aprende de grandes bases de datos, las cuales contienen millones de oraciones. De este modo, ChatGPT tiene la capacidad de generar contenido coherente y contextualmente relevante. Pero, ¿Cómo comprende ChatGPT una instrucción? La respuesta esta en la Tokenización.
ChatGPT lee Tokens, no palabras
Al recibir como entrada una instrucción, oración incompleta, pregunta o cualquier otra secuencia de palabras, letras, números o símbolos (caracteres), el modelo de lenguaje de ChatGPT no puede procesar esta información directamente. Es en este punto donde entra en juego la Tokenización.
La Tokenización descompone el texto en unidades más pequeñas, llamadas Tokens. Cada Token representa una entidad semántica con significado propio. Cada Token tiene asignado un indetificador número único o ID. Para explicar este proceso utilizaremos un ejemplo muy simple. Supongamos que en todo el universo de palabras que el modelo ha visto (Corpus) existen las siguientes:
{menos: 8}, {mes: 9}, {tres: 7}, {tren: 8}, {norma, 4}
Cada palabra tiene asociada sus repeticiones dentro del Corpus. Entonces, como primer paso, separamos cada palabra en caracteres.
{m,e,n,o,s: 8}, {m,e,s: 9}, {t,r,e,s: 7}, {t,r,e,n: 8}, {n,o,r,m,a: 4}
Ahora el Corpus en lugar de estar conformado por palabras, estará conformado por caracteres. Lo cual nos permite obtener el Vocabulario, el cual estará representado por todos los caracteres—Tokens de un caracter—utilizados en el Corpus:
Vocabulario: {e,m,n,o,r,s,t,a}
Ahora, supongamos que nuestro objetivo es generar un vocabulario de 10 Tokens, entonces el siguiente paso es buscar pares de caracteres en el Corpus. Por ejemplo:
me
se repite en total 17 veces (8 + 9)es
se repite en total 16 veces (9 + 7)tr
se repite en total 15 veces (7 + 8)
Finalmente, escogemos el par con la mayor cantidad de repeticiones y lo añadimos a nuestro vocabulario
Vocabulario: {e,m,n,o,r,s,t,a,me}
Esto también modificará nuestro Corpus:
{me,n,o,s: 8}, {me,s: 9}, {t,r,e,s: 7}, {t,r,e,n: 8}, {n,o,r,m,a: 4}
Repetimos el mismo proceso, ahora el par con mayor repeticiones es tr
, por lo tanto el vocabulario ahora será el siguiente:
Vocabulario: {e,m,n,o,r,s,t,a,me,tr}
Y el Corpus:
{me,n,o,s: 8},{me,s: 9},{tr,e,s: 7},{tr,e,n: 8},{n,o,r,m,a: 4}
El vocabulario tiene ahora 10 elemento (sub-palabras o Tokens). Ahora, cada vez que el modelo encuentre una palabra que no esté en el vocabulario, esta será descompuesta en Tokens. Por ejemplo, para la siguiente instrucción:
Otra tormenta
Obtendremos los siguientes Tokens:
{o,tr,a,t,o,r,me,n,t,a}
Así es como un LLM visualiza el texto de entrada. En ChatGPT, este proceso ocurre de la misma forma cada vez que ingresamos una instrucción. Es decir, ChatGPT no procesa palabra por palabra, sino Token por Token.
Para nuestro ejemplo, el vocabulario base o inicial estaba compuesto por ocho caracteres. En ChatGPT, el vocabulario base son todos los caracteres posibles representados por Bytes—a esta técnica se le llama Byte-Level BPE.
Un Token a la vez
El esqueleto de ChatGPT es un Transformer, una red neuronal encargada de generar el siguiente Token—que podría ser una palabra—a partir de una secuencia de Tokens. Antes de ingresar los Token al Transformer, estos son transformados en vectores de números reales llamados Embeddings. Un Embedding es la representación vectorial de un Token, la cual es aprendida durante el entrenamiento de la red neuronal.
Esta secuencia de vectores se insertan en el Transformer al mismo tiempo. Una vez que el Transformer procesa la secuencia de vectores, genera un nuevo vector, el cual es transformado en un nuevo Token—la siguiente palabra. Finalmente, este nuevo Token es añadido a la secuencia de entrada para luego ser nuevamente procesada por el Transformer en la siguiente iteración. Este proceso se repite hasta que el Transformer genera un Token especial, el cual indica que la generación de Tokens ha terminado. Este Token especial es conocido como End-of-Sequence (EOS).
El Transformer puede generar Tokens de todo tipo: palabras, números, símbolos, espacios, saltos de línea, puntos, comas, etc. Dado que cada Token generado es añadido luego a la secuencia de entrada, ChatGPT se retroalimenta de su propia respuesta. Sin embargo, ¿Que sucedería si el Token generado por ChatGPT no es el correcto? Veamos un ejemplo:
Instrucción: Intercambia la primera y última letra de cada palabra de la oración: "Hola Mundo"
ChatGPT : aloh odnuM
No es la respuesta correcta. Pero démosle otra oportunidad más a ChatGPT:
Instrucción: Vuelve a intentarlo, la respuesta es incorrecta.
ChatGPT : Aoll Mundh
Es un hecho que ChatGPT no es capaz de resolver esta instrucción. Pero, ¿Por qué? La respuesta está en la retroalimentación. Al generar la primera palabra, ChatGPT tuvo que resolver el problema en base a alguna solución—incorrecta en este caso. Cuando ChatGPT genera la segunda palabra, esta se basa en la solución de la primera. Lo cual conlleva a que la segunda palabra también sea incorrecta.
Pero, ¿Qué sucede si guiamos a ChatGPT con la solución de la primera palabra? Por ejemplo:
Instrucción: Cuál es la primera y última letra de la palabra "Hola"
ChatGPT : En la palabra "Hola", la primera letra es "H" y la última letra es "a".
Ahora ChatGPT ha reconocido la primera y última letra de la palabra Hola
. Sigamos:
Instrucción: En la palabra "Hola", reemplaza la primera letra por la "a".
ChatGPT : Si reemplazamos la "H" por "a" en la palabra "Hola", obtendríamos "aola".
Instrucción: Ahora, reemplaza la última letra por la "H".
ChatGPT : Si reemplazamos la última letra "a" por "H" en la palabra "aola", obtendríamos "aolH".
ChaGPT ha dado con la respuesta a la primera palabra. Ahora, repitamos el mismo proceso para la segunda palabra:
Instrucción: Esa es la solución para la primera palabra. Ahora, ¿Cuál sería la solución para la palabra "Mundo"?. Desarrolla tu solución paso a paso.
ChatGPT : Vamos a aplicar el cambio paso a paso en la palabra "Mundo": 1. La primera letra es "M". 2. La última letra es "o". Ahora, vamos a intercambiar la primera y última letra: Reemplazamos la primera letra "M" por "o". Reemplazamos la última letra "o" por "M". Por lo tanto, al intercambiar la primera y última letra de la palabra "Mundo", obtenemos "oundM".
Ahora ChatGPT es capaz de resolver la instrucción completa:
Instrucción: Intercambia la primera y última letra de cada palabra de la oración: "Hola Mundo". Resuelve paso a paso.
ChatGPT : Vamos a intercambiar la primera y última letra de cada palabra de la oración "Hola Mundo" paso a paso: La primera palabra es "Hola": Primera letra: "H" Última letra: "a" Intercambio: Reemplazo la primera "H" por "a" y la última "a" por "H". Nueva palabra: "aolH" La segunda palabra es "Mundo": Primera letra: "M" Última letra: "o" Intercambio: Reemplazo la primera "M" por "o" y la última "o" por "M". Nueva palabra: "oundM" Finalmente, al intercambiar la primera y última letra de cada palabra de la oración "Hola Mundo", obtenemos la nueva oración: "aolH oundM".
El proceso por el cual se descompone una instrucción compleja en varias instrucciones más simples es conocido como Chain-of-Though (Cadena de Pensamiento). Este proceso permite el razonamiento paso a paso de un LLM, en este caso de ChatGPT.
Notas finales
En este blog, exploramos el proceso de Tokenización, el cual es esencial para el funcionamiento de ChatGPT. Aprendimos que ChatGPT no procesa palabra por palabra, sino Token por Token. También aprendimos que ChatGPT se retroalimenta de su propia respuesta, lo cual puede ser un arma de doble filo. Esto es crucial para poder guiar a ChatGPT en la resolución de instrucciones complejas.