GPT-1. Generación de texto.
Rubén Rodríguez Abril
La serie GPT, desarrollada por OpenAI, es una de las grandes familias de transformers existentes en la actualidad. Su primer modelo, GPT-1, introdujo el método de pre-entrenamiento, que redujo la dependencia del entrenamiento supervisado y permitió la generación de textos cada vez más próximos al lenguaje humano.
GPT-1
GPT, acrónimo de Generative Pre-trained Transformer, es el nombre de una famosa serie de modelos de Procesamiento Natural de Lenguaje creados por la fundación OpenAI y cuya aparición ha elevado las capacidades de generación de texto escrito por parte de autómatas hasta niveles hasta ahora desconocidos.
En este artículo presentaremos el primero de los modelos de la serie, GPT-1, que pivota en torno a tres características fundamentales: su carácter generativo, el uso de una modalidad de entrenamiento no supervisado denominado pre-entrenamiento; y una arquitectura de tipo transformer. Analizaremos cada una de ellas a lo largo de los siguientes párrafos.
Técnicas de generación de texto
Al igual que en los sistemas de traducción a máquina analizados en artículos anteriores, las técnicas de generación de texto utilizadas en el modelo GPT hunden sus raíces en los estudios estadísticos sobre el lenguaje realizados por Andrey Markov y Claude Shannon en la primera mitad del siglo XX. Ambos propusieron por primera vez la utilización de métodos estadísticos y estocásticos para crear cadenas de palabras.
Aproximaciones
En la aproximación de orden quinto, las palabras son seleccionadas mediante un esquema probabilístico no condicionado. Basta con “tirar un dado” dotado de tantas caras como palabras haya en el vocabulario, si bien en este caso los diferentes vocablos no tienen la misma posibilidad de salir elegidos. La probabilidad de aparición de cada palabra es directamente proporcional a su frecuencia en la lengua inglesa. Shannon obtuvo el resultado siguiente:
REPRESENTING AND SPEEDILY IS AN GOOD APT OR COME CAN DIFFERENT NATURAL HERE HE THE A IN CAME THE TO OF TO EXPERT GRAY COME TO FURNISHES THE LINE MESSAGE HAD BE THESE
En la aproximación de orden sexto, la probabilidad es condicionada por la palabra anterior. Una tabla determina las frecuencias de transición (probabilidad condicionada) entre cada uno de los dos pares de palabras. Utilizando este esquema, la cadena de texto tiene un parecido aun mayor a la lengua inglesa:
THE HEAD AND IN FRONTAL ATTACK ON AN ENGLISH WRITER THAT THE CHARACTER OF THIS POINT IS THEREFORE ANOTHER METHOD FOR THE LETTERS THAT THE TIME OF WHO EVER TOLD THE PROBLEM FOR AN UNEXPECTED
Los actuales sistemas de traducción a máquina funcionan utilizando un sistema parecido al de la aproximación de orden sexto. La única diferencia es que las frecuencias de transición entre los diferentes vocablos vienen determinados por un modelo de aprendizaje profundo (sec2sec, transformer, etc.).
Arquitectura de GPT-1

