La generación aumentada de recuperación ( RAG ) es una técnica que otorga a los modelos de inteligencia artificial generativa capacidades de recuperación de información . Modifica las interacciones con un modelo de lenguaje grande (LLM) de modo que el modelo responda a las consultas del usuario con referencia a un conjunto específico de documentos, utilizando esta información para aumentar la información extraída de sus propios datos de entrenamiento vastos y estáticos . Esto permite que los LLM utilicen información específica del dominio y/o actualizada. [1]
Los casos de uso incluyen proporcionar acceso a los chatbots a los datos internos de la empresa o brindar información fáctica solo de una fuente autorizada. [2]
Proceso
El proceso RAG consta de cuatro etapas clave. En primer lugar, todos los datos deben estar preparados e indexados para su uso por parte del LLM. A continuación, cada consulta consta de una fase de recuperación, una de ampliación y una de generación. [1]
Indexación
Los datos a los que se hará referencia deben convertirse primero en incrustaciones LLM , representaciones numéricas en forma de vectores grandes. RAG se puede utilizar en datos no estructurados (normalmente texto), semiestructurados o estructurados (por ejemplo, gráficos de conocimiento ). [1] Estas incrustaciones se almacenan luego en una base de datos vectorial para permitir la recuperación de documentos .
Recuperación
Dada una consulta de usuario, primero se llama a un recuperador de documentos para seleccionar los documentos más relevantes que se utilizarán para ampliar la consulta. [3] Esta comparación se puede realizar utilizando una variedad de métodos, que dependen en parte del tipo de indexación utilizado. [1]
Aumento
El modelo alimenta esta información recuperada relevante al LLM a través de la ingeniería rápida de la consulta original del usuario. [2] Las implementaciones más nuevas (a partir de 2023 [actualizar]) también pueden incorporar módulos de aumento específicos con capacidades como expandir consultas a múltiples dominios y usar la memoria y la automejora para aprender de recuperaciones anteriores. [1]
Generación
Por último, el LLM puede generar resultados basados tanto en la consulta como en los documentos recuperados. [4] Algunos modelos incorporan pasos adicionales para mejorar los resultados, como la reclasificación de la información recuperada, la selección del contexto y el ajuste fino. [1]
Mejoras
Las mejoras al proceso básico anterior se pueden aplicar en diferentes etapas del flujo RAG.
Codificador
Estos métodos se centran en la codificación del texto como vectores densos o dispersos. Los vectores dispersos, que se utilizan para codificar la identidad de una palabra, suelen tener la longitud de un diccionario y contienen casi todos ceros. Los vectores densos, que se utilizan para codificar el significado, son mucho más pequeños y contienen muchos menos ceros. Se pueden realizar varias mejoras en la forma en que se calculan las similitudes en los almacenes de vectores (bases de datos).
El rendimiento se puede mejorar con productos puntuales más rápidos, vecinos más cercanos aproximados o búsquedas de centroides. [5]
La precisión se puede mejorar con interacciones tardías. [ aclaración necesaria ] [6]
Vectores híbridos: las representaciones vectoriales densas se pueden combinar con vectores one-hot dispersos para utilizar los productos puntuales dispersos más rápidos en lugar de los densos más lentos. [7] Otros métodos [ aclaración necesaria ] pueden combinar métodos dispersos (BM25, SPLADE) con densos como DRAGON.
Métodos centrados en el retriever
Estos métodos se centran en mejorar la calidad de los resultados de la base de datos vectorial:
Entrenar previamente al recuperador utilizando la tarea Inverse Cloze. [8]
Aumento progresivo de datos. El método Dragon muestrea negativos difíciles para entrenar un recuperador de vectores densos. [9]
Bajo supervisión, entrenar al recuperador para un generador determinado. Dada una indicación y la respuesta deseada, recuperar los k vectores principales e introducir esos vectores en el generador para lograr un puntaje de perplejidad para la respuesta correcta. Luego, minimizar la divergencia KL entre la probabilidad de los vectores recuperados observados y las probabilidades LM para ajustar el recuperador. [10]
Utilice la reclasificación para entrenar al recuperador. [11]
Modelo de lenguaje
Modelo de lenguaje retro para RAG. Cada bloque retro consta de capas de atención, atención cruzada fragmentada y retroalimentación. Los cuadros con letras negras muestran los datos que se están modificando y las letras azules muestran el algoritmo que realiza los cambios.
Al rediseñar el modelo de lenguaje teniendo en cuenta al recuperador, una red 25 veces más pequeña puede obtener una perplejidad comparable a la de sus contrapartes mucho más grandes. [12] Debido a que se entrena desde cero, este método (Retro) incurre en el alto costo de las ejecuciones de entrenamiento que el esquema RAG original evitaba. La hipótesis es que al brindar conocimiento del dominio durante el entrenamiento, Retro necesita menos enfoque en el dominio y puede dedicar sus recursos de menor peso solo a la semántica del lenguaje. El modelo de lenguaje rediseñado se muestra aquí.
Se ha informado que Retro no es reproducible, por lo que se realizaron modificaciones para que así sea. La versión más reproducible se llama Retro++ e incluye RAG en contexto. [13]
Fragmentación
La fragmentación implica varias estrategias para dividir los datos en vectores para que el recuperador pueda encontrar detalles en ellos.
Los diferentes estilos de datos tienen patrones que la fragmentación correcta puede aprovechar.
Los tres tipos de estrategia de fragmentación son:
Longitud fija con superposición. Es rápido y fácil. La superposición de fragmentos consecutivos ayuda a mantener el contexto semántico entre ellos.
Los fragmentos basados en sintaxis pueden dividir el documento en oraciones. Las bibliotecas como spaCy o NLTK también pueden resultar de ayuda.
Fragmentación basada en el formato de archivo. Algunos tipos de archivos tienen fragmentos naturales incorporados y es mejor respetarlos. Por ejemplo, los archivos de código se fragmentan y vectorizan mejor como funciones o clases completas. Los archivos HTML deben dejar intactos los elementos <table> o <img> codificados en base64. Se deben tener consideraciones similares para los archivos PDF. Bibliotecas como Unstructured o Langchain pueden ayudar con este método.
Desafíos
Si la fuente de datos externa es grande, la recuperación puede ser lenta. El uso de RAG no elimina por completo los desafíos generales que enfrentan los LLM, incluida la alucinación . [3]
Referencias
^ abcdef Gao, Yunfan; Xiong, Yun; Gao, Xinyu; Jia, Kangxiang; Pan, Jinliu; Bi, Yuxi; Dai, Yi; Sol, Jiawei; Wang, Meng; Wang, Haofen (2023). "Generación de recuperación aumentada para modelos de lenguaje grandes: una encuesta". arXiv : 2312.10997 [cs.CL].
^ ab "¿Qué es RAG? - Explicación de la IA de generación aumentada por recuperación - AWS". Amazon Web Services, Inc. Recuperado el 16 de julio de 2024 .
^ ab "Modelos de lenguaje grande de próxima generación: el manual de la generación aumentada por recuperación (RAG)". freeCodeCamp.org . 11 de junio de 2024 . Consultado el 16 de julio de 2024 .
^ Lewis, Patrick; Perez, Ethan; Piktus, Aleksandra; Petroni, Fabio; Karpukhin, Vladimir; Goyal, Naman; Küttler, Heinrich; Lewis, Mike; Yih, Wen-tau; Rocktäschel, Tim; Riedel, Sebastian; Kiela, Douwe (2020). "Generación aumentada por recuperación para tareas de PNL intensivas en conocimiento". Avances en sistemas de procesamiento de información neuronal . 33 . Curran Associates, Inc.: 9459–9474. arXiv : 2005.11401 .
^ Khattab, Omar; Zaharia, Matei (2020). ""ColBERT: Búsqueda de pasajes eficiente y efectiva mediante interacción tardía contextualizada sobre BERT"". doi :10.1145/3397271.3401075.
^ Formal, Thibault; Lassance, Carlos; Piwowarski, Benjamín; Clintont, Stéphane (2021). ""SPLADE v2: Modelo léxico y de expansión dispersos para la recuperación de información"" Arxiv . S2CID 237581550.
^ Lee, Kenton; Chang, Ming-Wei; Toutanova, Kristina (2019). ""Recuperación latente para respuestas a preguntas de dominio abierto con supervisión débil"" (PDF) .
^ Lin, Sheng-Chieh; Asai, Akari (2023). ""Cómo entrenar a tu DRAGÓN: Ampliación diversa hacia una recuperación densa generalizable"" (PDF) .
^ Shi, Weijia; Min, Sewon (2024). "REPLUG: modelos de lenguaje de caja negra aumentados por recuperación". "REPLUG: modelos de lenguaje de caja negra aumentados por recuperación" . págs. 8371–8384. arXiv : 2301.12652 . doi :10.18653/v1/2024.naacl-long.463.
^ Carnero, Ori; Levine, Yoav; Dalmedigos, Italia; Muhlgay, Dor; Shasúa, Amnón; Leyton-Brown, Kevin; Shoham, Yoav (2023). ""Modelos de lenguaje aumentados de recuperación en contexto"". Transacciones de la Asociación de Lingüística Computacional . 11 : 1316-1331. arXiv : 2302.00083 . doi :10.1162/tacl_a_00605.
^ Borgeaud, Sebastian; Mensch, Arthur (2021). ""Mejora de los modelos lingüísticos mediante la recuperación de datos a partir de billones de tokens"" (PDF) .
^ Wang, Boxin; Ping, Wei (2023). "¿Deberíamos preentrenar modelos de lenguaje autorregresivos con recuperación? Un estudio exhaustivo" (PDF) .