Chat GP ¿qué? (Parte 1)

Me vais a permitir un poco de humor en el título, y es que cuando hace algún tiempo comenzamos algunos a hablar de esto de los modelos GPT, lo siguiente que decía la gente era, GPT¿qué?, como si no hubieran entendido la última letra que acompañaba a la G y a la P, y aunque sin duda es una tontería, a mi al menos, me resultaba gracioso y ha sido lo que me dio la idea de crear esta entrada para explicar un poco que hay detrás de las siglas de GPT y de paso, que sirva de complemento a las entradas relacionadas con la creación de chatbots que tengo previsto ir desarrollando.

Introducción

Los modelos GPT, abreviatura de Generative Pre-trained Transformers, son una clase de modelos de lenguaje basados en la arquitectura de redes neuronales conocida como Transformers. Estos modelos se han destacado por su capacidad para generar texto coherente y de alta calidad, además de realizar tareas de procesamiento del lenguaje natural (NLP, por sus siglas en inglés) de manera efectiva.

Los modelos GPT son entrenados en grandes cantidades de datos de texto sin supervisión previa (aprendizaje no supervisado), lo que les permite aprender patrones lingüísticos y estructuras gramaticales en un amplio rango de dominios y estilos de escritura. Este proceso de pre-entrenamiento les proporciona un conocimiento profundo sobre el lenguaje y les permite generar texto coherente y relevante en respuesta a una entrada dada. Los Transformers, se caracterizan por su atención multi-cabeza (multi-head) y su enfoque en el procesamiento paralelo de secuencias, lo que permite a los modelos GPT capturar relaciones a largo plazo (tamaño de ventana) en el texto y generar una salida contextualmente relevante y coherente.

Los modelos GPT se han utilizado en una variedad de aplicaciones, como la generación de texto, la traducción automática, la sumarización de textos, la respuesta a preguntas y la redacción de contenido. Han demostrado un rendimiento sobresaliente en tareas de generación de lenguaje natural y han sido ampliamente adoptados en la comunidad de investigación y desarrollo de NLP. Es importante destacar que los modelos GPT son generativos y pueden generar texto completamente nuevo, pero también pueden ser utilizados en tareas de clasificación o etiquetado cuando se les proporciona una entrada específica.

Pero, ¿qué es un transformer exactamente?

No tienen nada que ver con los autobots, perdonar el chiste fácil y malo, je, je. Bueno al grano que me despisto, un Transformer es una arquitectura de red neuronal diseñada para procesar y generar texto en el campo del procesamiento del lenguaje natural (NLP). Fue presentada en el artículo «Attention is All You Need» por Vaswani et al. en 2017 y ha demostrado un rendimiento sobresaliente en diversas tareas de NLP, como traducción automática, generación de texto y resumen de documentos.

La característica clave de un Transformer es su enfoque en el mecanismo de atención. A diferencia de las arquitecturas recurrentes tradicionales, como las redes LSTM o las redes GRU, que procesan secuencialmente los datos de entrada, un Transformer procesa todas las palabras o tokens (ahora cuento que es esto de un token más adelante) de entrada simultáneamente utilizando atención.

La atención es un mecanismo que permite que el modelo se «enfoque» en diferentes partes de la secuencia de entrada mientras realiza cálculos. En lugar de depender de un contexto local fijo, como en las arquitecturas recurrentes, el Transformer puede capturar relaciones a largo plazo en el texto al asignar diferentes niveles de importancia a las diferentes partes de la secuencia de entrada. La arquitectura del Transformer se compone de dos componentes principales:

  • el codificador (encoder): El codificador toma la secuencia de entrada y la procesa utilizando múltiples capas de autoatención (self-attention) y capas de feed-forward. Cada capa de atención permite que el modelo capture dependencias entre las palabras de entrada y determine su importancia relativa.
  • y el decodificador (decoder): El decodificador utiliza un mecanismo similar de atención, pero también toma como entrada la salida generada hasta el momento. Es utilizado en tareas de generación de texto, como traducción automática o generación de lenguaje, donde se requiere generar una secuencia de palabras a partir de una secuencia de entrada.

Para trabajar con Transformers en Python, hay multiples librerías de código, quizás las más conocidas y utilizadas son las siguientes:

