Como os Bancos de Dados Vetoriais estão Revolucionando a Busca em Dados Não Estruturados em Aplicações de IA
Os bancos de dados vetoriais tornaram-se fundamentais para revolucionar a busca em dados não estruturados dentro de aplicações de IA. Uma de suas funções amplamente reconhecidas é na geração aumentada por recuperação (RAG), um processo que conecta documentos relevantes a LLMs. No entanto, suas aplicações e capacidades vão muito além da RAG; eles são aplicáveis de forma mais ampla a uma variedade de diferentes tipos de dados não estruturados, ou seja, qualquer tipo de dado que não esteja em conformidade com um modelo de dados predefinido, como texto, imagens, áudio, moléculas e grafos.
No recente Brazil Unstructured Data Meetup, Frank Liu, chefe de Inteligência artificial e machine learning na Zilliz, falou sobre como os bancos de dados vetoriais estão transformando o cenário da busca em dados não estruturados em aplicações de IA. Seus insights lançaram luz sobre as capacidades amplas e impactantes desses bancos de dados.
Assista à reprise da palestra de Frank no meetup Acompanhe a demonstração
O que são vetores?
Antes de abordar bancos de dados vetoriais e seu papel em aplicações de IA, é importante entender o que são vetores, pois eles são os blocos de construção dos bancos de dados vetoriais. Um vetor é uma lista de números que codifica informações de uma forma que os computadores conseguem processar. Imagine que você tem uma imagem, como a mostrada abaixo:
Fig 1- Uma imagem representada em formato vetorial
Para você, é uma bela flor, mas, para um computador, essa imagem precisa ser convertida em um formato que ele possa entender. É aqui que os embeddings vetoriais entram em cena.
A imagem da flor acima é transformada em um embedding vetorial — um arranjo estruturado de números. Cada número no vetor representa uma característica específica da imagem, como cor, textura ou forma. A combinação desses números fornece uma representação compacta e eficiente da imagem que o computador pode usar para várias tarefas, como buscar imagens semelhantes, categorizar objetos ou até mesmo gerar novas imagens. Aqui está uma visualização de como os embeddings vetoriais são gerados e armazenados em um banco de dados vetorial como o Milvus.
Fig 2- Processo de geração e armazenamento de embeddings vetoriais
O processo começa com uma base de conhecimento contendo vários tipos de dados. Os dados são então processados por modelos de embedding, que os convertem em vetores. Por fim, os vetores são armazenados em um banco de dados vetorial como o Milvus, prontos para recuperação.
O embedding de dados não se limita a imagens. Texto, áudio e até tipos de dados mais complexos, como moléculas e grafos, podem ser transformados em embeddings vetoriais. Ao representar dados como vetores, podemos aproveitar o poder dos bancos de dados vetoriais para realizar buscas eficientes e precisas.
Vamos ver como os bancos de dados vetoriais estão sendo utilizados em diferentes áreas.
Diferentes casos de uso impulsionados por bancos de dados vetoriais
Os bancos de dados vetoriais estão transformando a forma como lidamos com dados não estruturados e os pesquisamos em uma infinidade de aplicações. Desde aprimorar as capacidades de sistemas de IA até fazer recomendações mais eficazes, as possibilidades são vastas e impactantes. Vamos explorar alguns casos de uso específicos impulsionados por bancos de dados vetoriais.
Geração aumentada por recuperação (RAG)
Os bancos de dados vetoriais estão transformando a RAG ao possibilitar uma recuperação mais eficiente e semanticamente significativa de informações relevantes. Métodos tradicionais de busca baseada em palavras-chave muitas vezes ficam aquém ao lidar com consultas complexas ou contextos sutis. Os bancos de dados vetoriais abordam essa limitação armazenando e pesquisando dados com base na similaridade semântica, em vez de correspondências exatas.
No RAG, os documentos são convertidos em vetores de alta dimensão que capturam seu significado semântico. Quando uma consulta é recebida, ela também é convertida em um vetor, e o banco de dados vetorial encontra rapidamente os documentos semanticamente mais semelhantes. Essa abordagem permite uma recuperação de informações mais sutil e consciente do contexto, o que é crucial para gerar respostas precisas e relevantes.
Considere um chatbot de suporte ao cliente para uma empresa de tecnologia. Quando um usuário pergunta: "Como soluciono problemas no meu dispositivo que não liga?", o banco de dados vetorial pode recuperar documentos relevantes mesmo que eles não contenham exatamente essas palavras. Ele pode trazer informações sobre problemas de energia, problemas de bateria e etapas gerais de solução de problemas. O LLM então usa essas informações recuperadas para gerar uma resposta abrangente e contextualmente relevante, melhorando significativamente a qualidade do suporte ao cliente.
Sistema de recomendação
Bancos de dados vetoriais estão revolucionando os sistemas de recomendação ao possibilitar cálculos de similaridade mais sofisticados e eficientes. Sistemas de recomendação tradicionais muitas vezes enfrentam dificuldades com o problema de "cold start" e podem ser computacionalmente caros ao lidar com grandes conjuntos de dados. Bancos de dados vetoriais resolvem esses problemas permitindo buscas aproximadas de vizinhos mais próximos rápidas em espaços de alta dimensão.
Em um sistema de recomendação alimentado por banco de dados vetorial, tanto usuários quanto itens são representados como vetores em um espaço de embedding compartilhado. Esses embeddings capturam recursos e preferências complexos, permitindo recomendações mais sutis. O banco de dados vetorial pode encontrar rapidamente usuários ou itens semelhantes, possibilitando personalização em tempo real mesmo com conjuntos de dados massivos.
Por exemplo, um serviço de streaming de música como o Spotify usa bancos de dados vetoriais para alimentar seu mecanismo de recomendação. Cada música é representada como um vetor, capturando vários atributos como gênero, tempo, humor e padrões de escuta. As preferências dos usuários também são codificadas como vetores. Quando um usuário ouve uma música nova, o sistema pode encontrar rapidamente músicas semelhantes no espaço vetorial, permitindo a descoberta de novas músicas que se alinham ao gosto do usuário, mesmo que sejam de um artista ou gênero desconhecido.
Busca de similaridade molecular
Bancos de dados vetoriais estão transformando a busca de similaridade molecular na descoberta de medicamentos ao possibilitar a identificação mais eficiente e precisa de compostos semelhantes. Métodos tradicionais muitas vezes dependem da similaridade de estruturas 2D, o que pode deixar passar importantes semelhanças conformacionais 3D ou relações entre grupos funcionais.
Com bancos de dados vetoriais, imagens de moléculas são representadas como vetores de alta dimensão que capturam propriedades estruturais e químicas complexas. Isso permite que pesquisadores busquem moléculas com propriedades semelhantes ou potenciais atividades biológicas, mesmo que suas estruturas 2D pareçam diferentes. A velocidade dos bancos de dados vetoriais também permite a triagem rápida de vastas bibliotecas químicas.
Veja o exemplo de uma empresa farmacêutica em busca de novos candidatos a antibióticos. Ela tem uma molécula antibiótica conhecida que funciona bem, mas apresenta efeitos colaterais graves. Usando um banco de dados vetorial, ela pode pesquisar rapidamente milhões de compostos para encontrar moléculas com propriedades antibacterianas semelhantes, mas com perfis de efeitos colaterais potencialmente diferentes. A representação vetorial pode capturar características como distribuição de carga, potenciais locais de ligação e forma 3D, permitindo a descoberta de moléculas estruturalmente diversas, mas funcionalmente semelhantes, que buscas tradicionais de similaridade 2D poderiam deixar passar.
Busca de similaridade multimodal
Bancos de dados vetoriais estão revolucionando a busca multimodal ao fornecer uma maneira unificada de representar e pesquisar entre diferentes tipos de dados (texto, imagens, áudio etc.). Sistemas de busca tradicionais muitas vezes enfrentam dificuldades com consultas entre modalidades ou para encontrar relações entre diferentes tipos de dados.
Em um sistema multimodal alimentado por banco de dados vetorial, todos os tipos de dados são projetados em um espaço compartilhado de alta dimensionalidade, onde as similaridades podem ser calculadas independentemente do tipo de dado original. Isso permite capacidades de busca mais flexíveis e poderosas, possibilitando encontrar conteúdo relacionado em diferentes modalidades.
Por exemplo, uma plataforma de e-commerce implementa um sistema de busca multimodal usando bancos de dados vetoriais. Um usuário pode enviar uma imagem de um móvel de que gosta e fornecer uma descrição em texto da cor e do material desejados. O sistema converte tanto a imagem quanto o texto em vetores em um espaço compartilhado. Em seguida, ele pesquisa no banco de dados vetorial para encontrar produtos que correspondam tanto ao estilo visual da imagem quanto aos atributos específicos da descrição em texto. Isso permite que os usuários encontrem exatamente o que estão procurando, mesmo que não consigam expressá-lo totalmente apenas em palavras, melhorando muito a experiência de compra.
Esses são apenas alguns casos de uso que estão sendo revolucionados pelos bancos de dados vetoriais. Frank compartilhou o slide a seguir com ainda mais casos de uso.
Fig 3- Casos de uso de bancos de dados vetoriais
A lista acima não é exaustiva. É apenas uma representação do que é possível quando se trata de aprimorar a busca de dados em aplicações de IA por meio de bancos de dados vetoriais.
Como agora você entende a importância dos bancos de dados vetoriais em vários campos. Vamos implementar um dos casos de uso para que você possa vê-los em ação. Utilizaremos Milvus, pois ele é o banco de dados vetorial mais popular em termos de estrelas no GitHub.
Implementando um Sistema de Busca por Similaridade Multimodal Usando Milvus, Radient, ImageBind e Meta-Chameleon-7b
Para implementar um sistema de busca por similaridade multimodal usando as ferramentas acima. Você precisa instalá-las em seu ambiente e importá-las.
Configurando Seu Ambiente
Comece instalando as bibliotecas necessárias e baixando os modelos necessários.
!pip install -U radient
!pip install -U yt-dlp
!pip install pymilvus
!pip install -U git+https://github.com/facebookresearch/chameleon.git@main
!git clone https://huggingface.co/eastwind/meta-chameleon-7b
!yt-dlp "https://www.youtube.com/watch?v=wwk1QIDswcQ" -o ~/google_io_preshow.mp4
!pip install git+https://github.com/fzliu/ImageBind@main
Aqui está o que cada uma das bibliotecas acima faz:
Radient: Cria e executa fluxos de trabalho para processar e analisar dados multimodais, integrando várias etapas de processamento de dados.
yt-dlp: Uma ferramenta de linha de comando para baixar vídeos do YouTube. Neste artigo, usaremos este vídeo do pré-show do Google.
PyMilvus: O SDK Python para interagir com o banco de dados vetorial Milvus e o Milvus lite, permitindo busca por similaridade e recuperação eficientes de dados em grande escala.
Chameleon: Um modelo de visão-linguagem desenvolvido pela Meta AI, capaz de compreender e gerar texto com base em entradas visuais, útil para integrar entradas de dados multimodais.
Meta-Chameleon-7b: Um modelo específico da série Chameleon, projetado para tarefas avançadas de visão-linguagem, fornecendo respostas sensíveis ao contexto ao integrar dados visuais e textuais.
ImageBind: Um modelo de embedding multimodal.
Depois de instalar as bibliotecas, precisamos importá-las para o seu código para poder usar suas funções.
from pathlib import Path
from radient import make_operator
from radient import Workflow
Observe que importamos apenas radient. Isso ocorre porque Radient gerencia a integração e a utilização do modelo de embedding e do PyMilvus dentro de seus fluxos de trabalho. Portanto, não precisamos importá-los manualmente.
A função make_operator nos permite criar vários operadores que formarão os blocos de construção do nosso fluxo de trabalho. A classe Workflow encadeará esses operadores em uma sequência lógica.
Após as importações, você está pronto para implementar o sistema de busca por similaridade multimodal.
Criando Operadores
Comece especificando as tarefas específicas que o fluxo de trabalho executará.
path = Path('/content/google.mp4') // pass the youtube downloaded video path here
read = make_operator(optype="source", method="local", task_params={"path": str(path)})
demux = make_operator(optype="transform", method="video-demux", task_params={"interval": 5.8})
vectorize = make_operator (optype="vectorizer", method="imagebind", modality="multimodal", task_params={})
store = make_operator (optype="sink", method="milvus", task_params={"operation": "insert"})
Vamos detalhar cada operador:
read: Este é um operadorsourceque lê o arquivo de vídeo local. Ele recebe o caminho do arquivo como parâmetro e é responsável por carregar os dados do vídeo em nosso fluxo de trabalho.demux: Este é um operadortransformque faz demux (separa) o vídeo em quadros em intervalos de 5,8 segundos. Esta etapa é crucial para dividir o fluxo contínuo de vídeo em imagens discretas que podem ser processadas individualmente.vectorize: Este operador usa o modeloImageBindpara criar embeddings vetoriais para dados multimodais. ImageBind é um modelo poderoso que pode criar embeddings unificados para diferentes modalidades (como imagens, texto e áudio), permitindo representar nossos quadros de vídeo em um espaço vetorial de alta dimensão.store: Este é um operador sink que insere os dados vetorizados no Milvus lite. Uma versão leve do Milvus
Depois de criar os operadores, a próxima etapa é criar um fluxo de trabalho usando-os.
Construindo o Fluxo de Trabalho de Inserção
Em seguida, construímos um fluxo de trabalho para inserir nossos dados de vídeo processados no banco de dados Milvus:
insert_wf = (Workflow()
.add(read, name="read")
.add(demux, name="demux")
.add(vectorize, name="vectorize")
.add(store, name="store")
)
insert_wf()
Este fluxo de trabalho começa lendo o arquivo de vídeo e, em seguida, faz demux dele em quadros individuais. Cada quadro é posteriormente vetorizado usando o modelo ImageBind. Os vetores resultantes são armazenados no banco de dados Milvus.
Se tudo funcionar sem problemas, você deverá ver uma saída semelhante à abaixo:
Fig 4- Resultados da operação de inserção
A saída mostra uma confirmação de que seu vídeo foi processado e inserido no Milvus. Ela mostra o resultado da operação de inserção, indicando o número de registros inseridos, seus IDs e o custo computacional.
Configurando o Fluxo de Trabalho de Busca
Depois de inserir nossos dados, precisamos configurar um fluxo de trabalho para busca. Este fluxo de trabalho nos permitirá encontrar quadros de vídeo relevantes com base em consultas de texto:
vectorize = make_operator("vectorizer", "imagebind", modality="text")
search = make_operator("sink", "milvus", task_params={"operation": "search", "output_fields": None})
search_wf = (Workflow()
.add(vectorize, name="vectorize")
.add(search, name="search")
)
Este fluxo de trabalho de busca consiste em duas etapas principais:
O operador
vectorizerecebe a entrada de texto e a converte em um embedding vetorial usando ImageBind. Isso nos permite representar nossa consulta de texto no mesmo espaço vetorial que nossos quadros de vídeo.O operador
searchentão usa esse vetor para realizar uma busca por similaridade no banco de dados Milvus, encontrando os quadros de vídeo mais semelhantes à nossa consulta.
Como temos o fluxo de trabalho de busca, vamos realizar uma busca.
Realizando uma Busca Multimodal
Esta é uma busca multimodal, pois estamos usando texto para buscar em um vídeo. Para ser preciso, estamos buscando os quadros do vídeo.
prompt = "What was unusual about the coffee mug?"
search_wf(data=prompt)
search_vars = {
"limit": 1, # top-k limit
"output_fields": ["*"] # output fields
}
results = search_wf(
extra_vars={"search": search_vars},
data=prompt
)
results[0][0][0]["entity"]["data"]
Aqui, definimos um prompt de busca perguntando sobre uma caneca de café incomum. O dicionário search_vars especifica que queremos o 1 principal resultado e todos os campos de saída.
Em seguida, executamos o fluxo de trabalho de busca com essas entradas. O fluxo de trabalho vetoriza nosso prompt de texto, busca vetores semelhantes no Milvus e retorna os resultados. A indexação aninhada [0][0][0] acessa o primeiro (e, neste caso, único) resultado da busca, e ["entity"]["data"] recupera os dados reais associados a esse resultado.
O código acima retorna o caminho do frame que melhor corresponde à nossa consulta.
/root/.radient/data/video_demux/6bc783e9-c789-4340-b45c-204621145f2b/frame_0001.png
Vamos visualizar este frame retornado para ver o que há de incomum com a caneca.
from PIL import Image
image_path = "/root/.radient/data/video_demux/6bc783e9-c789-4340-b45c-204621145f2b/frame_0001.png"
image = Image.open(image_path)
import matplotlib.pyplot as plt
plt.imshow(image)
plt.show()
Este código abre o arquivo de imagem correspondente ao nosso resultado de busca usando a PIL (Python Imaging Library) e o exibe usando matplotlib. Esta representação visual nos ajuda a entender o que o sistema encontrou em resposta à nossa consulta sobre uma caneca de café incomum.
Aqui está a saída:
Fig 5- Uma pessoa saindo de uma Caneca
Como você pode ver, este frame mostra uma Caneca incomum, pois não é possível colocar uma pessoa em uma caneca normal. A atividade incomum é que há uma pessoa saindo de uma caneca.
Aproveitando o Meta-Chameleon-7b para Descrição de Imagens
Para aprimorar ainda mais nosso sistema de busca multimodal, podemos usar o modelo Meta-Chameleon-7b para gerar uma descrição da imagem:
from chameleon.inference.chameleon import ChameleonInferenceModel
import os
# Verify the file path and existence
image_path = '/root/.radient/data/video_demux/6bc783e9-c789-4340-b45c-204621145f2b/frame_0001.png'
print(f"Image path: {image_path}")
print(f"File exists: {os.path.exists(image_path)}")
print(f"File size: {os.path.getsize(image_path)} bytes")
# Initialize the model
model = ChameleonInferenceModel(
"./meta-chameleon-7b/models/7b/",
"./meta-chameleon-7b/tokenizer/text_tokenizer.json",
"./meta-chameleon-7b/tokenizer/vqgan.yaml",
"./meta-chameleon-7b/tokenizer/vqgan.ckpt",
)
try:
tokens = model.generate(
prompt_ui=[
{"type": "image", "value": f"file:{image_path}"}, # Remove the space after 'file:'
{"type": "text", "value": prompt},
{"type": "sentinel", "value": "<END-OF-TURN>"},
]
)
result = model.decode_text(tokens)[0]
print("Generated description:")
print(result)
except Exception as e:
print(f"Error: {e}")
import traceback
traceback.print_exc()
Este código inicializa o modelo Meta-Chameleon-7b, um modelo de visão-linguagem capaz de entender e descrever imagens em contexto. Fornecemos a ele tanto a imagem quanto nosso prompt de texto original, permitindo que ele gere uma descrição relevante para nossa consulta.
O método generate recebe uma lista de entradas, incluindo o caminho do arquivo de imagem, nosso prompt de texto e um token sentinela para marcar o fim da entrada. O modelo então gera uma sequência de tokens, que decodificamos em texto legível por humanos. Aqui está um exemplo de como a saída deve parecer:
Fig 6- Saída da descrição de uma imagem usando um modelo de visão-linguagem
Esta implementação demonstra como bancos de dados vetoriais como o Milvus podem ser integrados a sistemas de IA maiores, possibilitando uma busca eficiente por similaridade entre diferentes modalidades.
Conclusão
Frank fez um bom trabalho ao nos mostrar como os bancos de dados vetoriais surgiram como uma tecnologia transformadora no campo da IA e do machine learning, especialmente para lidar com dados não estruturados. Como demonstrado, suas aplicações vão muito além de sistemas simples de geração aumentada por recuperação (RAG), revolucionando vários domínios, incluindo suporte ao cliente, sistemas de recomendação, descoberta de medicamentos e busca multimodal. Vá em frente e implemente aplicações de IA ainda mais sofisticadas impulsionadas por bancos de dados vetoriais. Aqui estão alguns recursos para sua referência.
Para uma compreensão mais detalhada, incluindo a história dos embeddings, assista ao replay da palestra do meetup.
Recursos Adicionais
Continue lendo

Introducing Business Critical Plan: Enterprise-Grade Security and Compliance for Mission-Critical AI Applications
Discover Zilliz Cloud’s Business Critical Plan—offering advanced security, compliance, and uptime for mission-critical AI and vector database workloads.

Zilliz Cloud Enterprise Vector Search Powers High-Performance AI on AWS
Zilliz Cloud on AWS powers secure, scalable, ultra-fast vector search for enterprise AI apps, with BYOC, sub-10ms latency, and zero-DevOps simplicity.

Expanding Our Global Reach: Zilliz Cloud Launches in Azure Central India
Zilliz Cloud expands to Azure Central India. This new region helps customers meet compliance, reduce latency, and optimize cloud costs when building AI applications.


