RAG con búsqueda híbrida: ¿Cómo funciona la búsqueda por palabras clave?

He hablado mucho sobre la Generación Aumentada Reterival (RAG). En particular, he cubierto los conceptos básicos de la metodología RAG, así como una serie de conceptos relevantes, como fragmentación, incrustaciones, reclasificación y evaluación de recuperación.

La metodología RAG tradicional es muy útil porque permite buscar partes relevantes del texto en una gran base de conocimientos, basándose en el significado del texto en lugar de en palabras exactas. De esta manera, nos permite utilizar el poder de la IA en nuestros documentos personalizados. Irónicamente, por muy útil que sea esta búsqueda de similitudes, a veces no logra recuperar partes del texto que coinciden exactamente con la solicitud del usuario. Más específicamente, al buscar en una base de conocimiento grande, es posible que se pierdan palabras clave específicas (como términos o nombres técnicos específicos) y es posible que no se recuperen fragmentos relevantes incluso si la consulta del usuario contiene las palabras exactas.

Afortunadamente, este problema se puede solucionar fácilmente utilizando una técnica de búsqueda más antigua basada en palabras clave, como BM25 (Best Matching 25). Luego, al combinar los resultados de la búsqueda de similitud y la búsqueda de BM25, esencialmente podemos obtener lo mejor de ambos mundos y mejorar significativamente los resultados de nuestra canalización RAG.

. . .

En los sistemas de recuperación de información, BM25 es una función de clasificación que se utiliza para evaluar la relevancia de un documento para una consulta de búsqueda. A diferencia de la búsqueda por similitud, BM25 evalúa la relevancia del documento para la consulta del usuario, no basándose en el significado semántico del documento, sino en las palabras reales que contiene. Más concretamente, BM25 es un modelo de bolsa de palabras (BoW), lo que significa que no tiene en cuenta el orden de las palabras de un documento (del que surge el significado semántico), sino la frecuencia con la que aparece cada palabra en el documento.

La puntuación BM25 para una consulta dada q que contiene términos t y un documento d se puede (no tan) calcular fácilmente de la siguiente manera:

😿

Dado que esta expresión puede resultar un poco abrumadora, demos un paso atrás y veámosla poco a poco.

. . .

Comenzando simple con TF-IDF

El concepto básico subyacente de BM25 es TF-IDF (Frecuencia de plazo – Frecuencia de documento inversa). TF-IDF es un concepto fundamental de recuperación de información que tiene como objetivo medir la importancia de una palabra en un documento específico en una base de conocimientos. En otras palabras, mide en cuántos documentos de la base de conocimiento aparece un término, permitiendo de esta manera expresar qué tan específico e informativo es un término sobre un documento específico. Cuanto más raro sea un término en la base de conocimientos, más informativo se considerará para un documento específico.

En particular, para un documento d en una base de conocimientos y un término t, la frecuencia del término TF(t,d) se puede definir de la siguiente manera:

y la frecuencia inversa del documento IDF

Luego, la puntuación TF-IDF se puede calcular como el producto de TF e IDF de la siguiente manera:

. . .

Hagamos un ejemplo rápido para comprender mejor TF-IDF. Supongamos una pequeña base de conocimientos que contiene tres películas con las siguientes descripciones:

“Un thriller de ciencia ficción sobre viajes en el tiempo y una peligrosa aventura a través de realidades alternativas”. “Un drama romántico sobre dos extraños que se enamoran durante un viaje inesperado en el tiempo”. “Una aventura de ciencia ficción protagonizada por un explorador extraterrestre obligado a viajar a través de galaxias”.

Después de eliminar las palabras vacías, podemos considerar los siguientes términos en cada documento:

documento 1: ciencia ficción, suspense, tiempo, viajes, peligros, aventuras, alternativas, realidades tamaño del documento 1, |d1| = 8 documento 2: romántico, drama, dos, extraños, caída, amor, inesperado, tiempo, viaje tamaño del documento 2, |d2| = 9 documento 3: ciencia ficción, aventura, presentación, extraterrestre, explorador, forzado, viaje, galaxias tamaño del documento 3, |d3| = 8 documentos en total en la base de conocimientos N = 3

