Personalizzare il ranking dei risultati di ricerca

Poiché le esigenze di ricerca possono variare a seconda del settore e nel tempo, il comportamento di ranking predefinito potrebbe non essere ottimale per tutte le esigenze aziendali. Per risolvere questo problema, puoi modificare il comportamento di ranking utilizzando il ranking personalizzato.

Questa pagina descrive come utilizzare una formula di ranking personalizzata nella richiesta di ricerca e come ottimizzarla. Questa funzionalità è disponibile per dati strutturati, non strutturati e di siti web.

Panoramica

Il ranking personalizzato ti consente di fornire un'espressione matematica che si basa su un insieme di indicatori calcolati dal modello, come il punteggio di pertinenza semantica e il punteggio di somiglianza delle parole chiave, e su indicatori basati sui documenti, come un campo personalizzato come la distanza o l'età del documento.

Con il ranking personalizzato, puoi ottenere quanto segue:

  • Acquisire visibilità: scopri quali indicatori contribuiscono al ranking finale dei risultati di ricerca.
  • Ottimizza gli indicatori esistenti: regola i pesi di vari indicatori, come la similarità semantica, la corrispondenza delle parole chiave o la freschezza del documento.
  • Incorpora la logica aziendale: aggiungi i tuoi indicatori personalizzati dai dati dei documenti direttamente alla formula di ranking.
  • Ottimizza in modo sistematico: utilizza la libreria Python open source per scoprire in modo programmatico la formula di ranking ottimale.

Necessità di un ranking personalizzato: un esempio

Considera uno scenario in cui viene eseguita una query sulla seguente stringa in un sito web di prenotazione di hotel:

luxury hotel with a large rooftop pool in Vancouver, pet-friendly and close to airport.

Supponiamo che vengano recuperate le seguenti voci:

  • Hotel A: "Il principale hotel di lusso di Vancouver con vista sull'aeroporto. Dispone di una splendida piscina panoramica. Non sono ammessi animali domestici."
  • Hotel B: "Hotel elegante e moderno nel centro di Vancouver. Adatto agli animali domestici con camere spaziose. Dispone di una grande piscina coperta e di un centro fitness."
  • Hotel C: "Un boutique hotel accogliente e pet-friendly vicino all'acquario (a 10 minuti a piedi dal centro città). Dispone di un grazioso giardino interno. Nessuna piscina."
  • Hotel D: "Un resort rustico iconico. Noto per la sua cucina raffinata e il servizio impeccabile. Dispone di una piscina coperta e di una spa. Opzioni che accettano animali domestici disponibili su richiesta."

Tutti gli hotel del catalogo includono un campo distance_from_airport in chilometri (km).

Ranking basato sugli embedding

Il sistema di ricerca converte la query in un unico embedding. Quindi, confronta questo embedding della query con gli embedding di tutti gli hotel del suo catalogo. Gli hotel con gli embedding numericamente più vicini all'embedding della query vengono classificati più in alto.

Ecco il ranking probabile di una ricerca di pertinenza basata esclusivamente sugli incorporamenti:

Classifica Hotel Possibile motivo di questo ranking
1 Hotel A Corrispondenza semantica molto forte per lusso, aeroporto, piscina panoramica. L'opzione"no pets" non è auspicabile, ma le altre corrispondenze forti prevalgono.
2 Hotel B Buona corrispondenza semantica per "animali ammessi" e "piscina". Tuttavia, "indoor" anziché "rooftop", "modern" e "stylish" anziché "luxury" e "downtown" anziché "airport" lo rendono meno pertinente rispetto ad A.
3 Hotel D Corrispondenza semantica forte per pet-friendly, piscina grande, ma "coperta" anziché "sul tetto" e "rustico" anziché "di lusso" lo rendono leggermente meno pertinente dal punto di vista semantico rispetto ad A e D.
4 Hotel C Forte propensione per gli animali domestici, ma "senza piscina" e "boutique" riducono significativamente la sua pertinenza per questa query specifica.

Questo ranking non fornisce i risultati più pertinenti. L'hotel A è in prima posizione, anche se con "animali non ammessi" potrebbe non essere preferito da molti utenti. L'Hotel D, che soddisfa molti criteri, ha un ranking inferiore perché il suo stato "rustico" non corrisponde necessariamente a "lusso" e la piscina "coperta" ha un ranking inferiore rispetto alle corrispondenze esatte di "grande" e "all'aperto".

Ranking personalizzato

