Configurar a pontuação de relevância do BM25

Neste artigo, saiba como configurar o algoritmo de pontuação de relevância BM25 usado pelo Azure AI Search para consultas de pesquisa de texto completo. Também explica como ativar o BM25 em serviços de pesquisa mais antigos.

BM25 aplica-se a:

  • Consultas que usam o search parâmetro para pesquisa de texto completo, em campos de texto com atribuição searchable .
  • A pontuação tem como escopo , ou para todos os searchable campos, searchFieldsse searchFields for nula.

O motor de busca usa BM25 para calcular um @searchScore para cada correspondência em uma determinada consulta. Os documentos correspondentes são classificados de acordo com a pontuação da pesquisa, com os principais resultados retornados na resposta da consulta. É possível obter alguma variação de pontuação nos resultados, mesmo a partir da mesma consulta executada sobre o mesmo índice de pesquisa, mas geralmente essas variações são pequenas e não alteram a classificação geral dos resultados.

O BM25 tem padrões para a ponderação da frequência do termo e do comprimento do documento. Você pode personalizar essas propriedades se os padrões não forem adequados ao seu conteúdo. As alterações de configuração têm como escopo índices individuais, o que significa que você pode ajustar a pontuação de relevância com base nas características de cada índice.

Algoritmo de pontuação padrão

Dependendo da idade do seu serviço de pesquisa, o Azure AI Search suporta dois algoritmos de pontuação para uma consulta de pesquisa de texto completo:

  • Algoritmo Okapi BM25 (após 15 de julho de 2020)
  • Algoritmo de semelhança clássico (antes de 15 de julho de 2020)

O ranking BM25 é o padrão porque tende a produzir rankings de pesquisa que se alinham melhor com as expectativas dos usuários. Inclui parâmetros para ajustar os resultados com base em fatores como o tamanho do documento. Para serviços de pesquisa criados após julho de 2020, o BM25 é o único algoritmo de pontuação. Se você tentar definir "similarity" para ClassicSimilarity em um novo serviço, um erro HTTP 400 será retornado porque esse algoritmo não é suportado pelo serviço.

Para serviços mais antigos, a semelhança clássica continua sendo o algoritmo padrão. Os serviços mais antigos podem ser atualizados para o BM25 por índice. Ao mudar do clássico para o BM25, você pode esperar ver algumas diferenças na forma como os resultados da pesquisa são ordenados.

Definir parâmetros BM25

O ranking BM25 fornece dois parâmetros para ajustar o cálculo da pontuação de relevância.

  1. Use uma solicitação Criar ou Atualizar Índice para definir parâmetros BM25:

    PUT [service-name].search.windows.net/indexes/[index-name]?api-version=2020-06-30&allowIndexDowntime=true
    {
        "similarity": {
            "@odata.type": "#Microsoft.Azure.Search.BM25Similarity",
            "b" : 0.75,
            "k1" : 1.2
        }
    }
    
  2. Se o índice estiver ativo, acrescente o allowIndexDowntime=true parâmetro URI na solicitação, mostrado no exemplo anterior.

    Como o Azure AI Search não permite atualizações para um índice ativo, você precisa colocar o índice offline para que os parâmetros possam ser adicionados. As solicitações de indexação e consulta falham enquanto o índice está offline. A duração da interrupção é a quantidade de tempo que leva para atualizar o índice, geralmente não mais do que vários segundos. Quando a atualização é concluída, o índice volta automaticamente.

  3. Defina "b" e para valores personalizados e "k1" , em seguida, envie a solicitação.

    Propriedade Tipo Description
    k1 Número Controla a função de dimensionamento entre a frequência de termo de cada termo correspondente à pontuação de relevância final de um par documento-consulta. Os valores são geralmente de 0,0 a 3,0, com 1,2 como padrão.

    Um valor de 0,0 representa um "modelo binário", onde a contribuição de um único termo correspondente é a mesma para todos os documentos correspondentes, independentemente de quantas vezes esse termo aparece no texto. Valores k1 maiores permitem que a pontuação continue a aumentar à medida que mais instâncias do mesmo termo são encontradas no documento.

    O uso de um valor k1 maior é importante nos casos em que vários termos são incluídos em uma consulta de pesquisa. Nesses casos, você pode preferir documentos que correspondam a mais termos de consulta, em vez de documentos que correspondam apenas a um único termo, várias vezes. Por exemplo, ao consultar os termos "Apollo Spaceflight", você pode querer diminuir a pontuação de um artigo sobre mitologia grega que contém o termo "Apollo" algumas dezenas de vezes, sem menções a "Spaceflight", em relação a outro artigo que menciona explicitamente "Apollo" e "Spaceflight" apenas algumas vezes.
    b Número Controla como o comprimento de um documento afeta a pontuação de relevância. Os valores estão entre 0 e 1, com 0,75 como padrão.

    Um valor de 0,0 significa que o comprimento do documento não influencia a pontuação. Um valor de 1,0 significa que o efeito da frequência do termo na pontuação de relevância é normalizado pela extensão do documento.

    Normalizar a frequência do prazo pela extensão do documento é útil nos casos em que se pretende penalizar documentos mais longos. Em alguns casos, documentos mais longos (como um romance completo) são mais propensos a conter muitos termos irrelevantes, em comparação com documentos mais curtos.

Ativar a pontuação BM25 em serviços mais antigos

Se você estiver executando um serviço de pesquisa criado de março de 2014 a 15 de julho de 2020, poderá habilitar o BM25 definindo uma propriedade "similaridade" em novos índices. A propriedade só é exposta em novos índices, portanto, se você quiser BM25 em um índice existente, você deve soltar e reconstruir o índice com uma propriedade "similaridade" definida como Microsoft.Azure.Search.BM25Similarity.

Quando um índice existe com uma propriedade de "semelhança", você pode alternar entre BM25Similarity ou ClassicSimilarity.

Os links a seguir descrevem a propriedade Similarity nos SDKs do Azure.

Biblioteca de cliente Propriedade de semelhança
.NET SearchIndex.Similaridade
Java SearchIndex.setSimilarity
JavaScript SearchIndex.Similaridade
Python propriedade similarity em SearchIndex

Exemplo REST

Você também pode usar a API REST. O exemplo a seguir cria um novo índice com a propriedade "similarity" definida como BM25:

PUT [service-name].search.windows.net/indexes/[index name]?api-version=2020-06-30
{
    "name": "indexName",
    "fields": [
        {
            "name": "id",
            "type": "Edm.String",
            "key": true
        },
        {
            "name": "name",
            "type": "Edm.String",
            "searchable": true,
            "analyzer": "en.lucene"
        },
        ...
    ],
    "similarity": {
        "@odata.type": "#Microsoft.Azure.Search.BM25Similarity"
    }
}

Consulte também