Noticias

Búsqueda híbrida y reclasificación: una mirada más profunda a RAG

Muchos de nosotros estamos familiarizados con el patrón de recuperación de IA generativa aumentada (RAG) para crear aplicaciones de IA para agentes, como conserjes digitales, chatbots de soporte de primera línea y agentes que pueden ayudar con la resolución de problemas básicos de autoservicio.

En un nivel alto, el proceso de RAG es bastante claro: las indicaciones del usuario se aumentan con información contextual relevante en la base de conocimientos, y el modelo de lenguaje grande (LLM) proporciona respuestas al usuario basadas en la información proporcionada (en lugar de la información «integrada» con la que se entrenó originalmente).

En este artículo, nos arremangaremos y profundizaremos para tratar de comprender mejor cómo funciona realmente un sistema RAG típico de producción. Para comprender qué sucede exactamente durante el proceso de recuperación de información, debemos profundizar en la búsqueda híbrida y la reclasificación.

Incrustación y búsqueda de vectores

Antes de comenzar a combinar la búsqueda y la reclasificación, veamos algunos puntos de referencia de RAG. El repositorio de vectores esencialmente proporciona un índice de búsqueda basado en geometría que ayuda a encontrar contenido o conocimientos relevantes dentro de nuestra base de conocimientos. La forma en que funciona es esta:

  1. El material fuente subyacente está codificado como Empotrar Acelere modelos de inteligencia artificial utilizando GPU especializadas. Estas incrustaciones se representan como vector – Una lista de números, donde cada número representa una coordenada en un espacio de alta dimensión.
  2. Estas incorporaciones se almacenan en tablas de bases de datos y luego se calculan previamente índices especiales de bases de datos, a menudo utilizando motores de búsqueda especializados. búsqueda vectorialpara ayudar a acelerar las cosas.
  3. Luego, en tiempo de ejecución, la «distancia» entre dos conceptos se puede calcular utilizando una de varias medidas matemáticas, como la similitud del coseno, la distancia euclidiana (búsqueda L2), etc.
  4. Cuando se ejecuta la búsqueda, los resultados se devuelven como el vector coincidente más cercano, mapeándose nuevamente al registro en los datos de origen subyacentes. Podría ser un bloque de texto (o si se utiliza un modelo de lenguaje multimodal), o podría ser una imagen, una grabación de audio, un archivo PDF, etc. Para simplificar, nos limitaremos a los bloques de texto en este artículo.

El resultado de la búsqueda vectorial será de datos de origen originalesque se enviará a LLM junto con el mensaje del usuario. Las incrustaciones de vectores codificados ayudan a encontrar el mensaje correcto en la base de conocimientos, pero el LL.M. No se pueden interpretar directamente estas incrustaciones de vectores.

  1. buscar: Su consulta se convierte en un vector para encontrar datos coincidentes en la base de datos.
  2. Buscar: Extracción de base de datos original asociado con esos vectores coincidentes.
  3. Realce: Este texto se inserta en la plantilla de solicitud (por ejemplo, «Utilice esta información: [Source Text],responde a las preguntas: [User Prompt]»).
  4. generación: Este mensaje de texto combinado se enviará al LL.M.

Es importante prestar atención al primer paso. Cuando realiza una búsqueda, las indicaciones del usuario también deben convertirse en vectores en el momento de la ejecución. Esto permite que el motor de búsqueda de vectores compare los vectores en la pista con los vectores en la base de datos y encuentre la coincidencia más cercana.

Para obtener resultados significativos, Necesitas usar el mismo modelo de incrustación. Tal como lo haría al crear un índice vectorial en su base de datos. esto es porque Cada modelo crea su propio «mapa» de significado único. (a menudo llamado espacio vectorial). Usar un modelo de incrustación diferente es un asesino silencioso: la aplicación se ejecutará sin errores, pero la información recuperada será completamente irrelevante.

Esta es la búsqueda de vectores. Sin embargo, para que un sistema RAG esté listo para producción, a menudo es necesario ir más allá de una búsqueda vectorial «simple» a un proceso de recuperación de varias etapas.

búsqueda híbrida

búsqueda híbrida Ejecute la búsqueda vectorial y texto completo Algoritmos de búsqueda paralelos y fusionar sus resultados.

  • búsqueda vectorial (densa) Bueno para encontrar «significado». Si busca «tiempo despejado», es posible que encuentre «cielos azules y despejados», incluso si las palabras no coinciden.
  • Búsqueda de texto completo (escasa) Bueno para encontrar «coincidencias exactas». Utiliza algoritmos de coincidencia literal, como Best Match 25 (BM25), para encontrar ID de productos específicos, acrónimos o términos técnicos raros que los modelos vectoriales a veces no pueden distinguir.