Supponiamo di aver configurato la seguente espressione di ranking per questo scenario di esempio. Per informazioni sui componenti di questa espressione, vedi Informazioni sull'implementazione del ranking personalizzato.

rankingExpression = rr(semantic_similarity_score, 32) * 0.4 + rr(keyword_similarity_score, 32) * 0.3 + rr(c.distance_from_airport * -1, 32) * 0.8

dove distance_from_airport è un campo recuperabile nel catalogo e c.distance_from_airport funge da indicatore.

Nel ranking personalizzato, prendi in considerazione diversi indicatori che influenzano la pertinenza di un documento. Poi crei un'espressione matematica contenente questi indicatori utilizzando una sintassi valida. In questa espressione, normalizzi gli indicatori e aggiungi pesi ai punteggi derivati. Viene calcolato il punteggio personalizzato finale e i documenti vengono classificati.

In questo esempio, la procedura può essere spiegata nel seguente modo:

  1. A ogni hotel viene assegnato un punteggio di similarità semantica e un punteggio di similarità delle parole chiave. Inoltre, la distanza dall'aeroporto è un segnale importante derivato dal documento.

  2. La funzione di trasformazione del rango reciproco o rr() viene utilizzata per trasformare tutti i punteggi nella stessa scala.

  3. Al punteggio derivato da ogni segnale viene assegnata una ponderazione e la somma di tutti i punteggi individuali diventa il punteggio di ranking personalizzato per ogni hotel.

I diversi indicatori per ogni hotel sono tabulati come segue:

Hotel semantic_similarity_score keyword_similarity_score c.distance_from_airport Punteggio di ranking personalizzato Ranking personalizzato Ranking basato sugli embedding
Hotel A 9.0 6.2 ("aeroporto", "lusso", "piscina sul tetto") 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 coperta", "accetta animali", "rustico") 1 0,04890 1 3

Se si confrontano i due metodi di classificazione, la classificazione personalizzata fornisce una classificazione più ponderata che probabilmente corrisponde meglio alle esigenze di un utente rispetto a una classificazione basata esclusivamente sugli incorporamenti.

Informazioni sull'implementazione del ranking personalizzato

Per ottenere un ranking personalizzato nei risultati di ricerca, devi chiamare il metodo search fornendo i seguenti campi:

  • Backend dell'espressione di ranking (rankingExpressionBackend): questo campo indica quale dei seguenti meccanismi di ranking deve essere utilizzato.

    • RANK_BY_EMBEDDING: questo è il valore predefinito quando questo campo non è specificato. Se scegli questa opzione, i risultati vengono classificati in base a un'espressione di classificazione predefinita basata sull'incorporamento o sulla pertinenza.
    • RANK_BY_FORMULA: esegue l'override del ranking predefinito e ti consente di fornire la tua formula personalizzata nel campo rankingExpression.
  • Espressione di ranking (rankingExpression): questo campo contiene una formula matematica che determina il ranking dei documenti recuperati.

    • Per RANK_BY_EMBEDDING, questo valore è basato sul punteggio di pertinenza (double * relevanceScore) o sugli incorporamenti (double * dotProduct(embedding_field_path)).

    • Per RANK_BY_FORMULA, si tratta di un'espressione curata che combina più indicatori per calcolare un nuovo punteggio per ogni risultato di ricerca.

Indicatori standard

Vertex AI Search offre una serie di indicatori che puoi utilizzare per formulare una classificazione personalizzata. Di seguito sono riportati i segnali standard disponibili:

Nome indicatore Descrizione
default_rank Il ranking predefinito del documento determinato dall'algoritmo di ranking VAIS standard
semantic_similarity_score Un punteggio calcolato in base agli incorporamenti di query e contenuti per determinare il livello di somiglianza tra una query di ricerca e i contenuti di un documento. Questo valore viene calcolato utilizzando un algoritmo proprietario di Google.
relevance_score Un punteggio prodotto da un modello di pertinenza profonda, che gestisce interazioni complesse tra query e documenti. Il modello determina il significato e l'intenzione di una query nel contesto dei contenuti. Questo valore viene calcolato utilizzando un algoritmo proprietario di Google.
keyword_similarity_score Un punteggio che pone grande enfasi sulla corrispondenza delle parole chiave. Questo segnale utilizza la funzione di ranking Best Match 25 (BM25).
document_age L'età del documento in ore. Supporta i valori in virgola mobile. Ad esempio, un valore di 0,5 indica 30 minuti, mentre 50 indica 2 giorni e 2 ore.
pctr_rank Un ranking per indicare i tassi di conversione previsti, calcolati in base ai dati degli eventi utente. Questo indicatore utilizza la percentuale di clic (pCTR) prevista per valutare la pertinenza di un risultato di ricerca dal punto di vista dell'utente.
topicality_rank Un ranking per indicare l'aggiustamento della somiglianza delle parole chiave calcolato utilizzando un algoritmo proprietario di Google.
boosting_factor Una combinazione di tutti i boost personalizzati che hai applicato al documento.

