Cómo clasificar los resultados de la búsqueda

Aprende a clasificar y volver a clasificar los resultados de la búsqueda para las aplicaciones con los modelos de clasificación de Vertex AI, como semantic-ranker-default-003. Puedes usar la función ai.rank() para calificar documentos según su relevancia para una búsqueda y mejorar los resultados de la búsqueda de vectores volviendo a clasificarlos para obtener un mejor orden de búsqueda.

La API de clasificación de Vertex AI toma una lista de documentos y los clasifica según su relevancia para una consulta determinada (una cadena de búsqueda). Cuando usas la función ai.rank(), esta devuelve puntuaciones que indican qué tan bien un documento responde una consulta determinada.

Para usar las instrucciones de esta página, debes comprender AlloyDB para PostgreSQL y conocer los conceptos de la IA generativa.

AlloyDB reserva y crea el esquema ai.

Antes de comenzar

Antes de clasificar los resultados de la búsqueda, haz lo siguiente:

Habilita la API de Discovery Engine

Console

  1. Habilitar la API
  2. En el paso Confirmar proyecto, haz clic en Siguiente para confirmar el nombre del proyecto en el que realizarás cambios.
  3. En el paso Habilitar las APIs, haz clic en Habilitar para habilitar la API de Discovery Engine. Si ya habilitaste esta API, no la verás en la lista.

gcloud

Para usar modelos de clasificación, debes habilitar la API de Discovery Engine.
Reemplaza PROJECT_ID por tu Google Cloud ID del proyecto y PROJECT_NUMBER por el número de proyecto correspondiente.

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

No es necesario registrar el modelo para la clasificación en los modelos de Vertex AI. Puedes usar el nombre del modelo de Vertex AI como model_id, como se muestra en el siguiente ejemplo.

    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 de uso común del clasificador semántico es volver a clasificar los resultados que devuelve la búsqueda vectorial para mejorar el orden de las búsquedas. En el siguiente ejemplo, se muestra cómo usar el modelo de clasificación semántica para este caso de uso. En el ejemplo, se recupera un conjunto de resultados inicial para la búsqueda personal fitness equipment con la búsqueda vectorial. Luego, se vuelven a clasificar para mostrar los cinco primeros.

    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;
  

Para obtener una lista de los modelos y casos de uso disponibles, consulta Modelos compatibles.

Integra la extensión en Vertex AI y, luego, instálala

  1. Integración en Vertex AI
  2. Asegúrate de que esté instalada la versión más reciente de google_ml_integration.
    1. Para verificar la versión instalada, ejecuta el siguiente comando:

              SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
              extversion
              ------------
              1.4.3
              (1 row)
            
    2. Si la extensión no está instalada o si la versión instalada es anterior a la 1.4.3, ejecuta los siguientes comandos para actualizarla:

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

      Si tienes problemas cuando ejecutas los comandos anteriores o si la extensión no se actualiza a la versión 1.4.3 después de ejecutar los comandos anteriores, comunícate con el equipo de asistencia de AlloyDB.

    3. Después de asegurarte de que la versión esté actualizada, instala la funcionalidad de vista previa ejecutando el procedimiento 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)
            

Roles requeridos

Para obtener los permisos que necesitas para usar los modelos de clasificación de Discovery Engine, pídele a tu administrador que te otorgue el rol de Identity and Access Management (IAM) de lector de Discovery Engine (roles/discoveryengine.viewer) en your project. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.

Clasifica tus resultados de la búsqueda

La siguiente consulta en SQL muestra cómo clasificar tus resultados de la búsqueda :

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

Reemplaza lo siguiente:

Parámetro Descripción
MODEL_ID Es un ID único para el extremo del modelo que defines.
SEARCH_STRING Es una cadena de búsqueda con la que se clasifican los registros.
DOCUMENTS Es una cadena única que identifica el registro.

Para obtener una lista de los modelos de clasificación de Vertex AI admitidos, consulta Modelos admitidos.

Ejemplos

Para clasificar los resultados de la búsqueda con un modelo de clasificación de Vertex AI, ejecuta la siguiente consulta:

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 respuesta es una tabla que muestra cada documento y la puntuación según la relevancia para la búsqueda. A continuación, se muestra la respuesta de ejemplo:

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

Considera una base de datos de ejemplo de AlloyDB con una lista de descripciones de opiniones que se convierten en incorporaciones. El siguiente fragmento de código de ejemplo muestra cómo usar el modelo de clasificación para recuperar el nombre de los productos mejor clasificados según la similitud semántica de las descripciones de sus opiniones con una búsqueda.

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;

¿Qué sigue?