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
.