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

Neste artigo, você aprenderá como definir um perfil de pontuação. Um perfil de pontuação é um critério para impulsionar uma pontuação de pesquisa com base nos parâmetros fornecidos. Por exemplo, você pode querer que as correspondências encontradas em um campo "tags" 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 "tags") ou uma função.

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

Nota

Não está familiarizado com conceitos de relevância? O segmento de vídeo a seguir no YouTube avança rapidamente para como os perfis de pontuação funcionam no Azure AI Search. Você também pode visitar Relevância e pontuação na Pesquisa de IA do Azure 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 chamado "geo". Este exemplo impulsiona os resultados que têm o termo de pesquisa no campo hotelName. Ele também usa a função para favorecer resultados que estão a distance menos de 10 quilômetros da localização atual. Se alguém pesquisar o termo "pousada" e "pousada" fizer parte do nome do hotel, os documentos que incluem hotéis com "pousada" em um raio de 10 KM da localização atual aparecerão mais acima 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, sua 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 (-). É seguido pelas coordenadas de longitude e latitude, onde 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 o POST. No 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"]
}

Esta consulta pesquisa o termo "pousada" e passa no local atual. Observe que essa consulta inclui outros parâmetros, como scoringParameter. Os parâmetros de consulta, incluindo "scoringParameter", são descritos em Pesquisar documentos (API REST).

Consulte o Exemplo estendido para revisar um exemplo mais detalhado de um perfil de pontuação.

Como as pontuações são calculadas

As pontuações são calculadas para consultas de pesquisa de texto completo. As correspondências são pontuadas com base na relevância da correspondência, e as correspondências com maior pontuação são retornadas na resposta da consulta. A pontuação geral para cada documento é uma agregação das pontuações individuais para cada campo, onde a pontuação individual de cada campo é calculada com base na frequência do termo e na frequência do documento dos termos pesquisados dentro desse campo (conhecido como TF-IDF ou frequência do documento inverso à frequência do termo).

Você pode usar o parâmetro featuresMode (visualização) para solicitar detalhes de pontuação extra com os resultados da pesquisa (incluindo as pontuações de nível de campo).

Quando adicionar 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 for longe o suficiente para atingir seus objetivos de negócios. Por exemplo, você pode decidir que a relevância da pesquisa deve favorecer os itens recém-adicionados. Da mesma forma, você pode ter um campo que contém margem de lucro ou algum outro campo que indique potencial de receita. Impulsionar resultados que sejam mais significativos para seus usuários ou para a empresa é muitas vezes o fator decisivo na adoção de perfis de pontuação.

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

Etapas para adicionar um perfil de pontuação

Para implementar um comportamento de pontuação personalizado, adicione um perfil de pontuação ao esquema que define o índice. Você pode ter até 100 perfis de pontuação em um índice (consulte Limites de serviço), mas só pode especificar um perfil de cada vez 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 reconstruí-lo. Use uma solicitação de índice de atualização para postar 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 é obrigatório. Certifique-se de seguir as convenções de nomenclatura do Azure AI Search para campos (começa com uma letra, evita caracteres especiais e palavras reservadas).

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

Você deve trabalhar iterativamente, usando um conjunto de dados que o ajudará a provar ou refutar 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

Utilização de campos ponderados

Use campos ponderados quando o contexto do campo for importante e as consultas forem pesquisa de texto completo. Por exemplo, se uma consulta incluir o termo "aeroporto", talvez você queira 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 impulsionada para esse campo se tornará 6, contribuindo para uma pontuação geral mais alta para o próprio documento pai.

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

Usando funções

Use funções quando pesos relativos simples são insuficientes ou não se aplicam, como é o caso da distância e do frescor, 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 no Azure AI Search, consulte Tipos de dados suportados.

