HNSWlib vs Voyager: Escolhendo a Ferramenta de Busca Vetorial Certa para Sua Aplicação de GenAI
Busca vetorial é fundamental em aplicações de IA nas quais encontrar similaridades entre pontos de dados de alta dimensionalidade é o objetivo. Ferramentas como HNSWlib e Voyager são projetadas para realizar buscas de vizinhos mais próximos com eficiência, para que os sistemas possam recuperar rapidamente itens relacionados em grandes conjuntos de dados. Embora a HNSWlib tenha ganhado popularidade por sua velocidade e precisão, o Voyager é a mais recente adição do Spotify para lidar com as limitações da HNSWlib.
Este post compara as duas, explicando seus recursos e pontos fortes e como elas diferem, para que você possa decidir qual é melhor para o seu projeto.
O que é busca vetorial?
Antes de mergulhar nos detalhes da HNSWlib e do Voyager, é essencial entender a busca vetorial. Simplificando, busca vetorial, ou busca por similaridade vetorial, encontra os vetores (pontos de dados) mais próximos em um espaço de alta dimensionalidade em relação a um determinado vetor de consulta. Esses vetores geralmente são gerados por modelos de machine learning para capturar a essência dos dados não estruturados (por exemplo, o significado de uma frase ou os recursos de uma imagem).
Diferentemente dos bancos de dados tradicionais, nos quais as buscas se baseiam em correspondências exatas ou filtragem, a busca vetorial se concentra na similaridade. O objetivo é encontrar vetores que estejam "próximos" uns dos outros com base em uma métrica de distância (como distância euclidiana ou similaridade de cosseno). Por exemplo, vetores podem representar palavras ou frases no processamento de linguagem natural (NLP), e a busca vetorial ajuda a encontrar as palavras ou textos semanticamente mais semelhantes. Em sistemas de recomendação, a busca vetorial identifica itens mais próximos das preferências de um usuário. As buscas vetoriais também desempenham um papel crucial na geração aumentada por recuperação (RAG), uma técnica que amplia a saída de grandes modelos de linguagem (LLMs) ao fornecer a eles informações contextuais adicionais.
Há muitas soluções disponíveis no mercado para realizar buscas vetoriais, incluindo:
- Bibliotecas de busca vetorial como HNSWlib e Voyager.
- Bancos de dados vetoriais criados para esse fim como Milvus, Zilliz Cloud (Milvus totalmente gerenciado)
- Bancos de dados vetoriais leves como Chroma e Milvus Lite.
- Bancos de dados tradicionais com complementos de busca vetorial
O que é HNSWlib? Visão geral
HNSWlib é uma biblioteca de código aberto para busca aproximada de vizinhos mais próximos (ANNS). Ela é construída sobre o algoritmo Hierarchical Navigable Small World (HNSW), que forma uma estrutura baseada em grafos na qual os pontos de dados são nós. O algoritmo navega por esse grafo para encontrar rapidamente vizinhos aproximados, tornando a HNSWlib muito eficiente para busca vetorial.
Recursos e pontos fortes da HNSWlib
- Algoritmo HNSW: O núcleo do poder do HNSWlib é o algoritmo HNSW, que usa uma estrutura de grafo multicamadas para navegar por pontos de dados com base em sua proximidade para encontrar vizinhos mais próximos.
- Velocidade e Precisão: O HNSWlib é conhecido por equilibrar velocidade e precisão. Ele fornece resultados rápidos sem perda significativa de precisão, o que é bom para casos de uso que exigem resultados de vizinhos mais próximos de alta qualidade.
- Eficiência de Memória: O HNSWlib tem um baixo consumo de memória, ao mesmo tempo em que ainda consegue processar grandes conjuntos de dados, o que é bom para aplicações com memória limitada.
- Escalabilidade: O HNSWlib escala bem para conjuntos de dados com milhões de entradas, bom para aplicações pequenas e grandes.
- Flexibilidade: A biblioteca permite ajustar parâmetros de busca, como precisão e recall, para otimizar para o seu caso de uso.
O HNSWlib tornou-se a escolha preferida para tarefas de busca ANN por causa de sua velocidade, flexibilidade e confiabilidade.
O que é Voyager? Visão geral
Voyager é a mais nova biblioteca de busca de vizinhos mais próximos do Spotify, criada após o uso extensivo do HNSWlib e a identificação de áreas para melhoria. Embora seja baseada no algoritmo HNSW como o HNSWlib, o Voyager tem várias otimizações e recursos adicionais que o tornam mais adequado para ambientes de produção.
Recursos e Pontos Fortes do Voyager
- Mais Rápido e Mais Preciso: O Voyager se baseia na velocidade e precisão do HNSWlib, mas vai além, com busca mais rápida e precisão ainda maior em alguns casos, especialmente para aplicações complexas em grande escala.
- Eficiência de Memória: O Voyager usa a representação de ponto flutuante de 8 bits E4M3, o que permite lidar com dados de alta dimensionalidade com menor uso de memória em comparação com o HNSWlib durante a criação do índice.
- Multithreading e Escalabilidade: O Voyager oferece suporte à criação e consulta de índices totalmente multithreaded para lidar com conjuntos de dados maiores do que o HNSWlib, especialmente em ambientes distribuídos ou em nuvem.
- Suporte a Linguagens: Embora o HNSWlib seja principalmente uma biblioteca Python, o Voyager oferece suporte tanto a Python quanto a Java, tornando-o mais flexível para ambientes de produção que exigem suporte a várias linguagens.
- Pronto para Produção: O Voyager foi projetado para uso empresarial, com recursos como arquivos de índice tolerantes a falhas, detecção de corrupção e integração com Google Cloud, tornando-o mais robusto e escalável para aplicações de alto tráfego.
O Voyager pega a base sólida do HNSWlib e a aprimora com recursos que o tornam mais adequado para sistemas modernos e de grande escala.
Principais Diferenças Entre HNSWlib e Voyager
Método de Busca
Tanto o HNSWlib quanto o Voyager usam o algoritmo HNSW, que é conhecido por sua velocidade e precisão em buscas de vizinhos mais próximos. No entanto, o Voyager tem otimizações que o tornam mais rápido e mais eficiente em memória do que o HNSWlib. Por exemplo, a criação de índices multithreaded do Voyager pode processar grandes conjuntos de dados mais rapidamente, e seu gerenciamento de memória otimizado reduz o consumo de recursos, tornando-o mais adequado para aplicações empresariais.
Dados
Ambas as ferramentas lidam com dados vetoriais de alta dimensionalidade, mas o Voyager tem mais recursos que o tornam mais adequado para ambientes em nuvem e de grande escala. O suporte do Voyager a dados de streaming a partir do Google Cloud Services e arquivos de índice tolerantes a falhas o torna mais confiável para sistemas distribuídos. O HNSWlib é bom para configuração local ou aplicações menores, mas não possui os recursos avançados de gerenciamento de dados que tornam o Voyager mais versátil para ambientes complexos.
Escalabilidade e Desempenho
O HNSWlib já é escalável e funciona bem para a maioria dos casos de uso. Mas o Voyager tem multithreading, o que lhe dá uma vantagem ao lidar com conjuntos de dados maiores ou ambientes em que o processamento paralelo é necessário. O Voyager pode criar e consultar índices em paralelo, reduzindo o tempo de processamento de sistemas de grande escala. Além disso, suas otimizações de memória, como a representação de ponto flutuante de 8 bits, permitem lidar com conjuntos de dados maiores com menos memória, tornando-o mais eficiente em recursos do que o HNSWlib.
Flexibilidade e Personalização
Ambas as bibliotecas são flexíveis em relação aos parâmetros de busca, mas o Voyager oferece mais personalização para uso em produção. Ele oferece suporte a Python e Java, que podem ser integrados a mais ambientes. Além disso, seus recursos baseados em nuvem, como integração com Google Cloud e tolerância a falhas, o tornam mais adequado para aplicações modernas em grande escala. O HNSWlib é flexível, mas carece de alguns desses recursos avançados e é mais limitado em ambientes onde esses recursos são necessários.
Integração e Ecossistema
O HNSWlib foi projetado para ser integrado a fluxos de trabalho baseados em Python, portanto é bom para pipelines de aprendizado de máquina e aplicações menores. No entanto, ele carece das capacidades de integração mais amplas do Voyager. O Voyager oferece suporte a Python, Java e integração com Google Cloud, portanto é mais versátil em implantações de nível empresarial. O Voyager pode lidar com sistemas distribuídos e ambientes baseados em nuvem, tornando-se uma solução mais abrangente para organizações com necessidades complexas de infraestrutura.
Facilidade de Uso
O HNSWlib é fácil de usar e configurar, especialmente para usuários de Python. Ele é bom para quem deseja uma biblioteca simples e sem complicações para busca ANN. O Voyager tem recursos mais avançados, mas uma curva de aprendizado um pouco maior devido a multithreading, tolerância a falhas e integração com a nuvem. No entanto, seu design pronto para produção e sua ampla documentação para Python e Java facilitam a integração em sistemas maiores e complexos.
Custo
Ambos são open-source e gratuitos para uso. No entanto, a eficiência de memória e o multithreading do Voyager podem reduzir o consumo de recursos em implantações em grande escala ou baseadas em nuvem, levando a economias de custo. A decisão aqui dependeria de saber se a velocidade extra, a eficiência de memória e os recursos do Voyager valem a complexidade adicional ou o custo de infraestrutura.
Segurança
Nem o HNSWlib nem o Voyager têm recursos de segurança integrados, como criptografia ou controle de acesso, portanto estes devem ser implementados separadamente. No entanto, os arquivos de índice tolerantes a falhas e a detecção de corrupção do Voyager o tornam mais confiável para ambientes críticos de integridade de dados.
Quando Escolher HNSWlib
O HNSWlib é uma ótima escolha se:
- Você precisa de uma ferramenta de busca ANN rápida e precisa para aplicações de menor escala.
- Seu projeto é baseado em Python e não requer suporte a Java.
- Você está trabalhando em um ambiente local ou com conjuntos de dados menores onde tolerância a falhas avançada e recursos de nuvem são desnecessários.
- Você quer uma solução simples, fácil de implementar, com sobrecarga mínima.
Quando Escolher Voyager
O Voyager é uma opção melhor se:
- Você precisa de uma solução pronta para produção com suporte tanto para Python quanto para Java.
- Seu projeto envolve conjuntos de dados em grande escala e requer processamento multithread para criação de índices e consultas mais rápidas.
- Você precisa de eficiência de memória para lidar com dados de alta dimensionalidade em ambientes com recursos limitados.
- Sua infraestrutura inclui ambientes baseados em nuvem; você precisa de recursos como integração com Google Cloud e arquivos de índice tolerantes a falhas.
- Você requer personalização avançada e uma ferramenta otimizada para implantações de nível empresarial.
Em última análise, sua escolha entre HNSWlib e Voyager depende dos requisitos específicos do seu projeto. Ambas as ferramentas oferecem forte desempenho, mas sua escolha deve se alinhar à escala e à complexidade da sua aplicação e aos recursos e à infraestrutura que você tem disponíveis.
Comparando Bibliotecas de Busca Vetorial e Bancos de Dados Vetoriais Criados para Essa Finalidade
Tanto bibliotecas de busca vetorial como HNSWlib e Voyager quanto bancos de dados vetoriais criados para essa finalidade como Milvus têm como objetivo resolver o problema de busca por similaridade para dados vetoriais de alta dimensionalidade, mas desempenham papéis diferentes.
Bibliotecas de busca vetorial se concentram exclusivamente na tarefa de busca eficiente do vizinho mais próximo. Elas oferecem soluções leves e rápidas para encontrar vetores semelhantes a um vetor de consulta. Elas são frequentemente usadas em ambientes menores, de nó único, ou para aplicações com conjuntos de dados estáticos ou de tamanho moderado. No entanto, geralmente carecem de recursos para gerenciar dados dinâmicos, fornecer persistência ou escalar em sistemas distribuídos. Desenvolvedores que usam essas bibliotecas normalmente precisam lidar manualmente com gerenciamento de dados, atualizações e escalabilidade.
Por outro lado, bancos de dados vetoriais criados especificamente para esse fim, como Milvus e Zilliz Cloud (o Milvus gerenciado), são sistemas abrangentes projetados para o gerenciamento de dados vetoriais em larga escala. Esses bancos de dados vão além da simples busca vetorial, oferecendo recursos como armazenamento persistente, atualizações em tempo real, arquitetura distribuída e capacidades avançadas de consulta. Eles oferecem suporte a conjuntos de dados dinâmicos e conseguem lidar facilmente com aplicações em tempo real nas quais os dados são atualizados com frequência. Além disso, bancos de dados vetoriais frequentemente incluem suporte integrado para combinar buscas vetoriais com filtragem tradicional e consultas de metadados, tornando-os ideais para ambientes de produção que exigem escalabilidade, alta disponibilidade e funcionalidades de busca mais complexas.
- Confira os recursos e aprimoramentos mais recentes do Zilliz Cloud: Atualização do Zilliz Cloud: serviços de migração, conectores Fivetran, múltiplas réplicas e mais
Quando escolher cada solução de busca vetorial
Escolha bibliotecas de busca vetorial se:
- Você tem um conjunto de dados pequeno a médio, relativamente estático.
- Você prefere controle total sobre algoritmos de indexação e busca.
- Você está incorporando a busca em um sistema existente e consegue gerenciar a infraestrutura.
Escolha bancos de dados vetoriais criados especificamente para esse fim se:
- Você precisa escalar para bilhões de vetores em sistemas distribuídos.
- Seu conjunto de dados muda com frequência, exigindo atualizações em tempo real.
- Você prefere soluções gerenciadas que lidam com armazenamento, escalabilidade e otimizações de consulta para você.
Em resumo, bibliotecas de busca vetorial são mais adequadas para casos de uso mais simples e de menor escala, nos quais velocidade e eficiência de memória são prioridades, mas a complexidade operacional é mínima. Bancos de dados vetoriais criados especificamente para esse fim, por outro lado, são projetados para sistemas de grande escala e nível de produção que exigem manuseio dinâmico de dados, escalabilidade e facilidade de uso, frequentemente proporcionando benefícios operacionais significativos para desenvolvedores que gerenciam aplicações complexas.
Avaliando e comparando quaisquer soluções de busca vetorial
OK, agora aprendemos a diferença entre diferentes soluções de busca vetorial. As seguintes perguntas são: como você garante que seu algoritmo de busca retorne resultados precisos e o faça em altíssima velocidade? Como você avalia a eficácia de diferentes algoritmos ANN, especialmente em escala?
Para responder a essas perguntas, precisamos de uma ferramenta de benchmarking. Muitas dessas ferramentas estão disponíveis, e duas se destacam como as mais eficientes: benchmarks ANN e VectorDBBench.
Benchmarks ANN
Benchmarks ANN (Benchmarks de Vizinhos Mais Próximos Aproximados) é um projeto de código aberto projetado para avaliar e comparar o desempenho de vários algoritmos de vizinhos mais próximos aproximados (ANN). Ele fornece uma estrutura padronizada para benchmarking de diferentes algoritmos em tarefas como busca vetorial de alta dimensionalidade, permitindo que desenvolvedores e pesquisadores meçam métricas como velocidade de busca, precisão e uso de memória em vários conjuntos de dados. Ao usar o ANN-Benchmarks, você pode avaliar as compensações entre velocidade e precisão para algoritmos como os encontrados em bibliotecas como Faiss, Annoy, HNSWlib e outras, tornando-o uma ferramenta valiosa para entender quais algoritmos têm melhor desempenho para aplicações específicas.
Repositório GitHub do ANN Benchmarks: https://github.com/erikbern/ann-benchmarks
Site do ANN Benchmarks: https://ann-benchmarks.com/
VectorDBBench: uma ferramenta de benchmarking de código aberto
VectorDBBench é uma ferramenta de benchmarking de código aberto projetada para usuários que precisam de sistemas de armazenamento e recuperação de dados de alto desempenho, particularmente bancos de dados vetoriais. Esta ferramenta permite que os usuários testem e comparem o desempenho de diferentes sistemas de bancos de dados vetoriais, como Milvus e Zilliz Cloud (o Milvus gerenciado), usando seus próprios conjuntos de dados, e determinem o mais adequado para seus casos de uso. VectorDBBench é escrito em Python e licenciado sob a licença de código aberto MIT, o que significa que qualquer pessoa pode usá-lo, modificá-lo e distribuí-lo livremente.
Repositório GitHub do VectorDBBench: https://github.com/zilliztech/VectorDBBench
Dê uma olhada rápida no desempenho dos principais bancos de dados vetoriais no Leaderboard do VectorDBBench.
Técnicas e insights sobre avaliação de VectorDB:
Recursos adicionais sobre VectorDB, GenAI e ML
Continue lendo

Zilliz Cloud Now Available in AWS Asia Pacific (Seoul)
Zilliz Cloud is now available in AWS Seoul — low-latency vector search, in-country data residency, and one-step migration for Korean AI teams. 31 regions across 5 clouds.

Zilliz Cloud Introduces Advanced BYOC-I Solution for Ultimate Enterprise Data Sovereignty
Explore Zilliz Cloud BYOC-I, the solution that balances AI innovation with data control, enabling secure deployments in finance, healthcare, and education sectors.

OpenAI o1: What Developers Need to Know
In this article, we will talk about the o1 series from a developer's perspective, exploring how these models can be implemented for sophisticated use cases.
The Definitive Guide to Choosing a Vector Database
Overwhelmed by all the options? Learn key features to look for & how to evaluate with your own data. Choose with confidence.


