Classifique os resultados da pesquisa

Saiba como classificar e reclassificar os resultados da pesquisa para aplicações usando modelos de classificação da Vertex AI, como semantic-ranker-default-003. Pode usar a função ai.rank() para classificar documentos com base na relevância para uma consulta e melhorar os resultados da pesquisa vetorial reclassificando-os para uma melhor ordenação das consultas.

A API Vertex AI Ranking recebe uma lista de documentos e classifica-os com base na relevância dos documentos para uma determinada consulta (uma string de pesquisa). Quando usa a função ai.rank(), esta devolve pontuações que indicam o quão bem um documento responde a uma determinada consulta.

Para usar as instruções nesta página, tem de compreender o AlloyDB for PostgreSQL e estar familiarizado com os conceitos de IA generativa.

O AlloyDB reserva e cria o esquema ai.

Antes de começar

Antes de classificar os resultados da pesquisa, faça o seguinte:

Ative a API Discovery Engine

Consola

  1. Ative a API
  2. No passo Confirmar projeto, clique em Seguinte para confirmar o nome do projeto ao qual vai fazer alterações.
  3. No passo Ativar APIs, clique em Ativar para ativar a API Discovery Engine. Se já tiver ativado esta API, não a vê listada aqui.

gcloud

Para usar modelos de classificação, tem de ativar a API Discovery Engine.
Substitua PROJECT_ID pelo seu Google Cloud ID do projeto e PROJECT_NUMBER pelo número do projeto correspondente.

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

O registo de modelos para classificação não é obrigatório para modelos da Vertex AI. Pode usar o nome do modelo da Vertex AI como o model_id, que é apresentado no exemplo seguinte.

    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'])

Um exemplo de utilização comum do classificador semântico é reclassificar os resultados devolvidos pela pesquisa vetorial para uma melhor ordenação das consultas. O exemplo seguinte mostra como usar o modelo de classificação semântica para este exemplo de utilização. O exemplo obtém um conjunto de resultados inicial para a consulta personal fitness equipment através da pesquisa vetorial. Em seguida, estes resultados são reclassificados para devolver os cinco principais resultados.

    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 ver uma lista dos modelos e exemplos de utilização disponíveis, consulte o artigo Modelos suportados.

Faça a integração com o Vertex AI e instale a extensão

  1. Integre com o Vertex AI.
  2. Certifique-se de que tem instalada a versão mais recente do google_ml_integration.
    1. Para verificar a versão instalada, execute o seguinte comando:

              SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
              extversion
              ------------
              1.4.3
              (1 row)
            
    2. Se a extensão não estiver instalada ou se a versão instalada for anterior à 1.4.3, atualize a extensão executando os seguintes comandos:

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

      Se tiver problemas quando executar os comandos anteriores ou se a extensão não for atualizada para a versão 1.4.3 depois de executar os comandos anteriores, contacte o apoio técnico do AlloyDB.

    3. Depois de se certificar de que a versão está atualizada, instale a funcionalidade de pré-visualização executando o procedimento 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)
            

Funções necessárias

Para obter as autorizações necessárias para usar modelos de classificação do Discovery Engine, peça ao seu administrador para lhe conceder a função de gestão de identidade e acesso (IAM) de visualizador do Discovery Engine (roles/discoveryengine.viewer) em your project. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

Classifique os resultados da pesquisa

A seguinte consulta SQL mostra como classificar os resultados da pesquisa :

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

Substitua o seguinte:

Parâmetro Descrição
MODEL_ID Um ID exclusivo para o ponto final do modelo que definir.
SEARCH_STRING Uma string de pesquisa com base na qual os registos são classificados.
DOCUMENTS Uma string exclusiva que identifica o registo.

Para ver uma lista dos modelos de classificação da Vertex AI suportados, consulte o artigo Modelos suportados.

Exemplos

Para classificar os resultados da pesquisa através de um modelo de classificação da Vertex AI, execute a seguinte 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.']);

A resposta é uma tabela que mostra cada documento e a pontuação com base na relevância para a consulta de pesquisa. Segue-se a resposta de exemplo:

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

Considere uma base de dados do AlloyDB de exemplo com uma lista de descrições de críticas que são convertidas em incorporações. O seguinte fragmento de código de exemplo mostra como usar o modelo de classificação para obter o nome dos produtos com melhor classificação com base na similaridade semântica das respetivas descrições de críticas em relação a uma consulta.

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;

O que se segue?