Relevância na pesquisa por palavra-chave (pontuação BM25)

Este artigo explica o algoritmo de pontuação de relevância BM25 usado para calcular pontuações de pesquisa para pesquisa de texto completo. A relevância do BM25 é exclusiva para a pesquisa de texto completo. Consultas de filtro, preenchimento automático e consultas sugeridas, pesquisa curinga ou consultas de pesquisa difusa não são pontuadas ou classificadas quanto à relevância.

O Azure AI Search fornece os seguintes algoritmos de pontuação para pesquisa de texto completo:

Algoritmo Utilização Intervalo
BM25Similarity Algoritmo fixo em todos os serviços de pesquisa criados após julho de 2020. Você pode configurar esse algoritmo, mas não pode alternar para um mais antigo (clássico). Sem limites.
ClassicSimilarity Presente em serviços de pesquisa mais antigos. Você pode optar por BM25 e escolher um algoritmo por índice. < 0 1,00

Tanto o BM25 quanto o Classic são funções de recuperação semelhantes ao TF-IDF que usam o termo frequência (TF) e a frequência inversa do documento (IDF) como variáveis para calcular pontuações de relevância para cada par documento-consulta, que é então usado para classificar os resultados. Embora conceitualmente semelhante ao clássico, o BM25 está enraizado na recuperação probabilística de informações que produz correspondências mais intuitivas, conforme medido pela pesquisa do usuário.

O BM25 oferece opções avançadas de personalização, como permitir que o usuário decida como a pontuação de relevância escala com a frequência do termo de termos correspondentes. Para obter mais informações, consulte Configurar o algoritmo de pontuação.

Nota

Se você estiver usando um serviço de pesquisa criado antes de julho de 2020, o algoritmo de pontuação provavelmente é o padrão anterior, ClassicSimilarityque você pode atualizar por índice. Consulte Ativar pontuação BM25 em serviços mais antigos para obter detalhes.

O segmento de vídeo a seguir avança rapidamente para uma explicação dos algoritmos de classificação geralmente disponíveis usados na Pesquisa de IA do Azure. Você pode assistir ao vídeo completo para mais informações.

Como funciona o ranking BM25

A pontuação de relevância refere-se ao cálculo de uma pontuação de pesquisa (@search.score) que serve como um indicador da relevância de um item no contexto da consulta atual. O intervalo é ilimitado. No entanto, quanto maior a pontuação, mais relevante o item.

A pontuação da pesquisa é calculada com base nas propriedades estatísticas da entrada da cadeia de caracteres e da própria consulta. O Azure AI Search encontra documentos que correspondem em termos de pesquisa (alguns ou todos, dependendo do searchMode), favorecendo documentos que contêm muitas instâncias do termo de pesquisa. A pontuação da pesquisa sobe ainda mais se o termo for raro em todo o índice de dados, mas comum dentro do documento. A base para esta abordagem à relevância computacional é conhecida como TF-IDF ou termo frequência de documento inversa à frequência.

As pontuações de pesquisa podem ser repetidas ao longo de um conjunto de resultados. Quando vários acertos têm a mesma pontuação de pesquisa, a ordem dos mesmos itens pontuados é indefinida e não estável. Execute a consulta novamente e você poderá ver os itens mudarem de posição, especialmente se estiver usando o serviço gratuito ou um serviço faturável com várias réplicas. Dado dois itens com uma pontuação idêntica, não há garantia de que um apareça primeiro.

Para quebrar o empate entre pontuações repetidas, você pode adicionar uma cláusula $orderby à primeira ordem por pontuação e, em seguida, à ordem por outro campo classificável (por exemplo, $orderby=search.score() desc,Rating desc). Para obter mais informações, consulte $orderby.

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.

Nota

