Adicionar perfis de pontuação para aumentar as pontuações de pesquisa

Neste artigo, você aprenderá a definir um perfil de pontuação. Um perfil de pontuação é usado para aumentar uma pontuação de pesquisa com base nos parâmetros fornecidos. Por exemplo, talvez você queira que as correspondências encontradas em um campo "marcas" sejam mais relevantes do que a mesma correspondência encontrada em “descrições”. Os critérios podem ser um campo ponderado (como o exemplo de “marcas”) ou uma função.

Os perfis de pontuação são definidos em um índice de pesquisa e invocados em campos não vetoriais nas solicitações de consulta. Você pode criar vários perfis e modificar a lógica de consulta para escolher qual deles será usado.

Observação

Não está familiarizado com os conceitos de relevância? O segmento de vídeo no YouTube a seguir avança rapidamente para mostrar como os perfis de pontuação funcionam na IA do Azure Search. Acesse também Relevância e pontuação na IA do Azure Search para obter mais informações.

Definição do perfil de pontuação

Um perfil de pontuação é nomeado objeto definido em um esquema de índice. Um perfil pode ser composto por campos ponderados, funções e parâmetros.

A definição a seguir mostra um perfil simples nomeado “geo”. Esse exemplo aumenta os itens que têm o termo de pesquisa no campo hotelName. Ele também usa a função distance para favorecer resultados que estão em um raio de dez quilômetros do local atual. Se alguém pesquisar o termo "pousada" e "pousada" fizer parte do nome do hotel, os documentos que incluírem hotéis com "pousada" em um raio de 10 KM da localização atual serão exibidos nas posições mais altas nos resultados da pesquisa.

"scoringProfiles": [
  {  
    "name":"geo",
    "text": {  
      "weights": {  
        "hotelName": 5
      }                              
    },
    "functions": [
      {  
        "type": "distance",
        "boost": 5,
        "fieldName": "location",
        "interpolation": "logarithmic",
        "distance": {
          "referencePointParameter": "currentLocation",
          "boostingDistance": 10
        }                        
      }                                      
    ]                     
  }            
]

Para usar esse perfil de pontuação, a consulta é formulada para especificar o parâmetro scoringProfile na solicitação. Se você estiver usando a API REST, as consultas serão especificadas por meio de solicitações GET e POST. No exemplo a seguir, “currentLocation” tem um delimitador de um único traço (-). Ele é seguido por coordenadas de longitude e latitude, em que longitude é um valor negativo.

GET /indexes/hotels/docs?search+inn&scoringProfile=geo&scoringParameter=currentLocation--122.123,44.77233&api-version=2020-06-30

Observe as diferenças de sintaxe ao usar POST. Em POST, "scoringParameters" é plural e é uma matriz.

POST /indexes/hotels/docs&api-version=2020-06-30
{
    "search": "inn",
    "scoringProfile": "geo",
    "scoringParameters": ["currentLocation--122.123,44.77233"]
}

Essa consulta pesquisa o termo “pousada” e passa o local atual. Observe que essa consulta inclui outros parâmetros, como scoringParameter. Os parâmetros de consulta, incluindo "scoringParameter", são descritos em Documentos de Pesquisa (API REST).

Veja o exemplo estendido para examinar um exemplo mais detalhado de um perfil de pontuação.

Como as pontuações são computadas

As pontuações são computadas para consultas de pesquisa de texto completo. As correspondências são pontuadas com base no quão relevante é a correspondência e as correspondências de pontuação mais altas são retornadas na resposta da consulta. A pontuação geral para cada documento é uma agregação das pontuações individuais de cada campo, em que a pontuação individual de cada campo é calculada com base na frequência do termo e na frequência do documento para os termos pesquisados dentro desse campo (conhecido como TF-IDF ou frequência de termo e frequência de documento inversa).

