La Generación Aumentada de Recuperación (RAG, por sus siglas en inglés) es una técnica que se utiliza para “anclar” modelos de lenguaje grandes (LLM, por sus siglas en inglés) con fuentes de datos específicas, que a menudo no se incluyeron en el entrenamiento original de los modelos. Los tres pasos de la RAG son la recuperación de una fuente específica, la ampliación del mensaje con el contexto recuperado de la fuente y la generación utilizando el modelo y el mensaje aumentado. En un ejercicio de prueba de campo (un método en el que una empresa utiliza sus propios productos para probarlos y confrontar directamente sus fortalezas y debilidades), le preguntamos al LLM de GPT-4 “¿Qué es la Generación Aumentada de Recuperación?” utilizando su complemento Browse, que es una implementación de la Generación Aumentada de Recuperación.

Esto es lo que finalmente me dijo GPT-4, después de que le pedí que regenerara su respuesta:

-------------------------

Retrieval Augmented Generation (RAG) es un marco de IA que está teniendo un impacto significativo en el campo del procesamiento del lenguaje natural (PLN). Está diseñado para mejorar la precisión y la riqueza del contenido producido por los modelos lingüísticos. A continuación, se presenta un resumen de los puntos clave de RAG de varias fuentes:

- RAG es un sistema que extrae datos de una base de conocimiento externa para proporcionar una base para los grandes modelos lingüísticos (LLM). Esta base garantiza que la información generada por los LLM se base en datos precisos y actuales, lo que es especialmente importante ya que los LLM a veces pueden producir resultados inconsistentes【5†fuente】.

- El marco funciona como un modelo híbrido que integra modelos de búsqueda y generativos. Esta integración permite a RAG producir textos que no solo son contextualmente precisos, sino que también contienen mucha información. La capacidad de RAG de extraer información de grandes bases de datos le permite aportar contenido contextual relevante y detallado al proceso generativo【6†fuente】.

- RAG aborda una limitación de los modelos de lenguaje básicos, que normalmente se entrenan sin conexión en grandes corpus de dominios y no se actualizan con nueva información después del entrenamiento. Esto los hace menos efectivos para tareas que requieren conocimiento específico del dominio. Por el contrario, RAG puede acceder a los datos más recientes, lo que lo hace más adaptable y capaz de funcionar bien en aplicaciones específicas del dominio【7†fuente】.

- En comparación con los modelos tradicionales de generación de texto, RAG ha demostrado ventajas notables y ha logrado un rendimiento de vanguardia en muchas tareas de PNL. Su capacidad para aumentar el proceso de generación con la información recuperada lo convierte en una herramienta poderosa para crear textos informativos de alta calidad【8†fuente】.

Las capacidades combinadas de RAG para recuperar y generar texto lo convierten en una herramienta innovadora en el campo de la PNL, mejorando la relevancia y la calidad de los resultados del modelo de lenguaje.

----------------------------

Salvo por algunos puntos exagerados, esta respuesta es adecuada. No menciona que RAG fue creado por Facebook (ahora Meta) AI Research. Hemos obtenido resultados bastante buenos utilizando implementaciones de RAG en casos en los que los LLM no mejorados carecen de información actualizada, y especialmente en casos en los que el LLM básico se descontrola y comienza a alucinar sus propios hechos. Por otro lado, hemos visto a los LLM alucinar incluso cuando utilizan RAG. El uso de fuentes externas de información (la parte de investigación de RAG) no solo significa buscar en la web. También puede significar proporcionar al LLM sus propios materiales o indicarle documentación web específica (sin investigación adicional).

Índice
  1. Los problemas: alucinaciones y contexto limitado
  2. La solución: basar el LLM en hechos

Los problemas: alucinaciones y contexto limitado

El entrenamiento de los LLM suele requerir mucho tiempo y recursos, a veces meses de ejecución utilizando docenas de servidores equipados con aceleradores Nvidia H100. No es posible actualizar por completo los LLM volviéndolos a entrenar desde cero, aunque el proceso menos costoso de ajustar el modelo base con datos más recientes puede ser útil. El ajuste fino a veces tiene desventajas, ya que puede reducir las características presentes en el modelo base (como las consultas generales que Llama maneja bien) mientras que el ajuste fino agrega nuevas características (como la generación de código que agrega Code Llama).

¿Qué pasa si le preguntas a un LLM que fue entrenado con datos que terminaron en 2022 sobre algo que sucedió en 2023? Hay dos posibilidades: o se dará cuenta de que no lo sabe, o no lo hará. En el primer caso, generalmente te informará sobre sus datos de entrenamiento, por ejemplo: "Cuando actualicé por última vez en enero de 2022, tenía información sobre...". En el segundo caso, intentará darte una respuesta basada en datos más antiguos, similares, pero irrelevantes, o simplemente podría inventarse cosas (alucinar).

Para evitar provocar alucinaciones en LLM, a veces resulta útil mencionar la fecha de un evento o una URL relevante en la pregunta. También puedes proporcionar un documento relevante, pero los documentos largos (ya sean texto o URL) solo funcionan hasta que se alcanza el límite de contexto de LLM, después de lo cual deja de leer. Por cierto, los límites de contexto varían de un modelo a otro: los modelos de Claude, por ejemplo, ofrecen una ventana de 200.000 tokens y Gemini Pro de Google afirma que tiene hasta 1 millón de tokens.

La solución: basar el LLM en hechos

Como puede adivinar por el título y el comienzo de este artículo, una respuesta a ambos problemas es la generación aumentada por búsqueda. En un nivel alto, RAG funciona combinando una búsqueda en Internet o en un documento con un modelo de lenguaje, de manera que se evitan los problemas que se encontrarían al intentar realizar ambos pasos manualmente, como el problema de que el resultado de la búsqueda exceda el límite de contexto del modelo de lenguaje.

El primer paso de RAG es utilizar la consulta para realizar una búsqueda en Internet, en un documento o en una base de datos, y vectorizar la información de origen en una forma densa y de alta dimensión, generalmente generando un vector de incrustación y almacenándolo en una base de datos de vectores. Esta es la fase de búsqueda.

Luego, puede vectorizar la consulta en sí y usar FAISS (Facebook AI Similarity Search) u otra búsqueda de similitud, que generalmente utiliza una métrica de coseno para la similitud, contra la base de datos vectorial y usarla para extraer las partes más relevantes (o los K elementos más importantes) de la información de origen y presentarlos al LLM junto con el texto de la consulta. Esta es la fase de ampliación.

Por último, el modelo LLM, llamado modelo seq2seq en el artículo original de Facebook AI, genera una respuesta. Esta es la fase de generación.

Todo esto suena complicado, pero en realidad son solo cinco líneas de Python si usas el marco LangChain para la orquestación:

from langchain.document_loaders import WebBaseLoader
from langchain.indexes import VectorstoreIndexCreator
loader = WebBaseLoader("https://www.promptingguide.ai/techniques/rag")
index = VectorstoreIndexCreator().from_loaders([loader])
index.query("What is RAG?")

Por lo tanto, RAG aborda dos problemas con los modelos de lenguaje de gran tamaño: conjuntos de entrenamiento obsoletos y documentos de referencia que saturan las ventanas de contexto de los LDM. Al combinar la recuperación de información actual, la vectorización, la ampliación de la información mediante la búsqueda de similitud vectorial y la IA generativa, se pueden lograr resultados más actuales, concisos e informados que los que se podrían obtener con la recuperación o la IA generativa por sí solas.