La convergencia del uso popular de la IA con el grave déficit de conocimiento sobre su desempeño real ha llenado de maestrociruelas surtidos el universo digital, pero sobre todo ha aflorado muchas creencias infundadas sobre estos sistemas mistéricos, atribuyéndoseles capacidades entre prometeicas y sobrenaturales: se les presume casi humanos, pues en su rumbosa habilidad para la verborrea se apetecen sentimientos; y al mismo tiempo oráculos capaces de sentenciar con autoridad infalible sobre cualquier asunto que se les plantee. Incluso profesores universitarios vestidos y calzados dan ya por alcanzada la singularidad, el presunto adelantamiento a la inteligencia humana, cabalgando el entusiasmo infantil (y quien sabe si la cartera llena) en lugar de la evidencia objetiva. Gran parte de la población digitalizada usa ya la IA generativa como terapeuta, camarero sujetavelas, médico de cabecera, mentor y lo que se tercie.
En este punto, haré mi humilde aportación tratando de explicar de manera asequible pero realista el funcionamiento general de una IA generativa, sin que el lector tenga que hacer un acto de fe. Me centraré en este caso en los modelos de lenguaje, los de uso mayoritario. No pretendo, ni tendría sentido, ser preciso ni exhaustivo, puesto que existen algunas diferencias entre cada modelo comercial, pero sí podremos describir el funcionamiento general común... algo que, por lo demás, no he encontrado en inglés ni el castellano siquiera a nivel técnico.
La pieza clave de la IA actual es lo que se conoce como red de neuronas artificiales (en adelante, por abreviar, RNA), concepto matemático y computacional así bautizado por tratar de reproducir el funcionamiento del cerebro humano. Fueron ya imaginadas por Santiago Ramón y Cajal, y sus fundamentos llevan asentados más de cincuenta años... aunque si nos puede la malicia, diremos que son más hijas que nietas de los métodos de inferencia que ya utilizaba Gauss a principios del XIX para calcular trayectorias de cuerpos celestes. Siempre han estado ahí, pero se empezaron a utilizar de manera masiva en la IA hace poco más de veinte años, momento en que empezó a contarse con suficiente cantidad de información digitalizada como para explotar su verdadero potencial, luego veremos por qué. Las IA de este tipo solían contar de una sola RNA, más o menos grande y sofisticada; las IA generativas actuales combinan y coordinan para su funcionamiento varias RNA. Las hay de muchos tipos, pero en este artículo nos centraremos en describir uno concreto, que es el empleado en este escenario.
Empezaremos aclarando que una RNA, como todo lo que se ejecuta dentro de un computador, solo trabaja con números. Toda la información digitalizada que utilizamos en ordenadores, móviles, tablets, etc. se almacena codificada de ese modo, por ejemplo los textos se guardan asignando un número concreto a cada letra... y de un modo similar con cualquier otro tipo de contenido. De ese modo, aunque una RNA solo entienda valores numéricos, en realidad puede trabajar con todo tipo de elementos.
Sabiendo esto, podemos decir por fin que una RNA no es más que es una función matemática muy grande y compleja de la cual esperamos pueda llegar a hacer un cálculo que desconocemos en qué consiste, por eso se le dice inteligente: a partir de una información de entrada (una lista de variables numéricas), obtener otra relacionada con ella a la salida (por ejemplo, calcular la letra del NIF a partir de los dígitos del DNI) con un margen de error muy pequeño. De inicio sabemos cuántas variables utiliza para el cálculo y cuántas devuelve como resultado, pero no el valor de los miles o millones de parámetros que debe utilizar la función para hacer lo que esperamos. Así, podemos imaginarnos una RNA como una especie de combinación de ecuaciones encadenadas siguiendo un orden.
En un ejemplo muy sencillo, una pequeñísima RNA podría ser la función ax + by + cz = w
- x, y, z serían las variables de entrada, las que se utilizan para el cálculo.
- w sería la variable de salida, el resultado del cálculo.
- a, b, c serían los parámetros de la función, los valores fijos por los que multiplicamos x, y, z para obtener w.
La manera a través de la que llegamos a obtener los valores concretos para a, b, c es lo que llamamos aprendizaje, la clave de este tipo de IA, y se trata de un proceso por pasos. Para que la RNA aprenda a realizar el cálculo de manera correcta, es necesario disponer de un conjunto muy amplio de ejemplos con la salida esperada para una entrada determinada (por ejemplo, números de DNI junto con la letra que tendría que aprender a calcular), que se llamará conjunto de entrenamiento. Partiendo de unos parámetros con valor inicial aleatorio (que, obviamente, generarán un resultado incorrecto), se haría lo siguiente para cada uno de los ejemplos:
- La RNA calcula el resultado para el ejemplo actual.
- Se calcula la diferencia entre el resultado de la RNA y el resultado esperado, que sería el error.
- En base a la diferencia, se modifican los parámetros de la RNA mediante un método numérico que busca el mínimo en la distribución del error. Es decir, los parámetros van corrigiéndose poco a poco en cada paso a través de las ecuaciones de la RNA.
- Se pasa al ejemplo siguiente.
Al final del proceso, podríamos llegar a dos situaciones:
- Si existe una relación entre las variables de entrada y el resultado que se pretende calcular (no podemos esperar, por ejemplo, obtener la talla de pie de un individuo a partir de su código postal y el consumo diario de cacahuetes), el proceso llegaría a un conjunto de parámetros con los que la función (nuestra RNA) consigue obtener un resultado correcto para cualquier valor de entrada, incluso aunque no formase parte de los ejemplos que utilizamos en el adiestramiento. Tendríamos ya una RNA entrenada que ha aprendido a hacer un cálculo complejo sin que nadie le indicase cómo, con un margen de error muy pequeño.
- Si no existe esa relación o no se hubieran utilizado ejemplos suficientes, el proceso no sería capaz de llegar, con sus correcciones sucesivas, a los valores necesarios para los parámetros, y la función (nuestra RNA) no sería capaz de calcular en general los resultados esperados para una entrada determinada.
Es importante señalar que primero Kurt Gödel y luego Alan Turing demostraron que hay funciones matemáticas que no se pueden calcular mediante un algoritmo (secuencia de cálculos sucesivos), y una RNA lo es... de modo que la IA, aunque puede llegar a realizar tareas muy sofisticadas, tiene importantes limitaciones frente a la inteligencia natural y la realidad en general. Limitaciones insalvables, dado que una computadora no puede ejecutar nada que no sea algorítmico. Sobre esto hay mucha filosofía escrita.
Las IA generativas que interactúan con nosotros a través del texto, las que pretendemos describir aquí, reciben el nombre de grandes modelos de lenguaje (en adelante LLM), y para referirnos a la petición que escribe el usuario usaremos el término prontuario. Como esbozamos antes, una LLM utilizará una combinación de RNA como las que hemos descrito para entender el prontuario y mostrar una respuesta coherente al mismo.
El primer paso en el proceso de un LLM es transformar las palabras del prontuario en números, por la razón que ya habíamos dado arriba. En este caso, en lugar de asignar una cifra por cada letra, a cada palabra se le asigna un vector numérico (es decir, una lista de números de longitud determinada) que representa de manera muy ingeniosa su significado. Imaginemos un ejemplo muy simple: la primera posición del vector representa el color, la segunda la forma y la tercera su naturaleza como cosa o ser vivo. La sal o el azúcar tendrán un valor similar o común en la primera posición (color) con una margarita, pero diferente/alejado en cuanto a forma y naturaleza (segundo y tercero); una patata y un boniato tienen igual forma y naturaleza, pero estarán alejadas por el color... De este modo, mediante geometría, el LLM habría completado el análisis semántico de la petición que recibe. Llamaremos en adelante a estos vectores impastos, adaptación al castellano de mi cosecha.
A continuación, los impastos que hemos obtenido se operan contra matrices numéricas entrenadas para la ocasión, realizando el equivalente a un análisis sintáctico: estos cálculos estiman la importancia de cada impasto y su relación con el resto del prontuario. Los resultados obtenidos (uno por cada impasto) se usan como entrada a una RNA de tamaño gigantesco, de la que cada uno saldrá vestido con más contexto. Un ejemplo intuitivo y simplificado:
- Impasto inicial del prontuario: piedra.
- Resultado de operar con las matrices: piedra, sujeto de la frase.
- Resultado tras pasar por la RNA: roca granítica, sujeto de la frase, usada en sentido figurado.
El sagaz lector ya habrá comprendido que los impastos, mucho más allá de lo censado en un diccionario, son capaces de representar conceptos abstractos y complejos... pues son una colección de característias que describen algo. Además, siempre se podrán interpretar aunque no se correspondan con una palabra concreta, y por ser meros números, la interpretación se puede hacer hacia cualquier idioma. Tal es la razón de que los LLM sean tan políglotas. Por otra parte, podemos decir que en esta RNA reside el conocimiento del LLM: está entrenada ni más ni menos que para comprender el mundo, para interpretar los números del concepto que representa cada impasto y generar a la salida otro más refinado (teniendo en cuenta el resto de los que lo acompañan), con un significado más amplio... que ya no será una palabra.
El conjunto formado por las matrices y la RNA se conoce como transformador, y la interpretación del prontuario de entrada suele consistir en una secuencia de transformadores. Como hemos visto, solo el primer transformador recibirá como entrada impastos que representen palabras; el resto recibirá impastos cada vez más abstractos y cargados de significado. Este proceso se denomina codificación.
Tras la codificación viene un proceso inverso y equivalente llamado decodificación, que funciona de manera cíclica para generar la respuesta palabra por palabra:
- El primer transformador decodificador:
- Recibe como entrada:
- Los impastos resultado de la codificación.
- Cada una de los impastos generados hasta el momento como respuesta al final de cada ciclo (del mismo modo que el LLM interpreta impastos, también genera impastos).
- Genera a la salida, como en la codificación, impastos refinados para el siguiente transformador.
- Recibe como entrada:
- Los siguientes transformadores realizan la misma tarea, utilizando siempre los impastos-respuesta generados hasta el momento al final del ciclo como valores fijos, sin refinar.
- Tras pasar por todos los transformadores de la decodificación, y partiendo de los impastos destilados al final del ciclo, se busca en el diccionario (el mismo que se usó en el primer punto del LLM) el impasto de la palabra más probable para ser la siguiente, y se añade a la respuesta.
- Añadido el nuevo impasto, se repite el ciclo hasta que ocurra alguna de las dos circunstancias siguientes:
- Se llega a una longitud máxima de palabras.
- El impasto generado por el diccionario sea la represtentación del punto y final.
Dado que la respuesta son impastos ordenados que representan palabras, se dispondría ya del texto que se muestra al usuario como contestación a su prontuario, en el idioma que fuere. Si quisiésamos hacer una síntesis fanfarrona y comprensible del asunto, nos bastaría con definir el LLM como un ingenio con la única habilidad de charlatanear de manera coherente sobre cualquier tema que se le plantee, desprecupado por el nivel de conocimiento que tenga al respecto.
Lo que acabamos de describir con mayor o menor acierto es el meollo del LLM, lo suficiente para entender su funcionamiento general. Quedarían solo los detalles más socarrones:
- El usuario no recibe su respuesta tal cual la genera el LLM, sino que hay un filtro posterior para evitar generar contenido inadecuado (entienda cada uno como le parezca). Puede ser un simple programa o un LLM más pequeño y especializado capaz, además, de modular el tono de la respuesta, evitar ciertas palabras o temas, etc.
- Lo habitual es que, aunque el usuario no lo perciba, el LLM reciba información adicional al prontuario para responder:
- MCP: información procedente de una búsqueda en Internet u otras fuentes de información.
- LLM preliminares especializados en desarrollar, corregir o desambiguar el texto del prontuario original para ayudar al LLM principal a dar una respuesta mejor.
Como se ha podido ver, se trata de un proceso complejo y fascinante... pero por lo demás, terrenal y abarcable. Si he conseguido que el lector perciba este tipo de IA como lo que es (en lugar de como dicen), pasando del mito al logos, habré cumplido mi objetivo.