A @search.score = 1 indica um conjunto de resultados não pontuado ou não classificado. A pontuação é uniforme em todos os resultados. Os resultados não pontuados ocorrem quando o formulário de consulta é uma pesquisa difusa, consultas curinga ou regex ou uma pesquisa vazia (search=*, às vezes emparelhada com filtros, onde o filtro é o principal meio para retornar uma correspondência).

Pontuações nos resultados de um texto

Sempre que os resultados são classificados, @search.score a propriedade contém o valor usado para ordenar os resultados.

A tabela a seguir identifica a propriedade de pontuação retornada em cada correspondência, algoritmo e intervalo.

Método de pesquisa Parâmetro Algoritmo de pontuação Intervalo
Pesquisa de texto completo @search.score Algoritmo BM25, utilizando os parâmetros especificados no índice. Sem limites.

Variação da pontuação

As pontuações de pesquisa transmitem um senso geral de relevância, refletindo a força da correspondência em relação a outros documentos no mesmo conjunto de resultados. Mas as pontuações nem sempre são consistentes de uma consulta para outra, portanto, ao trabalhar com consultas, você pode notar pequenas discrepâncias na forma como os documentos de pesquisa são ordenados. Há várias explicações para que isso possa ocorrer.

Motivo Description
Volatilidade de dados O conteúdo do índice varia à medida que você adiciona, modifica ou exclui documentos. As frequências dos termos mudam à medida que as atualizações do índice são processadas ao longo do tempo, afetando as pontuações de pesquisa dos documentos correspondentes.
Várias réplicas Para serviços que usam várias réplicas, as consultas são emitidas em relação a cada réplica em paralelo. As estatísticas de índice usadas para calcular uma pontuação de pesquisa são calculadas por réplica, com os resultados mesclados e ordenados na resposta da consulta. As réplicas são, na sua maioria, espelhos uns dos outros, mas as estatísticas podem diferir devido a pequenas diferenças de estado. Por exemplo, uma réplica pode ter excluído documentos que contribuem para suas estatísticas, que foram mesclados de outras réplicas. Normalmente, as diferenças nas estatísticas por réplica são mais percetíveis em índices menores. Para obter mais informações sobre essa condição, consulte Conceitos: unidades de pesquisa, réplicas, partições, fragmentos na documentação de planejamento de capacidade.
Pontuações idênticas Se vários documentos tiverem a mesma pontuação, qualquer um deles pode aparecer primeiro.

Estatísticas de pontuação e sessões adesivas

Para escalabilidade, o Azure AI Search distribui cada índice horizontalmente por meio de um processo de fragmentação, o que significa que partes de um índice são fisicamente separadas.

Por padrão, a pontuação de um documento é calculada com base nas propriedades estatísticas dos dados dentro de um fragmento. Essa abordagem geralmente não é um problema para um grande corpus de dados e fornece um desempenho melhor do que ter que calcular a pontuação com base em informações em todos os fragmentos. Dito isso, usar essa otimização de desempenho pode fazer com que dois documentos muito semelhantes (ou até mesmo documentos idênticos) acabem com pontuações de relevância diferentes se acabarem em fragmentos diferentes.

Se preferir calcular a pontuação com base nas propriedades estatísticas em todos os fragmentos, você pode fazer isso adicionando como um parâmetro de consulta (ou adicionando scoringStatistics=global"scoringStatistics": "global" como um parâmetro body da solicitação de consulta).

POST https://[service name].search.windows.net/indexes/hotels/docs/search?api-version=2020-06-30
{
    "search": "<query string>",
    "scoringStatistics": "global"
}

O uso scoringStatistics garantirá que todos os fragmentos na mesma réplica forneçam os mesmos resultados. Dito isto, réplicas diferentes podem ser ligeiramente diferentes umas das outras, uma vez que estão sempre a ser atualizadas com as alterações mais recentes ao seu índice. Em alguns cenários, você pode querer que seus usuários obtenham resultados mais consistentes durante uma "sessão de consulta". Nesses cenários, você pode fornecer um sessionId como parte de suas consultas. A sessionId é uma cadeia de caracteres exclusiva que você cria para se referir a uma sessão de usuário exclusiva.

