Ir para o conteúdo

Bancos de Dados Vetoriais

De Wikiversidade

Um banco de dados vetorial armazena e gerencia dados como vetores de alta dimensão, frequentemente gerados como outputs de redes neurais para representar dados não estruturados (texto, imagens, áudio, etc.) de forma compacta. Dessa maneira, a similaridade entre dados é interpretada pela proximidade (distância) de seus vetores, o que contrasta com a natureza de bancos de dados tradicionais, onde a relação entre dados é representada por um esquema relacional.

Essa abordagem permite utilizar métricas como similaridade de cosseno ou distância euclidiana para representar similaridade em diversas aplicações, como:

Diagrama de banco de dados vetorial
Imagem introdução

KNN e ANN

[editar | editar código]

K-Nearest Neighbors (KNN) é um algoritmo que encontra os "k" vetores mais próximos a um vetor de consulta em um espaço multidimensional, baseando-se em métricas de distância para determinar a similaridade.

Imagem representando Classificação KNN

Para lidar com grandes volumes de dados, são usadas técnicas de Approximate Nearest Neighbors (ANN). Métodos ANN, como HNSW, fazem um compromisso comum em aplicações de alta volumetria, sacrificando um pouco de precisão para obter maior velocidade na busca.

Comparação de Complexidade Computacional
Algoritmo Complexidade Computacional (Busca)
KNN (Força Bruta) O(N*D) - N: número de vetores, D: dimensões
ANN (Geralmente) O(log N) ou O(N log N) - Varia dependendo do algoritmo e implementação

Abordagens Híbridas: pgvector

[editar | editar código]

O pgvector é uma extensão de código aberto para o PostgreSQL que adiciona suporte a dados vetoriais e busca de similaridade. Ele permite integrar busca vetorial com as funcionalidades tradicionais de um banco de dados relacional, criando uma abordagem híbrida.

Instalação[1]

[editar | editar código]

A instalação geralmente envolve adicionar a extensão a um banco de dados PostgreSQL existente.

Se não tiver PostgreSQL

Para sistemas baseados em Debian/Ubuntu (ajuste a versão do PostgreSQL):

sudo apt-get install postgresql-<version>

Para sistemas baseados em Red Hat/CentOS (ajuste a versão):

sudo yum install postgresql-<version>

Instale pgvector

git clone https://github.com/pgvector/pgvector.git

Para sistemas baseados em Debian/Ubuntu (ajuste a versão do PostgreSQL):

sudo apt-get install postgresql-{{Versão}}-pgvector

Para sistemas baseados em Red Hat/CentOS (ajuste a versão):

sudo yum install postgresql{{Versão}}-contrib

Ou compilando do código fonte:

cd pgvector
make 
sudo make install

Após instalar os binários e se conectar ao banco de dados PostgreSQL, usando por exemplo

sudo systemctl start postgresql

(que inicia o banco de dados)

sudo -u postgres psql

(que conecta ao banco de dados)

ative a extensão no banco de dados:

CREATE EXTENSION vector;

Criação de Dados com Vetores

[editar | editar código]

Para armazenar vetores, crie uma tabela com uma coluna do tipo vector:

CREATE TABLE documentos (
  id SERIAL PRIMARY KEY,
  conteudo TEXT,
  embedding vector(1024) -- Exemplo com vetores de 1024 dimensões
);

Inserir dados com vetores:

INSERT INTO documentos (conteudo, embedding)
VALUES
('Texto do primeiro documento', '[0.1, 0.2, ..., 0.9]'),
('Conteúdo do segundo documento', '[0.5, 0.3, ..., 0.1]');

Consultas com pgvector

[editar | editar código]

Buscar por similaridade (puramente vetorial) usando distância de cosseno:

SELECT * FROM documentos
ORDER BY embedding <=> '[0.2, 0.1, ..., 0.8]'
LIMIT 5;

Consulta híbrida (vetorial com filtro SQL):

SELECT * FROM documentos
WHERE id > 10
ORDER BY embedding <=> '[0.2, 0.1, ..., 0.8]'
LIMIT 5;

Índices no pgvector

[editar | editar código]

O pgvector suporta diferentes tipos de índices para otimizar a busca por similaridade. O índice HNSW é recomendado para grandes conjuntos de dados.

Índices Tradicionais e Características
Índice Complexidade de Consulta Aplicações Típicas
B-tree O(log N) Consultas de igualdade e faixa em dados ordenados
Hash Index O(1) em média Consultas de igualdade
Índices Vetoriais no pgvector e Trade-offs
Índice Descrição Trade-offs
Força Bruta Busca linear completa Lento para grandes datasets, preciso
HNSW (Hierarchical Navigable Small World) Grafo hierárquico para busca aproximada Rápido, boa precisão, maior custo de construção
IVF (Inverted File Index) Particiona o espaço vetorial Mais rápido que Força Bruta e HNSW, mas menos preciso. Depende de um conjunto de dados de treinamento
-- Exemplo de criação de índice HNSW
CREATE INDEX ON documentos USING hnsw (embedding vector_cosine_ops);

Comparação de Bancos de Dados Vetoriais

[editar | editar código]
Comparação de Plataformas de Banco de Dados Vetoriais
Plataforma Principais Características Tipo
Pinecone Indexação automática, atualizações em tempo real, escalabilidade, serverless Gerenciado
Milvus Indexação com vários algoritmos, busca eficiente, amplo suporte da comunidade Código Aberto
Weaviate Busca contextual, integração com grafos de conhecimento, busca por similaridade semântica Código Aberto
Qdrant Foco em velocidade e flexibilidade, indexação HNSW filtrável Código Aberto
Elasticsearch Vector Search Integração com o ecossistema Elasticsearch, escalabilidade, recursos de busca Híbrido (Search/Analytics com Vetor)
AWS Kendra/OpenSearch Serviços AWS com recursos de busca vetorial Cloud / Híbrido
Azure AI Search Serviço Azure com suporte a busca vetorial Cloud / Híbrido
Google Cloud Vertex AI Vector Search Busca de similaridade em grande escala, integrado ao Google Cloud AI Cloud
Oracle Database Vector Database Funcionalidade integrada ao Oracle Database para armazenar e consultar dados vetoriais Proprietário / Híbrido

Referências

[editar | editar código]

[2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16]

  1. https://www.datacamp.com/pt/tutorial/pgvector-tutorial
  2. https://learn.microsoft.com/pt-br/dotnet/ai/conceptual/vector-databases
  3. https://www.oracle.com/br/database/vector-database/
  4. https://www.ibm.com/br-pt/topics/vector-database
  5. https://www.datacamp.com/pt/blog/the-top-5-vector-databases
  6. https://www.ionos.com/pt-br/digitalguide/servidor/conhecimento/banco-de-dados-vetorial/
  7. https://blog-pt.lac.tdsynnex.com/banco-de-dados-vetorial-o-que-e-quais-sao-as-vantagens
  8. https://www.ibm.com/think/topics/vector-database
  9. https://www.oracle.com/il-en/database/vector-database/
  10. https://www.elastic.co/what-is/vector-database
  11. https://www.instaclustr.com/education/vector-database/vector-databases-explained-use-cases-algorithms-and-key-features/
  12. https://www.pinecone.io/learn/vector-database/
  13. https://qdrant.tech/articles/what-is-a-vector-database/
  14. https://www.datastax.com/guides/what-is-a-vector-database
  15. https://www.decube.io/post/vector-database-concept
  16. https://aws.amazon.com/what-is/vector-databases/