Use o parâmetro featuresMode (versão prévia) para solicitar detalhes de pontuação extras com os resultados da pesquisa (incluindo as pontuações de nível do campo).

Quando adicionar a lógica de pontuação

Você deve criar um ou mais perfis de pontuação quando o comportamento de classificação padrão não é suficiente para atender a seus objetivos de negócios. Por exemplo, você pode decidir que a relevância de pesquisa deve favorecer itens adicionados recentemente. Da mesma forma, você pode ter um campo que contenha a margem de lucro ou algum outro campo indicando o potencial de receita. Aumentar os resultados que são mais significativos para os usuários ou a empresa geralmente é o fator determinante na adoção de perfis de pontuação.

A ordenação com base em relevância em uma página de pesquisa também é implementada por meio de perfis de pontuação. Considere páginas de resultados de pesquisa que você usou no passado e que lhe permitem classificar por preço, data, classificação ou relevância. Na IA do Azure Search, os perfis de pontuação podem ser usado para impulsionar a opção 'relevância'. A relevância é definida pelo usuário, de acordo com objetivos de negócios e com o tipo de experiência de pesquisa que você deseja fornecer.

Etapas para adicionar um perfil de pontuação

Para implementar um comportamento personalizado de pontuação, adicione um perfil de pontuação ao esquema que define o índice. É possível ter até 100 perfis de pontuação em um índice (consulte Limites de Serviço), mas você poderá especificar apenas um perfil no momento em qualquer consulta.

  1. Comece com uma definição de índice. Você pode adicionar e atualizar perfis de pontuação em um índice existente sem precisar recompilar ele. Use uma solicitação Atualizar índice para publicar sua revisão.

  2. Cole no Modelo fornecido neste artigo.

  3. Forneça um nome. Os perfis de pontuação são opcionais, mas se você adicionar um, o nome será obrigatório. Siga as convenções de nomenclatura da IA do Azure Search para os campos (inicia com uma letra, evita caracteres especiais e palavras reservadas).

  4. Especifique os critérios de aumento. Um único perfil pode conter campos ponderados, funções, ou ambos.

Você deve trabalhar iterativamente, usando um conjunto de dados que ajudará você a comprovar ou reprovar a eficácia de um determinado perfil.

Os perfis de pontuação podem ser definidos no portal do Azure, conforme mostrado na captura de tela a seguir, ou programaticamente por meio de APIs REST ou em SDKs do Azure, como a classe ScoringProfile no SDK do Azure para .NET.

Add scoring profiles page

Usar campos ponderados

Use campos ponderados quando o contexto de campo é importante e as consultas são pesquisa de texto completo. Por exemplo, se uma consulta incluir o termo "aeroporto", você pode desejar que "aeroporto" no campo Descrição tenha mais peso do que no HotelName.

Os campos ponderados são compostos por um campo pesquisável e um número positivo que é usado como multiplicador. Se a pontuação de campo original de HotelName for 3, a pontuação aumentada desse campo se tornará 6, contribuindo para uma pontuação geral mais alta para próprio documento pai.

"scoringProfiles": [  
    {  
      "name": "boostKeywords",  
      "text": {  
        "weights": {  
          "HotelName": 2,  
          "Description": 5 
        }  
      }  
    }
]

Usar funções

Use funções quando pesos relativos simples forem insuficientes ou não se aplicarem, como no caso da distância e da atualidade, que são cálculos sobre dados numéricos. Você pode especificar várias funções por perfil de pontuação. Para obter mais informações sobre os tipos de dados EDM usados na IA do Azure Search, consulte tipos de dados com suporte.

