Algunas ideas iniciales sobre RAG (Retrieval Augmented Generation)

Publicado el 27 noviembre 2024 por Ignacio G.r. Gavilán @igrgavilan
Uno de los conceptos que forman parte del 'último grito' en inteligencia artificial y, en concreto, en inteligencia artificial generativa, es el de RAG ('Retrieval-Augmented Generation') y, en el deseo de profundizar en su conocimiento, hace dos o tres semanas finalicé la lectura del libro 'Unlocking Data with Generative AI and RAG' de Keith Bourne, un libro que esta razonablemente bien tanto desde el punto de vista teórico como práctico.

En este post, y a despecho de que en el futuro pueda escribir otros sobre el tema, quisiera, únicamente, resumir las ideas principales y más básicas sobre RAG.

Sobre el conocimiento contenido en grandes modelos de lenguaje

RAG ('Retrieval Augmented Generation') es una forma de extender el poder de los grandes modelos de lenguaje y los modelos generativos añadiéndoles información externa adicional.

Como sabemos, los grandes modelos de lenguaje han sido entrenados con cantidades ingentes de datos. Datos procedentes, y esto no está exento de polémica y problemáticas de propiedad intelectual, de páginas web, libros, wikipedia, etc. Más allá de las eventuales polémicas, lo que se consigue es, tras un entrenamiento masivo, disponer de ese modelo de lenguaje.

Embebido en el modelo se encuentra, por un lado, una suerte de conocimiento estructural del lenguaje humano, su sintaxis y morfología así como una aproximación a la semántica, no porque el modelo sepa realmente lo que significa cada palabra, que no lo sabe, sino porque guarda información masiva de la cercanía semántica de las palabras.

De una forma también indirecta, pero muy real desde el punto de vista práctico, el modelo almacena. codificado en sus millones de parámetros, alguna forma de amplísimo conocimiento del mundo, el conocimiento que estaba incluido en las páginas, libros y demás documentos con que fue entrenado. De nuevo, no se trata de un conocimiento estricto: el modelo saber, saber, lo que se dice saber, no sabe nada. Tampoco se trata una representación del conocimiento como se hacía en los años de la inteligencia artificial simbólica. Pero, a efectos prácticos, sí que incluye ese conocimiento.

Una vez que el modelo ha sido pre-entrenado, cosa que han hecho los grandes de la inteligencia artificial generativa como OpenAI, el modelo conoce suficientemente esa estructura del lenguaje humano y con eso nos basta. También, hasta cierto punto, podemos dar por bueno el conocimiento semántico que incluye el modelo.

Otras cosa sucede, sin embargo, con el conocimiento del mundo que en el fondo, aunque amplio, es limitado. Y ello por tres motivos fundamentales. 

Por un lado, porque aunque el modelo ha sido entrenado con cantidades ingentes de información, esa información no ha incluido, lógicamente, absolutamente toda la información existente en el mundo sino un subconjunto de ella. Del resto, el modelo no tiene más idea que la que, entre comillas, "pueda deducir".  

En segundo lugar, evidentemente, la información crece de manera dinámica: se producen eventos y noticias nuevos, se publican contenidos nuevos, se producen avances en todo tipo de disciplinas. Y eso es una gran cantidad de información nueva que el modelo ignora.

Finalmente, existe información que no es pública, información privada que manejan las personas y, sobre todo, las empresas. Y eso tampoco ha formado parte del conocimiento del modelo.

RAG es una técnica que viene para superar esas 'ausencias de conocimiento' dentro de un gran modelo de lenguaje y complementar el conocimiento que ya tiene el modelo con conocimiento nuevo, pero haciendo uso del conocimiento y capacidades de que ya dispone el modelo de lenguaje generativo.

Antes de ver un poco más sobre RAG, decir que no es RAG la única forma de personalizar o extender un gran modelo de lenguaje.

Se puede aplicar el 'fine-tunning' haciendo un re-entrenamiento del modelo con nuevos datos normalmente específicos de un área de conocimiento, sector o empresa, y habitualmente mediante aprendizaje supervisado.

Incluso, durante la interacción con el modelo, mediante un uso inteligente del 'prompt engineering' se puede aportar cierta información adicional, tanto por el contexto del diálogo, como por el uso de ejemplos, conocimiento explícito, etc-

La idea subyacente a RAG

