Partilhar via


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 pgvectoro .