Reordenación
Milvus permite capacidades de búsqueda híbrida utilizando la API hybrid_search(), incorporando sofisticadas estrategias de reordenación para refinar los resultados de búsqueda de múltiples instancias de AnnSearchRequest
. Este tema cubre el proceso de reordenación, explicando su significado y la implementación de diferentes estrategias de reordenación en Milvus.
Visión general
La siguiente figura ilustra la ejecución de una búsqueda híbrida en Milvus y destaca el papel de la reordenación en el proceso.
La reordenación en la búsqueda híbrida es un paso crucial que consolida los resultados de varios campos vectoriales, garantizando que el resultado final sea relevante y esté correctamente priorizado. Actualmente, Milvus ofrece estas estrategias de reordenación:
WeightedRanker
: Este enfoque fusiona resultados calculando una media ponderada de puntuaciones (o distancias vectoriales) de diferentes búsquedas vectoriales. Asigna pesos en función de la importancia de cada campo vectorial.RRFRanker
: Esta estrategia combina los resultados en función de sus clasificaciones en diferentes columnas de vectores.
Puntuación ponderada (WeightedRanker)
La estrategia WeightedRanker
asigna diferentes pesos a los resultados de cada ruta de recuperación de vectores en función de la importancia de cada campo vectorial. Esta estrategia de reordenación se aplica cuando la importancia de cada campo vectorial varía, lo que permite destacar ciertos campos vectoriales sobre otros asignándoles pesos más altos. Por ejemplo, en una búsqueda multimodal, la descripción del texto podría considerarse más importante que la distribución del color en las imágenes.
El proceso básico de WeightedRanker es el siguiente:
Recopilar puntuaciones durante la recuperación: Recoge los resultados y sus puntuaciones de diferentes rutas de recuperación de vectores.
Normalización de puntuaciones: Normalizar las puntuaciones de cada ruta a un rango [0,1], donde los valores más cercanos a 1 indican mayor relevancia. Esta normalización es crucial debido a que las distribuciones de las puntuaciones varían según los distintos tipos de métricas. Por ejemplo, la distancia para IP oscila entre [-∞,+∞], mientras que la distancia para L2 oscila entre [0,+∞]. Milvus emplea la función
arctan
, transformando los valores al rango [0,1] para proporcionar una base estandarizada para los diferentes tipos de métrica.Asignación de pesos: Asigna un peso
w𝑖
a cada ruta de recuperación de vectores. Los usuarios especifican las ponderaciones, que reflejan la fiabilidad, precisión u otras métricas pertinentes de la fuente de datos. Cada peso oscila entre [0,1].Fusión de puntuaciones: Calcula una media ponderada de las puntuaciones normalizadas para obtener la puntuación final. A continuación, se ordenan los resultados en función de estas puntuaciones de mayor a menor para generar los resultados finales ordenados.
weighted-reranker
Para utilizar esta estrategia, aplique una instancia de WeightedRanker
y establezca los valores de ponderación pasando un número variable de argumentos numéricos.
from pymilvus import WeightedRanker
# Use WeightedRanker to combine results with specified weights
rerank = WeightedRanker(0.8, 0.8, 0.7)
Tenga en cuenta que:
Cada valor de peso va de 0 (menos importante) a 1 (más importante), influyendo en la puntuación final agregada.
El número total de valores de peso proporcionados en
WeightedRanker
debe ser igual al número de instancias deAnnSearchRequest
que haya creado anteriormente.Cabe señalar que, debido a las diferentes medidas de los distintos tipos de métricas, normalizamos las distancias de los resultados de recall para que se sitúen en el intervalo [0,1], donde 0 significa diferente y 1 similar. La puntuación final será la suma de los valores de ponderación y las distancias.
Fusión por rango recíproco (RRFRanker)
RRF es un método de fusión de datos que combina listas de clasificación basadas en la recíproca de sus rangos. Es una forma eficaz de equilibrar la influencia de cada campo vectorial, especialmente cuando no existe una clara precedencia de importancia. Esta estrategia se suele utilizar cuando se quiere dar la misma consideración a todos los campos vectoriales o cuando hay incertidumbre sobre la importancia relativa de cada campo.
El proceso básico de la RRF es el siguiente:
Recopilación de clasificaciones durante la recuperación: Los recuperadores de múltiples campos vectoriales recuperan y ordenan los resultados.
Fusión de rankings: El algoritmo RRF pondera y combina las clasificaciones de cada recuperador. La fórmula es la siguiente
rrf-ranker
Aquí, 𝑁 representa el número de rutas de recuperación diferentes, rank𝑖(𝑑) es la posición en el ranking del documento recuperado 𝑑 por el 𝑖º recuperador, y 𝑘 es un parámetro de suavizado, normalmente fijado en 60.
Clasificación exhaustiva: Reordena los resultados recuperados basándose en las puntuaciones combinadas para producir los resultados finales.
Para utilizar esta estrategia, aplique una instancia de RRFRanker
.
from pymilvus import RRFRanker
# Default k value is 60
ranker = RRFRanker()
# Or specify k value
ranker = RRFRanker(k=100)
RRF permite equilibrar la influencia entre campos sin especificar pesos explícitos. Las mejores coincidencias acordadas por varios campos tendrán prioridad en la clasificación final.