Uma vez que as necessidades de pesquisa podem diferir para diferentes setores e podem variar ao longo do tempo, o comportamento de classificação predefinido pode não ser ideal para todas as necessidades empresariais. Para resolver este problema, pode modificar o comportamento de classificação através da classificação personalizada.
Esta página descreve como usar uma fórmula de classificação personalizada no seu pedido de pesquisa e como ajustar a fórmula. Esta funcionalidade está disponível para dados estruturados, não estruturados e de Websites.
Vista geral
A classificação personalizada permite-lhe fornecer uma expressão matemática que se baseia num conjunto de sinais calculados pelo modelo, como a pontuação de relevância semântica e a pontuação de similaridade das palavras-chave; e sinais baseados em documentos, como um campo personalizado, como a distância ou a antiguidade do documento.
Com a classificação personalizada, pode alcançar o seguinte:
- Ganhe visibilidade: compreenda que sinais contribuem para a classificação final dos seus resultados da pesquisa.
- Ajuste os sinais existentes: ajuste as ponderações de vários sinais, como a similaridade semântica, a correspondência de palavras-chave ou a atualidade dos documentos.
- Incorporar lógica empresarial: adicione os seus próprios sinais personalizados dos dados de documentos diretamente à fórmula de classificação.
- Otimize sistematicamente: 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 num Website de reserva de hotéis:
luxury hotel with a large rooftop pool in Vancouver, pet-friendly and close to airport.
Suponhamos que são obtidas as seguintes entradas:
- Hotel A: "O principal hotel de luxo de Vancouver com vista para o aeroporto. Inclui uma impressionante piscina no telhado. Não são permitidos animais de estimação."
- Hotel B: "Hotel elegante e moderno no centro de Vancouver. Aceita animais de estimação com quartos espaçosos. Dispõe de uma grande piscina interior e um centro de fitness."
- Hotel C: "Um hotel boutique que aceita animais de estimação encantador perto do aquário (a 10 minutos a pé do centro da cidade). Apresenta um encantador pátio com jardim. Sem piscina."
- Hotel D: "Um resort rústico emblemático. Conhecido pela sua gastronomia requintada e serviço impecável. Inclui piscina interior e spa. Opções adequadas para animais de estimação disponíveis mediante pedido."
Todos os hotéis no catálogo incluem um campo distance_from_airport
em quilómetros (km).
Classificação baseada em incorporação
O sistema de pesquisa converte a consulta numa única incorporação. Em seguida, compara esta incorporação de consulta com as incorporações de todos os hotéis no respetivo catálogo. Os hotéis com incorporações numericamente mais próximas da incorporação da consulta são classificados mais alto.
Aqui está a classificação provável de uma pesquisa de relevância puramente baseada em incorporações:
Classificação | Hotel | Motivo possível desta classificação |
---|---|---|
1 | Hotel A | Correspondência semântica muito forte para luxo, aeroporto e piscina no telhado. "Não aceita 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". No entanto, "interior" em vez de "no terraço", "moderno" e "elegante" em vez de "luxuoso" e "centro da cidade" em vez de "aeroporto" tornam-no menos relevante do que A. |
3 | Hotel D | Forte correspondência semântica para "aceita animais de estimação" e "piscina grande", mas "interior" em vez de "no terraço" e "rústico" em vez de "luxuoso" tornam-no ligeiramente menos relevante semanticamente do que A e D. |
4 | Hotel C | É muito adequado para animais de estimação, mas "sem piscina" e "boutique" reduzem significativamente a sua relevância para esta consulta específica. |
Esta classificação não oferece os resultados mais relevantes. O Hotel A está classificado no topo, mesmo que "não sejam permitidos animais de estimação", o que pode não ser a preferência de muitos utilizadores. O Hotel D, que se enquadra em muitos critérios, tem uma classificação inferior porque o seu estado "rústico" não corresponde necessariamente a "luxo" e a piscina "interior" tem uma classificação inferior às correspondências exatas de "grande" e "exterior".
Classificação personalizada
Suponhamos que configurou a seguinte expressão de classificação para este cenário de exemplo. Para ver informações sobre os componentes desta expressão, consulte o artigo Acerca da 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
Onde distance_from_airport
é um campo recuperável no catálogo e
c.distance_from_airport
funciona como um sinal.
Na classificação personalizada, considera diferentes sinais que influenciam a relevância de um documento. Em seguida, cria uma expressão matemática que contém estes sinais com uma sintaxe válida. Nesta expressão, normaliza os sinais e adiciona ponderações às respetivas classificações derivadas. A pontuação personalizada final é calculada e os documentos são classificados.
Neste exemplo, este processo pode ser explicado da seguinte forma:
É atribuída a cada hotel uma pontuação de semelhança semântica e uma pontuação de semelhança de palavras-chave. Além disso, a distância do aeroporto é um sinal importante derivado do documento.
A função de transformação de classificação recíproca ou
rr()
é usada para transformar todas as pontuações na mesma escala.A pontuação derivada de cada sinal recebe uma ponderação e, em seguida, a soma de todas as pontuações individuais torna-se a pontuação de classificação personalizada para cada hotel.
Os diferentes sinais para cada hotel estão tabelados da seguinte forma:
Hotel | semantic_similarity_score |
keyword_similarity_score |
c.distance_from_airport |
Pontuação de classificação personalizada | Classificação personalizada | Classificação baseada em incorporação |
---|---|---|---|---|---|---|
Hotel A | 9,0 | 6.2 ("aeroporto", "luxo", "piscina no terraço") | 5.0 | 0,04879 | 2 | 1 |
Hotel B | 7,5 | 5.6 ("pet-friendly", "downtown", "indoor pool", "stylish") | 12,5 | 0,04691 | 3 | 2 |
Hotel C | 5.0 | 3.4 ("pet-friendly", "downtown") | 18 | 0,04525 | 4 | 4 |
Hotel D | 8.0 | 4,5 ("piscina interior", "aceita animais de estimação", "rústico") | 1 | 0,04890 | 1 | 3 |
Comparando os dois métodos de classificação, a classificação personalizada oferece uma classificação mais ponderada que provavelmente corresponde melhor às necessidades de um utilizador do que uma classificação puramente baseada em incorporações.
Acerca da implementação da classificação personalizada
Para obter uma classificação personalizada nos resultados da pesquisa, tem de chamar o método
search
fornecendo os seguintes campos:
Backend da expressão de classificação (
rankingExpressionBackend
): este campo indica qual dos seguintes mecanismos de classificação deve ser usado.RANK_BY_EMBEDDING
: este é o valor predefinido quando este campo não é especificado. Se escolher esta opção, os resultados são classificados de acordo com uma expressão de classificação predefinida baseada em incorporações ou relevância.RANK_BY_FORMULA
: isto substitui a classificação predefinida e permite-lhe fornecer a sua fórmula personalizada no camporankingExpression
.
Expressão de classificação (
rankingExpression
): este campo contém uma fórmula matemática que decide a classificação dos documentos obtidos.Para
RANK_BY_EMBEDDING
, isto baseia-se na pontuação de relevância (double * relevanceScore
) ou na incorporação (double * dotProduct(embedding_field_path)
).Para
RANK_BY_FORMULA
, esta é uma expressão organizada que combina vários sinais para calcular uma nova pontuação para cada resultado da pesquisa.
Sinais padrão
O Vertex AI Search oferece uma variedade de sinais que pode usar para formular uma classificação personalizada. Seguem-se os sinais padrão disponíveis:
Nome do sinal | Descrição |
---|---|
default_rank |
A classificação predefinida do documento, conforme determinado pelo algoritmo de classificação VAIS padrão |
semantic_similarity_score |
Uma pontuação calculada com base nas incorporações de consultas e conteúdo para determinar a semelhança entre uma consulta de pesquisa e o conteúdo de um documento. Este valor é calculado através de um algoritmo proprietário da Google. |
relevance_score |
Uma pontuação produzida por um modelo de relevância profunda, que processa interações complexas entre a consulta e o documento. O modelo determina o significado e a intenção de uma consulta no contexto do conteúdo. Este valor é calculado através de um algoritmo proprietário da Google. |
keyword_similarity_score |
Uma classificação com uma forte ênfase na correspondência de palavras-chave. Este sinal usa a função de classificação Best Match 25 (BM25). |
document_age |
A idade do documento em horas. Suporta valores de vírgula 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 denotar as taxas de conversão previstas, calculadas com base nos dados de eventos dos utilizadores. Este sinal usa a taxa de cliques prevista (pCTR) para avaliar a relevância de um resultado da pesquisa na perspetiva do utilizador. |
topicality_rank |
Uma classificação para denotar o ajuste de semelhança de palavras-chave calculado através de um algoritmo Google proprietário. |
boosting_factor |
Uma combinação de todos os aumentos personalizados que aplicou ao documento. |
Além destes campos, pode usar qualquer campo personalizado num documento que esteja marcado como recuperável. Para o fazer, adicione o prefixo c.
aos nomes dos campos. Por exemplo, se tiver um campo personalizado denominado date_approved
, pode usar c.date_approved
como um sinal personalizado.
Os nomes dos sinais são uma combinação de carateres alfabéticos e sublinhados (_
).
Segue-se uma lista de nomes reservados que não podem ser usados como nomes de sinais:
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 vírgula flutuante positivos ou negativos que adicionam um peso a um sinal ou uma expressão.Sinais (
signal
): os nomes dos sinais apresentados na secção Sinais 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 destas expressões aceita exatamente um argumento, que é uma expressão escrita em termos de um sinal.
Exemplos de uma função válida:
exp(c.document_age)
elog(keywordSimilarityScore * 0.2 + 1.0)
.Função de transformação da classificação recíproca (
rr
): Esta função é expressa comorr(expression, k)
. Primeiro, ordena os documentos pelo valor deexpression
por ordem descendente e atribui uma classificação aos documentos. Em seguida, calcula o valor final usando as expressões1 / (rank_i + k)
; onderank_i
é a posição do documento na lista ordenada, começando em 0, ek
é um número de vírgula flutuante positivo que fornece.A função
rr()
transforma todas as pontuações na mesma escala e elimina a necessidade de normalização adicional.Funções de processamento de valores não numéricos (NaN):
is_nan(expression)
: quando a expressão é avaliada como NaN, como quando falta um sinal para um documento, é devolvido1
. Caso contrário, é devolvido0
.fill_nan(arg_expression, fill_with_expression)
: searg_expression
for avaliado como NaN, devolvefill_with_expression
. Caso contrário, devolvearg_expression
. Isto é fundamental para processar documentos que possam não ter determinados sinais.
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 que usa a classificação recíproca e o processamento de NaN:
rr(fill_nan(semantic_similarity_score, 0), 40) * 0.5 + topicality_rank * 0.5
Uma fórmula complexa que usa a classificação recíproca, a função exponencial e o processamento 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
Personalize a classificação através da fórmula de classificação na pesquisa
Para personalizar a classificação dos seus documentos nos resultados da pesquisa, crie manualmente uma fórmula 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 o seguinte:
PROJECT_ID
: o ID do seu projeto Google Cloud .APP_ID
: o ID da app Vertex AI Search que quer consultar.QUERY
: o texto da consulta a pesquisar.RANKING_EXPRESSION
: a fórmula de classificação personalizada que pode escrever usando os sinais disponíveis com uma sintaxe de fórmula de classificação válida.- Para ver exemplos válidos, consulte Exemplos de fórmulas de classificação.
- Para ajustar a fórmula de classificação, que pode dar-lhe os melhores resultados, consulte o artigo Ajuste a fórmula de classificação com a biblioteca Python.
Ajuste a fórmula de classificação através da biblioteca Python
Para exemplos de utilização mais avançados, encontrar as ponderações ideais para a sua fórmula pode ser difícil. Para ultrapassar esta situação, pode usar a biblioteca Python de ajuste da classificação do Vertex AI Search, que é uma ferramenta de código aberto, e chegar a uma fórmula adequada para o seu exemplo de utilização.
O fluxo de trabalho geral é o seguinte:
- Prepare um conjunto de dados de consultas com etiquetas de ouro correspondentes. Estas etiquetas douradas podem ser campos de identificação exclusivos, como o ID do documento, que podem ajudar a associar o objeto
SearchResult
na resposta da pesquisa. - Para um conjunto de consultas representativas, chame a API
search
para obter os sinais de classificação disponíveis para todos os documentos devolvidos. Pode encontrar esta opção no campoSearchResult.rankSignals
. Armazene estes dados juntamente com as suas etiquetas universais. Use a biblioteca Python para preparar um modelo de classificação neste conjunto de dados. Para mais informações, consulte a biblioteca Python Clearbox.
Converta a fórmula dos resultados da preparação numa expressão de classificação, que pode usar nas suas chamadas API.