Partilhar via


Habilitar e usar 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 pgvector extensão adiciona uma pesquisa de semelhança vetorial de código aberto ao PostgreSQL.

Este artigo nos apresenta os recursos extras habilitados pelo pgvector. Ele abrange os conceitos de semelhança vetorial e incorporações, e fornece orientação sobre como habilitar a pgvector extensão. Aprendemos sobre, como criar, armazenar e consultar os vetores. Você também pode querer consultar o LEIA-ME oficial do projeto.

Ativar extensão

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

Importante

Observe que, embora toda a comunidade PostgreSQL tenda a se referir a essa extensão como pgvector, o nome do binário e da extensão em si é simplesmente vector. Leve isso em consideração, porque esse é o nome que você deve usar para permitir listá-lo ou para criá-lo em qualquer banco de dados através do comando CREATE EXTENSION.

Em seguida, você pode instalar a extensão, conectando-se ao seu banco de dados de destino e executando o comando CREATE EXTENSION . Você precisa repetir o comando separadamente para cada banco de dados no qual deseja que a extensão esteja disponível.

CREATE EXTENSION vector;

Nota

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

Conceitos

Semelhança vetorial

A semelhança vetorial é um método usado para medir a semelhança de dois itens, representando-os como vetores, que são séries de números. Os vetores são frequentemente usados para representar pontos de dados, onde cada elemento do vetor representa um recurso ou atributo do ponto de dados.

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

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

Incorporações

Uma incorporação é uma técnica de avaliação da "relação" de texto, imagens, vídeos ou outros tipos de informação. A avaliação permite que os modelos de aprendizagem automática identifiquem eficientemente as relações e 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, pode-se esperar que palavras com incorporações semelhantes tenham pontuações de sentimento semelhantes.

Introdução

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

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

Depois de gerar uma incorporação usando um serviço como a API OpenAI, você pode armazenar o vetor resultante em seu banco de dados. Definição de um vetor como vector(3) designa [x,y,z] coordinates em plano tridimensional. O comando insere cinco novas linhas na tblvector tabela com as incorporaçõ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 INSERT INTO ... ON CONFLICT instrução, você pode especificar uma ação alternativa, como atualizar registros que correspondam aos critérios. Permite-lhe lidar com potenciais conflitos de uma forma mais eficiente 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 DELETE comando remove linhas de uma tabela especificada com base nas condições especificadas na cláusula WHERE. Quando a cláusula WHERE não está presente, todas as linhas da tabela são excluídas.

DELETE FROM tblvector WHERE id = 1;

Para recuperar vetores e calcular semelhança, use SELECT instruções e os operadores de vetores internos. Por exemplo, a consulta calcula a distância euclidiana (distância L2) entre o vetor dado e os vetores armazenados na tblvector tabela, 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 "incorporação" da tabela "tblvector". Por exemplo, se a coluna "incorporação" contiver incorporações de palavras para um modelo de linguagem, o valor médio dessas incorporações poderá ser usado para representar toda a frase ou documento.

SELECT AVG(embedding) FROM tblvector;

Operadores de vetores

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

Operator Description
+ adição elementar-wise
- subtração elementar
* multiplicação elementar
<-> Distância euclidiana
<#> produto interno negativo
<=> distância cosseno

Funções vetoriais

cosine_distance

Calcula a distância 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 conhecida 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)

Devolve as dimensões de um determinado vetor.

Argumentos

vector

A vector.

Tipo de retorno

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

vector_norms(vector)

Calcula a norma euclidiana de um dado vetor.

Argumentos

vector

A 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

A vector.

Tipo de retorno

vector representando a média dos vetores processados.

SUM

Argumentos

vector

A vector.

Tipo de retorno

vector representando a soma dos vetores processados.

Partilhe as suas sugestões e bugs com a equipa de produto da Base de Dados do Azure para PostgreSQL.