miércoles, 11 de diciembre de 2024

Tres formas de personalizar un LLM

Una de las 'magias' que ha traído consigo la inteligencia artificial generativa, que ya por sí misma parece pura magia si no fuera porque parece que ha hemos perdido un poco la capacidad de asombrarnos, son las posibilidades que ofrece de adaptar los modelos, personalizarlos para una dominio, unas circunstancias o incluso los gustos o características de una persona concreta.

En parte por eso, aunque no únicamente por eso, ha surgido el término de modelo fundacional para designar este tipo de modelos: porque sirven como base para muchos modelos y aplicaciones, extendiendo en cierto sentido, su propósito original.


Grandes modelos de lenguaje


Aunque existen muchos modelos generativos, y aunque la creciente multimodalidad y convergencia o concurrencia de modalidades y modelos al menos en las mismas soluciones tienden a desdibujarl las fronteras, me voy a centrar en este caso, 'sólo' en los grandes modelos de lenguaje, del tipo de los GPT.

Estos modelos, como muchos de los lectores de este blog probablemente conozcan, modelan el lenguaje humano y recogen, bajo una perspectiva esencialmente probabilista, la estructura de ese lenguaje tanto en sintaxis como en morfología. Asimilan, además, a partir del entrenamiento y sea dicho cono comillas "conocimiento" humano expresado en ese lenguaje y manifestado en webs, libros o la wikipedia. Y recogen, hasta cierto punto, unas ciertas nociones semánticas, no porque tengan ningún tipo de conocimiento real sobre significados pero sí porque, mediante los famosos 'embeddings' tienen conceptos bastante acertados de cercanía semántica de palabras.

Con eso, con el uso de mecanismos de atención que le permiten fijarse de manera selectiva en amplios contextos textuales, y con una atención autorregresiva, que permite que el modelo mantenga la coherencia cuando su respuesta se alarga, alcanzamos los espectaculares, por más que ya casi asimilados, resultados de este tipo de modelos, y que se hicieron célebres hace ya algo más de dos años, con el icónico lanzamiento de ChatGPT.


La adaptabilidad de los modelos generativos.


Pero una capacidad que, aunque no totalmente ausente en la inteligencia artificial discriminativa, se potencia, casi exacerba, en la generativa, y en concreto en los grandes modelos de lenguaje, es la posibilidad de personalizarlos y adaptarlos.

La mayoría de algoritmos en general, y de inteligencia artificial y machine learning en particular, 'son como son': una vez desarrollados y/o entrenados, así se quedan y se utilizan tal cual son. Sí que se contempla, por ejemplo para modelos analíticos, el reentrenamiento periódico para adaptarse a cambios en el entorno. Pero, aún así, se trata de una forma de adaptación, todavía un poco estática (a lo mejor se reentrena cada seis meses o un año) y no generalizada.

Es cierto también que, ya desde hace años, y como forma de intentar conseguir mayor eficiencia en los entrenamientos de los modelos y menor necesidad de datos, se lleva trabajando, y con éxito creciente, en mecanismos de 'transfer learning', es decir, en la reutilización un modelo ya entrenado y más o menos genérico, para, o bien adaptarlo mediante el 'fine tunning' al que luego nos referiremos, o bien reutilizarlo como una especie de 'backoffice' cuya salida servirá de entrada a otro modelo más especializado.

Pero creo, que esa capacidad de adaptación es mayor, y utilizando nuevos mecanismos, en el caso de los modelos generativos.


Tres mecanismos de adaptación 