Função Descrição
"freshness" Aumenta por valores em um campo de data e hora (Edm.DateTimeOffset). Essa função tem um atributo "boostingDuration" para que você possa especificar um valor que representa um intervalo de tempo durante o qual ocorre o aumento.
"magnitude" Aumenta com base em quão alto ou baixo é um valor numérico. Cenários que exigem essa função incluem aumentar de acordo com a margem de lucro, maior preço, menor preço ou uma contagem de downloads. Essa função só pode ser usada com campos Edm.Double e Edm.Int. Para a função magnitude, é possível inverter o intervalo, do maior para o menor, se você quiser o padrão inverso (por exemplo, para dar mais destaque aos itens com preços mais baixos, do que aos itens com preços mais altos). Considerando um intervalo de preços de US$ 100 a US$ 1, você definiria "boostingRangeStart" como 100 e "boostingRangeEnd" como 1 para aumentar os itens com preços mais baixos.
"distance" Aumenta por proximidade ou localização geográfica. Essa função só pode ser usada com campos Edm.GeographyPoint .
"tag" Aumenta por marcas comuns a ambos os documentos de pesquisa e as cadeias de caracteres de consulta. As marcas são fornecidas em um "tagsParameter". Esta função só pode ser usada com campos de pesquisa do tipo Edm.String e Collection(Edm.String).

Regras para usar funções

  • Funções somente pode ser aplicadas a campos que são atribuídos como filtráveis.
  • O tipo de função (“freshness”, “magnitude”, “distance”, “tag”) deve estar em minúsculas.
  • As funções não podem incluir valores nulos ou vazios.

Modelo

Esta seção mostra a sintaxe e o modelo para perfis de pontuação. Consulte Referência de propriedade na próxima seção para obter descrições dos atributos do perfil de pontuação.

