Desvendando a GenAI - Parte 10
No post anterior, exploramos um pouco sobre embeddings. Agora, vamos detalhar em como podemos armazenar esses vetores gerados por esse método de forma eficiente.
Um Vector Database é uma solução de armazenamento otimizada para gerenciar conjuntos de vetores. Em vez de armazenar dados como texto ou números diretamente, esses bancos trabalham com representações vetoriais — geralmente geradas por embeddings de modelos de linguagem ou aprendizado de máquina.
Por que usar vetores?
Vetores permitem representar dados como pontos em um espaço multidimensional. Por exemplo:
Um documento pode ser representado por um vetor com base no significado das palavras.
Imagens podem ser convertidas em vetores com base em suas características visuais.
Perfis de usuários podem ser vetorizados com base em comportamento ou preferências.
A Conexão entre Embeddings e Vector Databases
Embeddings são vetores de alta dimensão gerados por modelos de aprendizado de máquina que capturam o significado semântico ou estrutural de um objeto (texto, imagem, áudio, etc.). Eles são essenciais para alimentar Vector Databases, pois permitem que diferentes tipos de dados sejam comparados no espaço vetorial.
Como Embeddings Alimentam um Vector Database?
Geração dos Embeddings: Um modelo, como o text-embedding-ada-002 da OpenAI, converte um dado (ex.: texto ou documento) em um vetor.
Armazenamento: Esses vetores são armazenados no Vector Database, junto com os metadados relacionados (ex.: identificadores, tags, etc.).
Consulta: Durante uma busca, o dado de entrada também é convertido em um embedding. O banco de dados realiza cálculos de distância vetorial para identificar os vetores mais próximos, ou seja, os resultados mais relevantes.
Distâncias Vetoriais e Similaridade
A eficiência dos Vector Databases depende da capacidade de calcular distâncias vetoriais. Essas distâncias determinam o quão semelhantes dois vetores são no espaço multidimensional. As métricas de distância mais comuns foram discutidas aqui.
Ao realizar uma busca, um vetor da consulta do usuário é comparado aos vetores no banco de dados, e os itens com menor distância são retornados como resultados mais relevantes.
Implementando Vector Databases na Prática com FAISS
O FAISS é uma biblioteca python desenvolvida pelo Facebook usada para consultas rápidas em coleções de vetores.
import faiss # pip install faiss
import numpy as np
# Exemplo de embeddings (gerados por um modelo, como o da OpenAI)
embeddings = np.array([
[0.1, 0.2, 0.3], # Embedding 1
[0.4, 0.5, 0.6], # Embedding 2
[0.7, 0.8, 0.9], # Embedding 3
]).astype('float32')
# Criar um índice FAISS
dimension = embeddings.shape[1] # Número de dimensões dos vetores
index = faiss.IndexFlatL2(dimension) # Usando a métrica L2 (distância euclidiana)
index.add(embeddings) # Adicionar embeddings ao índice
# Consultar o índice
query_vector = np.array([[0.15, 0.25, 0.35]]).astype('float32') # Consulta
distances, indices = index.search(query_vector, k=2) # Retorna os 2 vetores mais próximos
print("Índices mais próximos:", indices)
print("Distâncias correspondentes:", distances)
Outros Vector DB
Postgres com PgVector (https://github.com/pgvector/pgvector)
Pinecone
MongoDB
Redis
SqlLite com sqlite-vec (https://github.com/asg017/sqlite-vec)
e muitos outros…
Particularmente eu gosto bastante do Postgres com PgVector por ser OpenSource e ter a possibilidade de usar um banco relacional com índices vetoriais. É possível continuar usando suas tabela relacionais e fazer joins com o resultado da busca vetorial, por exemplo.
Com o avanço das LLMs, uma enxurrada de VectorDBs tem surgido no mercado. Por isso, a escolha do banco de dados no início do projeto é fundamental para a arquitetura do seu sistema. Uma escolha errada pode obrigar seu time a reconstruir toda a solução de armazenamento e busca desses vetores, além de um trabalho de migração.
Conclusão
Os Bancos de dados Vetoriais são importantes para armazenamento de vetores e cálculos vetoriais. Em conjunto com embeddings, eles permitem construir sistemas que compreendem e organizam informações de maneira mais próxima à linguagem humana. Seja para busca semântica, recomendações ou IA conversacional, o uso de distâncias vetoriais como métrica central oferece uma forma de avaliarmos a similaridade entre esses dados.
O código fonte pode ser encontrado aqui!