Indicatori personalizzati

Oltre agli indicatori standard, puoi utilizzare gli indicatori di qualsiasi campo personalizzato numerico in un documento contrassegnato come recuperabile. A questo scopo, aggiungi il prefisso c. ai nomi dei campi. Ad esempio, se hai un campo personalizzato denominato date_approved, puoi utilizzare c.date_approved come indicatore personalizzato.

I nomi degli indicatori sono una combinazione di caratteri alfabetici e trattini bassi (_). Di seguito è riportato un elenco di nomi riservati che non possono essere utilizzati come nomi degli indicatori: log, exp, rr, is_nan e fill_nan.

Geodistanza: un indicatore derivato

Gli indicatori derivati, come la geodistanza, vengono calcolati in base a indicatori standard e personalizzati. Geodistanza è una funzione che calcola la distanza tra una posizione di origine e una di destinazione. La funzione geo_distance() è espressa come geo_distance(source_location, destination_location). È composto dai seguenti argomenti:

  • La posizione di origine o source_location: l'origine per il calcolo della distanza, che può essere uno dei seguenti tipi:

    • Località della query: la località analizzata dalla query utilizzando modelli di comprensione del linguaggio naturale. Ad esempio, nella query Hotels along the M6, il modello di comprensione del linguaggio naturale estrae Hotels come parte cosa e M6 come parte dove dei parametri di ricerca. La parte dove è la posizione della query e può essere rappresentata come punto, polilinea, cerchio o poligono.

      {
       "query": "Hotels along M6",
       "ranking_expression": "geo_distance(query_loc, c.hotel_location)",
       "ranking_expression_backend": "RANK_BY_FORMULA"
      }
      
    • Richiedi coordinate di posizione: una posizione fornita esplicitamente nella richiesta di ricerca, ad esempio la latitudine e la longitudine di un utente. Ad esempio, puoi fornire la query come Hotels e una posizione utilizzando la latitudine e la longitudine.

      {
        "query": "Hotels",
        "user_info": {
          "precise_location": {
            "point": {
              "lat": 52.23034637633789,
              "lon": 20.98339855121653,
            }
          }
        },
        "ranking_expression": "geo_distance(request_loc, c.hotel_location)",
        "ranking_expression_backend": "RANK_BY_FORMULA"
      }
      
    • Richiesta indirizzo della località: un indirizzo fornito esplicitamente nella richiesta di ricerca. Ad esempio, puoi fornire la query come Hotels e fornire un indirizzo di riferimento.

      {
        "query": "Hotels",
        "user_info": {
          "precise_location": {
            "address": "1800 Amphibious Blvd. Mountain View, CA 94045"
          }
        },
        "ranking_expression": "geo_distance(request_loc, c.hotel_location)",
        "ranking_expression_backend": "RANK_BY_FORMULA"
      }
      
  • La località di destinazione o destination_location: la destinazione per il calcolo della distanza, che è un campo personalizzato recuperabile come c.office_location o c.home_location.

L'ordine di questi argomenti all'interno della funzione deve rimanere invariato. ovvero la posizione di origine deve sempre essere il primo argomento all'interno della funzione geo_distance(), seguito dalla posizione di destinazione. La funzione calcola la distanza, in metri, utilizzando la latitudine e la longitudine delle località di origine e destinazione.

Sintassi della formula di ranking