"scoringProfiles": [  
  {   
    "name": "name of scoring profile",   
    "text": (optional, only applies to searchable fields) {   
      "weights": {   
        "searchable_field_name": relative_weight_value (positive #'s),   
        ...   
      }   
    },   
    "functions": (optional) [  
      {   
        "type": "magnitude | freshness | distance | tag",   
        "boost": # (positive number used as multiplier for raw score != 1),   
        "fieldName": "(...)",   
        "interpolation": "constant | linear (default) | quadratic | logarithmic",   

        "magnitude": {
          "boostingRangeStart": #,   
          "boostingRangeEnd": #,   
          "constantBoostBeyondRange": true | false (default)
        }  

        // ( - or -)  

        "freshness": {
          "boostingDuration": "..." (value representing timespan over which boosting occurs)   
        }  

        // ( - or -)  

        "distance": {
          "referencePointParameter": "...", (parameter to be passed in queries to use as reference location)   
          "boostingDistance": # (the distance in kilometers from the reference location where the boosting range ends)   
        }   

        // ( - or -)  

        "tag": {
          "tagsParameter":  "..."(parameter to be passed in queries to specify a list of tags to compare against target field)   
        }
      }
    ],   
    "functionAggregation": (optional, applies only when functions are specified) "sum (default) | average | minimum | maximum | firstMatching"   
  }   
],   
"defaultScoringProfile": (optional) "...", 

Referência de propriedade

Atributo Descrição
name Obrigatórios. Esse é o nome do perfil de pontuação. Ele segue as mesmas convenções de nomenclatura que os campos. O nome deve começar com uma letra, não pode conter pontos, dois-pontos ou símbolos @ e não pode iniciar com a frase azureSearch (diferencia maiúsculas de minúsculas).
text Contém a propriedade Pesos.
weights Opcional. Pares nome-valor que especificam um campo pesquisável e um inteiro positivo ou um número de ponto flutuante pelo qual aumenta a pontuação de um campo. O número inteiro positivo é um multiplicador para a pontuação de campo original gerada pelo algoritmo de classificação. Por exemplo, se uma pontuação de campo for 2 e o valor do peso for 3, a pontuação aumentada para o campo se tornará 6. As pontuações de campo individuais são então agregadas para criar uma pontuação de campo de documento, que é usada para classificar o documento no conjunto de resultados.
funções Opcional. Uma função de pontuação somente pode ser aplicada a campos filtráveis.
tipo de> funções Necessário para funções de pontuação. Indica o tipo de função a ser usada. Os valores válidos incluem magnitude, atualização, distância e marca. Você pode incluir mais de uma função em cada perfil de pontuação. O nome da função deve estar em letras minúsculas.
aumento de > funções Necessário para funções de pontuação. Um número positivo usado como multiplicador para pontuação bruta. Não pode ser igual a 1.
funções> fieldname Necessário para funções de pontuação. Uma função de pontuação só pode ser aplicada a campos que fazem parte da coleção de campos do índice e que são filtráveis. Além disso, cada tipo de função introduz restrições adicionais (a atualização é usada com campos datetime, a magnitude com campos de inteiro ou duplo, a distância com campos de local e a marca com campos de cadeia de caracteres ou coleção de cadeias de caracteres). Você só pode especificar um único campo por definição de função. Por exemplo, para usar a magnitude duas vezes no mesmo perfil, você precisaria incluir duas definições de magnitude, uma para cada campo.
interpolação de > funções Necessário para funções de pontuação. Define a inclinação para a qual o aumento de pontuação ocorre, do início ao fim do intervalo. Os valores válidos incluem Linear (padrão), Constante, Quadrática e Logarítmica. Confira Set interpolations (Definir interpolações) para obter detalhes.
magnitude das > funções A função de pontuação magnitude é usada para alterar a classificação com base no intervalo de valores de um campo numérico. Alguns dos exemplos de uso mais comuns são:

"classificações por estrelas:" alterar a pontuação com base no valor no campo "Classificação por Estrela". Quando dois itens forem relevantes, o item com a classificação mais alta será exibido primeiro.
“Margem:” quando dois documentos forem relevantes, um varejista poderá destacar primeiro os documentos que tenham margens superiores.
“Contagens de cliques:” para aplicativos que acompanham ações por cliques para produtos ou páginas, você pode usar a magnitude para aumentar os itens que tendem a obter mais tráfego.
“Contagens de downloads:” para aplicativos que acompanham downloads, a função de magnitude permite que você aumente os itens que têm mais downloads.
funções > magnitude > boostingRangeStart Define o valor inicial do intervalo em que a magnitude é pontuada. O valor deve ser um inteiro ou um número de ponto flutuante. Para classificações por estrelas de 1 a 4, isso seria 1. Para mais acima de 50% de margens, isso seria 50.
funções > magnitude > boostingRangeEnd Define o valor final do intervalo em que a magnitude é pontuada. O valor deve ser um inteiro ou um número de ponto flutuante. Para classificações por estrelas de 1 a 4, isso seria 4.
funções > magnitude > constantBoostBeyondRange Os valores válidos são true ou false (padrão). Quando definido como true, o aumento completo continuará a ser aplicado a documentos que tenham um valor para o campo de destino maior do que a extremidade superior do intervalo. Se for false, o aumento dessa função não será aplicado a documentos com um valor para o campo de destino que esteja fora do intervalo.
funções > atualização A função de pontuação atualização é usada para alterar as pontuações de classificação para os itens com base nos valores nos campos DateTimeOffset. Por exemplo, um item com uma data mais recente pode ter classificação mais alta do que itens mais antigos.

Também é possível classificar itens como eventos de calendário com datas futuras de forma que os itens mais próximos do presente possam ser classificados acima dos itens no futuro.

Na versão atual do serviço, uma extremidade do intervalo será corrigida para a hora atual. A outra extremidade é um momento no passado com base em boostingDuration. Para aumentar um intervalo de tempo no futuro, use um boostingDuration negativo.

A taxa à qual o aumento é alterado em um intervalo máximo e mínimo é determinada pela Interpolação é aplicada ao perfil de pontuação (consulte a figura abaixo). Para inverter o fator de aumento aplicado, escolha um fator de aumento que seja inferior a 1.
funções > atualizações > boostingDuration Define um período de expiração após o qual o aumento será interrompido para um documento específico. Consulte Definir boostingDuration na próxima seção para obter a sintaxe e exemplos.
funções > distância A função de pontuação distância é usada para afetar a pontuação de documentos com base em sua distância ou proximidade em relação a um local geográfico de referência. O local de referência é fornecido como parte da consulta em um parâmetro (usando o parâmetro de consulta scoringParameter) como um argumento lon,lat.
funções > distância > referencePointParameter Um parâmetro deve ser passado nas consultas para usar como localização de referência (usando o parâmetro de consulta scoringParameter).
funções > distância > boostingDistance Um número que indica a distância em quilômetros do local de referência em que o intervalo de aumento termina.
funções > marca A função de pontuação marca é usada para afetar a pontuação de documentos com base em marcas em documentos e consultas de pesquisa. Documentos com marcas em comum com a consulta de pesquisa serão ser aumentados. As marcações para a consulta de pesquisa são fornecidas como um parâmetro de pontuação em cada solicitação de pesquisa (usando o parâmetro de consulta scoringParameter).
funções > marca > tagsParameter Um parâmetro a ser transmitido em consultas para especificar marcas para uma determinada solicitação (usando o parâmetro de consulta scoringParameter). O parâmetro consiste em uma lista delimitada por vírgulas de termos inteiros. Se determinada marca na lista for uma lista delimitada por vírgulas, você poderá usar um normalizador de texto no campo para remover as vírgulas no momento da consulta (mapear o caractere de vírgula para um espaço). Essa abordagem "nivelará" a lista para que todos os termos sejam uma única cadeia de caracteres longa de termos delimitados por vírgula.
functionAggregation Opcional. Aplicável apenas quando funções são especificadas. Os valores válidos incluem: soma (padrão), média, mínimo, máximo e firstMatching. Uma pontuação de pesquisa é um valor único calculado por meio de diversas variáveis, incluindo várias funções. Esse atributo indica como os aumentos de todas as funções são combinados em um único aumento agregado que é aplicado à pontuação do documento base. A pontuação básica é baseada no valor tf-idf calculado a partir do documento e da consulta de pesquisa.
defaultScoringProfile Ao executar uma solicitação de pesquisa, se nenhum perfil de pontuação for especificado, a pontuação padrão será usada (tf-idf, somente).

É possível substituir o padrão interno, substituindo um perfil personalizado como aquele a ser usado quando nenhum perfil específico for fornecido na solicitação de pesquisa.

Set interpolations

As interpolações permitem que você defina a forma da inclinação usada para pontuação. Como a pontuação é decrescente, a inclinação está sempre diminuindo, mas é a interpolação que determina a curva da inclinação descendente. As seguintes interpolações podem ser usadas:

Interpolação Descrição
linear Para itens que estão dentro do intervalo máximo e mínimo, o aumento aplicado ao item será feito em uma quantidade constantemente decrescente. Linear é a interpolação padrão para um perfil de pontuação.
constant Para itens que estão dentro do intervalo inicial e final, um aumento constante será aplicado aos resultados de classificação.
quadratic Em comparação com uma interpolação Linear que tem um aumento constantemente decrescente, a Quadrática inicialmente diminuirá em menor ritmo e, em seguida, à medida que se aproximar do intervalo final, diminuirá em um intervalo muito maior. Essa opção de interpolação não é permitida em funções de pontuação de marca.
logarithmic Em comparação com uma interpolação Linear que tem um aumento constantemente decrescente, a Logarítmica inicialmente diminuirá em um ritmo maior e, em seguida, à medida que se aproximar do intervalo final, diminuirá em um intervalo muito menor. Essa opção de interpolação não é permitida em funções de pontuação de marca.

Constant, linear, quadratic, log10 lines on graph

Definir boostingDuration

boostingDuration é um atributo da função freshness. Você pode usá-lo para definir um período de expiração após o qual o aumento será interrompido para um documento específico. Por exemplo, para aumentar uma linha de produtos ou marca por um período promocional de 10 dias, você especificaria o período de 10 dias como "P10D" para esses documentos.

boostingDuration deve ser formatado como um valor XSD de "dayTimeDuration" (um subconjunto restrito de um valor de duração ISO 8601). O padrão para isso é: "P[nD][T[nH][nM][nS]]".

A tabela a seguir fornece vários exemplos.

Duration boostingDuration
1 dia "P1D"
2 dias e 12 horas "P2DT12H"
15 minutos "PT15M"
30 dias, 5 horas, 10 minutos e 6,334 segundos "P30DT5H10M6.334S"

Para obter mais exemplos, consulte Esquema XML: tipos de dados (site W3.org).

Exemplo estendido

O exemplo a seguir mostra o esquema de um índice com dois perfis de pontuação (boostGenre, newAndHighlyRated). Qualquer consulta em relação a esse índice que inclua um dos perfis como um parâmetro de consulta usará o perfil para pontuar o conjunto de resultados.

O perfil boostGenre usa campos de texto ponderados, aumentando as correspondências encontradas nos campos albumTitle, genre e artistName. Os campos são aumentados 1,5, 5 e 2, respectivamente. Por que o campo gênero aumentou muito mais do que os outros? Se a pesquisa for conduzida sobre dados relativamente homogêneos (como é o caso de 'genre' em musicstoreindex), uma variação maior nos pesos relativos poderá ser necessária. Por exemplo, em musicstoreindex, 'rock' é exibido como um gênero e em descrições de gênero redigidas de forma idêntica. Se você quiser que gênero tenha um peso maior do que a descrição do gênero, o campo gênero precisará ter um peso relativo muito mais alto.

{  
  "name": "musicstoreindex",  
  "fields": [  
    { "name": "key", "type": "Edm.String", "key": true },  
    { "name": "albumTitle", "type": "Edm.String" },  
    { "name": "albumUrl", "type": "Edm.String", "filterable": false },  
    { "name": "genre", "type": "Edm.String" },  
    { "name": "genreDescription", "type": "Edm.String", "filterable": false },  
    { "name": "artistName", "type": "Edm.String" },  
    { "name": "orderableOnline", "type": "Edm.Boolean" },  
    { "name": "rating", "type": "Edm.Int32" },  
    { "name": "tags", "type": "Collection(Edm.String)" },  
    { "name": "price", "type": "Edm.Double", "filterable": false },  
    { "name": "margin", "type": "Edm.Int32", "retrievable": false },  
    { "name": "inventory", "type": "Edm.Int32" },  
    { "name": "lastUpdated", "type": "Edm.DateTimeOffset" }  
  ],  
  "scoringProfiles": [  
    {  
      "name": "boostGenre",  
      "text": {  
        "weights": {  
          "albumTitle": 1.5,  
          "genre": 5,  
          "artistName": 2  
        }  
      }  
    },  
    {  
      "name": "newAndHighlyRated",  
      "functions": [  
        {  
          "type": "freshness",  
          "fieldName": "lastUpdated",  
          "boost": 10,  
          "interpolation": "quadratic",  
          "freshness": {  
            "boostingDuration": "P365D"  
          }  
        },  
        {
          "type": "magnitude",  
          "fieldName": "rating",  
          "boost": 10,  
          "interpolation": "linear",  
          "magnitude": {  
            "boostingRangeStart": 1,  
            "boostingRangeEnd": 5,  
            "constantBoostBeyondRange": false  
          }  
        }  
      ]  
    }  
  ],  
  "suggesters": [  
    {  
      "name": "sg",  
      "searchMode": "analyzingInfixMatching",  
      "sourceFields": [ "albumTitle", "artistName" ]  
    }  
  ]   
}  

Confira também