Function Description
"frescura" Aumenta por valores em um campo datetime (Edm.DateTimeOffset). Esta função tem um atributo "boostingDuration" para que você possa especificar um valor que represente um período de tempo durante o qual o impulsionamento ocorre.
"magnitude" Aumenta com base em quão alto ou baixo é um valor numérico. Os cenários que exigem essa função incluem o aumento por margem de lucro, preço mais alto, preço mais baixo ou uma contagem de downloads. Esta função só pode ser usada com Edm.Double e Edm.Int campos. Para a função de magnitude, você pode inverter o intervalo, de alto para baixo, se quiser o padrão inverso (por exemplo, para impulsionar itens com preços mais baixos do que itens com preços mais altos). Dada uma faixa de preços de US $ 100 a US $ 1, você definiria "boostingRangeStart" em 100 e "boostingRangeEnd" em 1 para impulsionar os itens de preço mais baixo.
"Distância" Impulsiona pela proximidade ou localização geográfica. Esta função só pode ser usada com Edm.GeographyPoint campos.
"Tag" Impulsiona por tags que são comuns a documentos de pesquisa e cadeias de caracteres de consulta. As tags 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 o uso de funções

  • As funções só podem ser aplicadas a campos atribuídos como filtráveis.
  • O tipo de função ("frescura", "magnitude", "distância", "etiqueta") deve ser minúsculo.
  • 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 do imóvel

Atributo Description
nome Necessário. Este é o nome do perfil de pontuação. Segue as mesmas convenções de nomenclatura de um campo. Ele deve começar com uma letra, não pode conter pontos, dois pontos ou símbolos @ e não pode começar com a frase azureSearch (diferencia maiúsculas de minúsculas).
text Contém a propriedade weights.
pesos Opcional. Pares nome-valor que especificam um campo pesquisável e um número inteiro ou de vírgula flutuante positivo para aumentar a pontuação de um campo. O número inteiro ou número positivo torna-se 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 de 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 do documento, que é então usada para classificar o documento no conjunto de resultados.
functions Opcional. Uma função de pontuação só 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, frescor, distância e etiqueta. Você pode incluir mais de uma função em cada perfil de pontuação. O nome da função deve ser minúsculo.
aumento de funções > Necessário para funções de pontuação. Um número positivo usado como multiplicador para a 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 de data/hora, magnitude com campos inteiros ou duplos e distância com campos de localização). Você só pode especificar um único campo por definição de função. Por exemplo, para usar 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 da pontuação aumenta do início ao fim do intervalo. Os valores válidos incluem Linear (padrão), Constante, Quadrático e Logarítmico. Consulte Definir interpolações para obter detalhes.
magnitude das funções > A função de pontuação de magnitude é usada para alterar classificações com base no intervalo de valores para um campo numérico. Alguns dos exemplos de uso mais comuns são: "Classificações por estrelas:

" Altere a pontuação com base no valor dentro do campo "Classificação por estrelas". Quando dois itens forem relevantes, o item com a classificação mais alta será exibido primeiro.
"Margem": Quando dois documentos são relevantes, um varejista pode querer impulsionar documentos que têm margens mais altas primeiro.
"Contagem de cliques:" Para aplicativos que rastreiam ações de cliques em produtos ou páginas, você pode usar a magnitude para impulsionar itens que tendem a receber mais tráfego.
"Download counts:" Para aplicativos que rastreiam downloads, a função de magnitude permite impulsionar os itens que têm mais downloads.
magnitude das > funções > boostingRangeStart Define o valor inicial do intervalo sobre o qual a magnitude é pontuada. O valor deve ser um número inteiro ou de vírgula flutuante. Para classificações de estrelas de 1 a 4, isso seria 1. Para margens superiores a 50%, seriam 50.
magnitude das > funções > boostingRangeEnd Define o valor final do intervalo sobre o qual a magnitude é pontuada. O valor deve ser um número inteiro ou de vírgula flutuante. Para classificações de 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 impulso total continuará a ser aplicado a documentos que tenham um valor para o campo de destino maior do que a extremidade superior do intervalo. Se false, o impulso desta função não será aplicado a documentos com um valor para o campo de destino que esteja fora do intervalo.
frescura das funções > A função de pontuação de atualização é usada para alterar as pontuações de classificação de itens com base em valores nos campos DateTimeOffset. Por exemplo, um item com uma data mais recente pode ser classificado mais alto do que itens mais antigos.

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

Na versão de serviço atual, uma extremidade do intervalo será corrigida para a hora atual. A outra extremidade é um tempo no passado baseado no boostingDuration. Para impulsionar uma série de vezes no futuro, use um boostingDuration negativo.