Luego podemos calcular el f(t,d) para cada término en cada documento:

A continuación, para cada documento, también calculamos la Frecuencia del documento y la Frecuencia del documento inversa:

Y finalmente calculamos la puntuación TF-IDF de cada término.

Entonces, ¿qué obtenemos de esto? Echemos un vistazo, por ejemplo, a las puntuaciones TF-IDF del documento 1. La palabra “viajar” no es informativa en absoluto, ya que está incluida en todos los documentos de la base de conocimientos. Por otro lado, palabras como ‘thriller’ y ‘peligroso’ son muy informativas, específicamente para el documento 1, ya que solo se incluyen en él.

De esta manera, la puntuación TF-IDF proporciona una forma sencilla y directa de identificar y cuantificar la importancia de los términos en cada documento de una base de conocimientos. Para decirlo de otra manera, cuanto mayor sea la puntuación total de los términos de un documento, más rara será la información de este documento en comparación con la información contenida en todos los demás documentos de la base de conocimientos.

. . .

Comprender la puntuación BM25

En BM25, utilizamos el concepto TF-IDF para cuantificar qué tan informativo (qué tan raro o importante) es cada documento en una base de conocimiento, con respecto a una consulta específica. Para ello, para el cálculo de BM25, solo tomamos en cuenta los términos de cada documento que están contenidos en la consulta del usuario, y realizamos un cálculo algo similar a TF-IF.

BM25 utiliza el concepto TF-IDF, pero con algunos ajustes matemáticos para mejorar dos debilidades principales de TF-IDF.

. . .

El primer problema de TF-IDF es que TF es lineal con el número de veces que aparece un término t en un documento d, f(t,d), como cualquier función de la forma:

Esto significa que cuantas más veces aparece un término t en un documento d, más crece linealmente TF, lo que, como se puede imaginar, puede ser problemático para documentos grandes, donde un término aparece una y otra vez sin ser necesariamente más importante.

Una forma sencilla de resolver esto es utilizar una curva de saturación en lugar de una función lineal. Esto significa que la producción aumenta con la entrada pero se acerca asintóticamente a un límite máximo, a diferencia de la función lineal, donde la salida aumenta con la entrada para siempre:

Por tanto, podemos intentar reescribir TF de esta forma de la siguiente manera, introduciendo un parámetro k1, que permite el control del escalado de frecuencia. De esta forma, el parámetro K1 permite introducir rendimientos decrecientes. Es decir, la primera aparición del término t en un documento tiene un gran impacto en la puntuación TF, mientras que la aparición número 20 sólo añade una pequeña ganancia adicional.

No obstante, esto daría como resultado valores en el rango de 0 a 1. Podemos modificar esto un poco más y agregar un (k1 + 1) en el nominador, de modo que los valores resultantes de TF sean comparables con la definición inicial de TF utilizada en TD-IDF.

. . .

Hasta ahora, todo bien, pero un dato crítico que aún falta en esta expresión es el tamaño del documento |d| que se incluyó en el cálculo inicial de TF. No obstante, antes de agregar el |d| A largo plazo, también necesitamos modificarlo un poco, ya que este es el segundo punto débil de la expresión TF-IDF inicial. Más específicamente, el problema es que una base de conocimientos contendrá documentos con longitudes variables |d|, lo que dará como resultado que decenas de términos diferentes no sean comparables. BM25 resuelve esto normalizando |d|. Es decir, en lugar de |d|, se utiliza la siguiente expresión:

donde avg(dl) es la longitud promedio de los documentos en la base de conocimientos. Además, b es un parámetro en [0,1] que controla la normalización de longitud, donde b = 0 corresponde a ninguna normalización y b = 1 corresponde a una normalización completa.

Entonces, agregando la expresión normalizada de |d|, podemos obtener la versión más sofisticada de TF utilizada en BM25. Este será el siguiente:

Normalmente, los valores de los parámetros utilizados son k₁ ≈ 1,2 a 2,0 y b ≈ 0,75.

. . .

