🚀 Experimente o Zilliz Cloud, o Milvus totalmente gerenciado, gratuitamente—experimente um desempenho 10x mais rápido! Experimente Agora>>

milvus-logo
LFAI
  • Home
  • Blog
  • Comparação de bases de dados vectoriais, bibliotecas de pesquisa vetorial e plug-ins de pesquisa vetorial

Comparação de bases de dados vectoriais, bibliotecas de pesquisa vetorial e plug-ins de pesquisa vetorial

  • Engineering
November 09, 2023
Frank Liu

Olá - bem-vindo de volta ao Vetor Database 101!

O aumento do ChatGPT e de outros modelos de linguagem de grande porte (LLMs) impulsionou o crescimento das tecnologias de pesquisa vetorial, apresentando bancos de dados vetoriais especializados, como Milvus e Zilliz Cloud, juntamente com bibliotecas como FAISS e plug-ins de pesquisa vetorial integrados em bancos de dados convencionais.

Na publicação anterior da nossa série, analisámos os fundamentos das bases de dados vectoriais. Nesta publicação, continuaremos a explorar o complexo domínio da pesquisa vetorial, comparando bases de dados vectoriais, plug-ins de pesquisa vetorial e bibliotecas de pesquisa vetorial.

A pesquisa vetorial, também conhecida como pesquisa de similaridade vetorial, é uma técnica para recuperar os resultados top-k que são mais semelhantes ou semanticamente relacionados a um determinado vetor de consulta entre uma extensa coleção de dados vetoriais densos. Antes de efetuar pesquisas de semelhança, utilizamos redes neuronais para transformar dados não estruturados, como texto, imagens, vídeos e áudio, em vectores numéricos de elevada dimensão, denominados vectores de incorporação. Depois de gerar vectores de incorporação, os motores de pesquisa vetorial comparam a distância espacial entre o vetor de consulta de entrada e os vectores nos armazenamentos vectoriais. Quanto mais próximos estiverem no espaço, mais semelhantes são.

Estão disponíveis no mercado várias tecnologias de pesquisa vetorial, incluindo bibliotecas de aprendizagem automática como a NumPy do Python, bibliotecas de pesquisa vetorial como a FAISS, plug-ins de pesquisa vetorial criados em bases de dados tradicionais e bases de dados vectoriais especializadas como a Milvus e a Zilliz Cloud.

Bases de dados vectoriais vs. bibliotecas de pesquisa vetorial

Os bancos de dados vetoriais especializados não são a única pilha para pesquisas de similaridade. Antes do advento dos bancos de dados vetoriais, muitas bibliotecas de pesquisa de vetores, como FAISS, ScaNN e HNSW, eram usadas para recuperação de vetores.

As bibliotecas de pesquisa vetorial podem ajudá-lo a criar rapidamente um protótipo de sistema de pesquisa vetorial de elevado desempenho. Tomando o FAISS como exemplo, é de código aberto e foi desenvolvido pela Meta para uma pesquisa eficiente de semelhanças e agrupamento de vectores densos. O FAISS pode lidar com colecções de vectores de qualquer tamanho, mesmo aquelas que não podem ser totalmente carregadas na memória. Além disso, o FAISS oferece ferramentas para avaliação e ajuste de parâmetros. Embora escrito em C++, o FAISS fornece uma interface Python/NumPy.

No entanto, as bibliotecas de pesquisa vetorial são apenas bibliotecas ANN leves, em vez de soluções geridas, e têm uma funcionalidade limitada. Se o seu conjunto de dados for pequeno e limitado, estas bibliotecas podem ser suficientes para o processamento de dados não estruturados, mesmo para sistemas em produção. No entanto, à medida que o tamanho do conjunto de dados aumenta e mais utilizadores são integrados, o problema da escala torna-se cada vez mais difícil de resolver. Além disso, não permitem quaisquer modificações nos seus dados de índice e não podem ser consultadas durante a importação de dados.

Em contrapartida, as bases de dados vectoriais são uma solução mais adequada para o armazenamento e a recuperação de dados não estruturados. Podem armazenar e consultar milhões ou mesmo milhares de milhões de vectores, fornecendo simultaneamente respostas em tempo real; são altamente escaláveis para satisfazer as crescentes necessidades comerciais dos utilizadores.

