Classer les résultats de recherche

Découvrez comment classer et reclasser les résultats de recherche pour les applications à l'aide de modèles de classement Vertex AI tels que semantic-ranker-default-003. Vous pouvez utiliser la fonction ai.rank() pour attribuer un score aux documents en fonction de leur pertinence par rapport à une requête, et améliorer les résultats de la recherche vectorielle en les reclassant pour un meilleur ordre des requêtes.

L'API Vertex AI Ranking prend une liste de documents et les classe en fonction de leur pertinence par rapport à une requête donnée (une chaîne de recherche). Lorsque vous utilisez la fonction ai.rank(), elle renvoie des scores indiquant dans quelle mesure un document répond à une requête donnée.

Pour utiliser les instructions de cette page, vous devez comprendre AlloyDB pour PostgreSQL et connaître les concepts de l'IA générative.

AlloyDB réserve et crée le schéma ai.

Avant de commencer

Avant de classer les résultats de recherche, procédez comme suit :

Activer l'API Discovery Engine

Console

  1. Activer l'API
  2. À l'étape Confirmer le projet, cliquez sur Suivant pour confirmer le nom du projet que vous allez modifier.
  3. À l'étape Activer les API, cliquez sur Activer pour activer l'API Discovery Engine. Si vous avez déjà activé cette API, elle ne s'affichera pas ici.

gcloud

Pour utiliser les modèles de classement, vous devez activer l'API Discovery Engine.
Remplacez PROJECT_ID par l'ID de votre projet Google Cloud et PROJECT_NUMBER par le numéro de projet correspondant.

    # 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"

L'enregistrement de modèles pour le classement n'est pas obligatoire pour les modèles Vertex AI. Vous pouvez utiliser le nom du modèle Vertex AI comme model_id, comme illustré dans l'exemple suivant.

    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 cas d'utilisation courant du classificateur sémantique consiste à reclasser les résultats renvoyés par la recherche vectorielle pour un meilleur ordre des requêtes. L'exemple suivant montre comment utiliser le modèle de classement sémantique pour ce cas d'utilisation. L'exemple récupère un ensemble de résultats initial pour la requête personal fitness equipment à l'aide de la recherche vectorielle. Ces résultats sont ensuite reclassés pour renvoyer les cinq premiers résultats.

    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;
  

Pour obtenir la liste des modèles et des cas d'utilisation disponibles, consultez Modèles compatibles.

Intégrer Vertex AI et installer l'extension

  1. Intégration à Vertex AI
  2. Assurez-vous que la dernière version de google_ml_integration est installée.
    1. Pour vérifier la version installée, exécutez la commande suivante :

              SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
              extversion
              ------------
              1.4.3
              (1 row)
            
    2. Si l'extension n'est pas installée ou si la version installée est antérieure à la version 1.4.3, mettez-la à jour en exécutant les commandes suivantes :

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

      Si vous rencontrez des problèmes lors de l'exécution des commandes précédentes ou si l'extension n'est pas mise à jour vers la version 1.4.3 après l'exécution des commandes précédentes, contactez l'assistance AlloyDB.

    3. Une fois que vous avez vérifié que la version est à jour, installez la fonctionnalité d'aperçu en exécutant la procédure 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)
            

Rôles requis

Pour obtenir les autorisations nécessaires pour utiliser les modèles de classement de Discovery Engine, demandez à votre administrateur de vous accorder le rôle Identity and Access Management (IAM) Lecteur Discovery Engine (roles/discoveryengine.viewer) sur your project. Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Vous pouvez également obtenir les autorisations requises grâce aux rôles personnalisés ou à d'autres rôles prédéfinis.

Classer vos résultats de recherche

La requête SQL suivante montre comment classer vos résultats de recherche :

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

Remplacez les éléments suivants :

Paramètre Description
MODEL_ID ID unique du point de terminaison du modèle que vous définissez.
SEARCH_STRING Chaîne de recherche par rapport à laquelle les enregistrements sont classés.
DOCUMENTS Chaîne unique qui identifie l'enregistrement.

Pour obtenir la liste des modèles de classement Vertex AI compatibles, consultez Modèles compatibles.

Exemples

Pour classer les résultats de recherche à l'aide d'un modèle de classement Vertex AI, exécutez la requête suivante :

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 réponse est un tableau qui affiche chaque document et le score de pertinence par rapport à la requête de recherche. Voici un exemple de réponse :

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

Prenons l'exemple d'une base de données AlloyDB contenant une liste de descriptions d'avis converties en embeddings. L'extrait de code suivant montre comment utiliser le modèle de classement pour récupérer le nom des produits les mieux classés en fonction de la similarité sémantique de la description de leurs avis avec une requête.

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;

Étapes suivantes