Configurar pontuação de relevância do BM25
Neste artigo, saiba como configurar o algoritmo de pontuação de relevância BM25 usado pela IA do Azure Search para consultas de pesquisa de texto completo. Também é explicado como habilitar o BM25 em serviços de pesquisa mais antigos.
O BM25 é aplicável a:
- Consultas que usam o parâmetro
search
para pesquisa de texto completo, em campos de texto com uma atribuiçãosearchable
. - A pontuação tem como escopo
searchFields
ou todos os campossearchable
sesearchFields
for nulo.
O mecanismo de pesquisa usa o BM25 para calcular uma @searchScore para cada correspondência em uma consulta. Os documentos correspondentes são classificados por sua pontuação de pesquisa, com os melhores resultados retornados na resposta da consulta. É possível obter alguma variação de pontuação em resultados, ainda que da mesma consulta em execução no 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 ponderar a frequência do termo e o comprimento do documento. Você poderá 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 serviço de pesquisa, a IA do Azure Search dá suporte a 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 similaridade clássico (antes de 15 de julho de 2020)
A classificação do BM25 é o padrão, porque tende a produzir classificações de pesquisa que se alinham melhor às expectativas do usuário. Ela inclui parâmetros para ajustar os resultados com base em fatores como o tamanho do documento. Para os serviços de pesquisa criados após julho de 2020, o BM25 é o único algoritmo de pontuação. Se você tentar definir a "similaridade" como ClassicSimilarity em um novo serviço, um erro HTTP 400 será retornado porque não há suporte para esse algoritmo no serviço.
Para os serviços mais antigos, a similaridade clássica continua sendo o algoritmo padrão. Os serviços mais antigos podem atualizar para o BM25 por índice. Ao mudar do clássico para o BM25, você pode esperar algumas diferenças de como os resultados da pesquisa são ordenados.
Definir parâmetros do BM25
A classificação do 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 for dinâmico, acrescente o parâmetro URI
allowIndexDowntime=true
na solicitação, mostrado no exemplo anterior.Como a IA do Azure Search não permite atualizações para um índice dinâmico, é necessário tornar o índice offline para que os parâmetros possam ser adicionados. As solicitações de indexação e de consulta falham quando o índice está offline. A duração da interrupção é o tempo necessário para atualizar o índice, geralmente, não mais do que alguns segundos. Quando a atualização for concluída, o índice retornará automaticamente.
Defina
"b"
e"k1"
para valores personalizados e envie a solicitação.Propriedade Type Descrição k1 number Controla a função de colocação em escala entre a frequência de termos de cada termo correspondente até a pontuação de relevância final de um par de consulta de documento. Os valores geralmente são 0,0 a 3,0, sendo 1,2 o padrão.
Um valor de 0,0 representa um "modelo binário", em que a contribuição de um único termo correspondente é a mesma para todos os documentos correspondentes, independente de quantas vezes esse termo aparece no texto. Valores k1 maiores permitem que a pontuação continue a crescer à medida que mais instâncias do mesmo termo forem 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, é aconselhável favorecer documentos que tenham mais termos de consulta correspondentes, em vez de documentos que correspondam a apenas um termo, diversas vezes. Por exemplo, ao consultar pelos termos "Apollo Spaceflight", talvez seja preferível diminuir a pontuação de um artigo sobre a Mitologia Grega que apresente o termo "Apollo" algumas vezes, sem mencionar "Spaceflight", em relação a outro artigo que menciona explicitamente tanto "Apollo" quanto "Spaceflight" inúmeras vezes.b number Controla como o comprimento de um documento afeta a pontuação de relevância. Os valores estão entre 0 e 1, sendo 0,75 o valor 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 impacto da frequência de termos na pontuação de relevância é normalizado pelo comprimento do documento.
Normalizar a frequência do termo pelo comprimento do documento é útil nos casos em que você deseja penalizar documentos mais longos. Em alguns casos, documentos mais longos (como um romance completo) estão mais propensos a terem muitos termos irrelevantes, em comparação com documentos mais curtos.
Habilitar a pontuação do BM25 em serviços mais antigos
Se estiver executando um serviço Pesquisa criado no período de março de 2014 a 15 de julho de 2020, você poderá habilitar o BM25 definindo uma propriedade de "similaridade" nos novos índices. A propriedade só é exposta em novos índices, portanto, se desejar ter o BM25 em um índice existente, será necessário remover e recompilar o índice com uma propriedade de "similaridade" definida como Microsoft.Azure.Search.BM25Similarity
.
Depois que houver um índice com uma propriedade "similarity", você poderá alternar entre BM25Similarity
ou ClassicSimilarity
.
Os links a seguir descrevem a propriedade Similaridade nos SDKs do Azure.
Biblioteca de clientes | Propriedade Similaridade |
---|---|
.NET | SearchIndex.Similarity |
Java | SearchIndex.setSimilarity |
JavaScript | SearchIndex.Similarity |
Python | Propriedade Similaridade em SearchIndex |
Exemplo REST
Use também a API REST. O exemplo a seguir cria um novo índice com a propriedade "similaridade" 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"
}
}