La formula di ranking personalizzata è un'espressione matematica con i seguenti componenti:

  • Numeri (double): valori in virgola mobile positivi o negativi che aggiungono un peso a un segnale o a un'espressione.

  • Indicatori (signal): i nomi degli indicatori elencati nella sezione Indicatori standard.

  • Operatori aritmetici: + (addizione) e * (moltiplicazione).

  • Funzioni matematiche:

    • log(expression): Il logaritmo naturale
    • exp(expression): l'esponente naturale

    Ciascuna di queste espressioni accetta esattamente un argomento, ovvero un'espressione scritta in termini di un indicatore.

    Esempi di una funzione valida: exp(c.document_age) e log(keywordSimilarityScore * 0.2 + 1.0).

  • Funzione di trasformazione del rango reciproco (rr): Questa funzione è espressa come rr(expression, k). Innanzitutto, ordina i documenti in base al valore di expression in ordine decrescente e assegna un ranking ai documenti. Calcola quindi il valore finale utilizzando le espressioni 1 / (rank_i + k), dove rank_i è la posizione del documento nell'elenco ordinato a partire da 0 e k è un numero in virgola mobile positivo che fornisci.

    La funzione rr() trasforma tutti i punteggi nella stessa scala ed elimina la necessità di un'ulteriore normalizzazione.

  • Funzioni di gestione di Not a Number (NaN):

    • is_nan(expression): quando l'espressione restituisce NaN, ad esempio quando manca un indicatore per un documento, viene restituito 1. In caso contrario, viene restituito 0.
    • fill_nan(arg_expression, fill_with_expression): se arg_expression restituisce un valore NaN, restituisce fill_with_expression. In caso contrario, restituisce arg_expression. Questo è fondamentale per la gestione di documenti a cui potrebbero mancare determinati indicatori.

Esempi di formule di ranking

Ecco alcuni esempi di formula di ranking che puoi utilizzare nel campo rankingExpression della richiesta di ricerca:

  • Una combinazione lineare elementare:

    semantic_similarity_score * 0.7 + keyword_similarity_score * 0.3
    
  • Una formula complessa che utilizza la classificazione reciproca e la gestione di NaN:

    rr(fill_nan(semantic_similarity_score, 0), 40) * 0.5 + topicality_rank * 0.5
    
  • Una formula complessa che utilizza il rango reciproco, la funzione esponenziale e la gestione di NaN:

    rr(fill_nan(semantic_similarity_score, 0), 40) * 0.2 + exp(keyword_similarity_score) * 0.3 + is_nan(keyword_similarity_score) * 0.1
    
  • Una formula complessa che utilizza il rango reciproco con la funzione geo_distance() (anteprima privata):

    rr(keyword_similarity_score, 16) * 0.8 + rr(geo_distance(query_loc, c.office_location) * -1, 16) * 0.2
    

    In questa formula, il fattore di moltiplicazione è un valore negativo in modo che una distanza maggiore corrisponda a un valore di espressione più alto e, pertanto, il rango reciproco assegni ranghi più bassi a distanze maggiori.

Indicatori nella risposta

Quando un documento viene restituito nella risposta di ricerca, il risultato di ricerca elenca gli indicatori standard e personalizzati che contribuiscono al recupero del documento dall'datastore. Il campo rankSignals elenca questi indicatori.

Campi di testo per la somiglianza delle parole chiave

Nei datastore strutturati, per ottenere l'indicatore keywordSimilarityScore nella risposta di ricerca, devi aggiornare lo schema per eseguire le seguenti operazioni:

  • Mappa i campi di testo essenziali per la corrispondenza delle parole chiave alle proprietà chiave title e description
  • Aggiorna l'annotazione per i campi di testo come Searchable

Per personalizzare il ranking dei documenti nei risultati di ricerca, crea manualmente una formula e aggiungila alla chiamata API search.

  1. Formula un'espressione di ranking.

  2. Visualizzare i risultati di ricerca.

    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"
    }'
    

    Sostituisci quanto segue:

Ottimizzare la formula di ranking utilizzando la libreria Python

Per casi d'uso più avanzati, trovare i pesi ottimali per la formula può essere difficile. Per superare questo problema, puoi utilizzare la libreria Python per l'ottimizzazione del ranking di Vertex AI Search, che è uno strumento open source, e arrivare a una formula adatta al tuo caso d'uso.

Il workflow generale è il seguente:

  1. Prepara un set di dati di query con etichette di riferimento corrispondenti. Queste etichette dorate possono essere campi identificativi univoci, come l'ID documento, che possono aiutarti ad associare l'oggetto SearchResult nella risposta di ricerca.
  2. Per un insieme di query rappresentative, chiama l'API search per ottenere gli indicatori di ranking disponibili per tutti i documenti restituiti. Puoi trovarlo nel campo SearchResult.rankSignals. Memorizza questi dati insieme alle etichette dorate.
  3. Utilizza la libreria Python per addestrare un modello di ranking su questo set di dati. Per saperne di più, consulta la libreria Python Clearbox.

  4. Converti la formula dai risultati dell'addestramento in un'espressione di ranking, che puoi poi utilizzare nelle chiamate API.