POST https://[service name].search.windows.net/indexes/hotels/docs/search?api-version=2020-06-30
{
    "search": "<query string>",
    "sessionId": "<string>"
}

Desde que o mesmo sessionId seja usado, uma tentativa de melhor esforço é feita para direcionar a mesma réplica, aumentando a consistência dos resultados que seus usuários verão.

Nota

Reutilizar os mesmos sessionId valores repetidamente pode interferir no balanceamento de carga das solicitações entre réplicas e afetar negativamente o desempenho do serviço de pesquisa. O valor usado como sessionId não pode começar com um caractere '_'.

Ajuste de relevância

No Azure AI Search, você pode configurar parâmetros de algoritmo BM25 e ajustar a relevância da pesquisa e aumentar as pontuações de pesquisa por meio destes mecanismos:

Abordagem Implementação Description
Configuração do algoritmo de pontuação Índice de pesquisa
Perfis de classificação Índice de pesquisa Forneça critérios para aumentar a pontuação de pesquisa de uma correspondência com base nas características do conteúdo. Por exemplo, você pode querer aumentar as correspondências com base em seu potencial de receita, promover itens mais novos ou talvez impulsionar itens que estão no estoque há muito tempo. Um perfil de pontuação faz parte da definição do índice, composto por campos ponderados, funções e parâmetros. Você pode atualizar um índice existente com alterações de perfil de pontuação, sem incorrer em uma reconstrução do índice.
Classificação semântica Pedido de consulta Aplica a compreensão de leitura automática aos resultados de pesquisa, promovendo resultados semanticamente mais relevantes para o topo.
featuresMode parâmetro Pedido de consulta Esse parâmetro é usado principalmente para descompactar uma pontuação, mas pode ser usado para um código que fornece uma solução de pontuação personalizada.

parâmetro featuresMode (visualização)

As solicitações de documentos de pesquisa têm um novo parâmetro featuresMode que pode fornecer mais detalhes sobre a relevância no nível do campo. Considerando que o é calculado para o @searchScore documento completo (quão relevante é este documento no contexto desta consulta), através de featuresMode você pode obter informações sobre campos individuais, conforme expresso em uma @search.features estrutura. A estrutura contém todos os campos usados na consulta (campos específicos através de searchFields em uma consulta ou todos os campos atribuídos como pesquisáveis em um índice). Para cada campo, você obtém os seguintes valores:

  • Número de tokens exclusivos encontrados no campo
  • Pontuação de similaridade, ou uma medida de quão semelhante é o conteúdo do campo, em relação ao termo de consulta
  • Frequência do termo ou o número de vezes que o termo de consulta foi encontrado no campo

Para uma consulta direcionada aos campos "descrição" e "título", uma resposta que inclua @search.features pode ter esta aparência:

"value": [
 {
    "@search.score": 5.1958685,
    "@search.features": {
        "description": {
            "uniqueTokenMatches": 1.0,
            "similarityScore": 0.29541412,
            "termFrequency" : 2
        },
        "title": {
            "uniqueTokenMatches": 3.0,
            "similarityScore": 1.75451557,
            "termFrequency" : 6
        }
    }
 }
]

Você pode consumir esses pontos de dados em soluções de pontuação personalizadas ou usar as informações para depurar problemas de relevância de pesquisa.

Número de resultados classificados em uma resposta de consulta de texto completo

Por padrão, se você não estiver usando paginação, o mecanismo de pesquisa retornará as 50 correspondências mais bem posicionadas para pesquisa de texto completo. Você pode usar o top parâmetro para retornar um número menor ou maior de itens (até 1000 em uma única resposta). 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 retornar mais ou menos 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. Para obter mais informações, consulte Como trabalhar com resultados de pesquisa.

Consulte também