Mejora del rendimiento de recuperación en canalizaciones RAG con búsqueda híbrida |  de Leonie Monigatti |  noviembre de 2023

Cómo encontrar resultados de búsqueda más relevantes combinando la búsqueda tradicional basada en palabras clave con la búsqueda vectorial moderna

barra de búsqueda híbrida
Barra de búsqueda con capacidades de búsqueda híbrida

Con el reciente interés en Generación aumentada de recuperación (RAG), los desarrolladores han comenzado a discutir los desafíos en la construcción de tuberías RAG con un rendimiento listo para producción. Al igual que en muchos aspectos de la vida, el principio de Pareto también entra en juego con los oleoductos RAG, donde lograr el 80% inicial es relativamente sencillo, pero lograr el 20% restante para la preparación para la producción resulta un desafío.

Un tema que se repite comúnmente es mejorar el componente de recuperación de una canalización RAG con búsqueda híbrida.

Los desarrolladores que ya han adquirido experiencia en la construcción de oleoductos RAG comenzaron a compartir sus ideas. Un tema que se repite comúnmente es mejorar el componente de recuperación de una canalización RAG con búsqueda híbrida.

Este artículo le presenta el concepto de búsqueda híbrida, cómo puede ayudarle a mejorar el rendimiento de su canalización RAG al recuperar resultados más relevantes y cuándo usarlo.

La búsqueda híbrida es una técnica de búsqueda que combina dos o más algoritmos de búsqueda para mejorar la relevancia de los resultados de la búsqueda. Aunque no está definido qué algoritmos se combinan, la búsqueda híbrida se refiere más comúnmente a la combinación de la búsqueda tradicional basada en palabras clave y la búsqueda vectorial moderna.

Tradicionalmente, la búsqueda basada en palabras clave era la opción obvia para los motores de búsqueda. Pero con la llegada de los algoritmos de aprendizaje automático (ML), las incrustaciones de vectores permitieron una nueva técnica de búsqueda, llamada búsqueda vectorial o semántica, que nos permitió buscar datos semánticamente. Sin embargo, ambas técnicas de búsqueda tienen ventajas y desventajas esenciales a considerar:

  • Búsqueda basada en palabras clave: Si bien sus capacidades de concordancia exacta de palabras clave son beneficiosas para términos específicos, como nombres de productos o jerga de la industria, es sensible a errores tipográficos y sinónimos, lo que le lleva a perder contexto importante.
  • Búsqueda vectorial o semántica: Si bien sus capacidades de búsqueda semántica permiten realizar búsquedas multilingües y multimodales basadas en el significado semántico de los datos y los hacen resistentes a los errores tipográficos, pueden pasar por alto palabras clave esenciales. Además, depende de la calidad de las incrustaciones de vectores generadas y es sensible a términos fuera de dominio.

La combinación de búsquedas vectoriales y basadas en palabras clave en una búsqueda híbrida le permite aprovechar las ventajas de ambas técnicas de búsqueda para mejorar la relevancia de los resultados de la búsqueda, especialmente para casos de uso de búsqueda de texto.

Por ejemplo, considere la consulta de búsqueda “Cómo fusionar dos Pandas DataFrames con .concat()?”. La búsqueda de palabras clave ayudaría a encontrar resultados relevantes para el método. .concat(). Sin embargo, dado que la palabra “fusionar” tiene sinónimos como “combinar”, “unir” y “concatenar”, sería útil si pudiéramos aprovechar el conocimiento del contexto de la búsqueda semántica (ver más detalles en ¿Cuándo utilizarías la búsqueda híbrida?).

Si está interesado, puede jugar con las diferentes consultas de búsqueda híbridas, semánticas y basadas en palabras clave para buscar películas en este live. manifestación (su implementación se detalla en Este artículo).

La búsqueda híbrida combina técnicas de búsqueda vectoriales y basadas en palabras clave fusionando sus resultados de búsqueda y reorganizándolos.

Búsqueda basada en palabras clave

