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 similarità 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 nella formula di ranking.
  • Ottimizzazione sistematica: 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. Animali domestici ammessi con camere spaziose. Dispone di una grande piscina coperta e di un centro fitness."
  • Hotel C: "Un boutique hotel accogliente con animali domestici ammessi 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 nel 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 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 "adatto agli animali domestici" e "piscina grande", ma "coperta" anziché "sul tetto" e "rustica" anziché "di lusso" la rendono leggermente meno pertinente a livello semantico rispetto ad A e D.
4 Hotel C Forte attenzione agli 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 ponderazioni 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 indicatore viene assegnato un peso e la somma di tutti i singoli punteggi 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 ranking 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 gli indicatori 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.

Oltre a questi campi, puoi utilizzare qualsiasi campo personalizzato 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 dei segnali sono una combinazione di caratteri alfabetici e trattini bassi (_). Di seguito è riportato un elenco di nomi riservati che non possono essere utilizzati come nomi di segnali: log, exp, rr, is_nan e fill_nan.

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 disponibili.

  • 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 dei documenti a cui potrebbero mancare determinati indicatori.

Esempi di formule di ranking

  1. Una combinazione lineare elementare:

    semantic_similarity_score * 0.7 + keyword_similarity_score * 0.3
    
  2. 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
    
  3. 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
    

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.