BibliotecaDescripción
Hugging Face TransformersBiblioteca de código abierto con una amplia gama de modelos Transformer pre-entrenados y herramientas.
TensorFlow TransformersBiblioteca de TensorFlow que ofrece implementaciones eficientes de modelos Transformer.
PyTorch TransformersBiblioteca de PyTorch con una interfaz fácil de usar para trabajar con modelos Transformer.
AllenNLPBiblioteca desarrollada por Allen Institute for AI con componentes para modelos de NLP, incluidos Transformers.
FairseqBiblioteca desarrollada por Facebook AI Research (FAIR) enfocada en modelos de traducción automática y tareas de NLP.
OpenNMTBiblioteca de OpenNMT centrada en la traducción automática con implementaciones de modelos Transformer.
Librerías que soportan el uso de Transformers en Python

Y, ¿qué es un token?

Otro bonito palabro del mundo NLP, en el contexto de los modelos GPT (Generative Pre-trained Transformers), un token se refiere a una unidad indivisible en el texto que se utiliza como entrada para el modelo. En lugar de representar palabras individuales o caracteres, los tokens en los modelos GPT suelen ser fragmentos más pequeños, como subpalabras o piezas de palabras. Los modelos GPT utilizan una técnica de tokenización especial llamada tokenización basada en subpalabras, que divide el texto en unidades más pequeñas llamadas subtokens. Estos subtokens pueden representar fragmentos de palabras y tienen una correspondencia uno a uno con los tokens del modelo.

La tokenización en los modelos GPT tiene en cuenta la estructura de las palabras y utiliza métodos como BPE (Byte Pair Encoding) o SentencePiece para dividir el texto en subtokens, esto permite manejar de manera más eficiente palabras poco comunes, jergas, errores ortográficos y otras peculiaridades del lenguaje. Además, los modelos GPT suelen agregar tokens especiales al texto, como tokens de inicio (start tokens) y tokens de fin (end tokens), que ayudan al modelo a identificar el inicio y el final de una secuencia.

Veamos algunos ejemplos que pueden ayudarte a entender esto un poco mejor:

Ejemplo de tokenización con BPE:

  • Frase: «La inteligencia artificial está transformando nuestra vida diaria.»
  • Tokens: [«La», «in», «tel», «i», «gen», «cia», «ar», «tifi», «cial», «está», «trans», «for», «mando», «nuestra», «vida», «diaria», «.»]
  • Frase: «Los avances en el campo de la medicina son impulsados por la inteligencia artificial.»
  • Tokens: [«Los», «av», «ances», «en», «el», «campo», «de», «la», «medicina», «son», «im», «pul», «sa», «dos», «por», «la», «inteligencia», «artificial», «.»]

Ejemplo de tokenización con SentencePiece:

  • Frase: «La tecnología está revolucionando la forma en que nos comunicamos.»
  • Tokens: [«▁La», «▁tecno», «logía», «▁está», «▁revolucion», «ando», «▁la», «▁forma», «▁en», «▁que», «▁nos», «▁comun», «ic», «amos», «.»]
  • Frase: «Los automóviles autónomos están cambiando la industria del transporte.»
  • Tokens: [«▁Los», «▁autom», «óviles», «▁aut», «ón», «omos», «▁está», «n», «▁cambi», «ando», «▁la», «▁industri», «a», «▁del», «▁transporte», «.»]

En la tokenización con BPE, las palabras se dividen en subtokens basados en la frecuencia de pares de bytes en el texto. Cada subtoken comienza con el prefijo «▁» y se forman al combinar subtokens más pequeños hasta alcanzar el tamaño deseado del vocabulario.

En la tokenización con SentencePiece, las palabras se dividen en subtokens utilizando un modelo de aprendizaje automático, que puede ser entrenado en el conjunto de datos. Los subtokens se generan para minimizar la pérdida de compresión del texto y se utilizan para representar el texto en el modelo.

Cabe destacar que los ejemplos anteriores son ilustrativos y los resultados pueden variar dependiendo de los hiperparámetros y el conjunto de datos utilizados en la tokenización con BPE y SentencePiece.

La tokenización en los modelos GPT es esencial para dividir el texto en unidades manejables que puedan ser procesadas por la red neuronal. Cada token se codifica numéricamente antes de ser pasado al modelo para su procesamiento y generación de texto.

Conclusión

Los modelos GPT, un token es una unidad indivisible en el texto, que generalmente representa un subtoken en lugar de una palabra o un carácter completo. La tokenización basada en subpalabras se utiliza para dividir el texto en subtokens, lo que permite un procesamiento más eficiente y una representación más rica del lenguaje. En próximas entradas profundizaremos un poco más en todos estos conceptos y pondremos unos ejemplos de código para que resulte más fácil de comprender.

Si quieres saber más sobre otras técnicas NLP, puedes leer las siguientes entradas:

Chat GP ¿qué? (Parte 1)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll hacia arriba