La búsqueda basada en palabras clave en el contexto de la búsqueda híbrida a menudo utiliza una representación llamada incrustaciones dispersas, por lo que también se la conoce como búsqueda vectorial dispersa. Las incrustaciones dispersas son vectores con valores en su mayoría cero y solo unos pocos valores distintos de cero, como se muestra a continuación.

[0, 0, 0, 0, 0, 1, 0, 0, 0, 24, 3, 0, 0, 0, 0, ...]

Se pueden generar incrustaciones dispersas con diferentes algoritmos. El algoritmo más utilizado para incrustaciones dispersas es BM25 (Mejor coincidencia 25), que se basa en el enfoque TF-IDF (Frecuencia de términos-Frecuencia de documentos inversa) y lo perfecciona. En términos simples, BM25 enfatiza la importancia de los términos según su frecuencia en un documento en relación con su frecuencia en todos los documentos.

Búsqueda de vectores

La búsqueda de vectores es una técnica de búsqueda moderna que ha surgido con los avances en ML. Algoritmos de aprendizaje automático modernos, como transformadorespuede generar una representación numérica de objetos de datos en varias modalidades (texto, imágenes, etc.) llamadas incrustaciones vectoriales.

Estas incorporaciones de vectores suelen estar repletas de información y en su mayoría están compuestas por valores distintos de cero (vectores densos), como se muestra a continuación. Es por eso que la búsqueda de vectores también se conoce como búsqueda de vectores densos.

[0.634, 0.234, 0.867, 0.042, 0.249, 0.093, 0.029, 0.123, 0.234, ...]

Una consulta de búsqueda está incrustada en el mismo espacio vectorial que los objetos de datos. Luego, su incrustación de vectores se utiliza para calcular los objetos de datos más cercanos en función de una métrica de similitud específica, como la distancia del coseno. Los resultados de búsqueda devueltos enumeran los objetos de datos más cercanos clasificados según su similitud con la consulta de búsqueda.

Fusión de resultados de búsqueda vectoriales y basados ​​en palabras clave

Tanto la búsqueda basada en palabras clave como la búsqueda vectorial devuelven un conjunto separado de resultados, generalmente una lista de resultados de búsqueda ordenados por su relevancia calculada. Estos conjuntos separados de resultados de búsqueda deben combinarse.

Existen muchas estrategias diferentes para combinar los resultados clasificados de dos listas en una sola clasificación, como se describe en un artículo de Benham y Culpepper [1].

En términos generales, los resultados de la búsqueda suelen ser los primeros anotó. Estas puntuaciones se pueden calcular en función de una métrica específica, como la distancia del coseno, o simplemente la clasificación en la lista de resultados de búsqueda.

Luego, las puntuaciones calculadas se ponderan con un parámetro alphaque dicta la ponderación de cada algoritmo e impacta la reclasificación de los resultados.

hybrid_score = (1 - alpha) * sparse_score + alpha * dense_score

Generalmente, alpha toma un valor entre 0 y 1, con

  • alpha = 1: Búsqueda vectorial pura
  • alpha = 0: Búsqueda pura de palabras clave

A continuación, puede ver un ejemplo mínimo de la fusión entre búsqueda por palabra clave y vector con puntuación basada en el ranking y un alpha = 0.5.

Ejemplo mínimo que muestra las diferentes clasificaciones de búsqueda basada en palabras clave, búsqueda vectorial y búsqueda híbrida.
Ejemplo mínimo de cómo se pueden fusionar los resultados de búsqueda de palabras clave y vectores en una búsqueda híbrida con puntuación basada en clasificación y un alfa de 0,5 (Imagen del autor, inspirada en Búsqueda híbrida)

A oleoducto RAG Tiene muchas perillas que puedes ajustar para mejorar su rendimiento. Uno de estos botones es mejorar la relevancia del contexto recuperado que luego se introduce en el LLM porque si el contexto recuperado no es relevante para responder una pregunta determinada, el LLM tampoco podrá generar una respuesta relevante.

Dependiendo de su tipo de contexto y consulta, debe determinar cuál de las tres técnicas de búsqueda es más beneficiosa para su aplicación RAG. De este modo, El parámetro alphaque controla la ponderación entre la búsqueda semántica y basada en palabras clave, puede verse como un hiperparámetro que debe ajustarse.

