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.

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:

  1. Obtenga resultados de búsqueda clasificados a partir de múltiples consultas ejecutadas en paralelo.

  2. 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 como 1/(rank + k), donde rank es la posición del documento en la lista y k 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 valor k es una constante en el algoritmo RRF y se separa completamente del valor k que controla el número de vecinos más cercanos.

  3. 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. 

  4. 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 no participa en RRF. Su puntuación (@search.rerankerScore) siempre se notifica por separado en la respuesta de la consulta. La clasificación semántica puede volver a clasificar los resultados de búsqueda de texto completo e híbridos, suponiendo que esos resultados incluyan campos con contenido semánticamente rico.

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.

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.

Diagram of prefilters.

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=2023-11-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"
}

Consulte también