Nueva clasificación
La búsqueda híbrida consigue resultados más precisos mediante múltiples búsquedas simultáneas de RNA. Las búsquedas múltiples devuelven varios conjuntos de resultados, que requieren una estrategia de reordenación para ayudar a combinar y reordenar los resultados y devolver un único conjunto de resultados. En esta guía se presentan las estrategias de reordenación compatibles con Milvus y se ofrecen consejos para seleccionar la estrategia de reordenación adecuada.
Visión general
El siguiente diagrama muestra el flujo de trabajo principal de una búsqueda híbrida en una aplicación de búsqueda multimodal. En el diagrama, una ruta es la búsqueda RNA básica en textos y la otra es la búsqueda RNA básica en imágenes. Cada ruta genera un conjunto de resultados basados en la puntuación de similitud del texto y la imagen respectivamente(Límite 1 y Límite 2). A continuación, se aplica una estrategia de reordenación para reordenar los dos conjuntos de resultados en función de una norma unificada y, por último, fusionar los dos conjuntos de resultados en un conjunto final de resultados de búsqueda, Limit(final).
Reranking multivectorial
En la búsqueda híbrida, el reordenamiento es un paso crucial que integra los resultados de múltiples búsquedas vectoriales para garantizar que el resultado final sea el más relevante y preciso. Actualmente, Milvus admite las dos estrategias de reordenación siguientes:
WeightedRanker: Esta estrategia fusiona los resultados calculando una puntuación ponderada de puntuaciones (o distancias) de diferentes búsquedas vectoriales. Las ponderaciones se asignan en función de la importancia de cada campo vectorial, lo que permite personalizarlas según las prioridades específicas de cada caso de uso.
RRFRanker (Reciprocal Rank Fusion Ranker): Esta estrategia combina los resultados basándose en la clasificación. Utiliza un método que equilibra los rangos de los resultados de diferentes búsquedas, lo que a menudo conduce a una integración más justa y eficaz de diversos tipos o modalidades de datos.
WeightedRanker
La estrategia WeightedRanker asigna diferentes pesos a los resultados de cada ruta de búsqueda vectorial en función de su importancia.
Mecanismo de WeightedRanker
El flujo de trabajo principal de la estrategia WeightedRanker es el siguiente:
Recopilar puntuaciones de búsqueda: Recopila los resultados y puntuaciones de cada ruta de búsqueda vectorial (puntuación_1, puntuación_2).
Normalización de puntuaciones: Cada búsqueda puede utilizar diferentes métricas de similitud, lo que resulta en distribuciones de puntuación variadas. Por ejemplo, si se utiliza el producto interior (PI) como tipo de similitud, las puntuaciones pueden oscilar entre [-∞,+∞], mientras que si se utiliza la distancia euclídea (L2), las puntuaciones oscilan entre [0,+∞]. Dado que los rangos de puntuación de las distintas búsquedas varían y no pueden compararse directamente, es necesario normalizar las puntuaciones de cada ruta de búsqueda. Normalmente, se aplica la función
arctanpara transformar las puntuaciones en un rango entre [0, 1] (puntuación_1_normalizada, puntuación_2_normalizada). Las puntuaciones más cercanas a 1 indican una mayor similitud.Asignar pesos: En función de la importancia asignada a los distintos campos vectoriales, se asignan pesos(wi) a las puntuaciones normalizadas (puntuación_1_normalizada, puntuación_2_normalizada). Los pesos de cada ruta deben oscilar entre [0,1]. Las puntuaciones ponderadas resultantes son puntuación_1_ponderada y puntuación_2_ponderada.
Fusionar puntuaciones: Las puntuaciones ponderadas (puntuación_1_ponderada, puntuación_2_ponderada) se ordenan de mayor a menor para producir un conjunto final de puntuaciones (puntuación_final).
Reranker ponderado
Ejemplo de WeightedRanker
Este ejemplo muestra una búsqueda híbrida multimodal (topK=5) que incluye imágenes y texto e ilustra cómo la estrategia WeightedRanker reordena los resultados de dos búsquedas RNA.
- Resultados de la búsqueda RNA en imágenes (topK=5):
ID |
Puntuación (imagen) |
|---|---|
101 |
0.92 |
203 |
0.88 |
150 |
0.85 |
198 |
0.83 |
175 |
0.8 |
- Resultados de la búsqueda RNA en los textos (topK=5):
ID |
Puntuación (texto) |
|---|---|
198 |
0.91 |
101 |
0.87 |
110 |
0.85 |
175 |
0.82 |
250 |
0.78 |
- Utilice WeightedRanker para asignar ponderaciones a los resultados de la búsqueda de imágenes y de texto. Supongamos que la ponderación para la búsqueda RNA de imagen es 0,6 y la ponderación para la búsqueda de texto es 0,4.
ID |
Puntuación (imagen) |
Puntuación (texto) |
Puntuación ponderada |
|---|---|---|---|
101 |
0.92 |
0.87 |
0.6×0.92+0.4×0.87=0.90 |
203 |
0.88 |
0,88 |
0.6×0.88+0.4×0=0.528 |
150 |
0.85 |
N/A |
0.6×0.85+0.4×0=0.51 |
198 |
0.83 |
0.91 |
0.6×0.83+0.4×0.91=0.86 |
175 |
0.80 |
0.82 |
0.6×0.80+0.4×0.82=0.81 |
110 |
No en la imagen |
0.85 |
0.6×0+0.4×0.85=0.34 |
250 |
No en la imagen |
0.78 |
0.6×0+0.4×0.78=0.312 |
- Los resultados finales después de reranking(topK=5):
Clasificación |
ID |
Puntuación final |
|---|---|---|
1 |
101 |
0.90 |
2 |
198 |
0.86 |
3 |
175 |
0.81 |
4 |
203 |
0.528 |
5 |
150 |
0.51 |
Uso de WeightedRanker
Cuando se utiliza la estrategia WeightedRanker, es necesario introducir valores de ponderación. El número de valores de ponderación a introducir debe corresponder al número de peticiones de búsqueda de RNA básicas en la búsqueda híbrida. Los valores de ponderación deben estar comprendidos en el intervalo [0,1], y los valores más próximos a 1 indican mayor importancia.
Por ejemplo, supongamos que en una búsqueda híbrida hay dos peticiones básicas de búsqueda RNA: búsqueda de texto y búsqueda de imágenes. Si la búsqueda de texto se considera más importante, se le asignará un peso mayor.
from pymilvus import WeightedRanker
rerank= WeightedRanker(0.8, 0.3)
import io.milvus.v2.service.vector.request.ranker.WeightedRanker;
WeightedRanker rerank = new WeightedRanker(Arrays.asList(0.8f, 0.3f))
import "github.com/milvus-io/milvus/client/v2/milvusclient"
reranker := milvusclient.NewWeightedReranker([]float64{0.8, 0.3})
rerank: WeightedRanker(0.8, 0.3)
export rerank='{
"strategy": "ws",
"params": {"weights": [0.8,0.3]}
}'
RRFRanker
Reciprocal Rank Fusion (RRF) es un método de fusión de datos que combina listas clasificadas basándose en la recíproca de sus clasificaciones. Esta estrategia de reordenación equilibra eficazmente la importancia de cada ruta de búsqueda vectorial.
Mecanismo de RRFRanker
El flujo de trabajo principal de la estrategia RRFRanker es el siguiente:
Recopilación de clasificaciones de búsqueda: Recopila las clasificaciones de los resultados de cada ruta de búsqueda vectorial (rank_1, rank_2).
Combinar clasificaciones: Convertir los rankings de cada camino (rank_rrf_1, rank_rrf_2) según una fórmula .
En la fórmula de cálculo interviene N, que representa el número de recuperaciones. ranki(d) es la posición en la clasificación del documento d generada por el recuperador i(th). k es un parámetro de suavizado que suele fijarse en 60.
Clasificación agregada: Vuelve a clasificar los resultados de la búsqueda basándose en las clasificaciones combinadas para producir los resultados finales.
RRF Reranker
Ejemplo de RRFRanker
Este ejemplo muestra una búsqueda híbrida (topK=5) en vectores dispersos y densos e ilustra cómo la estrategia RRFRanker vuelve a clasificar los resultados de dos búsquedas RNA.
- Resultados de la búsqueda RNA en vectores dispersos de textos (topK=5):
ID |
Rango (disperso) |
|---|---|
101 |
1 |
203 |
2 |
150 |
3 |
198 |
4 |
175 |
5 |
- Resultados de la búsqueda RNA en vectores densos de textos (topK=5):
ID |
Rango (denso) |
|---|---|
198 |
1 |
101 |
2 |
110 |
3 |
175 |
4 |
250 |
5 |
- Utilice RRF para reordenar las clasificaciones de los dos conjuntos de resultados de búsqueda. Suponga que el parámetro de suavizado
kestá fijado en 60.
ID |
Puntuación (dispersa) |
Puntuación (densa) |
Puntuación final |
|---|---|---|---|
101 |
1 |
2 |
1/(60+1)+1/(60+2) = 0.01639 |
198 |
4 |
1 |
1/(60+4)+1/(60+1) = 0.01593 |
175 |
5 |
4 |
1/(60+5)+1/(60+4) = 0.01554 |
203 |
2 |
N/A |
1/(60+2) = 0.01613 |
150 |
3 |
N/A |
1/(60+3) = 0.01587 |
110 |
N/A |
3 |
1/(60+3) = 0.01587 |
250 |
N/A |
5 |
1/(60+5) = 0.01554 |
- Los resultados finales tras la reordenación(topK=5):
Clasificación |
ID |
Puntuación final |
|---|---|---|
1 |
101 |
0.01639 |
2 |
203 |
0.01613 |
3 |
198 |
0.01593 |
4 |
150 |
0.01587 |
5 |
110 |
0.01587 |
Uso de RRFRanker
Cuando se utiliza la estrategia RRF reranking, es necesario configurar el parámetro k. Se trata de un parámetro de suavizado que puede alterar eficazmente los pesos relativos de la búsqueda de texto completo frente a la búsqueda vectorial. El valor por defecto de este parámetro es 60, y puede ajustarse dentro de un rango de (0, 16384). El valor debe ser un número de coma flotante. El valor recomendado está entre [10, 100]. Aunque k=60 es una opción habitual, el valor óptimo de k puede variar en función de sus aplicaciones y conjuntos de datos específicos. Recomendamos probar y ajustar este parámetro en función de su caso de uso específico para lograr el mejor rendimiento.
from pymilvus import RRFRanker
ranker = RRFRanker(100)
import io.milvus.v2.service.vector.request.ranker.RRFRanker;
RRFRanker ranker = new RRFRanker(100);
reranker := milvusclient.NewRRFReranker().WithK(100)
rerank: RRFRanker("100")
"rerank": {
"strategy": "rrf",
"params": {
"k": 100
}
}
export rerank='{
"strategy": "rrf",
"params": {"k": 100}
}'
Seleccionar la estrategia de reordenación adecuada
A la hora de elegir una estrategia de reranking, hay que tener en cuenta si se hace hincapié en una o varias búsquedas básicas de RNA en los campos vectoriales.
WeightedRanker: Esta estrategia se recomienda si necesita que los resultados hagan hincapié en un campo vectorial concreto. El WeightedRanker permite asignar pesos más altos a determinados campos vectoriales, enfatizándolos más. Por ejemplo, en las búsquedas multimodales, las descripciones textuales de una imagen podrían considerarse más importantes que los colores de esta imagen.
RRFRanker (Reciprocal Rank Fusion Ranker): Esta estrategia se recomienda cuando no hay un énfasis específico. El RRF puede equilibrar eficazmente la importancia de cada campo vectorial.