Al construir pipelines de RAG, descubrirás rápidamente que la búsqueda semántica por sí sola no siempre devuelve los mejores resultados. A veces necesitas coincidencias exactas de términos que la búsqueda semántica podría pasar por alto. La solución es combinar la búsqueda semántica con la búsqueda léxica usando una técnica llamada BM25.
El problema con la búsqueda semántica por sí sola
Supongamos que estás buscando un ID de incidente específico como "INC-2023-Q4-011" en un documento. Si bien la búsqueda semántica destaca en comprender el contexto y el significado, podría devolver secciones que están semánticamente relacionadas pero que en realidad no contienen el término exacto que estás buscando.

En el ejemplo anterior, la búsqueda semántica devolvió la sección de ciberseguridad (que sí contiene el ID del incidente) pero también devolvió una sección de análisis financiero que no menciona el incidente en absoluto. Esto sucede porque la búsqueda semántica se enfoca en la similitud conceptual en lugar de la coincidencia exacta de términos.
Estrategia de búsqueda híbrida
La solución es ejecutar tanto la búsqueda semántica como la léxica en paralelo, y luego combinar los resultados. Esto te da lo mejor de ambos mundos:

- La búsqueda semántica encuentra contenido conceptualmente relacionado usando embeddings
- La búsqueda léxica encuentra coincidencias exactas de términos usando búsqueda de texto clásica
- Los resultados combinados unen ambos enfoques para lograr mayor precisión
Cómo funciona BM25
BM25 (Best Match 25) es un algoritmo popular para la búsqueda léxica en sistemas RAG. Así es como procesa una consulta de búsqueda:

Paso 1: Tokenizar la consulta Divide la pregunta del usuario en términos individuales. Por ejemplo, "a INC-2023-Q4-011" se convierte en ["a", "INC-2023-Q4-011"].
Paso 2: Contar la frecuencia de términos Observa con qué frecuencia aparece cada término en todos tus documentos. Palabras comunes como "a" podrían aparecer 5 veces, mientras que términos específicos como "INC-2023-Q4-011" podrían aparecer solo una vez.
Paso 3: Ponderar los términos por importancia Los términos que aparecen con menos frecuencia obtienen puntuaciones de importancia más altas. La palabra "a" obtiene baja importancia porque es común, mientras que "INC-2023-Q4-011" obtiene alta importancia porque es rara.
Paso 4: Encontrar las mejores coincidencias Devuelve documentos que contienen más instancias de los términos con mayor ponderación.
Implementando la búsqueda BM25
Así es como se configura un sistema básico de búsqueda BM25:
# 1. Divide tu texto por secciones
chunks = chunk_by_section(text)
# 2. Crea un almacén BM25 y agrega documentos
store = BM25Index()
for chunk in chunks:
store.add_document({"content": chunk})
# 3. Busca en el almacén
results = store.search("What happened with INC-2023-Q4-011?", 3)
# Imprimir resultados
for doc, distance in results:
print(distance, "\n", doc["content"][:200], "\n----\n")Cuando ejecutes esta búsqueda, obtendrás resultados mucho mejores que con la búsqueda semántica por sí sola. El algoritmo BM25 prioriza las secciones que realmente contienen tus términos de búsqueda específicos, especialmente términos raros como los IDs de incidentes.

Observa cómo los resultados ahora priorizan correctamente la sección de Ingeniería de Software y la sección de Ciberseguridad, ambas de las cuales realmente contienen el ID del incidente que estás buscando.
Por qué esto funciona mejor
BM25 destaca en encontrar coincidencias exactas porque:
- Da mayor peso a términos raros y específicos
- Ignora palabras comunes que no añaden valor a la búsqueda
- Se enfoca en la frecuencia de términos en lugar del significado semántico
- Funciona especialmente bien para términos técnicos, IDs y frases específicas
La idea clave es que ambos métodos de búsqueda tienen fortalezas complementarias. La búsqueda semántica comprende el contexto y el significado, mientras que la búsqueda léxica garantiza que no te pierdas coincidencias exactas de términos. Al combinarlos, creas un sistema de búsqueda más robusto que maneja eficazmente tanto las consultas conceptuales como las búsquedas específicas.
En el siguiente paso, aprenderás cómo combinar los resultados de ambos sistemas de búsqueda para crear una experiencia de búsqueda híbrida unificada.