Fazer uma pesquisa de similaridade vetorial

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

É possível consultar seu banco de dados do AlloyDB em busca de vetores semanticamente parecidos depois de armazenar e indexar embeddings. Use recursos de consulta pgvector para encontrar os vizinhos mais próximos de um vetor de embedding.

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

Para fazer 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. Você também pode usar a função embedding() para traduzir um texto em um vetor e comparar o vetor com embeddings armazenados usando operadores pgvector.

Para encontrar os vizinhos semânticos mais próximos de um vetor de embedding, 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 o seguinte:

  • TABLE: a tabela que contém o embedding com o qual você vai 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 você quiser apenas a melhor correspondência.

Para mais exemplos de consultas, consulte Consultas.

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

Como embedding() retorna uma matriz real, é necessário transmitir explicitamente a chamada embedding() para vector para usar esses 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 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, listadas em Versões de modelo.

    O Google recomenda que você 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 gerar resultados inesperados.

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

Para acelerar sua pesquisa de KNN filtrada, use o mecanismo colunar do AlloyDB. Para mais informações, consulte Acelerar a pesquisa de vetor filtrada (Pré-lançamento) e Configurar o mecanismo colunar.

A seguir