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çãosearchable
. - A pontuação tem como escopo ,
searchFields
ou para todos ossearchable
campos, sesearchFields
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.
Use uma solicitação Criar ou Atualizar Índice para definir parâmetros BM25:
PUT [service-name].search.windows.net/indexes/[index-name]?api-version=2024-07-01&allowIndexDowntime=true { "similarity": { "@odata.type": "#Microsoft.Azure.Search.BM25Similarity", "b" : 0.75, "k1" : 1.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.
Defina
"b"
e"k1"
para valores personalizados e, em seguida, envie a solicitação.Propriedade Type 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=2024-07-01
{
"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"
}
}