Puntuación por relevancia en la búsqueda híbrida mediante la fusión de clasificación recíproco (RRF)
La fusión de clasificación recíproca (RRF) es un algoritmo que evalúa las puntuaciones de búsqueda de varios resultados clasificados previamente para generar un conjunto de resultados unificado. En Azure AI Search, RRF se usa cada vez que hay dos o más consultas que se ejecutan en paralelo. Cada consulta genera un conjunto de resultados clasificado y RRF se usa para combinar y homogenizar las clasificaciones en un único conjunto de resultados, devuelto en la respuesta de la consulta. Algunos ejemplos de escenarios en los que RRF siempre se usa incluyen la búsqueda híbrida y varias consultas vectoriales que se ejecutan simultáneamente.
RRF se basa en el concepto de clasificación recíproca, que es el inverso de la clasificación del primer documento pertinente en una lista de resultados de búsqueda. El objetivo de la técnica es tener en cuenta la posición de los artículos en las clasificaciones originales y dar mayor importancia a los elementos mejor clasificados en varias listas. Esto puede ayudar a mejorar la calidad general y la fiabilidad de la clasificación final, haciéndola más útil para la tarea de fusionar múltiples resultados de búsqueda ordenados.
Nota:
Una novedad de 2024-09-01-preview es la capacidad de descomponer una puntuación de búsqueda clasificada por RRF en las subpuntuaciones que la componen. Esto le da transparencia en la composición de la puntuación total. Para obtener más información, consulte descomprimir resultados de búsqueda (versión preliminar) en este artículo.
Funcionamiento de la clasificación de RRF
La RRF funciona tomando los resultados de búsqueda de varios métodos, asignando una puntuación de rango recíproca a cada documento de los resultados y combinando después las puntuaciones para crear una nueva clasificación. El concepto es que los documentos que aparecen en las primeras posiciones a través de múltiples métodos de búsqueda tienen más probabilidades de ser más relevantes y deben clasificarse más arriba en el resultado combinado.
Esta es una explicación sencilla del proceso de RRF:
Obtenga resultados de búsqueda clasificados a partir de múltiples consultas ejecutadas en paralelo.
Asigne puntuaciones de clasificación recíprocas para el resultado en cada una de las listas clasificadas. La RRF genera un nuevo
@search.score
para cada coincidencia en cada conjunto de resultados. A cada documento de los resultados de la búsqueda, el motor le asigna una puntuación de rango recíproco en función de su posición en la lista. La puntuación se calcula como1/(rank + k)
, donderank
es la posición del documento en la lista yk
es una constante, que se observó experimentalmente para que funcione mejor si se establece en un valor pequeño como 60. Tenga en cuenta que este valork
es una constante en el algoritmo RRF y se separa completamente del valork
que controla el número de vecinos más cercanos.Combine las puntuaciones. Para cada documento, el motor suma las puntuaciones de rango recíprocas obtenidas de cada sistema de búsqueda, produciendo una puntuación combinada para cada documento.
El motor clasifica los documentos en función de las puntuaciones combinadas y los ordena. La lista resultante es la clasificación fusionada.
Solo se usan campos marcados como searchable
en el índice o searchFields
en la consulta para la puntuación. Solo los campos marcados como retrievable
, o especificados en select
la consulta, se devuelven en los resultados de búsqueda, junto con su puntuación de búsqueda.
Ejecución de consultas en paralelo
RRF se usa cada vez que hay más de una ejecución de consulta. Los siguientes ejemplos ilustran modelos de consulta en los que se produce una ejecución paralela de la consulta:
- Una consulta de texto completo, más una consulta vectorial (escenario híbrido simple), equivale a dos ejecuciones de consulta.
- Una consulta de texto completo, más una consulta vectorial dirigida a dos campos vectoriales, equivale a tres ejecuciones de consulta.
- Una consulta de texto completo, más dos consultas vectoriales dirigidas a cinco campos vectoriales, equivale a 11 ejecuciones de consulta.
Puntuaciones en resultados de búsqueda híbrida
Cada vez que se clasifican los resultados, la propiedad @search.score
contiene el valor usado para ordenar los resultados. Las puntuaciones se generan mediante algoritmos de clasificación que varían para cada método. Cada algoritmo tiene su propio rango y magnitud.
El siguiente cuadro identifica la propiedad de puntuación devuelta en cada coincidencia, algoritmo y rango de puntuaciones para cada algoritmo de clasificación de relevancia.
Método de búsqueda | Parámetro | Algoritmo de puntuación | Range |
---|---|---|---|
búsqueda de texto completo | @search.score |
Algoritmo BM25 | No hay límite superior. |
vector de búsqueda | @search.score |
Algoritmo HNSW, mediante la métrica de similitud especificada en la configuración de HNSW. | 0,333 - 1,00 (coseno), 0 a 1 para euclídeo y producto escalar. |
búsqueda híbrida | @search.score |
Algoritmo RRF | El límite superior está delimitado por el número de consultas que se fusionan, y cada consulta contribuye con un máximo de aproximadamente 1 a la puntuación RRF. Por ejemplo, la fusión de tres consultas produciría puntuaciones RRF más altas que si solo se fusionan dos resultados de búsqueda. |
clasificación semántica | @search.rerankerScore |
Clasificación semántica | 0,00 - 4,00 |
La clasificación semántica se produce después de la combinación de RRF de los resultados. Su puntuación (@search.rerankerScore
) siempre se notifica por separado en la respuesta de la consulta. El clasificador semántico puede volver a generar texto completo y resultados de búsqueda híbrida, suponiendo que esos resultados incluyan campos que tengan contenido semánticamente enriquecido. Puede volver a generar consultas vectoriales puras si los documentos de búsqueda incluyen campos de texto que contienen contenido semánticamente relevante.
Descomprimir una puntuación de búsqueda en subpuntuaciones (versión preliminar)
Con 2024-09-01-preview, puede descomponer una puntuación de búsqueda para ver sus subpuntuaciones.
En el caso de las consultas vectoriales, esta información puede ayudarle a determinar un valor adecuado para la ponderación vectorial o el establecimiento de umbrales mínimos.
Para obtener subpuntuaciones:
Use la versión preliminar más reciente de la API de REST de documentos de búsqueda o un paquete beta de Azure SDK que proporcione la característica.
Modifique una solicitud de consulta, agregue un nuevo parámetro
debug
establecido envector
,semantic
si usa el clasificador semántico oall
.
Este es un ejemplo de consulta híbrida que devuelve subpuntuaciones en modo de depuración:
POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2024-09-01=preview
{
"vectorQueries": [
{
"vector": [
-0.009154141,
0.018708462,
. . .
-0.02178128,
-0.00086512347
],
"fields": "DescriptionVector",
"kind": "vector",
"exhaustive": true,
"k": 10
},
{
"vector": [
-0.009154141,
0.018708462,
. . .
-0.02178128,
-0.00086512347
],
"fields": "DescriptionVector",
"kind": "vector",
"exhaustive": true,
"k": 10
}
],
"search": "historic hotel walk to restaurants and shopping",
"select": "HotelName, Description, Address/City",
"debug": "vector",
"top": 10
}
Puntuaciones ponderadas
Con 2024-07-01 y versiones preliminares más recientes de la API puede ponderar consultas vectoriales para aumentar o reducir su importancia en una consulta híbrida.
Recuerde que, al calcular la RRF de un determinado documento, el motor de búsqueda examina la clasificación de dicho documento en cada conjunto de resultados en el que aparece. Supongamos que un documento aparece en tres resultados de búsqueda independientes y los resultados proceden de dos consultas vectoriales y una consulta de texto de clasificación BM25. La posición del documento varía en cada resultado.
Se encontró una coincidencia | Posición en los resultados | @search.score | Multiplicador de ponderación | @search.score (ponderado) |
---|---|---|---|---|
resultados vectoriales uno | posición 1 | 0,8383955 | 0.5 | 0,41919775 |
resultados vectoriales dos | posición 5 | 0,81514114 | 2.0 | 1,63028228 |
Resultados de BM25 | posición 10 | 0,8577363 | N/D | 0,8577363 |
La posición del documento en cada conjunto de resultados se corresponde con una puntuación inicial, que se agrega para crear la puntuación final de la RRF para ese documento.
Si agrega la ponderación vectorial, las puntuaciones iniciales están sujetas a un multiplicador de ponderación que aumenta o disminuye la puntuación. El valor predeterminado es 1,0, que significa que no hay ponderación y la puntuación inicial se usa tal cual en la puntuación de la RRF. Sin embargo, si agrega una ponderación de 0,5, la puntuación se reduce y ese resultado es menos importante en la clasificación combinada. Por el contrario, si agrega una ponderación de 2,0, la puntuación se convierte en un factor mayor en la puntuación general de la RRF.
En este ejemplo, los valores de @search.score (ponderados) se pasan al modelo de clasificación de la RRF.
Número de resultados clasificados en una respuesta de consulta híbrida
De manera predeterminada, si no utiliza la paginación, el motor de búsqueda devuelve las 50 coincidencias mejor clasificadas para la búsqueda de texto completo, y las k
coincidencias más similares para el vector de búsqueda. En una consulta híbrida, top
determina el número de resultados en la respuesta. Basándose en los valores predeterminados, se devuelven las 50 coincidencias mejor clasificadas del conjunto de resultados unificado.
A menudo, el motor de búsqueda encuentra más resultados que top
y k
. Para devolver más resultados, use los parámetros de paginación top
, skip
y next
. La paginación es la forma de determinar el número de resultados en cada página lógica y de navegar por toda la carga útil. Puede establecer maxTextRecallSize
en valores más grandes (el valor predeterminado es 1000) para devolver más resultados del lado de texto de la consulta híbrida.
De manera predeterminada, la búsqueda de texto completo está sujeta a un límite máximo de 1000 coincidencias (consulte Límites de respuesta de API). Una vez encontradas 1000 coincidencias, el motor de búsqueda deja de buscar más.
Para más información, consulte el artículo sobre el trabajo con los resultados de la búsqueda.
Diagrama de un flujo de trabajo de puntuación de búsqueda
El diagrama siguiente ilustra una consulta híbrida que invoca la búsqueda por palabras clave y por vectores, con potenciación mediante perfiles de puntuación y clasificación semántica.
Una consulta que genera el flujo de trabajo anterior podría tener este aspecto:
POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2024-07-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
"queryType":"semantic",
"search":"hello world",
"searchFields":"field_a, field_b",
"vectorQueries": [
{
"kind":"vector",
"vector": [1.0, 2.0, 3.0],
"fields": "field_c, field_d"
},
{
"kind":"vector",
"vector": [4.0, 5.0, 6.0],
"fields": "field_d, field_e"
}
],
"scoringProfile":"my_scoring_profile"
}