BM52 también utiliza una expresión ligeramente modificada para el cálculo de la IDF, como sigue:

Esta expresión se obtiene haciendo una pregunta mejor. En el cálculo inicial de la FDI, preguntamos:

“¿Qué tan raro es el término?”

En cambio, cuando intentamos calcular el IDF para BM25, preguntamos:

“¿Cuánto más probable es este término en documentos relevantes que en documentos no relevantes?”

La probabilidad de que un documento contenga el término t, en una base de conocimiento de N documentos, se puede expresar como:

Luego podemos expresar las probabilidades de que un documento contenga un término t versus no lo contenga como:

Y luego haciendo lo inverso, terminamos con:

De manera similar al IDF típico, obtenemos el registro de esta expresión para comprimir los valores extremos. También se realiza una transformación exótica llamada suavizado de Robertson-Sparck Jones y de esta manera finalmente obtenemos la expresión IDF utilizada en BM25.

. . .

En última instancia, podemos calcular la puntuación BM25 para un documento específico d para una consulta dada q que contiene varios términos t.

De esta manera, podemos calificar los documentos disponibles en una base de conocimiento según su relevancia para una consulta específica y luego recuperar los documentos más relevantes.

Todo esto es sólo para decir que la puntuación BM52 es algo así como la puntuación TD-IDF, mucho más fácil de entender, pero un poco más sofisticada. Por lo tanto, BM52 es muy popular para realizar búsquedas de palabras clave y, en nuestro caso, también se utiliza para búsquedas de palabras clave en un sistema RAG.

RAG con búsqueda híbrida

Entonces, ahora que tenemos una idea sobre cómo funciona BM25 y cómo califica los diversos documentos en una base de conocimientos según la frecuencia de las palabras clave, podemos observar más a fondo cómo se incorporan las puntuaciones de BM25 en una canalización RAG tradicional.

Como mencioné en varias de mis publicaciones anteriores, una canalización RAG muy simple se vería así:

Una canalización de este tipo utiliza una puntuación de similitud (como la similitud de coseno) de incrustaciones para buscar, encontrar y recuperar fragmentos que sean semánticamente similares a la consulta del usuario. Si bien la búsqueda por similitud es muy útil, a veces puede omitir coincidencias exactas. Por lo tanto, al incorporar una búsqueda de palabras clave, además de la búsqueda de similitudes en el proceso RAG, podemos identificar fragmentos relevantes de manera más efectiva y completa. Esto alteraría nuestro panorama de la siguiente manera:

Para cada fragmento de texto, además de la incrustación, ahora también calculamos un índice BM25, lo que permite calcular rápidamente las puntuaciones BM25 respectivas en varias consultas de los usuarios. De esta manera, para cada consulta de usuario, podemos identificar los fragmentos con las puntuaciones BM25 más altas, es decir, los fragmentos que contienen los términos más raros e informativos con respecto a la consulta del usuario en comparación con todos los demás fragmentos de la base de conocimientos.

Observe cómo ahora relacionamos la consulta del usuario tanto con las incrustaciones en el almacén de vectores (búsqueda semántica) como con el índice BM25 (búsqueda de palabras clave). Se recuperan diferentes fragmentos en función de la búsqueda semántica y la búsqueda de palabras clave; luego, los fragmentos recuperados se combinan, se deduplican y se clasifican mediante la fusión de clasificación.

. . .

en mi mente

La integración de la búsqueda de palabras clave BM25 en una canalización RAG nos permite obtener lo mejor de ambos mundos: la comprensión semántica de las incrustaciones y la precisión de la concordancia exacta de palabras clave. Al combinar estos enfoques, podemos recuperar los fragmentos más relevantes incluso de una base de conocimiento más grande de manera más confiable, asegurando que no se pasen por alto términos críticos, frases técnicas o nombres. De esta manera, podemos mejorar significativamente la eficacia de nuestro proceso de recuperación y garantizar que no se omita ninguna información relevante importante.

¿Te encantó esta publicación? ¡Seamos amigos! Únase a mí en:

📰Substack 💌 Medio 💼LinkedIn ☕Cómprame un café