Pontuação de relevância na pesquisa híbrida usando Reciprocal Rank Fusion (RRF)

Reciprocal Rank Fusion (RRF) é um algoritmo que avalia as pontuações de pesquisa a partir de vários resultados previamente classificados para produzir um conjunto de resultados unificado. No Azure AI Search, o RRF é usado sempre que há duas ou mais consultas que são executadas em paralelo. Cada consulta produz um conjunto de resultados classificados, e o RRF é usado para mesclar e homogeneizar as classificações em um único conjunto de resultados, retornado na resposta da consulta. Exemplos de cenários em que o RRF é sempre usado incluem pesquisa híbrida e várias consultas vetoriais executadas simultaneamente.

O RRF baseia-se no conceito de classificação recíproca, que é o inverso da classificação do primeiro documento relevante numa lista de resultados de pesquisa. O objetivo da técnica é levar em conta a posição dos itens nos rankings originais, e dar maior importância aos itens que são classificados mais alto em várias listas. Isso pode ajudar a melhorar a qualidade geral e a confiabilidade da classificação final, tornando-a mais útil para a tarefa de fundir vários resultados de pesquisa ordenados.

Como funciona o ranking RRF

O RRF funciona pegando os resultados da pesquisa de vários métodos, atribuindo uma pontuação de classificação recíproca a cada documento nos resultados e, em seguida, combinando as pontuações para criar uma nova classificação. O conceito é que os documentos que aparecem nas primeiras posições em vários métodos de pesquisa provavelmente serão mais relevantes e devem ser classificados mais alto no resultado combinado.

Aqui está uma explicação simples do processo RRF:

  1. Obtenha resultados de pesquisa classificados a partir de várias consultas executadas em paralelo.

  2. Atribua pontuações de classificação recíprocas para o resultado em cada uma das listas classificadas. O RRF gera um novo @search.score para cada partida em cada conjunto de resultados. Para cada documento nos resultados da pesquisa, o mecanismo atribui uma pontuação de classificação recíproca com base em sua posição na lista. A pontuação é calculada como , onde rank está a posição do documento na lista, e k é uma constante, que foi observada experimentalmente para ter o melhor desempenho se for definida para um valor pequeno como 1/(rank + k)60. Observe que esse k valor é uma constante no algoritmo RRF e totalmente separado do que controla k o número de vizinhos mais próximos.

  3. Combine pontuações. Para cada documento, o mecanismo soma as pontuações de classificação recíprocas obtidas em cada sistema de pesquisa, produzindo uma pontuação combinada para cada documento. 

  4. O mecanismo classifica os documentos com base em pontuações combinadas e os classifica. A lista resultante é a classificação fundida.

Somente os campos marcados como searchable no índice ou searchFields na consulta são usados para pontuação. Somente os campos marcados como retrievable, ou os campos especificados na select consulta, são retornados nos resultados da pesquisa, juntamente com sua pontuação de pesquisa.

Execução paralela de consultas

O RRF é usado sempre que há mais de uma execução de consulta. Os exemplos a seguir ilustram padrões de consulta onde ocorre a execução de consultas paralelas:

  • Uma consulta de texto completo, mais uma consulta vetorial (cenário híbrido simples), equivale a duas execuções de consulta.
  • Uma consulta de texto completo, mais uma consulta vetorial direcionada a dois campos vetoriais, equivale a três execuções de consulta.
  • Uma consulta de texto completo, mais duas consultas vetoriais direcionadas a cinco campos vetoriais, equivale a 11 execuções de consulta

Pontuações em resultados de pesquisa híbridos

Sempre que os resultados são classificados, @search.score a propriedade contém o valor usado para ordenar os resultados. As pontuações são geradas por algoritmos de classificação que variam para cada método. Cada algoritmo tem seu próprio alcance e magnitude.

O gráfico a seguir identifica a propriedade de pontuação retornada em cada correspondência, algoritmo e intervalo de pontuações para cada algoritmo de classificação de relevância.

Método de pesquisa Parâmetro Algoritmo de pontuação Intervalo
Pesquisa de texto completo @search.score Algoritmo BM25 Sem limite máximo.
pesquisa vetorial @search.score Algoritmo HNSW, usando a métrica de similaridade especificada na configuração HNSW. 0,333 - 1,00 (Cosseno), 0 a 1 para Euclidiano e DotProduct.
Pesquisa híbrida @search.score Algoritmo RRF O limite superior é limitado pelo número de consultas que estão sendo fundidas, com cada consulta contribuindo com um máximo de aproximadamente 1 para a pontuação RRF. Por exemplo, a fusão de três consultas produziria pontuações RRF mais altas do que se apenas dois resultados de pesquisa fossem mesclados.
Classificação semântica @search.rerankerScore Classificação semântica 0.00 - 4.00

A classificação semântica não participa do RRF. Sua pontuação (@search.rerankerScore) é sempre relatada separadamente na resposta da consulta. A classificação semântica pode reclassificar o texto completo e os resultados de pesquisa híbridos, assumindo que esses resultados incluam campos com conteúdo semanticamente rico.

Número de resultados classificados em uma resposta de consulta híbrida

Por padrão, se você não estiver usando paginação, o mecanismo de pesquisa retornará as 50 correspondências mais altas para pesquisa de texto completo e as correspondências mais semelhantes k para pesquisa vetorial. Em uma consulta híbrida, top determina o número de resultados na resposta. Com base nos padrões, as 50 partidas mais bem classificadas do conjunto de resultados unificado são retornadas.

Muitas vezes, o motor de busca encontra mais resultados do que top e k. Para retornar mais resultados, use os parâmetros topde paginação , skipe next. A paginação é como você determina o número de resultados em cada página lógica e navega pela carga útil completa.

A pesquisa de texto completo está sujeita a um limite máximo de 1.000 correspondências (consulte Limites de resposta da API). Uma vez que 1.000 correspondências são encontradas, o mecanismo de busca não procura mais.

Para obter mais informações, consulte Como trabalhar com resultados de pesquisa.

Diagrama de um fluxo de trabalho de pontuação de pesquisa

O diagrama a seguir ilustra uma consulta híbrida que invoca a pesquisa de palavras-chave e vetores, com impulsionamento por meio de perfis de pontuação e classificação semântica.

Diagram of prefilters.

Uma consulta que gera o fluxo de trabalho anterior pode ter esta aparência:

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 também