en común Tubería RAG usando LangChaindefiniría el componente del recuperador estableciendo el valor usado vectorstore componente como el recuperador con el .as_retriever() método de la siguiente manera:

# Define and populate vector store
# See details here https://towardsdatascience.com/retrieval-augmented-generation-rag-from-theory-to-langchain-implementation-4e9bd5f6a4f2
vectorstore = ...

# Set vectorstore as retriever
retriever = vectorstore.as_retriever()

Sin embargo, este método sólo permite la búsqueda semántica. Si desea habilitar la búsqueda híbrida en LangChain, deberá definir un retriever componente con capacidades de búsqueda híbrida, como la WeaviateHybridSearchRetriever:

from langchain.retrievers.weaviate_hybrid_search import WeaviateHybridSearchRetriever

retriever = WeaviateHybridSearchRetriever(
alpha = 0.5, # defaults to 0.5, which is equal weighting between keyword and semantic search
client = client, # keyword arguments to pass to the Weaviate client
index_name = "LangChain", # The name of the index to use
text_key = "text", # The name of the text key to use
attributes = [], # The attributes to return in the results
)

el resto de la vainilla oleoducto RAG seguirá igual.

Este pequeño cambio de código le permite experimentar con diferentes ponderaciones entre búsquedas basadas en palabras clave y vectoriales. Tenga en cuenta que la configuración alpha = 1 equivale a una búsqueda totalmente semántica, ya que equivale a definir el recuperador a partir del vectorstore componente directamente (retriever = vectorstore.as_retriever()).

La búsqueda híbrida es ideal para casos de uso en los que desea habilitar capacidades de búsqueda semántica para una experiencia de búsqueda más humana, pero también requiere una coincidencia exacta de frases para términos específicos, como nombres de productos o números de serie.

Un excelente ejemplo es la plataforma Stack Overflow, que recientemente ha ampliado sus capacidades de búsqueda con búsqueda semántica mediante el uso de búsqueda híbrida.

Inicialmente, Stack Overflow usó TF-IDF para hacer coincidir palabras clave con documentos [2]. Sin embargo, describir el problema de codificación que intenta resolver puede resultar complicado. Puede generar diferentes resultados según las palabras que utilice para describir su problema (por ejemplo, la combinación de dos Pandas DataFrames se puede realizar con diferentes métodos, como fusionar, unir y concatenar). Por lo tanto, un método de búsqueda más consciente del contexto, como la búsqueda semántica, sería más beneficioso para estos casos.

Sin embargo, por otro lado, un caso de uso común de Stack Overflow es copiar y pegar mensajes de error. En este caso, la concordancia exacta de palabras clave es el método de búsqueda preferido. Además, querrá capacidades exactas de coincidencia de palabras clave para nombres de métodos y argumentos (p. ej., .read_csv() en pandas).

Como puede adivinar, muchos casos de uso similares en el mundo real se benefician de las búsquedas semánticas contextuales, pero aún dependen de la concordancia exacta de palabras clave. Estos casos de uso pueden beneficiarse enormemente de la implementación de un componente de recuperación de búsqueda híbrido.

Este artículo presentó el contexto de la búsqueda híbrida como una combinación de búsquedas vectoriales y basadas en palabras clave. La búsqueda híbrida fusiona los resultados de búsqueda de algoritmos de búsqueda separados y reclasifica los resultados de búsqueda en consecuencia.

En la búsqueda híbrida, el parámetro alpha controla la ponderación entre búsquedas semánticas y basadas en palabras clave. Este parámetro alpha Puede verse como un hiperparámetro para sintonizar las canalizaciones de RAG para mejorar la precisión de los resultados de búsqueda.

Usando el desbordamiento de pila [2] En el estudio de caso, mostramos cómo la búsqueda híbrida puede ser útil para casos de uso en los que la búsqueda semántica puede mejorar la experiencia de búsqueda. Sin embargo, la concordancia exacta de palabras clave sigue siendo importante cuando términos específicos son frecuentes.