Compartilhar via


Pontuação de relevância na pesquisa híbrida usando o RRF

O RRF é um algoritmo que avalia as pontuações de pesquisa de vários resultados classificados anteriormente para produzir um conjunto de resultados unificado. Na IA do Azure Search, o RRF é usado sempre que existem duas ou mais consultas sendo executadas em paralelo. Cada consulta produz um conjunto de resultados classificado e o RRF é usado para mesclar e homogeneizar as classificações em um único conjunto de resultados, que é retornado na resposta da consulta. Exemplos de cenários em que o RRF sempre é usado incluem pesquisa híbrida e várias consultas vetoriais em execução de maneira simultânea.

O RRF baseia-se no conceito de classificação recíproca, que é o inverso da classificação do primeiro documento relevante em uma lista de resultados da pesquisa. O objetivo da técnica é levar em conta a posição dos itens nas classificações originais e dar maior importância aos itens que são melhores classificados 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 combinar vários resultados de pesquisa ordenados.

Observação

A novidade na 2024-09-01-preview é a capacidade de desconstruir uma pontuação de pesquisa classificada em RRF em suas subpontuações de componente. Isso oferece transparência na composição de pontuação total. Para obter mais informações, consulte desempacotar pontuações de pesquisa (versão prévia) neste artigo.

Como funciona a classificação do RRF

O RRF funciona obtendo os resultados da pesquisa de vários métodos, atribuindo uma pontuação de classificação recíproca a cada documento nos resultados e 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 são mais relevantes e devem receber uma classificação mais alta no resultado combinado.

Confira esta explicação simples do processo do RRF:

  1. Obtém resultados da pesquisa classificados de várias consultas executando em paralelo.

  2. Atribui pontuações de classificação recíprocas para o resultado em cada uma das listas classificadas. O RRF gera um @search.score novo para cada correspondência em cada conjunto de resultados. O mecanismo atribui uma pontuação de classificação recíproca para cada documento nos resultados da pesquisa com base em sua posição na lista. A pontuação é calculada como 1/(rank + k), em que rank é a posição do documento na lista e k é uma constante, que de modo experimental apresenta melhor desempenho caso seja definida para um valor pequeno como 60. Observe que essek valor é uma constante no algoritmo do RRF e está totalmente separado do k que controla o número de vizinhos mais próximos.

  3. Combinar pontuações. Em cada documento, o mecanismo soma as pontuações de classificação recíproca obtidas de cada sistema de pesquisa, produzindo uma pontuação combinada para cada documento. 

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

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

Execução de consulta paralela

O RRF é usado sempre que há mais de uma execução de consulta. Os exemplos a seguir ilustram padrões de consulta nos quais ocorrem a execução de consulta paralela:

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

Pontuações em resultados da pesquisa híbrida

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

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

Método Search Parâmetro Algoritmo de pontuação Intervalo
pesquisa de texto completo @search.score Algoritmo BM25 Nenhum limite superior.
busca em vetores @search.score Algoritmo do HNSW, usando a métrica de similaridade especificada na configuração do HNSW. 0,333 – 1,00 (Cosseno), de 0 a 1 para Euclidean e DotProduct.
pesquisa híbrida @search.score Algoritmo do RRF O limite máximo é limitado pelo número de consultas sendo combinadas, com cada consulta contribuindo com o máximo de aproximadamente 1 para a pontuação do RRF. Por exemplo, mesclar três consultas produziria pontuações do RRF mais altas do que se fossem mesclados apenas dois resultados da pesquisa.
classificação semântica @search.rerankerScore Classificação semântica 0,00 – 4,00

A classificação semântica ocorre após a mesclagem de resultados do RRF. Essa pontuação (@search.rerankerScore) sempre é relatada separadamente na resposta da consulta. O classificador semântico pode reclassificar o texto completo e os resultados da pesquisa híbrida, desde que esses resultados incluam campos com conteúdo semanticamente avançado. Ele poderá reclassificar consultas de vetor puro se os documentos de pesquisa incluírem campos de texto que contêm conteúdo semanticamente relevante.

Desempacotar uma pontuação de pesquisa em subpontuações (versão prévia)

Ao usar 2024-09-01-preview, você poderá desconstruir uma pontuação de pesquisa para exibir suas subpontuações.

Para consultas de vetor, essas informações podem ajudá-lo a determinar um valor apropriado para ponderação de vetor ou definição de limites mínimos.

Para obter as subpontuações:

  • Use a API REST de Documentos de Pesquisa mais recente ou um pacote beta do SDK do Azure que fornece o recurso.

  • Modifique uma solicitação de consulta, adicionando um novo parâmetro debug definido para vector, semantic se estiver usando um classificador semântico ou all.

Aqui está um exemplo de consulta híbrida que retorna subpontuações no modo de depuração:

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
}

Pontuações ponderadas

Usando as versões da API de versão prévia 2024-07-01 e mais recentes, você pode ponderar consultas de vetor para aumentar ou diminuir a importância delas em uma consulta híbrida.

Lembre-se de que, ao calcular o RRF para um determinado documento, o mecanismo de pesquisa examina a classificação desse documento para cada conjunto de resultados em que ele aparece. Suponha que um documento apareça em três resultados de pesquisa separados, em que os resultados são de duas consultas de vetor e uma consulta de texto classificada com BM25. A posição do documento varia em cada resultado.

Correspondência encontrada Posição nos resultados @search.score multiplicador de peso @search.score (ponderado)
resultados vetoriais um posição 1 0,8383955 0.5 0,41919775
resultados de vetor dois posição 5 0,81514114 2,0 1,63028228
Resultados do BM25 posição 10 0,8577363 NA 0,8577363

A posição do documento em cada conjunto de resultados corresponde a uma pontuação inicial, que é adicionada para criar a pontuação final do RRF para esse documento.

Se você adicionar a ponderação de vetor, as pontuações iniciais serão sujeitas a um multiplicador de ponderação que aumenta ou diminui a pontuação. O padrão é 1.0, o que significa que não há ponderação e a pontuação inicial é usada como está na pontuação RRF. No entanto, se você adicionar um peso de 0,5, a pontuação será reduzida e esse resultado se tornará menos importante na classificação combinada. Por outro lado, se você adicionar um peso de 2,0, a pontuação se tornará um fator maior na pontuação geral do RRF.

Neste exemplo, os valores @search.score (ponderados) são passados para o modelo de classificação RRF.

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 melhores correspondências de classificação para a pesquisa de texto completo e as correspondências mais semelhantes de k para a busca em vetores. Em uma consulta híbrida, top determina o número de resultados na resposta. Com base nos padrões, são retornadas as 50 melhores correspondências classificadas do conjunto de resultados unificado.

Muitas vezes, o mecanismo de pesquisa encontra mais resultados do que top e k. Para retornar mais resultados, use os parâmetros de paginação top, skip e next. Paginação é como você determina o número de resultados em cada página lógica e navega pelo conteúdo completo. Você pode definir maxTextRecallSize como valores maiores (o padrão é 1.000) para retornar mais resultados do lado do texto da consulta híbrida.

Por padrão, a pesquisa de texto completo está sujeita a um limite máximo de 1.000 correspondências (confira os limites de resposta da API). Depois de encontrar 1.000 correspondências, o mecanismo de pesquisa parará de procurar.

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

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

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

Diagrama de pré-filtros.

Uma consulta que gera o fluxo de trabalho anterior pode ser assim:

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"
}

Confira também