Búsqueda híbrida en Azure Cosmos DB for NoSQL (versión preliminar)
Azure Cosmos DB para NoSQL ahora admite una eficaz funcionalidad de búsqueda híbrida que combina vectores de búsqueda con la puntuación de búsqueda de texto completo (BM25) mediante la función De fusión de clasificación recíproca (RRF).
Nota:
El texto completo y la búsqueda híbrida se encuentra en versión preliminar temprana y es posible que no esté disponible en todas las regiones en este momento.
¿Qué es la búsqueda híbrida?
La búsqueda híbrida aprovecha los puntos fuertes de los métodos de búsqueda basados en vectores y tradicionales basados en palabras clave para ofrecer resultados de búsqueda más relevantes y precisos. La búsqueda híbrida es fácil de realizar en Azure Cosmos DB for NoSQL debido a la capacidad de almacenar metadatos y vectores en el mismo documento.
La búsqueda híbrida en Azure Cosmos DB for NoSQL integra dos metodologías de búsqueda distintas:
- Búsqueda vectorial: utiliza modelos de aprendizaje automático para comprender el significado semántico de las consultas y documentos. Esto permite obtener resultados de búsqueda más matizados y contextuales, especialmente útiles para consultas complejas en las que la búsqueda de palabras clave tradicional podría ser corta.
- Búsqueda de texto completo (BM25): un algoritmo bien establecido que puntúa documentos en función de la presencia y frecuencia de palabras y términos. BM25 es especialmente eficaz para las búsquedas de palabras clave sencillas, lo que proporciona una línea base sólida para la relevancia de la búsqueda.
Los resultados de vectores de búsqueda y la búsqueda de texto completo se combinan mediante la función de fusión de clasificación recíproca (RRF). RRF es un método de agregación de clasificación que combina las clasificaciones de varios algoritmos de búsqueda para generar una única clasificación unificada. Esto garantiza que los resultados finales de la búsqueda se beneficien de los puntos fuertes de ambos enfoques de búsqueda y ofrezca varias ventajas.
- Relevancia mejorada: al combinar la comprensión semántica con coincidencia de palabras clave, la búsqueda híbrida ofrece resultados más relevantes para una amplia gama de consultas.
- Precisión mejorada: la función RRF garantiza que se priorizan los resultados más pertinentes de ambos métodos de búsqueda.
- Versatilidad: adecuado para varios casos de uso, como Recuperación de generación aumentada (RAG) para mejorar las respuestas generadas por un LLM basado en sus propios datos.
Uso de la búsqueda híbrida
- Habilite los Vectores de búsqueda en Azure Cosmos DB for NoSQL.
- Habilite el Texto completo y la búsqueda híbrida para la característica de vista previa de NoSQL.
- Cree un contenedor con una directiva de vectores, una directiva de texto completo, un índice de vectores y un índice de texto completo.
- Inserte los datos con propiedades de texto y vector.
- Ejecute consultas híbridas en los datos.
Configuración de directivas e índices para la búsqueda híbrida
Importante
Actualmente, las directivas de vectores y los índices vectoriales son inmutables después de la creación. Para realizar cambios, cree una nueva colección.
Una directiva de vector de ejemplo
{
"vectorEmbeddings": [
{
"path":"/vector",
"dataType":"float32",
"distanceFunction":"cosine",
"dimensions":3
},
}
Una directiva de texto completo de ejemplo
{
"defaultLanguage": "en-US",
"fullTextPaths": [
{
"path": "/text",
"language": "en-US"
}
]
}
Una directiva de indexación de ejemplo con índices de texto completo y vectores
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/\"_etag\"/?"
},
{
"path": "/vector/*"
}
],
"fullTextIndexes": [
{
"path": "/text"
}
],
"vectorIndexes": [
{
"path": "/vector",
"type": "DiskANN"
}
]
}
Consultas de búsqueda híbrida
Las consultas de búsqueda híbrida se pueden ejecutar aprovechando la función del sistema de RRF
en una cláusula ORDER BY RANK
que incluye una función de VectorDistance
y FullTextScore
. Por ejemplo, una consulta parametrizada para encontrar los k resultados más relevantes tendría este aspecto:
SELECT TOP @k *
FROM c
ORDER BY RANK RRF(VectorDistance(c.vector, @queryVector), FullTextScore(c.content, [@searchTerm1, @searchTerm2, ...]))
Supongamos que tiene un documento que tiene incrustaciones vectoriales almacenadas en cada documento de los datos de propiedad c.vector
y texto contenidos en la propiedad c.text. Para obtener los 10 documentos más relevantes mediante la búsqueda híbrida, la consulta se puede escribir como:
SELECT TOP 10 *
FROM c
ORDER BY RANK RRF(VectorDistance(c.vector, [1,2,3]), FullTextScore(c.text, ["text", "to", "search", "goes" ,"here])