Executar uma pesquisa de similaridade vetorial

Este documento explica como realizar pesquisas de similaridade de vetores no AlloyDB para PostgreSQL usando a extensão pgvector. A pesquisa de similaridade vetorial, também conhecida como pesquisa de vizinho mais próximo, permite encontrar os pontos de dados mais semelhantes a um determinado vetor de consulta.

Você pode consultar o banco de dados do AlloyDB em busca de vetores semanticamente semelhantes depois de armazenar e indexar os embeddings. Use os elementos de consulta pgvector para encontrar os vizinhos mais próximos de um embedding de vetor.

Para mais informações sobre como armazenar embeddings de vetor e criar um índice, consulte Armazenar embeddings de vetor e Criar índices, respectivamente.

Para executar uma pesquisa de similaridade, especifique a tabela, a coluna de embedding, a função de distância, o embedding de destino e o número de linhas a serem retornadas. Também é possível usar a função embedding() para traduzir texto em um vetor e, em seguida, comparar o vetor com embeddings armazenados usando operadores pgvector.

Para encontrar os vizinhos semânticos mais próximos de um vetor de incorporação, execute a consulta de exemplo a seguir, em que você define a mesma função de distância usada durante a criação do índice.

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

Substitua:

  • TABLE: a tabela que contém o embedding para comparar o texto.

  • EMBEDDING_COLUMN: a coluna que contém os embeddings armazenados.

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

    • Distância de L2:<->

    • Produto interno:<#>

    • Distância do cosseno:<=>

  • EMBEDDING: o vetor de embedding para encontrar os vizinhos semânticos armazenados mais próximos.

  • ROW_COUNT: o número de linhas que serão retornadas.

    Especifique 1 se quiser apenas a melhor correspondência.

Para mais informações sobre outros exemplos de consulta, consulte Como consultar.

Você também pode usar a função embedding() para converter o texto em um vetor. A extensão padrão pgvector do PostgreSQL é personalizada para o AlloyDB e é chamada de vector. Você aplica o vetor a um dos operadores vizinhos mais próximos pgvector, por exemplo, <-> para a distância L2, para encontrar as linhas do banco de dados com os embeddings mais semanticamente semelhantes.

Como embedding() retorna uma matriz real, é necessário transmitir a chamada embedding() para vector para usar esses valores com operadores pgvector.

  CREATE EXTENSION IF NOT EXISTS google_ml_integration VERSION '1.2';
  CREATE EXTENSION IF NOT EXISTS vector;

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

Substitua:

  • MODEL_ID: o ID do modelo a ser consultado.

    Se você estiver usando o Model Garden da Vertex AI, especifique text-embedding-005 como o ID do modelo. Esses são os modelos baseados na nuvem que o AlloyDB pode usar para embeddings de texto. Para mais informações, consulte Embeddings de texto.

  • Opcional: VERSION_TAG: a tag da versão do modelo a ser consultada. Adicione @ ao início da tag.

    Se você estiver usando um dos modelos em inglês text-embedding-005 com a Vertex AI, especifique uma das tags de versão, por exemplo, text-embedding-005, listada em Versões de modelo.

    O Google recomenda que você sempre especifique a tag de versão. Se você não especificar a tag de versão, o AlloyDB usará a versão mais recente do modelo, o que pode levar a resultados inesperados.

  • TEXT: o texto a ser traduzido em um embedding vetorial.

A seguir