A taxa na qual o aumento muda de um intervalo máximo e mínimo é determinada pela Interpolação aplicada ao perfil de pontuação (veja a figura abaixo). Para reverter o fator de impulso aplicado, escolha um fator de impulso inferior a 1.
funções > frescura > impulsionandoDuração Define um período de expiração após o qual a promoção será interrompida para um documento específico. Consulte set boostingDuration na seção a seguir para obter sintaxe e exemplos.
distância de funções > A função de pontuação de distância é usada para afetar a pontuação de documentos com base em quão perto ou longe eles estão em relação a uma localização geográfica de referência. O local de referência é dado como parte da consulta em um parâmetro (usando o parâmetro de consulta scoringParameter) como um lon,lat argumento.
funções > distância > referencePointParameter Um parâmetro a ser passado em consultas para usar como local de referência (usando o parâmetro de consulta scoringParameter).
funções > aumento de distânciaDistance > Um número que indica a distância em quilómetros do local de referência onde termina o alcance de reforço.
tag de funções > A função de pontuação de tags é usada para afetar a pontuação de documentos com base em tags em documentos e consultas de pesquisa. Os documentos que têm etiquetas em comum com a consulta de pesquisa serão impulsionados. As tags 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).
tags tags de tags > de funçõesParameter > Um parâmetro a ser passado em consultas para especificar tags para uma solicitação específica (usando o parâmetro de consulta scoringParameter). O parâmetro consiste em uma lista delimitada por vírgulas de termos inteiros. Se uma determinada tag dentro da lista for uma lista delimitada por vírgula, 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). Esta abordagem irá "nivelar" a lista de modo a que todos os termos sejam uma única e longa cadeia de termos delimitados por vírgula.
funçãoAgregação Opcional. Aplica-se somente quando as 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 que é calculado a partir de várias variáveis, incluindo várias funções. Este atributo indica como os impulsos de todas as funções são combinados em um único impulso agregado que, em seguida, é aplicado à pontuação do documento base. A pontuação base baseia-se 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 (somente tf-idf ).

Você pode substituir o padrão interno, substituindo um perfil personalizado como aquele a ser usado quando nenhum perfil específico é fornecido na solicitação de pesquisa.

Definir interpolações

As interpolações permitem definir a forma da inclinação usada para pontuação. Como a pontuação é alta a baixa, a inclinação está sempre diminuindo, mas a interpolação determina a curva da inclinação descendente. Podem ser utilizadas as seguintes interpolações:

Interpolação Description
linear Para itens que estão dentro da faixa máxima e mínima, o impulso 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 impulso constante será aplicado aos resultados da classificação.
quadratic Em comparação com uma interpolação linear que tem um impulso constantemente decrescente, o Quadratic inicialmente diminuirá em um ritmo menor e, em seguida, à medida que se aproxima da faixa final, diminui em um intervalo muito maior. Essa opção de interpolação não é permitida em funções de pontuação de tags.
logarithmic Em comparação com uma interpolação linear que tem um impulso em constante declínio, a Logarítmica irá inicialmente diminuir a um ritmo mais elevado e, depois, à medida que se aproxima do intervalo final, diminui num intervalo muito menor. Essa opção de interpolação não é permitida em funções de pontuação de tags.

Constant, linear, quadratic, log10 lines on graph

Definir boostingDuration

boostingDuration é um atributo da freshness função. Você o usa para definir um período de expiração após o qual o impulsionamento será interrompido para um documento específico. Por exemplo, para impulsionar uma linha de produtos ou marca para um período promocional de 10 dias, você deve especificar o período de 10 dias como "P10D" para esses documentos.

boostingDuration deve ser formatado como um valor XSD "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.

Duração boostingDuração
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 (W3.org site).

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 qualquer perfil como um parâmetro de consulta usará o perfil para pontuar o conjunto de resultados.

O boostGenre perfil usa campos de texto ponderados, aumentando as correspondências encontradas nos campos albumTitle, genre e artistName. Os campos são impulsionados 1,5, 5 e 2, respectivamente. Por que o gênero é impulsionado tão mais alto do que os outros? Se a pesquisa for realizada sobre dados um pouco homogêneos (como é o caso de 'gênero' no musicstoreindex), você pode precisar de uma variação maior nos pesos relativos. Por exemplo, no musicstoreindex, 'rock' aparece como um gênero e em descrições de gênero com frases idênticas. Se você quiser que o gênero supere a descrição do gênero, o campo de gênero precisará de um peso relativo muito maior.

{  
  "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" ]  
    }  
  ]   
}  

Consulte também