Como habilitar e usar pgvector
no Azure Cosmos DB para PostgreSQL
APLICA-SE A: Azure Cosmos DB para PostgreSQL (alimentado pela extensão de banco de dados Citus para PostgreSQL)
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
As extensões do PostgreSQL devem ser habilitadas em seu banco de dados antes 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');
Nota
Para desativar um uso de extensão drop_extension()
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 .