Compartilhar via


Como habilitar e usar pgvector no Azure Cosmos DB for PostgreSQL

APLICA-SE AO: Azure Cosmos DB for PostgreSQL (da plataforma da extensão de dados Citus para PostgreSQL)

A extensão pgvector adiciona uma pesquisa de similaridade de vetor de código aberto ao PostgreSQL.

Este artigo nos apresenta recursos extras habilitados pelo pgvector. Ele aborda os conceitos de similaridade e inserções de vetores e fornece diretrizes sobre como habilitar a extensão pgvector. Aprendemos sobre como criar, armazenar e consultar os vetores. Talvez você também queira consultar o README oficial do projeto.

Habilitar extensão

As extensões PostgreSQL devem ser habilitadas no banco de dados para que você possa usá-las. Para habilitar a extensão, execute o comando da ferramenta psql para carregar os objetos empacotados em seu banco de dados.

SELECT CREATE_EXTENSION('vector');

Observação

Para desabilitar uma extensão, use drop_extension().

Conceitos

Similaridade de vetor

A similaridade de vetor é um método usado para medir o quão semelhantes são dois itens, representando-os como vetores, que são uma série de números. Os vetores geralmente são usados para representar pontos de dados, em que cada elemento do vetor representa um recurso ou atributo do ponto de dados.

A similaridade de vetor é comumente calculada usando métricas de distância, como similaridade de Euclidean distance ou cosine. A distância euclidiana mede a distância em linha reta entre dois vetores no espaço ndimensional, enquanto a similaridade de cosseno mede o cosseno do ângulo entre dois vetores. Os valores das métricas de similaridade normalmente variam entre 0 e 1, com valores higher que indicam maior semelhança entre os vetores.

A similaridade de vetor é amplamente usada em vários aplicativos, como sistemas de recomendação, classificação de texto, reconhecimento de imagem e clustering. Por exemplo, em sistemas de recomendação, a similaridade de vetor pode ser usada para identificar itens semelhantes com base nas preferências do usuário. Na classificação de texto, a similaridade de vetor pode ser usada para determinar a similaridade entre dois documentos ou frases com base em suas representações de vetor.

Incorporações

Uma inserção é uma técnica de avaliação da "relação" de texto, imagens, vídeos ou outros tipos de informações. A avaliação permite que os modelos de machine learning identifiquem com eficiência as relações e as semelhanças entre os dados, permitindo que os algoritmos identifiquem padrões e façam previsões precisas. Por exemplo, em uma tarefa de análise de sentimento, palavras com inserções semelhantes podem ter pontuações de sentimento semelhantes.

Introdução

Crie uma tabela tblvector com uma coluna embedding do tipo vector(3) que representa um vetor tridimensional.

CREATE TABLE tblvector(
    id bigserial PRIMARY KEY,
    embedding vector(3)
    );

Depois de gerar uma inserção usando um serviço como a API do OpenAI, você poderá armazenar o vetor resultante em seu banco de dados. Definir um vetor como vector(3) designa [x,y,z] coordinates no plano tridimensional. O comando insere cinco novas linhas na tabela tblvector com as inserções fornecidas.

INSERT INTO tblvector (id, embedding) VALUES (1, '[1,2,3]'), (2, '[4,5,6]'), (3, '[5,4,6]'), (4, '[3,5,7]'), (5, '[7,8,9]');

Usando a instrução INSERT INTO ... ON CONFLICT, você pode especificar uma ação alternativa, como atualizar registros que correspondam aos critérios. Ele permite que você lide com possíveis conflitos de maneira mais efetiva e eficaz.

INSERT INTO tblvector (id, embedding) VALUES (1, '[1,2,3]'), (2, '[4,5,6]')
ON CONFLICT (id) DO UPDATE SET embedding = EXCLUDED.embedding;

O comando DELETE remove linhas de uma tabela especificada com base nas condições definidas na cláusula WHERE. Quando a cláusula WHERE não está presente, todas as linhas na tabela são excluídas.

DELETE FROM tblvector WHERE id = 1;

Para recuperar vetores e calcular a similaridade, use instruções SELECT e os operadores de vetor internos. Por exemplo, a consulta calcula a distância euclidiana (distância L2) entre o vetor especificado e os vetores armazenados na tabela tblvector, classifica os resultados pela distância calculada e retorna os cinco itens mais próximos mais semelhantes.

SELECT * FROM tblvector 
ORDER BY embedding <-> '[3,1,2]' 
LIMIT 5;

A consulta usa o operador "<->", que é o "operador de distância" usado para calcular a distância entre dois vetores em um espaço multidimensional. A consulta retorna todas as linhas com a distância inferior a 6 do vetor [3,1,2].

SELECT * FROM tblvector WHERE embedding <-> '[3,1,2]' < 6;

O comando recupera o valor médio da coluna "embedding" da tabela "tblvector". Por exemplo, se a coluna "embedding" contiver inserções de palavras de um modelo de linguagem, o valor médio dessas inserções poderá ser usado para representar a frase ou o documento todo.

SELECT AVG(embedding) FROM tblvector;

Operadores vetoriais

pgvector introduz seis novos operadores que podem ser usados em vetores:

Operador Descrição
+ adição elemento a elemento
- subtração elemento a elemento
* multiplicação elemento a elemento
<-> Distância euclidiana
<#> produto interno negativo
<=> distância do cosseno

Funções vetoriais

cosine_distance

Calcula a distância do cosseno entre dois vetores.

cosine_distance(vector, vector)

Argumentos

vector

Primeiro vector.

vector

Segundo vector.

Tipo de retorno

double precision como distância entre os dois vetores fornecidos.

inner_product

Calcula o produto interno de dois vetores.

inner_product(vector, vector)

Argumentos

vector

Primeiro vector.

vector

Segundo vector

Tipo de retorno

double precision como produto interno dos dois vetores.

l2_distance

Calcula a distância euclidiana (também conhecida como L2) entre dois vetores.

l2_distance(vector, vector)

Argumentos

vector

Primeiro vector.

vector

Segundo vector

Tipo de retorno

double precision como a distância euclidiana entre os dois vetores.

l1_distance

Calcula a distância do táxi (também conhecido como L1) entre dois vetores.

l1_distance(vector, vector)

Argumentos

vector

Primeiro vector.

vector

Segundo vector

Tipo de retorno

double precision como a distância do táxi entre os dois vetores.

vector_dims(vector)

Retorna as dimensões de um determinado vetor.

Argumentos

vector

Uma vector.

Tipo de retorno

integer que representa o número de dimensões do vetor dado.

vector_norms(vector)

Calcula a norma euclidiana de um dado vetor.

Argumentos

vector

Uma vector.

Tipo de retorno

double precision representando a norma euclidiana do vetor dado.

Agregados vetoriais

AVG

Calcula a média dos vetores processados.

Argumentos

vector

Uma vector.

Tipo de retorno

vector representando a média dos vetores processados.

SUM

Argumentos

vector

Uma vector.

Tipo de retorno

vector representado a soma dos vetores processados.

Próximas etapas

Saiba mais sobre desempenho, indexação e limitações usando pgvector.