Como as necessidades de pesquisa podem variar de acordo com o setor e mudar com o tempo, o comportamento de classificação padrão pode não ser ideal para todas as necessidades comerciais. Para resolver isso, modifique o comportamento de classificação usando a classificação personalizada.
Esta página descreve como usar uma fórmula de classificação personalizada na sua solicitação de pesquisa e como ajustar a fórmula. Esse recurso está disponível para dados estruturados, não estruturados e de sites.
Visão geral
Com a classificação personalizada, você pode fornecer uma expressão matemática que depende de um conjunto de indicadores calculados pelo modelo, como pontuação de relevância semântica e pontuação de similaridade de palavras-chave, e indicadores baseados em documentos, como um campo personalizado de distância ou idade do documento.
Com a classificação personalizada, é possível fazer o seguinte:
- Ganhar visibilidade: entenda quais indicadores contribuem para o ranking final dos resultados da pesquisa.
- Ajustar indicadores atuais: ajuste os pesos de vários indicadores, como similaridade semântica, correspondência de palavras-chave ou atualização de documentos.
- Incorpore a lógica de negócios: adicione seus próprios indicadores personalizados dos dados de documentos diretamente à fórmula de classificação.
- Otimize de forma sistemática: use a biblioteca Python de código aberto para descobrir programaticamente a fórmula de classificação ideal.
Necessidade de classificação personalizada: um exemplo
Considere um cenário em que a seguinte string é consultada em um site de reservas de hotéis:
luxury hotel with a large rooftop pool in Vancouver, pet-friendly and close to airport.
Por exemplo, as seguintes entradas são recuperadas:
- Hotel A: "O principal hotel de luxo de Vancouver com vista para o aeroporto. Tem uma piscina na cobertura incrível. Não são permitidos animais de estimação."
- Hotel B: "Hotel moderno e elegante no centro de Vancouver. Aceita animais de estimação com quartos espaçosos. Tem uma grande piscina coberta e academia".
- Hotel C: "Um hotel boutique charmoso que aceita animais de estimação perto do Aquário (a 10 minutos a pé do centro da cidade). Tem um lindo pátio com jardim. Sem piscina."
- Hotel D: "Um resort rústico icônico. Conhecido pela culinária requintada e pelo serviço impecável. Tem piscina coberta e spa. Opções para animais de estimação disponíveis mediante solicitação".
Todos os hotéis no catálogo incluem um campo distance_from_airport
em quilômetros (km).
Classificação baseada em embeddings
O sistema de pesquisa converte a consulta em um único embedding. Em seguida, ele compara esse encadeamento de consulta com os encadeamentos de todos os hotéis no catálogo. Os hotéis com embeddings numericamente mais próximos ao embedding da consulta são classificados mais alto.
Este é o possível ranking de uma pesquisa de relevância puramente baseada em embeddings:
Classificação | Hotel | Possível motivo para esse ranking |
---|---|---|
1 | Hotel A | Correspondência semântica muito forte para luxo, aeroporto e piscina na cobertura. A opção "sem animais de estimação" não é desejável, mas as outras correspondências fortes dominam. |
2 | Hotel B | Boa correspondência semântica para "aceita animais de estimação" e "piscina". Mas "interno" em vez de "cobertura", "moderno" e "elegante" em vez de "luxuoso" e "centro" em vez de "aeroporto" tornam a opção menos relevante do que A. |
3 | Hotel D | A correspondência semântica forte para "aceita animais" e "piscina grande", mas "interna" em vez de "na cobertura" e "rústica" em vez de "luxuosa", torna a opção um pouco menos relevante semanticamente do que A e D. |
4 | Hotel C | "Aceita animais" é um fator forte, mas "sem piscina" e "boutique" reduzem significativamente a relevância para essa consulta específica. |
Essa classificação não oferece os resultados mais relevantes. O Hotel A está no topo, mesmo que a política "não aceita animais de estimação" não seja a preferida de muitos usuários. O Hotel D atende a muitos critérios, mas tem uma classificação mais baixa porque o status "rústico" não corresponde necessariamente a "luxo", e a piscina "coberta" tem uma classificação mais baixa do que as correspondências exatas de "grande" e "externa".
Classificação personalizada
Digamos que você tenha configurado a seguinte expressão de classificação para este cenário de exemplo. Para informações sobre os componentes dessa expressão, consulte Sobre a implementação da classificação personalizada.
rankingExpression = rr(semantic_similarity_score, 32) * 0.4 + rr(keyword_similarity_score, 32) * 0.3 + rr(c.distance_from_airport * -1, 32) * 0.8
Em que distance_from_airport
é um campo recuperável no catálogo e c.distance_from_airport
funciona como um indicador.
No ranking personalizado, você considera diferentes indicadores que influenciam a relevância de um documento. Em seguida, crie uma expressão matemática que contenha esses sinais usando uma sintaxe válida. Nessa expressão, você normaliza os indicadores e adiciona ponderações às pontuações derivadas. A pontuação personalizada final é calculada e os documentos são classificados.
Neste exemplo, esse processo pode ser explicado da seguinte forma:
Cada hotel recebe uma pontuação de similaridade semântica e de palavra-chave. Além disso, a distância do aeroporto é um indicador importante derivado do documento.
A função de transformação de classificação recíproca ou
rr()
é usada para transformar todos os scores na mesma escala.A pontuação derivada de cada indicador recebe uma ponderação, e a soma de todas as pontuações individuais se torna a pontuação de classificação personalizada de cada hotel.
Os diferentes indicadores de cada hotel são mostrados na tabela a seguir:
Hotel | semantic_similarity_score |
keyword_similarity_score |
c.distance_from_airport |
Pontuação de classificação personalizada | Classificação personalizada | Classificação baseada em embeddings |
---|---|---|---|---|---|---|
Hotel A | 9,0 | 6.2 ("aeroporto", "luxo", "piscina na cobertura") | 5.0 | 0,04879 | 2 | 1 |
Hotel B | 7,5 | 5.6 ("aceita animais", "centro da cidade", "piscina coberta", "elegante") | 12,5 | 0.04691 | 3 | 2 |
Hotel C | 5.0 | 3.4 ("aceita animais", "centro da cidade") | 18 | 0,04525 | 4 | 4 |
Hotel D | 8,0 | 4,5 ("piscina coberta", "aceita animais de estimação", "rústico") | 1 | 0,04890 | 1 | 3 |
Ao comparar os dois métodos, a classificação personalizada oferece uma classificação mais ponderada que provavelmente atende melhor às necessidades de um usuário do que uma classificação puramente baseada em incorporação.
Sobre a implementação da classificação personalizada
Para receber uma classificação personalizada nos resultados da pesquisa, chame o método
search
fornecendo os seguintes campos:
Backend da expressão de classificação (
rankingExpressionBackend
): esse campo indica qual dos seguintes mecanismos de classificação será usado.RANK_BY_EMBEDDING
: esse é o valor padrão quando o campo não é especificado. Essa opção classifica os resultados de acordo com uma expressão de classificação predefinida, que é baseada em incorporação ou relevância.RANK_BY_FORMULA
: isso substitui a classificação padrão e permite fornecer sua fórmula personalizada no camporankingExpression
.
Expressão de classificação (
rankingExpression
): esse campo contém uma fórmula matemática que decide a classificação dos documentos recuperados.Para
RANK_BY_EMBEDDING
, isso é baseado em pontuação de relevância (double * relevanceScore
) ou em incorporação (double * dotProduct(embedding_field_path)
).Para
RANK_BY_FORMULA
, essa é uma expressão selecionada que combina vários indicadores para calcular uma nova pontuação para cada resultado da pesquisa.
Indicadores padrão
A Vertex AI para Pesquisa oferece vários indicadores que podem ser usados para formular uma classificação personalizada. Estes são os indicadores padrão disponíveis:
Nome do indicador | Descrição |
---|---|
default_rank |
A classificação padrão do documento, determinada pelo algoritmo de classificação VAIS padrão. |
semantic_similarity_score |
Uma pontuação calculada com base em embeddings de consulta e conteúdo para determinar a similaridade entre uma consulta de pesquisa e o conteúdo de um documento. Isso é calculado usando um algoritmo proprietário do Google. |
relevance_score |
Uma pontuação produzida por um modelo de relevância profunda, que processa interações complexas entre consulta e documento. O modelo determina o significado e a intenção de uma consulta no contexto do conteúdo. Isso é calculado usando um algoritmo proprietário do Google. |
keyword_similarity_score |
Uma pontuação com forte ênfase na correspondência de palavra-chave. Esse indicador usa a função de classificação Best Match 25 (BM25). |
document_age |
A idade do documento em horas. Aceita valores de ponto flutuante. Por exemplo, um valor de 0,5 significa 30 minutos, enquanto 50 significa 2 dias e 2 horas. |
pctr_rank |
Uma classificação para indicar as taxas de conversão previstas, calculadas com base nos dados de eventos do usuário. Esse indicador usa a taxa de cliques prevista (pCTR) para avaliar a relevância de um resultado da pesquisa do ponto de vista do usuário. |
topicality_rank |
Uma classificação para indicar o ajuste de similaridade de palavra-chave calculado usando um algoritmo proprietário do Google. |
boosting_factor |
Uma combinação de todos os reforços personalizados aplicados ao documento. |
Além desses campos, você pode usar qualquer campo personalizado em um documento marcado como recuperável. Para fazer isso, adicione o prefixo c.
aos nomes dos campos. Por exemplo, se você tiver um campo personalizado chamado date_approved
,
poderá usar c.date_approved
como um indicador personalizado.
Os nomes de indicadores são uma combinação de caracteres alfabéticos e sublinhados (_
).
Confira uma lista de nomes reservados que não podem ser usados como nomes de indicadores:
log
, exp
, rr
, is_nan
e fill_nan
.
Sintaxe da fórmula de classificação
A fórmula de classificação personalizada é uma expressão matemática com os seguintes componentes:
Números (
double
): valores de ponto flutuante positivos ou negativos que adicionam um peso a um sinal ou uma expressão.Indicadores (
signal
): os nomes dos indicadores listados na seção Indicadores disponíveis.Operadores aritméticos:
+
(adição) e*
(multiplicação).Funções matemáticas:
log(expression)
: o logaritmo naturalexp(expression)
: o expoente natural
Cada uma dessas expressões aceita exatamente um argumento, que é uma expressão escrita em termos de um indicador.
Exemplos de uma função válida:
exp(c.document_age)
elog(keywordSimilarityScore * 0.2 + 1.0)
.Função de transformação de classificação recíproca (
rr
): Essa função é expressa comorr(expression, k)
. Primeiro, ele classifica os documentos pelo valor deexpression
em ordem decrescente e atribui uma classificação a eles. Em seguida, ele calcula o valor final usando as expressões1 / (rank_i + k)
, em querank_i
é a posição do documento na lista classificada, começando em 0, ek
é um número de ponto flutuante positivo fornecido por você.A função
rr()
transforma todas as pontuações na mesma escala e elimina a necessidade de normalização adicional.Funções de tratamento de "Not a number" (NaN):
is_nan(expression)
: quando a expressão é avaliada como NaN, como quando um indicador está faltando em um documento,1
é retornado. Caso contrário,0
será retornado.fill_nan(arg_expression, fill_with_expression)
: searg_expression
for avaliado como NaN, retornaráfill_with_expression
. Caso contrário, retornaráarg_expression
. Isso é crucial para lidar com documentos que podem estar sem determinados indicadores.
Exemplos de fórmulas de classificação
Uma combinação linear elementar:
semantic_similarity_score * 0.7 + keyword_similarity_score * 0.3
Uma fórmula complexa usando classificação recíproca e tratamento de NaN:
rr(fill_nan(semantic_similarity_score, 0), 40) * 0.5 + topicality_rank * 0.5
Uma fórmula complexa que usa classificação recíproca, função exponencial e tratamento de NaN:
rr(fill_nan(semantic_similarity_score, 0), 40) * 0.2 + exp(keyword_similarity_score) * 0.3 + is_nan(keyword_similarity_score) * 0.1
Personalizar a classificação usando a fórmula de classificação na pesquisa
Para personalizar a classificação dos seus documentos nos resultados da pesquisa, crie uma fórmula manualmente e adicione-a à chamada da API
search
.
Formule uma expressão de classificação.
Receber resultados da pesquisa.
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:search" \ -d '{ "servingConfig": "projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search", "query": "QUERY", "rankingExpression": "RANKING_EXPRESSION", "rankingExpressionBackend": "RANK_BY_FORMULA" }'
Substitua:
PROJECT_ID
: o ID do seu projeto do Google Cloud .APP_ID
: o ID do app da Vertex AI para Pesquisa que você quer consultar.QUERY
: o texto da consulta a ser pesquisado.RANKING_EXPRESSION
: a fórmula de classificação personalizada que você pode escrever usando os indicadores disponíveis com uma sintaxe de fórmula de classificação válida.- Para exemplos válidos, consulte Exemplos de fórmulas de classificação.
- Para ajustar a fórmula de classificação, que pode oferecer os melhores resultados, consulte Ajustar a fórmula de classificação usando a biblioteca Python.
Ajustar a fórmula de classificação usando a biblioteca Python
Para casos de uso mais avançados, encontrar os pesos ideais para sua fórmula pode ser difícil. Para resolver isso, use a biblioteca Python de ajuste de classificação da Pesquisa da Vertex AI, que é uma ferramenta de código aberto, e encontre uma fórmula adequada para seu caso de uso.
O fluxo de trabalho geral é o seguinte:
- Prepare um conjunto de dados de consultas com rótulos dourados correspondentes. Esses rótulos dourados podem ser campos de identificação exclusivos, como o ID do documento, que ajudam a associar o objeto
SearchResult
na resposta da pesquisa. - Para um conjunto de consultas representativas, chame a API
search
para receber os indicadores de classificação disponíveis para todos os documentos retornados. Você pode encontrar isso no campoSearchResult.rankSignals
. Armazene esses dados com seus rótulos de ouro. Use a biblioteca Python para treinar um modelo de classificação nesse conjunto de dados. Para mais informações, consulte a biblioteca Python Clearbox.
Converta a fórmula dos resultados do treinamento em uma expressão de classificação, que pode ser usada nas chamadas de API.