Além disso, as bases de dados vectoriais como o Milvus têm caraterísticas muito mais fáceis de utilizar para dados estruturados/semi-estruturados: natividade da nuvem, multi-tenancy, escalabilidade, etc. Estas caraterísticas tornar-se-ão claras à medida que nos aprofundarmos neste tutorial.

Também operam numa camada de abstração totalmente diferente das bibliotecas de pesquisa vetorial - as bases de dados vectoriais são serviços completos, enquanto as bibliotecas ANN se destinam a ser integradas na aplicação que está a desenvolver. Neste sentido, as bibliotecas ANN são um dos muitos componentes sobre os quais as bases de dados vectoriais são construídas, da mesma forma que o Elasticsearch é construído sobre o Apache Lucene.

Para dar um exemplo do motivo pelo qual esta abstração é tão importante, vejamos como inserir um novo elemento de dados não estruturados numa base de dados vetorial. Isto é muito fácil no Milvus:

from pymilvus import Collectioncollection = Collection('book')mr = collection.insert(data)

É realmente tão fácil quanto isso - 3 linhas de código. Com uma biblioteca como a FAISS ou a ScaNN, não há, infelizmente, uma forma fácil de o fazer sem recriar manualmente todo o índice em determinados pontos de controlo. Mesmo que fosse possível, as bibliotecas de pesquisa vetorial continuam a não ter escalabilidade e multilocação, duas das caraterísticas mais importantes das bases de dados vectoriais.

Bases de dados vectoriais vs. plugins de pesquisa vetorial para bases de dados tradicionais

Ótimo, agora que já estabelecemos a diferença entre bibliotecas de pesquisa vetorial e bases de dados vectoriais, vamos ver como as bases de dados vectoriais diferem dos plugins de pesquisa vetorial.

Um número crescente de bancos de dados relacionais tradicionais e sistemas de pesquisa como o Clickhouse e o Elasticsearch estão incluindo plug-ins de pesquisa vetorial integrados. O Elasticsearch 8.0, por exemplo, inclui a inserção de vetores e a funcionalidade de pesquisa ANN que pode ser chamada por meio de pontos de extremidade de API restrita. O problema com os plug-ins de pesquisa vetorial deve ser claro como a noite e o dia - essas soluções não adotam uma abordagem de pilha completa para incorporar o gerenciamento e a pesquisa vetorial. Em vez disso, esses plug-ins devem ser aprimorados em arquiteturas existentes, o que os torna limitados e não otimizados. Desenvolver uma aplicação de dados não estruturados sobre uma base de dados tradicional seria como tentar encaixar baterias de lítio e motores eléctricos na estrutura de um carro a gasolina - não é uma boa ideia!

Para ilustrar esta situação, voltemos à lista de funcionalidades que uma base de dados vetorial deve implementar (da primeira secção). Os plugins de pesquisa vetorial carecem de duas destas caraterísticas - afinabilidade e APIs/SDKs fáceis de utilizar. Continuarei a utilizar o motor ANN do Elasticsearch como exemplo; outros plugins de pesquisa vetorial funcionam de forma muito semelhante, pelo que não entrarei muito em pormenores. O Elasticsearch suporta o armazenamento de vectores através do tipo de campo de dados dense_vector e permite a consulta através do knnsearch endpoint:

PUT index
{
"mappings": {
  "properties": {
    "image-vector": {
      "type": "dense_vector",
      "dims": 128,
      "index": true,
      "similarity": "l2_norm"
    }
  }
}
}


PUT index/_doc
{
"image-vector": [0.12, 1.34, ...]
}
GET index/_knn_search
{
"knn": {
  "field": "image-vector",
  "query_vector": [-0.5, 9.4, ...],
  "k": 10,
  "num_candidates": 100
}
}