En concreto, y no sé si me dejo alguno en el tintero, creo que no, hay como tres formas fundamentales de adaptar o personalizar un modelo generativo, de manera que resulte más adecuado o más especializado para un dominio o área de conocimiento concreto o, incluso, que responda mejor a las características e intereses del usuario final. Las tres formas serían las siguientes:


  • 'fine tunning': Es la traslación de algo que, como acabo de comentar, ya se hacía en la inteligencia artificial discriminativa. La idea es que, el entrenamiento 'más difícil', el inicial, y el que precisa de una cantidad enorme de datos, se realice una sola vez por parte de la entidad que crea el modelo. Eso es lo que se denomina pre-entrenamiento. Eso es lo que hace, por ejemplo, OpenAI con sus modelos GPT donde, por cierto, la 'P' del acrónimo representa, precisamente 'Pre-trained'. Y luego, cada organización, e incluso cada persona que desee adaptar el modelo, puede hacer un segundo entrenamiento, muchísimo más limitado en datos, con información del dominio específico. Esto es lo que se denomina 'fine tunning' y, aunque ya existía hace tiempo, quizá gana relevancia y visibilidad en el caso de los modelos generativos. Como ilustración de esa facilidad, y posibilidad incluso para organizaciones muy pequeñas, se puede ver la manera en que Open AI describe la forma de hacer 'fine tunning' con sus modelos. Este mecanismo es el único, de los tres que vamos a ver, en que realmente se modifica el modelo como tal, básicamente en sus parámetros internos. En el caso de los dos que siguen, se personaliza la respuesta, pero no el modelo propiamente dicho.

  • RAG ('Retrieval Augmented Generation') Este mecanismo está orientado a complementar al modelo con información nueva que, o bien se ha producido con posterioridad a su entrenamiento (pero que se puede obtener típicamente en la web a través de un buscador SEO 'de toda la vida', o bien es información propia, e incluso privada, de una organización o persona, información que puede residir en documentos, sistemas de información, etc. En este caso, más que re-entrenar el modelo, lo que se hace es darle mucho más contexto (contexto que procede del buscador o de la información privada) antes de que genere su respuesta. Este contexto 'se une' al prompt del usuario, formando una especie de 'macro-prompt', por decirlo de alguna manera, que es la entrada final al modelo generativo. Este mecanismo de RAG, cada vez 'más de moda', lo describí someramente en un post de hace unos días.

  • Contexto y 'feedback' del usuario: Finalmente, el mecanismo más sencillo, y en cierto modo más alucinante, es la personalización con base en la interacción con el propio usuario y su feedback. En el fondo, es muy parecido a RAG. Lo que se hace es que, junto con el prompt que introduce el usuario, el modelo recibe como entrada información adicional que procede de interacciones anteriores, incluyendo feedback del usuario. Al igual que en RAG, casi diría que de forma complementaria, ese contexto pasa a formar parte de esa especie de 'macr-oprompt' que mencionaba en el punto anterior.


En el libro 'Unlocking Data with Generative AI and RAG' de Keith Bourne, señala algunas fortalezas y debilidades de estos mecanismos. Así, nos dice que el 'fine tunning' funciona bien para complementar al modelo con nuevo conocimiento sobre, por ejemplo, la forma de hacer tareas especializadas, pero no tanto para que el modelo recoja información factual (datos, hechos relevantes, etc). Sin embargo, ahí, en la información factual, es donde destaca RAG.

Me resulta atractiva la metáfora o comparación que el autor utiliza, diciendo que el hacer 'fine tunning' es como utilizar o mejorar la memoria de largo plazo. Sin embargo, aportar contexto vía RAG o feedback del usuario es más como utilizar la memoria de corto plazo.

El autor apunta también que, RAG (y yo añado que la interacción con el usuario) se ve limitada por el tamaño de la ventana de contexto (expresado normalmente en número de tokens), cosa que no afecta al 'fine tunning' que, en cierto modo, admite una nueva información ilimitada.

Aunque quizá en esta tipología de formas de personalizar, pueda haber simplificado un poquito, y aunque me apuesto algo a que este es un tema que va a evolucionar, y rápidamente, creo que con lo expuesto, el lector que no lo conociera ya, puede hacerse una idea clara y esquemática sobre cómo conseguir la adaptación y personalización de los modelos generativos,


Conclusiones


Una de los aspectos, no exclusivos, pero sí bastante característico, de los modelos generativos, y en concreto los grandes modelos de lenguaje, es la posibilidad, relativamente sencilla, de adaptarlos o personalizarlos a tareas concretas, a dominios específicos o a las preferencias y gustos del usuario.

Aunque quizá simplificando un poco (no creo que mucho) existen básicamente tres formas de hacerlo: mediante 'fine tunning', mediante RAG y mediante interacción con el usuario.


No hay comentarios:

Publicar un comentario