A diferencia del modelo del primitivo Transformer, que contenía un codificador y un descodificador, el modelo de GPT-1 consta de un único descodificador estructurado en tres áreas diferenciadas:
-La primera de ellas, situada abajo del todo y expuesta en el artículo anterior, es el codificador de tokens, que transforma a los mismos en vectores de un espacio semántico de 768 dimensiones (procedimiento de embedding). Cada vector incorpora no sólo información relativa al significado de la palabra codificada, sino también relativa a la posición de la misma dentro del texto.
-La segunda son doce módulos idénticos con arquitectura transformer.
-La última es la cabeza del modelo, y varía dependiendo de la tarea que le hayamos encomendado (clasificación de textos, predicción de palabras, etc.).
Módulos
De particular interés son los módulos (o capas) transformer, que realizan la mayor parte de las tareas de procesado del lenguaje. En ellos, se distinguen dos unidades:
La unidad de atención
Sus matrices vinculan palabras, grupos de palabras y conceptos entre sí. Con ello crean sintagmas, vinculan el sujeto con el verbo, o generan estructuras deícticas y referenciales, como anáforas, catáforas o exóforas. Son las responsables de crear información relativa al contexto así como al significado de grupos de palabras, oraciones o incluso textos enteros. A medida que nos alejamos de la entrada y progresamos hacia el interior del descodificador los conceptos procesados por las unidades de atención son cada vez más abstractos.
Como se señaló en el artículo anterior, las unidades de atención son multicabeza: el hiperespacio semántico se rompe en doce secciones iguales, cada una de las cuales está dotada de su propia matriz (“cabeza”) de atención. Esto permite que las matrices se especialicen en determinados aspectos de las palabras. Algunas de las matrices vincularán a las palabras vecinas entre sí, mientras que otras tenderán a agrupar a las palabras pertenecientes al mismo caso gramatical o al mismo género. La unidad de atención viene dotada de una conexión residual (“atajo”) que posibilita que las asociaciones realizadas por los primeros módulos puedan llegar a la salida.
Red orientada hacia adelante
Está formada por dos capas lineales intercaladas por una capa ReLU. A nuestro juicio, esta pequeña red es capaz de aplicar reglas de inferencia lógica, que en el ámbito del procesamiento de lenguaje natural podrían ser entendidas como transformaciones lineales de vectores. Por ejemplo, en una regla de tipo modus ponens tanto la proposición A como la consecuencia B estarían codificadas por vectores semánticos, mientras que la regla de inferencia A→B estaría codificada en la matriz de la red.

La unidad viene dotada de una conexión atajo que permite que la información del vector A pueda saltarse la red orientada hacia adelante y sumarse con posterioridad a la información del vector B. La proposición A se transforma en la proposición A+B.
El esquema que hemos expuesto es ciertamente una simplificación, puesto que las proposiciones, en general, no vienen representadas por un sólo vector, sino por una superposición de varios de ellos.
Por lo demás, cada unidad de atención y cada red orientada hacia adelante viene seguida de una capa de normalización que transforma de nuevo a los vectores en puntos de la superficie de una hiperesfera de dimensión uno
Modelo autorregresivo
Tal y como señalábamos con anterioridad, GPT-1 consta tan sólo de un descodificador. Tiene como única entrada la cadena de texto producida hasta este momento, cuyos tokens se disponen en forma de matriz. En el modelo original de Vaswani et al., concebido fundamentalmente para la traducción a máquina, una cadena en lengua de origen (m_{1}, m_{2}… m_{n}) servía de entrada al codificador, mientras que el descodificador producía otra cadena (y_{1}, y_{2}… y_{r}) en la lengua de destino.
GPT-1, en cambio, adopta la arquitectura de Peter J. Liu et al. (2018). En ella, las dos cadenas se fusionan en una sola (m_{1}, m_{2}… m_{n}, δ, y_{1}, y_{2}… y_{r}), donde δ es un símbolo de separación. La labor del descodificador es ir produciendo, paso a paso, todos los símbolos situados a la derecha de la separación, recibiendo como entrada toda la cadena producida hasta el momento. Esto se conoce como modelo autorregresivo.

