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:
- Verifique se a extensão
google_ml_integration
está instalada. - Verifique se a flag
google_ml_integration.enable_model_support
está definida comoon
. - Integre com o Vertex AI.
- Ative a API Discovery Engine.
- Obtenha as funções necessárias para usar modelos de classificação.
Ative a API Discovery Engine
Consola
- Ative a API
- No passo Confirmar projeto, clique em Seguinte para confirmar o nome do projeto ao qual vai fazer alterações.
- 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
- Integre com o Vertex AI.
- Certifique-se de que tem instalada a versão mais recente do
google_ml_integration
.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)
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.
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;