Estrategia de recuperación RAG sencilla y eficaz: búsqueda y reordenación híbrida dispersa + densa, y uso de "cue caching" para generar un contexto general de relevancia documental para los trozos de texto.

朴素、有效的RAG检索策略:稀疏+密集混合检索并重排,并利用“提示缓存”为文本块生成整体文档相关的上下文

Para que un modelo de IA sea útil en un escenario concreto, suele necesitar acceso a conocimientos previos. Por ejemplo, un chatbot de atención al cliente necesita entender el negocio específico al que presta servicio, mientras que un bot de análisis jurídico necesita tener acceso a un gran número de casos anteriores.

Los desarrolladores suelen aumentar los conocimientos de los modelos de IA mediante la Generación Mejorada por Recuperación (RAG, por sus siglas en inglés), un método que consiste en recuperar información relevante de una base de conocimientos y adjuntarla a las peticiones del usuario para mejorar significativamente la capacidad de respuesta del modelo. El problema es que la RAG Los programas pierden contexto al codificar la información, lo que a menudo provoca que el sistema sea incapaz de recuperar información relevante de la base de conocimientos.

En este artículo esbozamos un enfoque que puede mejorar significativamente la etapa de recuperación en la GAR. Este enfoque se denomina Contextual Retrieval y utiliza dos subtécnicas: Contextual Embeddings y Contextual BM25. Este enfoque reduce el número de fallos de recuperación en 491 TP3T, y en 671 TP3T cuando se combina con el reordenamiento. Estas mejoras aumentan drásticamente la precisión de la recuperación, lo que se traduce directamente en un mejor rendimiento en las tareas posteriores.

La esencia es una mezcla de resultados semánticamente similares y de frecuencia de palabras similares, a veces los resultados semánticos no representan la verdadera intención. Lea el enlace proporcionado al final del texto, han pasado 2 años desde que se publicó esta "vieja" estrategia, y el método sigue siendo poco utilizado, ya sea cayendo en la extremadamente compleja estrategia RAG, o utilizando sólo incrustación + reordenación.

En este artículo, una pequeña mejora de esta vieja estrategia consiste en utilizar "sugerencias de caché" para generar contexto para bloques de texto que se ajusten al contexto general del documento a bajo coste. Es un pequeño cambio, ¡pero los resultados son impresionantes!

Para ello Nuestro código de ejemplo utilizar Claude Implante su propia solución de recuperación contextual.

 

Nota sobre el uso sencillo de puntas más largas

A veces, la solución más sencilla es también la mejor. Si su base de conocimientos es inferior a 200.000 tokens (unas 500 páginas de material), puede incluir toda la base de conocimientos directamente en las indicaciones proporcionadas al modelo, sin necesidad de un método RAG o similar.

