Como habilitar e usar o pgvector no Banco de Dados do Azure para PostgreSQL – servidor flexível

APLICA-SE A: Banco de Dados do Azure para PostgreSQL - Servidor Flexível

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

Antes de habilitar pgvector na instância do servidor flexível do Banco de Dados do Azure para PostgreSQL, você precisa adicioná-la à lista de permitidos, conforme descrito em como usar extensões do PostgreSQL e verificar se foi ela adicionada corretamente executando SHOW azure.extensions;.

Importante

Observe que embora toda a comunidade PostgreSQL tenda a se referir a esta extensão como pgvector, o nome do binário e a extensão em si são simplesmente vector. Leve isso em consideração, porque esse é o nome que você deve usar para incluí-lo na lista de permissões ou criá-lo em qualquer banco de dados por meio do comando CREATE EXTENSION.

Em seguida, instale a extensão conectando-se ao banco de dados de destino e executando o comando CREATE EXTENSION. Você precisará repetir o comando separadamente para cada banco de dados no qual deseja que a extensão fique disponível.

CREATE EXTENSION vector;

Observação

Para remover a extensão do banco de dados conectado no momento, use DROP EXTENSION vector;.

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.