Dicho de manera muy sencilla (a lo mejor en algún otro post me extiendo algo más sobre el cómo), lo que hace RAG es aumentar el conocimiento de un modelo con información adicional, con frecuencia procedente de un buscador de Internet SEO o mediante la compilación de conocimiento contenido en documentos o sistemas de información privados de una empresa u organización.

No entraré en ello, pero en el procesamiento de lenguaje natural las palabras, o mejor dicho los 'tokens' se representan mediante vectores (los famosos 'embeddings'). Pues bien, lo habitual es que RAG convierta también en vectores el conocimiento adicional. El modelo de lenguaje, cuando recibe un 'prompt', antes de procesarlo, lo incrementa con información adicional obtenida mediante la denominada búsqueda semántica en un repositorio vectorial que contiene el 'conocimiento extra'.

En la entrada del modelo de lenguaje se integra toda la información, tanto del prompt y su contexto, como la obtenida mediante búsqueda semántica en la base de conocimiento vectorial adicional. Y, a partir de ahí, ya actúa como normalmente, generando su respuesta. 

Aportaciones de RAG

Siguiendo el discurso de Keith Bourne, en el libro citado, lo que aporta RAG es:

  • Mayor precisión y relevancia: Al incorporar información actualizada y normalmente en tiempo real se promueve la actualidad y relevancia de la respuesta.

  • Personalización: Dado que se puede hacer al modelo usar información muy específica y adaptada al ámbito de aplicación que nos interese.

  • Flexibilidad: En el sentido de que se pueden aplicar las técnicas RAG a todo tipo de fuentes incluyendo bases de datos, páginas web, documentos, etc

  • Expansión del conocimiento del modelo más allá de los datos de entrenamiento: Casi por la propia definición de lo que es RAG, aumentamos el conocimiento del modelo con aquello específico que le aportamos.

  • Eliminación de alucinaciones: La aportación de información relevante, especialmente de tipo factual, disminuye la probabilidad de que el modelo genere 'alucinaciones', es decir, respuestas incorrectas o incluso absurdas pero presentadas de manera convincente.

Retos de RAG

A cambio, y siguiendo la misma fuente, las problemáticas o retos a que se enfrenta RAG, son:

  • Dependencia de la calidad de datos: Resulta evidente, pero conviene explicitarlo: si la calidad de la información que le aportamos al modelo mediante RAG es mala, los resultados también lo serán.

  • Necesidad de limpieza y manipulación de datos: Un poco en línea con lo anterior, de cara a garantizar la calidad por un lado, y una mejor ingesta por otro, suele ser necesaria una manipulación y limpieza previa de los datos a usar en RAG, y esto puede ser una tarea laboriosa. Llamo la atención sobre que este punto y el anterior son absolutamente comunes para gran parte de las soluciones de machine learning basadas en datos, como por ejemplo, todo tipo de aplicaciones de analítica predictiva.

  • Computación adicional: RAG añade pasos adicionales, y eso tiene un coste computacional que puede llegar a penalizar las prestaciones o escalabilidad de la solución.

  • Explosión de almacenamiento y gestión asociada: En RAG la información adicional que se utiliza, puede residir en fuentes múltiples y no solo en una base de datos como en muchas aplicaciones tradicionales. Esto puede suponer una sobrecarga de mantenimiento y gestión.

  • Potencial sobrecarga de información: Se puede caer, en el extremo, en un exceso de información adicional, quizá no relevante, por lo que conviene permanecer vigilantes y añadir mediante RAG sólo la información realmente útil.

  • Alucinaciones: Aunque RAG tiende a eliminar alucinaciones, como hemos comentado entre las ventajas, no es imposible que introduzca alucinaciones nuevas. Es preciso vigilar para identificar y eliminar estas alucinaciones.

  • Altos niveles de complejidad en componentes RAG: las soluciones RAG pueden incluir diversos componentes, complejos de por sí e interrelacionados. Esto implica gestión y, sobre todo, prueba y depuración.

Conclusiones

RAG ('Retrieval-Augmened Generation') es una gran aportación de cara a la extensión y personalización de las soluciones basadas en modelos generativos, típicamente grandes modelos de lenguaje.

Trae consigo nuevas posibilidades y muchas ventajas, pero también incluye algunas problemáticas y riesgos a conocer y gestionar.