Classificare i risultati di ricerca

Scopri come classificare e riclassificare i risultati di ricerca per le applicazioni utilizzando i modelli di ranking di Vertex AI come semantic-ranker-default-003. Puoi utilizzare la funzione ai.rank() per assegnare un punteggio ai documenti in base alla pertinenza rispetto a una query e migliorare i risultati della ricerca vettoriale riordinandoli per una migliore sequenza di query.

L'API Vertex AI Ranking prende un elenco di documenti e li classifica in base alla loro pertinenza per una determinata query (una stringa di ricerca). Quando utilizzi la funzione ai.rank(), vengono restituiti i punteggi che indicano in che misura un documento risponde a una determinata query.

Per utilizzare le istruzioni riportate in questa pagina, devi avere una conoscenza di AlloyDB per PostgreSQL e familiarità con i concetti di AI generativa.

AlloyDB riserva e crea lo schema ai.

Prima di iniziare

Prima di classificare i risultati di ricerca:

Abilita l'API Discovery Engine

Console

  1. Abilitare l'API
  2. Nel passaggio Conferma progetto, fai clic su Avanti per confermare il nome del progetto a cui apporterai le modifiche.
  3. Nel passaggio Abilita API, fai clic su Abilita per abilitare l'API Discovery Engine. Se hai già abilitato questa API, non la vedrai elencata qui.

gcloud

Per utilizzare i modelli di ranking, devi abilitare l'API Discovery Engine.
Sostituisci PROJECT_ID con il tuo Google Cloud ID progetto e PROJECT_NUMBER con il numero di progetto corrispondente.

    # Enable Discovery Engine API
    gcloud services enable discoveryengine.googleapis.com --project=PROJECT_ID
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com" \
    --role="roles/discoveryengine.viewer"

La registrazione del modello per il ranking non è obbligatoria per i modelli Vertex AI. Puoi utilizzare il nome del modello Vertex AI come model_id, come mostrato nell'esempio seguente.

    SELECT index, score
    FROM
      ai.rank(
        model_id => 'semantic-ranker-default-003',
        search_string => 'Affordable family-friendly vacation spots in Southeast Asia?',
        documents =>
    ARRAY[
      'Luxury resorts in South Korea',
      'Family vacation packages for Vietnam: Ha Long Bay and Hoi An',
      'Budget-friendly beaches in Thailand perfect for families',
      'A backpacker guide to solo travel in India'])

Un caso d'uso comune per il ranker semantico è il ricalcolo del ranking dei risultati restituiti dalla ricerca vettoriale per un migliore ordinamento delle query. L'esempio seguente mostra come utilizzare il modello di ranking semantico per questo caso d'uso. L'esempio recupera un insieme di risultati iniziale per la query personal fitness equipment utilizzando la ricerca vettoriale. Questi risultati vengono poi riordinati per restituire i primi cinque risultati.

    WITH initial_ranking AS (
      SELECT id, description, ROW_NUMBER() OVER () AS ref_number
      FROM product
      ORDER BY
        embedding <=> google_ml.embedding(
          'gemini-embedding-001', 'personal fitness equipment')::vector
      LIMIT 10
    ), reranked_results AS (
      SELECT index, score
      FROM ai.rank(
          model_id => 'semantic-ranker-default-003',
          search_string => 'personal fitness equipment',
          documents => (SELECT ARRAY_AGG(description ORDER BY ref_number) FROM initial_ranking),
          top_n => 5)
    )
    SELECT id, description
    FROM initial_ranking, reranked_results
    WHERE initial_ranking.ref_number = reranked_results.index
    ORDER BY reranked_results.score DESC;
  

Per un elenco dei modelli e dei casi d'uso disponibili, consulta Modelli supportati.

Integrare Vertex AI e installare l'estensione

  1. Esegui l'integrazione con Vertex AI.
  2. Assicurati che sia installata l'ultima versione di google_ml_integration.
    1. Per controllare la versione installata, esegui questo comando:

              SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
              extversion
              ------------
              1.4.3
              (1 row)
            
    2. Se l'estensione non è installata o se la versione installata è precedente alla 1.4.3, aggiornala eseguendo i seguenti comandi:

              CREATE EXTENSION IF NOT EXISTS google_ml_integration;
              ALTER EXTENSION google_ml_integration UPDATE;
            

      Se riscontri problemi durante l'esecuzione dei comandi precedenti o se l'estensione non viene aggiornata alla versione 1.4.3 dopo l'esecuzione dei comandi precedenti, contatta l'assistenza AlloyDB.

    3. Dopo aver verificato che la versione sia aggiornata, installa la funzionalità di anteprima eseguendo la procedura upgrade_to_preview_version:

              CALL google_ml.upgrade_to_preview_version();
              SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
              extversion
              ------------
              1.4.4
              (1 row)
            

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per utilizzare i modelli di ranking di Discovery Engine, chiedi all'amministratore di concederti il ruolo Identity and Access Management (IAM) Visualizzatore Discovery Engine (roles/discoveryengine.viewer) su your project. Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Classificare i risultati di ricerca

La seguente query SQL mostra come classificare i risultati di ricerca :

SELECT
  ai.rank(
    model_id => 'MODEL_ID',
    search_string => 'SEARCH_STRING',
    documents => ARRAY['DOCUMENT_1', 'DOCUMENT_2', 'DOCUMENT_3']);

Sostituisci quanto segue:

Parametro Descrizione
MODEL_ID Un ID univoco per l'endpoint del modello che definisci.
SEARCH_STRING Una stringa di ricerca in base alla quale vengono classificati i record.
DOCUMENTS Una stringa univoca che identifica il record.

Per un elenco dei modelli di ranking di Vertex AI supportati, consulta Modelli supportati.

Esempi

Per classificare i risultati di ricerca utilizzando un modello di ranking Vertex AI, esegui la seguente query:

SELECT index, score
FROM
  ai.rank(
    model_id => 'semantic-ranker-default-003',
    search_string => 'AlloyDB is a PostgreSQL compatible AI database that is ready for production.',
    documents =>
      ARRAY[
        'Alloys are made from combination of metals',
        'The best enterprise-ready PostgreSQL database.',
        'You can feel the heat in Alloy apartments.']);

La risposta è una tabella che mostra ogni documento e il punteggio in base alla pertinenza rispetto alla query di ricerca. Di seguito è riportato un esempio di risposta:

 index | score
-------+------------
     2 |  0.33
     1 |  0.28
     3 |  0.16
(3 rows)

Prendi in considerazione un database AlloyDB di esempio con un elenco di descrizioni di recensioni convertite in incorporamenti. Il seguente snippet di codice campione mostra come utilizzare il modello di ranking per recuperare il nome dei prodotti con il ranking più alto in base alla somiglianza semantica delle descrizioni delle recensioni con una query.

WITH initial_ranking AS (
    SELECT product_id, name, review, review_id, ROW_NUMBER() OVER () AS ref_number
    FROM user_reviews
    ORDER BY
      review_desc_embedding <=> google_ml.embedding(
        'gemini-embedding-001', 'good desserts')::vector
    LIMIT 10
  ), reranked_results AS (
    SELECT index, score
    FROM
      ai.rank(
        model_id => 'semantic-ranker-512',
        search_string => 'good desserts',
        documents => (SELECT ARRAY_AGG(review ORDER BY ref_number) FROM initial_ranking),
        top_n => 5)
  )
SELECT product_id, name
FROM initial_ranking, reranked_results
WHERE initial_ranking.ref_number = reranked_results.index
ORDER BY reranked_results.score DESC;

Passaggi successivi