O plug-in ANN do Elasticsearch suporta apenas um algoritmo de indexação: Hierarchical Navigable Small Worlds, também conhecido como HNSW (gosto de pensar que o criador estava à frente da Marvel quando se tratou de popularizar o multiverso). Para além disso, apenas a distância L2/Euclidiana é suportada como métrica de distância. É um bom começo, mas vamos compará-lo com o Milvus, uma base de dados vetorial completa. Usando pymilvus:

>>> field1 = FieldSchema(name='id', dtype=DataType.INT64, description='int64', is_primary=True)
>>> field2 = FieldSchema(name='embedding', dtype=DataType.FLOAT_VECTOR, description='embedding', dim=128, is_primary=False)
>>> schema = CollectionSchema(fields=[field1, field2], description='hello world collection')
>>> collection = Collection(name='my_collection', data=None, schema=schema)
>>> index_params = {
       'index_type': 'IVF_FLAT',
       'params': {'nlist': 1024},
       "metric_type": 'L2'}
>>> collection.create_index('embedding', index_params)
>>> search_param = {
       'data': vector,
       'anns_field': 'embedding',
       'param': {'metric_type': 'L2', 'params': {'nprobe': 16}},
       'limit': 10,
       'expr': 'id_field > 0'
   }
>>> results = collection.search(**search_param)

Embora tanto o Elasticsearch quanto o Milvus tenham métodos para criar índices, inserir vetores de incorporação e executar a pesquisa de vizinho mais próximo, fica claro a partir desses exemplos que o Milvus tem uma API de pesquisa vetorial mais intuitiva (melhor API voltada para o usuário) e um índice vetorial mais amplo + suporte à métrica de distância (melhor ajuste). Milvus também planeia suportar mais índices vectoriais e permitir a consulta através de instruções do tipo SQL no futuro, melhorando ainda mais a afinação e a usabilidade.

Acabámos de passar por uma grande quantidade de conteúdo. Esta secção foi reconhecidamente bastante longa, por isso, para aqueles que a passaram despercebidos, aqui fica um tl;dr rápido: o Milvus é melhor do que os plugins de pesquisa vetorial porque o Milvus foi construído de raiz como uma base de dados vetorial, permitindo um conjunto mais rico de funcionalidades e uma arquitetura mais adequada a dados não estruturados.

Como escolher entre diferentes tecnologias de pesquisa vetorial?

Nem todas as bases de dados vectoriais são criadas da mesma forma; cada uma possui caraterísticas únicas que se adaptam a aplicações específicas. As bibliotecas e os plugins de pesquisa vetorial são fáceis de utilizar e ideais para lidar com ambientes de produção de pequena escala com milhões de vectores. Se a dimensão dos seus dados for pequena e apenas necessitar de uma funcionalidade básica de pesquisa de vectores, estas tecnologias são suficientes para a sua empresa.

No entanto, uma base de dados especializada em vectores deve ser a sua primeira escolha para empresas com grande volume de dados, que lidam com centenas de milhões de vectores e exigem respostas em tempo real. O Milvus, por exemplo, gere sem esforço milhares de milhões de vectores, oferecendo velocidades de consulta extremamente rápidas e uma funcionalidade rica. Além disso, as soluções totalmente geridas, como o Zilliz, revelam-se ainda mais vantajosas, libertando-o dos desafios operacionais e permitindo-lhe concentrar-se exclusivamente nas suas actividades principais.

Dê outra vista de olhos aos cursos Vetor Database 101

  1. Introdução aos dados não estruturados
  2. O que é uma Base de Dados Vetorial?
  3. Comparação entre Bases de Dados Vectoriais, Bibliotecas de Pesquisa Vetorial e Plugins de Pesquisa Vetorial
  4. Introdução ao Milvus
  5. Início rápido do Milvus
  6. Introdução à pesquisa de similaridade vetorial
  7. Noções básicas sobre o índice vetorial e o índice de arquivo invertido
  8. Quantização escalar e quantização de produtos
  9. Mundos pequenos navegáveis hierárquicos (HNSW)
  10. Vizinhos mais próximos aproximados Oh Yeah (ANNOY)
  11. Escolhendo o índice vetorial correto para seu projeto
  12. DiskANN e o Algoritmo Vamana

Like the article? Spread the word

Continue Lendo