Classificare i risultati di ricerca

Select a documentation version:

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 riclassificandoli per un ordinamento migliore delle query.

L'API di ranking di Vertex AI accetta un elenco di documenti e li classifica in base alla loro pertinenza rispetto a una determinata query (una stringa di ricerca). Quando utilizzi la funzione ai.rank(), questa restituisce i punteggi relativi alla qualità della risposta di un documento a una determinata query.

Per utilizzare le istruzioni riportate in questa pagina, devi comprendere AlloyDB Omni e conoscere i concetti di AI generativa.

AlloyDB Omni riserva e crea lo schema ai.

Prima di iniziare

Prima di classificare i risultati di ricerca, procedi nel seguente modo:

  1. Configura l'accesso degli utenti ai modelli di Vertex AI.
  2. Verifica che sia installata l'ultima versione di google_ml_integration.
    1. Per controllare la versione installata, esegui il seguente comando:

      SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
      extversion
      ------------
      1.5.2
      (1 row)
    2. Se l'estensione non è installata o se la versione installata è precedente alla 1.5.2, aggiorna l'estensione.

      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.5.2 dopo l'esecuzione dei comandi precedenti, contatta l'assistenza Google Cloud.

  3. Per utilizzare la funzionalità del motore di query AI di AlloyDB, imposta il google_ml_integration.enable_ai_query_engine flag su on.

    1. Utilizza un editor di testo per impostare il seguente flag nel file di configurazione postgresql.conf per l'installazione di AlloyDB Omni:
      google_ml_integration.enable_ai_query_engine = on
    2. Dopo aver salvato il file postgresql.conf, riavvia il servizio AlloyDB Omni affinché le modifiche vengano applicate.
      sudo systemctl restart alloydbomni18
  4. Abilita l'API Discovery Engine.

  5. Ottieni i ruoli richiesti per utilizzare i modelli di ranking.

Abilitare l'API Discovery Engine

<p>To use ranking models, you must enable the Discovery Engine API.<br>
    Replace <code><var>PROJECT_ID</var></code> with your
    Google Cloud project ID and <code><var>PROJECT_NUMBER</var></code>
    with your corresponding project number.</p>

<pre class="prettyprint lang-terminal">
    # Enable Discovery Engine API
    gcloud services enable discoveryengine.googleapis.com --project=<var>PROJECT_ID</var>
    gcloud projects add-iam-policy-binding <var>PROJECT_ID</var> \
    --member="serviceAccount:service-<var>PROJECT_NUMBER</var>@iam.gserviceaccount.com" \
    --role="roles/discoveryengine.viewer"
</pre>

<p>Model registration for ranking isn't required for Vertex AI models.
    You can use the Vertex AI model name as the
    <code>model_id</code>, which is shown in the following example.
</p>

<pre class="prettyprint lang-sh">
    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'])
</pre>

<p>A common use case for the semantic ranker is to rerank the results returned
    by vector search for better query ordering. The following example shows how to
    use the semantic ranking model for this use case. The example retrieves an
    initial result set for the query <code>personal fitness
    equipment</code> using vector search. These results are then re-ranked to
    return the top five results.
</p>

<pre class="prettyprint lang-sh">
    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;
  </pre>

  <p>For a list of available models and use cases, see <a href="/generative-ai-app-builder/docs/ranking#models">Supported models</a>.</p>

Eseguire l'integrazione con Vertex AI e installare l'estensione

Per ulteriori informazioni, consulta Configurare l'installazione di AlloyDB Omni per eseguire query sui modelli basati sul cloud.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per utilizzare i modelli di ranking di Discovery Engine, chiedi all'amministratore di concedere all'account di servizio AlloyDB Omni il ruolo IAM Visualizzatore di 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 Un array di stringhe di testo univoche che vuoi classificare.

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 di 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)

Considera un database AlloyDB Omni di esempio con un elenco di descrizioni delle recensioni convertite in incorporamenti. Il seguente codice campione mostra come utilizzare il modello di ranking per recuperare il nome dei prodotti con il ranking più alto in base alla similarità semantica delle descrizioni delle recensioni rispetto a 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