Classer et évaluer les résultats de recherche

Cette page explique comment classer ou évaluer les résultats de recherche pour les applications à l'aide du point de terminaison du modèle de classement Vertex AI enregistré dans la gestion des points de terminaison du modèle.

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 suivre les instructions de cette page, vous devez connaître AlloyDB pour PostgreSQL et les concepts d'IA générative.

AlloyDB réserve le schéma ai et tente de le créer lorsque vous installez l'extension google_ml_integration. Si la création du schéma échoue, utilisez les fonctions du même nom dans le schéma google_ml.

Avant de commencer

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 Identifiant unique du point de terminaison du modèle que vous définissez.
SEARCH_STRING Chaîne de recherche en fonction de laquelle les enregistrements sont classés ou évalués.
DOCUMENTS Chaîne unique qui identifie l'enregistrement.

Examples

Pour classer les résultats de recherche à l'aide du point de terminaison de classement enregistré, exécutez la requête suivante:

SELECT index, score
FROM
  ai.rank(
    model_id => 'semantic-ranker-512-002',
    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 en fonction de la pertinence par rapport à la requête de recherche.Voici un exemple de réponse:

 index | score
-------+-------
     1 |  0.03
     2 |  0.02
     3 |  0.01
(3 rows)

Prenons l'exemple d'une base de données AlloyDB contenant une liste de descriptions de critiques 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 leurs descriptions de critiques avec une requête. Il suppose que les points de terminaison des modèles text-embedding-005 et semantic-ranker-512@002 sont enregistrés.

WITH
  initial_results 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(
        'text-embedding-005', 'good desserts')
    LIMIT 100
  ),
reranked AS (
    SELECT
      ai.rank(
        model_id => 'semantic-ranker-512@002',
        search_string => 'good desserts',
        documents => ARRAY_AGG(review ORDER BY ref_number))
    FROM initial_results
  )
SELECT product_id, name
FROM initial_results, reranked
WHERE initial_results.ref_number = reranked.index
ORDER BY reranked.score;

Étape suivante