Hace unas semanas, publicamos para Claude Cue CacheAdemás de la nueva API, hemos acelerado y reducido significativamente el coste de este enfoque. Ahora los desarrolladores pueden almacenar en caché las sugerencias más utilizadas entre las llamadas a la API, lo que reduce la latencia en más del doble y el coste en hasta 90% (puedes ver cómo funciona leyendo nuestro Código de ejemplo de la caché de sugerencias (Entender cómo funciona).

Sin embargo, a medida que su base de conocimientos crezca, necesitará una solución más escalable, y ahí es donde entra en juego la búsqueda contextual. Con estos antecedentes fuera del camino, vayamos al grano.

 

Conceptos básicos del GAR: ampliar la base de conocimientos

RAG es la solución típica para grandes bases de conocimiento que no caben en una ventana contextual.RAG preprocesa la base de conocimiento en los siguientes pasos:

  1. Descomposición de la base de conocimientos ("corpus" de documentos) en fragmentos de texto más pequeños, normalmente no más de unos cientos de tokens; (los bloques de texto excesivamente largos expresan más significado, es decir, son demasiado ricos semánticamente).
  2. Los segmentos se convierten en incrustaciones vectoriales que codifican el significado mediante un modelo de incrustación;
  3. Almacene estas incrustaciones en una base de datos vectorial para realizar búsquedas por similitud semántica.

 

En tiempo de ejecución, cuando el usuario introduce una consulta en el modelo, la base de datos vectorial encuentra el fragmento más relevante basándose en la similitud semántica de la consulta. A continuación, el fragmento más relevante se añade a la consulta enviada al modelo generativo (respondiendo a la pregunta como contexto de la referencia del modelo más amplio).

Aunque los modelos de incrustación son buenos para captar las relaciones semánticas, pueden pasar por alto coincidencias exactas críticas. Afortunadamente, una técnica más antigua puede ayudar en estos casos.BM25 es una función de clasificación que encuentra coincidencias exactas de palabras o frases mediante concordancia léxica. Resulta especialmente eficaz en consultas que contienen identificadores únicos o términos técnicos.

BM25 Mejora basada en el concepto de TF-IDF (Word Frequency-Inverse Document Frequency), que mide la importancia de una palabra en una colección de documentos.BM25 evita que las palabras comunes dominen los resultados teniendo en cuenta la longitud del documento y aplicando una función de saturación a la frecuencia de palabras.

Así funciona BM25 cuando falla la incrustación semántica: Supongamos que un usuario consulta la base de datos de soporte técnico en busca del "código de error TS-999". (El modelo de incrustación (vectorial) puede encontrar contenido genérico sobre el código de error, pero puede no encontrar la coincidencia exacta con "TS-999". En su lugar, BM25 busca esa cadena de texto específica para identificar el documento pertinente.

 

Al combinar las técnicas de incrustación y BM25, el programa RAG puede recuperar los fragmentos más relevantes con mayor precisión, como se indica a continuación:

  1. La base de conocimientos (el "corpus" de documentos) se descompone en fragmentos de texto más pequeños, que no suelen superar unos cientos de tokens;
  2. Cree codificaciones TF-IDF e incrustaciones semánticas (vectoriales) para estos segmentos;
  3. Utilice BM25 para encontrar el mejor fragmento basado en una coincidencia exacta;
  4. Utilice la incrustación (vectorial) para encontrar los segmentos con mayor similitud semántica;
  5. Los resultados de los pasos (3) y (4) se fusionan y se reducen utilizando una técnica de fusión de clasificación; por ejemplo, el modelo de reordenación dedicado Rerank 3.5.
  6. Añade los primeros K segmentos a la pregunta para generar una respuesta.

Al combinar los modelos BM25 y de incrustación, los sistemas tradicionales de GAR son capaces de lograr un equilibrio entre la coincidencia precisa de términos y una comprensión semántica más amplia, lo que proporciona resultados más completos y precisos.

朴素、有效的RAG检索策略:稀疏+密集混合检索并重排,并利用“提示缓存”为文本块生成整体文档相关的上下文

Un sistema estándar de generación de aumento de la recuperación (RAG) que combina la incrustación y el Best Match 25 (BM25) para recuperar información. El TF-IDF (Word Frequency-Inverse Document Frequency) mide la importancia de las palabras y constituye la base del BM25.

 

Este enfoque permite escalar a una base de conocimientos mucho mayor de la que puede albergar una sola consulta, a un coste reducido. Sin embargo, estos sistemas tradicionales de GAR tienen una limitación importante: a menudo rompen el contexto.

Hablando de aquí sobre la base del esquema de búsqueda para hacer un diseño razonable, aún no se ha hablado del bloque truncado de texto para ver, el bloque truncado de texto es expresar el mismo contenido, nunca debe ser truncado, pero el esquema anterior RAGInevitablemente, el contexto se trunca. Se trata de un problema a la vez simple y complejo. Vayamos al grano en este artículo.

 

Dificultades contextuales en el GAR tradicional

En la GAR tradicional, los documentos suelen dividirse en fragmentos más pequeños para una recuperación eficiente. Este enfoque es adecuado para muchas aplicaciones, pero puede plantear problemas cuando los fragmentos individuales carecen de contexto suficiente.

Por ejemplo, supongamos que tiene alguna información financiera incorporada a su base de conocimientos (por ejemplo, un informe de la SEC estadounidense) y recibe la siguiente pregunta:"¿Cuál es el crecimiento de los ingresos de ACME Corporation en el segundo trimestre de 2023?"

Un bloque relacionado puede contener el siguiente texto:"Los ingresos de la empresa aumentaron 3% respecto al trimestre anterior". Sin embargo, el propio bloque no menciona explícitamente empresas concretas ni periodos de tiempo relevantes, lo que dificulta la recuperación de la información correcta o su uso eficaz.

Introducción a la búsqueda contextual

La recuperación contextual se realiza añadiendo un bloque específico a cada bloque antes de incrustar elContexto interpretativo("Context Embedding") y crear un índice BM25 ("Context BM25") resuelve este problema.

Volvamos al ejemplo de recogida de informes SEC. He aquí un ejemplo de cómo se convierte un bloque:

original_chunk = "该公司的收入比上一季度增长了 3%。"
contextualized_chunk = "该块来自一份关于 ACME 公司 2023 年第二季度表现的 SEC 报告;上一季度的收入为 3.14 亿美元。该公司的收入比上一季度增长了 3%。"

Cabe señalar que en el pasado se han sugerido otras formas de utilizar el contexto para mejorar la recuperación. Otras sugerencias son:Añadir un resumen genérico de documento a un bloque(Experimentamos y comprobamos que la ganancia era muy limitada),Incrustación hipotética de documentos responder cantando Indexación abstracta(Lo evaluamos y comprobamos que el rendimiento es bajo). Estos métodos son diferentes del propuesto en este trabajo.

Se ha demostrado experimentalmente que muchos de los métodos para mejorar la calidad del contexto tienen una ganancia limitada, e incluso los métodos relativamente mejores mencionados anteriormente siguen siendo cuestionables.Porque añadir un contexto explicativo a este proceso de conversión hace que se pierda más o menos información.

Incluso si un párrafo completo se trocea en bloques de texto y se añaden varios niveles de encabezamientos al contenido del párrafo completo, este párrafo aislado y fuera de contexto puede no transmitir los conocimientos con precisión, como han soñado los ejemplos anteriores.

Este método resuelve eficazmente el problema de que cuando el contenido de un bloque de texto existe solo, la falta de contexto hace que el contenido quede aislado y sin sentido.

 

Activar la búsqueda contextual

Por supuesto, anotar manualmente el contexto de miles o incluso millones de bloques en una base de conocimientos es demasiado trabajo. Para permitir la recuperación contextual, recurrimos a Claude y escribimos una sugerencia que ordena al modelo que proporcione un contexto conciso y específico para cada bloque basándose en el contexto de todo el documento. Así es como utilizamos las sugerencias de Claude 3 Haiku para generar el contexto de cada bloque:

<document> 
{{WHOLE_DOCUMENT}} 
</document> 
这是我们希望置于整个文档中的块 
<chunk> 
{{CHUNK_CONTENT}} 
</chunk> 
请提供一个简短且简明的上下文,以便将该块置于整个文档的上下文中,从而改进块的搜索检索。仅回答简洁的上下文,不要包含其他内容。

El texto contextual generado suele tener entre 50 y 100 tokens y se añade al bloque antes de incrustarlo y de crear el índice BM25.

Esta ejecución de cue tiene que hacer referencia al documento completo correspondiente al bloque de texto (que no debería tener más de 500 páginas, ¿verdad?) para generar con precisión el contexto asociado al bloque de texto en relación con el documento completo.

Esto se basa en la capacidad de almacenamiento en caché de Claude, el documento completo como un indicador para almacenar en caché la entrada no tiene que pagar cada vez, el almacenamiento en caché, sólo tiene que pagar una vez, por lo que el programa para lograr los requisitos previos son los siguientesEl modelo grande permite almacenar en caché documentos largosModelos como DeepSeek tienen capacidades similares.

 

A continuación se describe el proceso de preprocesamiento en la práctica:

朴素、有效的RAG检索策略:稀疏+密集混合检索并重排,并利用“提示缓存”为文本块生成整体文档相关的上下文

La búsqueda contextual es una técnica de preprocesamiento que mejora la precisión de la búsqueda.

Si está interesado en utilizar la búsqueda contextual, puede consultar nuestro manual de instrucciones Comienza.

 

Reducción del coste de la recuperación contextual mediante el caché de sugerencias

La recuperación a través de contextos Claude puede realizarse a bajo coste gracias a la función especial de caché de sugerencias que hemos mencionado. Con la caché de sugerencias, no es necesario pasar documentos de referencia para cada bloque. Basta con cargar el documento en la caché una vez y, a continuación, hacer referencia al contenido previamente almacenado en caché. Suponiendo 800 tokens por bloque, 8.000 tokens por documento, 50 tokens por instrucción de contexto y 100 tokens por contexto de bloque, el valor deEl coste único de generar un bloque contextualizado es de $1,02 por cada millón de documentos Token.

metodología

Realizamos experimentos en múltiples dominios de conocimiento (base de código, novelas, artículos de ArXiv, artículos científicos), modelos de incrustación, estrategias de recuperación y métricas de evaluación. Realizamos nuestros experimentos en Apéndice II Algunos ejemplos de las preguntas y respuestas que utilizamos para cada ámbito figuran en.

La siguiente figura muestra el rendimiento medio en todos los dominios de conocimiento cuando se utiliza la configuración de incrustación de mejor rendimiento (Gemini Text 004) y se recuperan los 20 primeros fragmentos. Como métrica de evaluación se utilizó 1 menos recall@20, que mide el porcentaje de documentos relevantes que no se recuperaron en los 20 primeros fragmentos. Los resultados completos pueden consultarse en el Apéndice: la contextualización mejora el rendimiento en todas las combinaciones de fuentes incrustadas que hemos evaluado.

mejora del rendimiento

Nuestros experimentos demuestran que:

  • La incrustación contextual redujo la tasa de fallos de búsqueda de los 20 primeros fragmentos en un 35%(5,7% → 3,7%).
  • La combinación de la incrustación contextual y el BM25 contextual redujo el porcentaje de fallos de búsqueda de los 20 primeros fragmentos en 49%(5,7% → 2,9%).
朴素、有效的RAG检索策略:稀疏+密集混合检索并重排,并利用“提示缓存”为文本块生成整体文档相关的上下文

La combinación de la incrustación contextual y la BM25 contextual redujo el porcentaje de fallos en la recuperación de los 20 primeros fragmentos en 49%.

Consideraciones sobre la aplicación

Hay que tener en cuenta los siguientes puntos a la hora de aplicar la búsqueda contextual:

  1. Límites de fragmentos: Considere cómo se dividirá el documento en fragmentos. La elección del tamaño de los fragmentos, los límites y el solapamiento pueden afectar al rendimiento de la recuperación ^1^.
  2. Modelos de incrustación: Aunque la recuperación contextual mejora el rendimiento de todos los modelos de incrustación que probamos, ciertos modelos pueden beneficiarse más. Hemos observado que Géminis responder cantando Viaje La incrustación es especialmente eficaz.
  3. Indicaciones contextuales personalizadas: Aunque las indicaciones genéricas que proporcionamos funcionan bien, se pueden obtener mejores resultados personalizando las indicaciones para dominios o casos de uso específicos (por ejemplo, incluyendo un glosario de términos clave que pueden estar definidos en otros documentos de la base de conocimientos).
  4. Número de clips: Añadir más fragmentos a la ventana contextual puede mejorar las posibilidades de incluir información relevante. Sin embargo, demasiada información puede distraer al modelo, por lo que es necesario controlar el número. Hemos probado con 5, 10 y 20 fragmentos y hemos comprobado que el uso de 20 fragmentos daba mejores resultados con estas opciones (para más detalles, véase el Apéndice), pero merece la pena experimentar en función de su caso de uso.

Realice siempre evaluaciones: La generación de respuestas puede mejorarse pasando fragmentos contextualizados y distinguiendo entre contexto y fragmentos.

 

Reordenación para mejorar el rendimiento

En el último paso, podemos combinar la recuperación contextual con otra técnica para mejorar aún más el rendimiento. En la RAG (Retrieval-Augmented Generation) tradicional, el sistema de IA busca en su base de conocimientos fragmentos de información potencialmente relevantes. En el caso de las bases de conocimiento grandes, la búsqueda inicial suele devolver un gran número de fragmentos -a veces cientos- de relevancia e importancia variables.

La reordenación es una técnica de filtrado habitual que garantiza que sólo se transmitan al modelo las piezas más relevantes. La reordenación proporciona una mejor respuesta al tiempo que reduce el coste y la latencia, ya que el modelo procesa menos información. Los pasos clave son los siguientes:

  1. Se realizó una búsqueda inicial para obtener los segmentos más probablemente relevantes (utilizamos los 150 primeros);
  2. Pasar los N primeros fragmentos y la consulta del usuario al modelo de reordenación;
  3. Se utilizó un modelo de reordenación para puntuar cada clip en función de su relevancia e importancia para la pista y, a continuación, se seleccionaron los K mejores clips (utilizamos los 20 mejores);
  4. Los primeros K segmentos se pasan como contexto al modelo para generar el resultado final.

 

朴素、有效的RAG检索策略:稀疏+密集混合检索并重排,并利用“提示缓存”为文本块生成整体文档相关的上下文La combinación de búsqueda contextual y reordenación maximiza la precisión de la búsqueda.

mejora del rendimiento

En el mercado existen varios modelos de reordenación. Nosotros utilizamos el Reordenador Cohere Realice la prueba. viaje También se proporciona un reordenadorpero no hemos tenido tiempo de probarlo. Nuestros experimentos demuestran que añadir un paso de reordenación puede optimizar aún más la recuperación en diversos ámbitos.

En concreto, descubrimos que reordenar las incrustaciones contextuales y la BM25 contextual reduce la tasa de fallos de recuperación de los 20 fragmentos principales en 671 TP3T (5,71 TP3T → 1,91 TP3T).

朴素、有效的RAG检索策略:稀疏+密集混合检索并重排,并利用“提示缓存”为文本块生成整体文档相关的上下文La reordenación de las incrustaciones contextuales y el BM25 contextual redujo la tasa de fallos de recuperación de los 20 primeros fragmentos en 67%.

 

Consideraciones sobre costes y retrasos

Una consideración importante a la hora de reordenar es el impacto en la latencia y el coste, especialmente cuando se reordena un gran número de fragmentos. Dado que la reordenación añade un paso extra en tiempo de ejecución, inevitablemente añade algo de latencia, incluso si el reordenador está puntuando todos los fragmentos uno al lado del otro. Existe un equilibrio entre reordenar más fragmentos para obtener un mayor rendimiento y reordenar menos fragmentos para reducir la latencia y el coste. Te recomendamos que experimentes con diferentes configuraciones para encontrar el equilibrio óptimo.

 

llegar a un veredicto

Hemos realizado una serie de pruebas comparando distintas combinaciones de todas las técnicas anteriores (modelos de incrustación, uso de BM25, uso de búsqueda contextual, uso de reordenadores y número de K resultados más recuperados) y hemos llevado a cabo experimentos en diversos tipos de conjuntos de datos. A continuación resumimos nuestros resultados:

  1. Incrustar + BM25 es mejor que utilizar sólo incrustar;
  2. Viaje y Géminis es el modelo de incrustación que mejor funcionó en nuestras pruebas;
  3. Pasar los 20 primeros segmentos al modelo es más eficaz que pasar sólo los 10 o 5 primeros;
  4. Añadir contexto a los segmentos mejora mucho la precisión de la recuperación;
  5. Reordenar es mejor que no reordenar;
  6. Todas estas ventajas son acumulables: Para maximizar las mejoras de rendimiento, podemos utilizar una combinación de incrustación contextual (de Voyage o Gemini), BM25 contextual, reordenación de pasos y adición de 20 fragmentos a la consulta.

Animamos a todos los desarrolladores que utilicen la base de conocimientos a que utilicen la función Nuestro manual de prácticas Experimenta con estos métodos para desbloquear nuevos niveles de rendimiento.

 

Apéndice I

A continuación se ofrece un desglose de los resultados de Retrievals @ 20 por conjuntos de datos, proveedores integrados, BM25 utilizado junto con la integración, uso de la recuperación contextual y uso de la reordenación.

Para ver un desglose de Recuperaciones @ 10 y @ 5 y ejemplos de preguntas y respuestas para cada conjunto de datos, consulte Apéndice II.

 

朴素、有效的RAG检索策略:稀疏+密集混合检索并重排,并利用“提示缓存”为文本块生成整体文档相关的上下文1 menos recall @ 20 para el conjunto de datos y los resultados del proveedor incrustado.

notas a pie de página

  1. Para más información sobre estrategias de segmentación, consulte el este enlace responder cantando este enlace.
© declaración de copyright

Artículos relacionados

Sin comentarios

Debe iniciar sesión para participar en los comentarios.
Acceder ahora
ninguno
Sin comentarios...