Execute uma pesquisa de similaridade vetorial

Este documento explica como realizar pesquisas de similaridade vetorial no AlloyDB for PostgreSQL usando a extensão pgvector. A pesquisa de similaridade vetorial, também conhecida como pesquisa de vizinhos mais próximos, permite-lhe encontrar os pontos de dados nos seus dados que são mais semelhantes a um determinado vetor de consulta.

Pode consultar a sua base de dados do AlloyDB para vetores semanticamente semelhantes depois de armazenar e indexar as incorporações. Use as funcionalidades de consulta pgvector para encontrar os vizinhos mais próximos de um vetor de incorporação.

Para mais informações sobre como armazenar incorporações vetoriais e criar um índice, consulte os artigos Armazene incorporações vetoriais e Crie índices, respetivamente.

Para executar uma pesquisa de similaridade, especifique a tabela, a coluna de incorporação, a função de distância, a incorporação de destino e o número de linhas a devolver. Também pode usar a função embedding() para traduzir texto num vetor e, em seguida, comparar o vetor com incorporações armazenadas através de operadores pgvector.

Para encontrar os vizinhos semânticos mais próximos de um vetor de incorporação, pode executar a consulta de exemplo seguinte, em que define a mesma função de distância que usou durante a criação do índice.

  SELECT * FROM TABLE
    ORDER BY EMBEDDING_COLUMN DISTANCE_FUNCTION_QUERY ['EMBEDDING']
    LIMIT ROW_COUNT

Substitua o seguinte:

  • TABLE: a tabela que contém a incorporação com a qual comparar o texto.

  • EMBEDDING_COLUMN: a coluna que contém as incorporações armazenadas.

  • DISTANCE_FUNCTION_QUERY: a função de distância a usar com esta consulta. Escolha uma das seguintes opções com base na função de distância usada ao criar o índice:

    • Distância L2: <->

    • Produto interior: <#>

    • Distância do cosseno: <=>

  • EMBEDDING: o vetor de incorporação para o qual quer encontrar os vizinhos semânticos armazenados mais próximos.

  • ROW_COUNT: o número de linhas a devolver.

    Especifique 1 se quiser apenas a melhor correspondência única.

Para mais informações sobre outros exemplos de consultas, consulte o artigo Consultar.

Também pode usar a função embedding() para traduzir o texto num vetor e encontrar as linhas da base de dados com as incorporações semanticamente mais semelhantes. A extensão do PostgreSQL pgvectorde origem é personalizada para o AlloyDB e é denominada vector. Aplica o vetor a um dos operadores de vizinho mais próximo, por exemplo, <=> para a distância do cosseno.pgvector

Uma vez que embedding() devolve uma matriz real, tem de converter explicitamente a chamada embedding() em vector para usar estes valores com operadores pgvector.

  CREATE EXTENSION IF NOT EXISTS vector;

  SELECT * FROM TABLE
    ORDER BY EMBEDDING_COLUMN::vector
    <=> google_ml.embedding('MODEL_IDVERSION_TAG', 'TEXT')
    LIMIT ROW_COUNT

Substitua o seguinte:

  • MODEL_ID: o ID do modelo a consultar.

    Se estiver a usar o Model Garden da Vertex AI, especifique text-embedding-005 como o ID do modelo. Estes são os modelos baseados na nuvem que o AlloyDB pode usar para incorporações de texto. Para mais informações, consulte o artigo Incorporações de texto.

  • Opcional: VERSION_TAG: a etiqueta de versão do modelo a consultar. Adicione @ antes da etiqueta.

    Se estiver a usar um dos text-embedding-005 modelos em inglês com a Vertex AI, especifique uma das etiquetas de versão, por exemplo, text-embedding-005, conforme indicado em Versões do modelo.

    A Google recomenda vivamente que especifique sempre a etiqueta de versão. Se não especificar a etiqueta de versão, o AlloyDB usa a versão do modelo mais recente, o que pode gerar resultados inesperados.

  • TEXT: o texto a traduzir numa incorporação vetorial.

Para acelerar a pesquisa KNN filtrada, pode usar o motor de colunas do AlloyDB. Para mais informações, consulte os artigos Acelere a sua pesquisa vetorial filtrada (pré-visualização) e Configure o motor de colunas.

O que se segue?