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 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.
Passos Seguintes
Saiba mais sobre desempenho, indexação e limitações usando pgvector
o .