Los dos métodos utilizan diferentes sistemas de puntuación (vector de 0,0 a 1,0, BM25 una puntuación ilimitada). Por lo tanto, se combinan mediante algoritmos similares. Fusión de rangos recíprocos (RRF). FRR se centra en Ubicación Las puntuaciones de los archivos en ambas listas, en lugar de las puntuaciones brutas, otorgan a los archivos que aparecen cerca de la parte superior de ambas listas una clasificación final más alta.

Calcular la puntuación general

En realidad, existen dos métodos que se utilizan habitualmente para calcular las puntuaciones de clasificación generales.

Fusión de rangos recíprocos (RRF)

RRF ignora por completo las puntuaciones brutas y sólo mira rango El (primero, segundo, tercero, etc.) del documento en cada lista. RRF utiliza un factor de suavizado, generalmente establecido en un número entero «60». Este factor de «suavizado» estándar evita que una clasificación muy alta en una búsqueda supere por completo a una clasificación de nivel medio en otra búsqueda.

Fusión de puntuación relativa (promedio ponderado)

Este método conserva la partitura original, pero normalización Ellos primero.

  1. Tanto las puntuaciones de BM25 como las de Vector están escaladas en el rango de 0-1
  2. Aplique parámetros de ponderación para decidir en qué método de búsqueda confía más.

RRF no requiere mucho ajuste y es muy potente, mientras que el promedio ponderado puede proporcionar un mayor control quirúrgico si se sabe que las búsquedas de palabras clave siempre son más confiables que las búsquedas de vectores (y viceversa).

Búsqueda híbrida en base de datos.

En las pilas RAG modernas, la convergencia de búsquedas de palabras clave de texto completo (BM25) y búsquedas vectoriales se traslada cada vez más a la capa de base de datos para reducir la latencia y el «código adhesivo»: lógica de middleware que, de otro modo, podría aumentar la complejidad de gestión general de la solución.

  • para PostgreSQL (vector de PG y `Texto completo`) Puede escribir una consulta SQL o un procedimiento almacenado que realice dos subconsultas (una para la distancia del vector y otra para la coincidencia de palabras clave tsvector) y luego aplicar la fórmula RRF a los resultados.
  • Algunas bases de datos como OpenSearch proporciona funciones integradas que manejan automáticamente las operaciones RRF por usted.

Búsqueda híbrida de PostgreSQL y RRF

Veamos cómo se ven las búsquedas híbridas en PostgreSQL. Este ejemplo supone que tiene una tabla llamada Documentos que contiene columnas de contenido (para búsquedas de texto) y columnas incrustadas (para búsquedas vectoriales).

WITH 
-- 1. Semantic Search: Rank by vector similarity
semantic_search AS (
  SELECT id, ROW_NUMBER() OVER (ORDER BY embedding <=> '[0.1, -0.2, ...]'::vector) as rank
  FROM documents
  ORDER BY embedding <=> '[0.1, -0.2, ...]'::vector
  LIMIT 50
),
-- 2. Keyword Search: Rank by text relevance (BM25 or ts_rank)
keyword_search AS (
  SELECT id, ROW_NUMBER() OVER (ORDER BY ts_rank_cd(to_tsvector('english', content), query) DESC) as rank
  FROM documents, plainto_tsquery('english', 'your search terms') query
  WHERE to_tsvector('english', content) @@ query
  LIMIT 50
),
-- 3. Fusion: Combine ranks using the RRF formula: 1 / (rank + k)
combined_results AS (
  SELECT id, 1.0 / (60 + s.rank) as score FROM semantic_search s
  UNION ALL
  SELECT id, 1.0 / (60 + k.rank) as score FROM keyword_search k
)
-- 4. Final Output: Sum scores for items found in both/either list
SELECT d.id, d.content, SUM(c.score) as final_rrf_score
FROM combined_results c
JOIN documents d ON c.id = d.id
GROUP BY d.id, d.content
ORDER BY final_rrf_score DESC
LIMIT 10;

La ventaja de ejecutarlo en un procedimiento almacenado dentro de la biblioteca es

  • Actuación: Al realizar la fusión en la base de datos, solo devuelve las últimas 10 filas a la aplicación, en lugar de dos listas grandes de 50 filas.
  • Simple: No es necesario escribir lógica en el middleware de su aplicación para «hacer coincidir» los ID de dos matrices diferentes.

Quizás se pregunte acerca de algunos de los operadores y tipos de datos inusuales utilizados en la lista de códigos anterior. ‘s<=>El operador ` es el operador de distancia coseno de pg_vector, que se utiliza para calcular la distancia entre dos vectores. ‘s[0.1, 0.2 … ]`representa un ejemplo de cómo representar un vector. Por otro lado, `@@` es un operador utilizado por los motores de búsqueda de texto completo para comprobar si una consulta de búsqueda coincide con un campo.