Funcionamiento de un modelo autorregresivo, como es el caso de GPT-1.
Entrenamiento
Los transformers de la serie GPT se caracterizan porque su entrenamiento se estructura en dos fases: La primera fase, no supervisada, se denomina de pre-entrenamiento (pre-training). La segunda, supervisada, es la de afinamiento (fine-tuning).
Pre-entrenamiento
En la fase de pre-entrenamiento la cabeza del codificador consiste un régimen lineal acompañado de una función softmax. Dado un corpus de tokens \mho = \left \{u_{1}, u_{2}… u_{n}\right \}, el descodificador recibe como entrada una cadena de k palabras dispuestas en una matriz, donde k es el tamaño de la ventana de contexto. La tarea del modelo es averiguar cuál es la siguiente palabra. La ventana de contexto va progresivamente desplazándose a través de todo el texto de entrenamiento
La función de pérdida, que debe ser minimizada, es la siguiente:
Su valor es equivalente la cantidad de información de Shannon contenida en el texto generado dentro de la ventana. Cuanto más estructurada esté una cadena de texto, menor será su contenido en información de Shannon. Y la labor del codificador es la de generar una cadena cuya discrepancia con el texto ya generado sea mínima, es decir, con la menor cantidad de información de Shannon posible.
En la fase de pre-entrenamiento, el codificador analiza a ciegas las posibles estructuras lingüísticas existentes en el corpus de textos utilizado para su entrenamiento. Su actividad se asemeja en cierto modo a la de los descifradores de una lengua antigua en las primeras fases de su tarea, cuando todavía no han asignado contenido fonético o semántico a los signos de la escritura. En esta etapa tienen que conformarse con detectar regularidades en el texto, y a partir de ellas deducir la posible existencia de flexión nominal, conjugaciones verbales u oraciones subordinadas. Así sucedió en el caso del desciframiento del cuneiforme persa o del Lineal B. Y así sucede en la actualidad con el disco de Festo, aun no descifrado pero en el que también es posible detectar patrones y regularidades.
Afinamiento
La siguiente fase, que ya es supervisada, es la de afinamiento (fine-tuning). En ella, el modelo es entrenado para realizar una tarea determinada. A cada una de estas tareas le corresponde una determinada estructura de entrada así como un determinado tipo de cabeza. En el artículo Radford et al. (2018) se analizan las siguientes posibilidades:
–Clasificación: el texto debe ser clasificado entre varias categorías. El régimen lineal tiene tantas salidas como categorías haya. Viene acompañado de una función softmax. Al modelo le corresponde una entrada de tipo (<s>texto<e>), donde <s> y <e> son los tokens que marcan el inicio y el fin del texto.
–Implicación textual (Textual entailment): el modelo debe determinar si a una premisa p le corresponde una hipótesis h. La cadena de entrada tiene la estructura (<s>premisa<δ>hipótesis<e>), donde <δ> es el token separador. El cabezal tiene la misma estructura que en el caso anterior, aunque únicamente con dos salidas (sí y no).
–Similaridad: se analiza la similaridad léxica entre dos textos. En este caso, la entrada viene constituida por la cadena (<s>texto1<δ>texto2<e>). Se ejecutan dos transfomers en paralelo, y a cada uno de ellos le corresponden ambos textos pero en diferente orden. Las activaciones de la última capa se suman y se hacen pasar por el régimen lineal, dotado de dos salidas.
–Elección múltiple: el sistema debe responder correctamente a una cuestión, eligiendo una entre varias respuestas posibles. Se ejecutan en paralelo tantas copias del modelo como posibles respuestas haya, y en cada una de ellas la respuesta cambia. La entrada obedece a la estructura (<s>contexto<δ>respuesta<e>). El modelo otorga a cada una de las entradas una puntuación en logits. Más tarde, todas las puntuaciones se hacen pasar a través de una función softmax, que las transforma en probabilidades sobre uno.

Función de pérdida
Durante el afinamiento, a función de pérdida, para una base de datos etiquetada Δ, toma la siguiente forma:
donde x_{1},… x_{m}) son los tokens de la cadena de entrada e y la etiqueta de la misma.
El sistema de optimización usado es Adam, con una tasa de aprendizaje de 2,5e-4. La base de datos utilizada es BooksCorpus, un conjunto de 11.000 libros no publicados, de múltiples géneros, compilados por científicos de la Universidad de Toronto. En total la base de datos consta de 985 millones de palabras.
El modelo GPT-1 fue probado en múltiples tareas de inferencia lingüística, y en todas ellas salvo en una, superó las puntuaciones de las arquitecturas basadas en LSTM, que fueron definitivamente desplazadas por los transformers en el ámbito del procesamiento de lenguaje natural.