¿Qué es la inteligencia? Aquí no tenemos la más remota idea… pero sí podemos hablar de la «inteligencia» de sistemas como ChatGPT y, en general, de los grandes modelos de lenguaje.
El principio fundamental sobre el cual descansa el funcionamiento de los grandes modelos de lenguaje es extraordinariamente simple. Tan simple, que parece increíble que funcione tan bien.
¿Cómo pensar los problemas?
Quiero que el lector imagine los problemas (cualquier problema concebible) como una función.
Por «función» vamos a entender a una cosa que relaciona un conjunto con otro. El primer conjunto puede ser, por ejemplo, el de las preguntas, y el segundo, el de sus respuestas. La función adecuada relaciona las preguntas con la respuesta correcta.
¿Con qué está hecha una función? Aunque podríamos declarar explícitamente las relaciones entre los conjuntos, lo conveniente es encontrar reglas que nos permitan viajar de un conjunto al otro.
Dada una «pregunta», debemos poder hacer algo con ella para llegar a la respuesta. Siempre hay una forma de hacerlo. La pregunta es: ¿cómo?
Entendido esto, pasemos a lo siguiente.
La fuerza motriz de los modelos de lenguaje
Visto así, podemos entender al modelo de lenguaje como «algo» que recibe una entrada (del primer conjunto), y emite una respuesta (del segundo conjunto).
Pero, ¿cuál es la fuerza motriz que guía la creación de los grandes modelos de lenguaje? Para comenzar a entender esa fuerza motriz, quiero que el lector imagine una máquina muy simple que recibe como entrada un cero (0), o bien, un uno (1). Un símbolo a la vez. No puede recordar lo que ha visto. Sólo sabe del símbolo que tiene en este momento.
La tarea de la máquina es intentar adivinar cuál será el siguiente símbolo que recibirá, un cero (0) o un uno (1), en función del último símbolo que ha recibido.
Si los símbolos aparecen completamente al azar, la tarea es muy difícil, y sólo acertará lo que dicte la suerte. Pero si por alguna razón un símbolo aparece con más frecuencia que otro, entonces sus posibilidades aumentan augurando el símbolo que más aparece.
Poco más se puede hacer con esta máquina. Es demasiado simple. No nos importa mucho qué mecanismo sigue para proponer el siguiente símbolo. Lo único que nos importa es que propone un símbolo.
Para hacer todo mucho más interesante, vamos a modificar la máquina de varias maneras:
- Vamos a permitirle «ver» los últimos tres símbolos que haya recibido.
- El símbolo que proponga la máquina se regirá por una probabilidad. Es decir, según los últimos símbolos que haya visto, existirá una probabilidad de que proponga un cero (0) o un uno (1).
La secuencia que va a intentar adivinar la máquina será esta:
111101111011110
Cuatro unos, intercalados con un cero. Simple.
Nuevamente, no nos preocupa el mecanismo que sigue para proponer un símbolo. Sólo debemos quedarnos con que intenta «adivinar» el símbolo que sigue.
Como ve tan pocos símbolos, estaríamos tentados a crear una lista que diga «Si acabas de ver 111, entonces, propón un 0». y así para cada triada de símbolos. Pero no haremos eso. Queremos que, de alguna forma, lo calcule.
Es decir, tenemos que crear… la función.
Pero no tenemos ni la más remota idea de cómo es esa función, así que tenemos que inventarnos un mecanismo que la vaya construyendo.
La idea será proponer una función arbitraria, que por la misma razón escupirá símbolos arbitrarios. Se tendrá que ir modelando poco a poco, hasta que su salida corresponda con lo deseado.
Así que, en nuestro caso, tenemos que «enseñarle» de alguna manera a estimar el símbolo más probable. Al principio no sabe hacerlo, pero nosotros le diremos si esa predicción fue correcta o no.
El sistema tiene que estar hecho de tal manera que pueda incorporar ese conocimiento adquirido por retroalimentación.
Uno de los ladrillos de construcción más adecuados para ello son las neuronas artificiales. Variando la fuerza de conexión entre neuronas, el conjunto de las mismas puede variar su respuesta. El secreto consiste en ajustar esas fuerzas de conexión de tal forma que den la respuesta deseada.
Son estas neuronas los bloques de construcción de nuestra función, la que establecerá las reglas que nos llevan de las entradas a las salidas.
El cómo se decide el ajuste de las conexiones, y toda la infraestructura que esta detrás, es una ciencia por sí misma, y no interesa en este momento. Lo que sí se puede decir es que, según la manera en que estén dispuestas esas neuronas, sus características y la dinámica que las rige, su «entrenamiento» se puede ver favorecido o perjudicado.
Regresando a nuestra máquina, supongamos que ya la hemos «entrenado». Ha propuesto símbolos y nosotros hemos corregido sus respuestas. Ha incorporado ese conocimiento y ahora tiene un comportamiento bien definido, que podemos representar con esta gráfica:
Cada óvalo, con una triada de ceros y unos dentro, representa los últimos símbolos que el sistema ha visto en un momento dado.
Las flechas que salen de ellos representan el símbolo que propone la máquina partiendo de ese estado, un cero (0) o un uno (1), y la probabilidad de que proponga dicho símbolo. La flecha nos conduce a la nueva combinación de últimos símbolos que ha visto/generado.
Por ejemplo, si el sistema acaba de ver 001, según ésta gráfica, hay un 78% de probabilidades de que genere un uno (1), y un 22% de que genere un cero (0).
Debe entenderse que el símbolo nuevo se coloca a la derecha de la triada, y el símbolo más a la izquierda «sale», de forma que siempre tenemos tres.
La máquina es incapaz de generar la secuencia original de forma perfecta (111101111011110), porque al sólo poder ver tres símbolos no tiene manera de llevar la cuenta de los cuatro unos, pero lo que devuelva se aproximará a ello.
(Puedes jugar con el modelo del que salió esta gráfica, accediendo a este cuaderno de Google Colab.)
¿Y ahora qué?
Pues esto, mi querido lector, es un ChatGPT bebé. Porque esto que acabas de ver es casi lo único que hace ChatGPT. ¿Cómo te quedó el ojo? Salud 🍺
Me explico: los tres símbolos que nuestra máquina puede ver corresponden a las palabras que el modelo de lenguaje puede ver a la vez. Es decir, el prompt y todo el texto que hay detrás. La diferencia es que un modelo como GPT4 puede ver hasta 32,768 tokens/palabras. Es lo que se llama «ventana de contexto».
El cero (0) o uno (1) que nuestra máquina genera cada vez, se corresponde con cada token/palabra que el modelo de lenguaje genera (o mejor dicho «adivina»). Porque sí, cada palabra que él mismo ha generado es también la entrada para la siguiente palabra que él mismo va a generar.
Y… ya.
¿Pero cómo DIABLOS FANFARRONES MALDITA SEA, una cosa que lo único que hace es «adivinar» la palabra que sigue, puede «razonar», contestar y escribir cosas que tienen sentido?
Pues:
¿Eso es todo?
¡Por supuesto que no! ¡Esto es sólo el principio! Bromas aparte, si lo piensas bien, el sistema no «adivina». Recuerda: simplemente es una máquina que recibe una entrada, y genera una salida como respuesta. Velo así.
El concepto de «adivinar» sólo tiene sentido en el contexto de su entrenamiento, del mecanismo que se ha usado para construir el sistema. Aunque la pregunta persiste: ¿cómo es que una máquina que ha sido guiada por algo tan aparentemente simple como adivinar la palabra que sigue, hace todo eso?
Y la respuesta es que eso de adivinar la palabra que sigue no es para nada simple.
Piénsalo: las palabras tienen relaciones tremendamente complejas entre ellas. Hay muchos niveles de abstracción, que van de las palabras a las oraciones. De las oraciones a los párrafos.
«Adivinar» correctamente la palabra que sigue implica, de alguna forma, «entender» las relaciones que las palabras precedentes tienen entre sí. Es una tarea titánica. Las relaciones que pueden existir entre las palabras están sintetizadas en la fuerza de las conexiones neurales del sistema.
Al forzar al sistema a adivinar palabras, parece que lo estamos empujando a configurarse de una forma que, ineludiblemente, hace que su comportamiento asemeje al razonamiento.
La complejidad del lenguaje escrito es tal, que la tarea de «adivinarlo» se vuelve tan, pero tan compleja, que parece implicar en sí misma el razonamiento (o una clase de él).
Podríamos decir que el lenguaje conduce inevitablemente al razonamiento. Esto, por cierto, suena a un respaldo a las ideas que atribuyen al lenguaje un papel protagónico en el razonamiento humano. Pero ese ya es otro tema.
La arquitectura de la inteligencia
Hay que ahondar un poco en cómo rayos llegamos a… la función.
Sabemos algo de las neuronas: bajo ciertas disposiciones, y si podemos agregar tantas como queramos, pueden aproximar cualquier función. Es decir, son aproximadoras universales. Y por cualquier función me refiero a cualquier función en el fucking Universe.
Que puedan convertirse en cualquier función no es que ayude mucho, porque el problema es encontrar las conexiones entre ellas que aproximan el comportamiento deseado. Es como si te dijeran:
— Con este conjunto de símbolos (el alfabeto), ¡puedes escribir el libro que tú quieras! ¡Cualquiera! Ya sólo tienes que acomodarlos en el orden adecuado.
— No pues… muchas gracias. 😶
Y así como nadie haría un libro a golpe de escribir letras al azar, o un programador no escribiría el Microsoft Office en un sólo bloque de código (aunque no son cosas imposibles), lo cierto es que actuar así dificulta la tarea y en la práctica es irrealizable.
En la teoría, un montón muy grande de neuronas conectadas de cierta forma, harán lo que queramos. Pero en la práctica nunca vamos a encontrar cómo deben ser esas conexiones, porque son demasiadas, y las interdependencias entre ellas muy complejas.
Para encontrar la función tenemos que fabricar una estructura que guíe la construcción de la red, como un andamio guía el camino por el cual debe crecer la enredadera.
Estos andamios son las arquitecturas sobre las cuales se asienta el sistema. Y en el caso de los grandes modelos de lenguaje, el andamio más común se llama Transformer. (Sí. Así se llama). 🤖
Fue propuesta por Google en 2017, en un paper llamado Attention is all you need.
El Transformer
¿Qué hace el Transformer? Lo cierto es que es una estructura muy complicada, pero aquí vamos a tocar conceptualmente sus partes más relevantes.
El embeding
Es la puerta de entrada de los datos al sistema. Es decir, el texto original. Su propósito es convertir las palabras o tokens en vectores.
Los vectores son largas listas de números, que podemos entender como coordenadas en un espacio de muchas, muchas dimensiones. Usualmente cientos de ellas. Este espacio abstracto es llamado espacio de características.
v = (12, 72, 53, 29, 4, 92, 13, … )
Para cada token hay un vector asociado. Los valores de tales vectores se definen en el proceso de entrenamiento y no tienen un significado obvio para nosotros. Pero tienen propiedades interesantes.
Como son coordenadas en un espacio, las palabras tienen distancias y orientaciones entre ellas, y eso dice algo sobre sus relaciones. Palabras con significados similares serán cercanas en ese espacio, mientras que palabras diferentes serán más lejanas.
Las palabras se pueden sumar o restar entre sí y dichas operaciones pueden reflejar las relaciones semánticas entre ellas. Por ejemplo: «rey» + «femineidad» puede resultar en «reina» o algo muy cercano a dicha palabra.
El embeding convierte a los datos en algo más digerible para las redes neurales posteriores que los recibirán, además de añadir una caracterización útil a los mismos.
Mecanismos de atención
Éstos son la joya de la corona de la arquitectura Transformer. Aunque ya se utilizaban con anterioridad. Esta arquitectura casi se basa enteramente en ellos.
La idea principal de los mecanismos de atención es brindar la infraestructura que permita ponderar la importancia o relevancia de secciones de la entrada que recibe.
Por ejemplo: en la frase «La manzana es roja», nos resulta obvio que las palabras «manzana» y «roja» son más importantes que «La» o «es». Los mecanismos de atención brindan el andamio para que resulte sencillo al sistema asignar dicha importancia a esos elementos, la cual es una tarea fundamental en la comprensión del texto.
Debe quedar claro que este es un ejemplo. Los mecanismos de atención no reciben palabras, y según la profundidad a la que se encuentren, la entrada recibida puede representar conceptos de mayor nivel de abstracción que poco tengan que ver con ellas.
Los mecanismos de atención están dispuestos en columnas, donde la salida de uno es la entrada del siguiente. Se interpreta que, a mayor nivel de profundidad, mayor nivel de abstracción tendrá la información procesada.
Lo usual es que no exista una sola columna de mecanismos de atención, sino que existan varias trabajando en paralelo. Esto favorece también su entrenamiento y posterior empleo.
Pueden entenderse como los escalones que permiten al sistema subir al edificio de la comprensión. Permite dividir el problema en partes más pequeñas, quizá aislando diferentes formas de representar o sintetizar la entrada original.
Lo contrario sería esperar que una sola red neuronal, sin estructura obvia, pudiera sintetizar de un solo golpe todo el proceso. Sin ser imposible, resulta muy difícil, y en la práctica inalcanzable, encontrar dicha red. Recuérdese que una red es una aproximadora universal y en principio podría hacerlo.
Debe hacerse hincapié que nadie planifica la tarea específica que cada bloque tendrá. Esa es definida de manera espontánea por el entrenamiento.
Capa de proyección
Al final, el procesamiento es transformado en un token/palabra que se emitirá como salida. Esto sucede en la capa de proyección.
En términos simples, consiste en aplicar una función de probabilidad sobre un vocabulario de salida en función de todo el procesamiento anterior. El token/palabra más probable será el emitido.
Sólo un token/palabra es generado. Para producir la siguiente palabra, el texto con la última palabra añadida se convierte en la nueva entrada del sistema.
Hay cosas en el tintero
Esta es una versión extremadamente simplificada de cómo funciona el sistema y su justificación teórica. La arquitectura contiene más elementos y es más compleja. La información fluye por más canales. A veces, retroalimenta al sistema.
También hay muchas preguntas sin contestar, por ejemplo: ¿Cómo sabe el sistema cuándo dejar de generar más texto? ¿Cómo se puede «afinar» su comportamiento? Pero creo que lo anterior da buena idea del concepto principal.
¿Por qué son tan poderosos?
Quiero dejar aquí una pequeña reflexión de por qué los grandes modelos de lenguaje son tan poderosos:
Primero, y como ya se ha mencionado, la tarea de predecir texto es tan compleja, que el proceso de hacerlo correctamente, lleva inevitablemente a la emergencia de propiedades que rememoran al razonamiento mismo.
La segunda fuente de su poder es la información contenida en sus datos de entrenamiento. El sistema no sólo ha «comprendido» las relaciones entre palabras de su corpus de entrenamiento, sino también sobre las cosas que esas palabras dicen.
Esto le brinda una cultura general muy amplia. Es una maquina culta, y ese bagaje cultural le permite «entender» de alguna forma, cómo funciona el mundo y potencia aún más su «motor de razonamiento». En realidad no importa tanto lo que sabe, como la capacidad que le brinda para razonar sobre información nueva contenida en la entrada.
La tercera fuente de su poder radica en el hecho mismo de que es un sistema especializado en la generación de texto. El texto es moneda de cambio entre diferentes tipos de datos. Todo puede ser expresado de alguna u otra manera en texto, aunque originalmente no lo sea. Y es esa cualidad lo que lo vuelve una herramienta casi universal.
En el futuro, los grandes modelos de lenguaje serán el pegamento que una otras herramientas más especializadas. Por ejemplo: el modelo es malo en matemáticas, pero podrá usar una calculadora, o incluso, programar una pequeña rutina que le dé la respuesta. Quizá su «cultura» y conocimientos sean limitados, pero sabrá cuándo y qué preguntar a una base de datos fácticos.
Propuestas recientes hacen al modelo de lenguaje analizar su propia salida, para saber si está llevando a cabo correctamente lo que se le ha solicitado, en un bucle continuo de auto-retroalimentación.
Reflexiones finales
Los modelos de lenguaje y otras tecnologías, nos brindan al oportunidad de asomarnos a los fundamentos de un tipo de inteligencia que, de manera inevitable, nos lleva a la reflexión de la complejidad y las propiedades emergentes. No son conceptos libres de debate. Tendremos que reflexionar exactamente qué significan, y a dónde nos conducen.