reclasificar

uno Reordenar es un modelo de inteligencia artificial de segunda etapa que mejora la precisión de la información contextual enviada al LLM junto con las indicaciones del usuario. Mientras que la búsqueda de vectores es rápida pero confusa, la reordenación es más lenta pero más precisa.

Para reclasificar, no es necesario codificar el material en la inserción. En su lugar, puede pasar el texto sin formato de la consulta y el texto sin formato del bloque de resultados directamente al modelo de reclasificación.

El flujo de trabajo es:

  1. recordar: realiza una búsqueda híbrida y obtiene un conjunto relativamente grande de resultados candidatos (por ejemplo, los primeros 50 a 100 bloques).
  2. Reordenar: Pasa consejos de usuario al modelo de reclasificación junto con los bloques de candidatos principales. A diferencia del modelo vectorial, el reordenador analiza consultas y documentos. Juntos Vea qué tan bien encajan realmente.
  3. Elección final: Solo tomas los 5-10 primeros resultados del reclasificador y los envías al LL.M.

Cómo funciona la reclasificación

Reordenar los modelos suele ser codificador cruzado. A diferencia del modelo de incrustación utilizado para el rastreo inicial (codificador dual), el codificador cruzado no analiza la consulta y el documento por separado.

  • Requiere una cadena de entrada combinada: [CLS] preguntar [SEP] bloque de archivos [SEP].
  • Debido a que ve ambos al mismo tiempo, puede realizar una «atención cruzada»: literalmente, comparar cada palabra de la consulta con cada palabra del documento simultáneamente.
  • Produce una puntuación de relevancia (normalmente un decimal entre 0 y 1). Por eso es tan preciso pero también lento; No se pueden precalcular estas puntuaciones porque dependen de la consulta específica que se realice.

Reclasificación en middleware de aplicaciones

La reclasificación casi siempre se realiza en Capa de aplicación o a través de especializados punto final de inferencia. Los procedimientos almacenados del repositorio son excelentes para matemáticas (RRF), pero no son adecuados para ejecutar modelos pesados ​​de aprendizaje profundo, como el modelo de codificador cruzado que se usa comúnmente para reclasificar.

  • El middleware de su aplicación llama a la base de datos para obtener los 50 «candidatos» principales (mediante una búsqueda híbrida) y luego pasa esos 50 bloques de texto sin procesar al modelo de reclasificación.
  • El reordenador devuelve los «mejores» bloques finales de 5 a 10, que luego su aplicación proporciona al LLM.

envolver

Por eso, analizamos con más detalle cómo las arquitecturas RAG modernas de producción utilizan la búsqueda híbrida y la reclasificación para obtener los mejores resultados (y experiencia de usuario):

  • Los motores de búsqueda de vectores requieren un modelo de incrustación para codificar datos en vectores. Luego se construyen índices de búsqueda sobre estos vectores.
  • Los resultados de búsqueda de vectores se pueden combinar con resultados de búsqueda de palabras clave para proporcionar una mayor precisión. Utilizará un algoritmo como RRF para calcular la clasificación de los resultados combinados. esto es lo que se llama búsqueda híbrida.
  • Usted introduce los resultados de su búsqueda combinada en un modelo de reclasificación para colocar los mejores resultados en la parte superior de la lista de resultados, lo que ayuda a garantizar que LLM responda basándose en la información más relevante disponible.

La búsqueda híbrida ayuda a garantizar que no se pierda nada, mientras que la reclasificación ayuda a garantizar que el mejor contenido esté en la parte superior.

El proceso completo de producción de RAG suele tener este aspecto:

TareaLugar¿Por qué?
Incrustación informáticaSoftware intermediario/APIRequiere modelos pesados ​​de GPU para calcular incrustaciones
Guardar incrustarbase de datosLas incrustaciones deben guardarse para su posterior búsqueda y recuperación.
Búsqueda de vectores/palabras clavebase de datosSe requiere acceso directo al índice de la base de datos.
búsqueda híbridaProcedimiento almacenado de base de datosClasificar en la fuente es más rápido que cargar dos listas enormes en la aplicación.
reclasificarSoftware intermediario/APIRequiere un modelo de codificador cruzado con uso intensivo de GPU.
LL.M. GeneraciónSoftware intermediario/APIEl último paso es utilizar el contexto recuperado.

Más información sobre Canonical Abierto para búsqueda y PostgreSQL solución o contáctenos.

lectura adicional

Explore nuestra Guía RAG para crear e implementar flujos de trabajo RAG en la nube pública utilizando herramientas de código abierto.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba