1 pontos por GN⁺ 2024-01-13 | 1 comentários | Compartilhar no WhatsApp
  • À medida que aplicações de IA lidam com dados não estruturados e de alta dimensionalidade, os bancos de dados vetoriais se tornam importantes como sistemas especializados para armazenar e recuperar dados na forma de arrays numéricos
  • O ponto central está em aproveitar o significado implícito ao conectar registros com base na similaridade entre atributos dos dados, em vez de linhas, colunas ou relações explícitas
  • Ao codificar relações semânticas como vetores multidimensionais, é possível executar mais rapidamente tarefas analíticas como busca por similaridade, clustering e classificação
  • Em IA generativa, são usados para gerenciar grandes volumes de dados de alta dimensionalidade e melhorar a velocidade de treinamento e inferência, além dos resultados personalizados, por meio da busca de vetores similares
  • A indexação avançada reduz o tempo de busca ao restringir o alvo da pesquisa a subconjuntos mais relevantes, e permite consultas complexas que combinam similaridade com outras condições

Tipos de dados tratados por bancos de dados vetoriais

  • Bancos de dados vetoriais são bancos especializados para armazenar, gerenciar e processar vetores, que são representações de dados de alta dimensionalidade
  • Diferentemente dos bancos de dados tradicionais, que armazenam dados em linhas e colunas, bancos de dados vetoriais armazenam dados como vetores em um espaço multidimensional
  • Cada vetor é um array numérico que representa as características ou atributos de um ponto de dados

Conexões baseadas em significado e similaridade

  • Bancos de dados tradicionais estabelecem relações entre elementos com base em links ou hierarquias explícitas
  • Bancos de dados vetoriais conectam registros algoritmicamente com base na similaridade dos atributos dos dados
  • Essa abordagem pode criar conexões mais intuitivas com base no significado implícito dentro dos elementos do banco de dados

Estrutura voltada a consultas analíticas

  • Quando os dados são codificados como vetores multidimensionais — ou seja, arrays numéricos — que refletem relações semânticas, tarefas analíticas avançadas podem ser executadas rapidamente
  • As operações compatíveis incluem busca por similaridade, clustering e classificação
  • O modelo computacional é adequado para detecção de padrões, análise preditiva e aplicações com altas exigências analíticas

Uso em IA e IA generativa

  • A disseminação da IA e do aprendizado de máquina é um dos principais fatores por trás do crescimento da demanda por bancos de dados vetoriais
  • No campo da IA generativa, bancos de dados vetoriais são projetados para armazenar e gerenciar com eficiência grandes volumes de dados de alta dimensionalidade
  • Como permitem buscar e recuperar rapidamente vetores similares, podem acelerar significativamente os processos de treinamento e inferência de modelos de IA generativa
  • Também são usados para ajudar sistemas de IA generativa a oferecer conteúdos mais personalizados e relevantes aos usuários

Indexação e condições de busca complexas

  • Bancos de dados vetoriais usam técnicas avançadas de indexação para consultar e recuperar rapidamente vetores similares
  • Os índices reduzem bastante o tempo de busca ao restringir o alvo da pesquisa a subconjuntos menores e mais relevantes de vetores
  • Também conseguem processar consultas complexas que combinam condições de similaridade com outros critérios de busca
  • Essa flexibilidade é importante em aplicações avançadas de IA que exigem recursos de busca sofisticados

1 comentários

 
GN⁺ 2024-01-13
Opiniões do Hacker News
  • Alguns materiais adicionais:
    A Comprehensive Survey on Vector Database: Storage and Retrieval Technique, Challenge: https://arxiv.org/abs/2310.11703
    Survey of Vector Database Management Systems: https://arxiv.org/abs/2310.14021
    What are Embeddings: https://raw.githubusercontent.com/veekaybee/what_are_embeddi...
    Créditos: https://twitter.com/eatonphil/status/1745524630624862314 e https://twitter.com/ChristophMolnar/status/17457316026829826...
  • O slide é necessário um banco de dados vetorial dedicado? é bem interessante, mas não responde de fato à pergunta
    Era algo que eu também queria saber, então seria bom ter critérios ou regras práticas
    Recentemente brinquei com embeddings usando a excelente ferramenta llm do Simon Willison, e a abordagem é a mais simples possível: armazenar embeddings no SQLite junto com algumas UDFs para cálculo de distância
    Essa simplicidade é atraente, mas quando o tráfego e os dados passam de certo nível provavelmente é preciso um banco de dados mais especializado; queria ter uma noção de onde fica esse limite
    • Alguns anos atrás criei um índice vetorial usando LSH
      A busca era feita do jeito mais simples, varrendo tudo e comparando pela distância de Hamming (xor e popcount), e em um único core de um MBP de 2011 eu conseguia escanear 200 mil hashes em menos de 10 ms para encontrar os itens mais parecidos
    • Já escalei até dezenas de milhões de vetores um mecanismo rápido e sujo que roda o findsight.ai, e há mais detalhes nesta apresentação: https://youtu.be/elNrRU12xRc?t=1556
      Eram cerca de 1.000 linhas de código, então no fim não precisei de um banco de dados vetorial externo
    • Sinceramente, para algo como 100 mil vetores, colocar tudo em memória, ou usar SQLite ou pgvector, é totalmente aceitável
      Mas, acima disso, opções razoáveis como Pinecone ficam complicadas, lentas e absurdamente caras
      Até onde sei, a melhor opção é turbopuffer.com, que é cerca de 100 vezes mais barato que Pinecone e parece realmente escalar
      Como não estava na lista de bancos de dados vetoriais recomendados nos slides, deixo como uma boa sugestão
    • Deve variar caso a caso, mas este texto que apareceu algumas semanas atrás ajudou muito a focar em como pensar no que realmente precisamos: no fim, o que precisávamos era de um mecanismo de busca
      https://news.ycombinator.com/item?id=38703943
  • Alguns meses atrás dei uma aula sobre bancos de dados vetoriais para um cliente privado da TGE Data e, depois, decidimos gravá-la como uma palestra curta para um público mais amplo
    A aula misturava teoria e demonstrações, cobrindo os conceitos básicos de vetores, bancos de dados vetoriais, índices e busca por similaridade, e terminava com demonstrações dos bancos de dados Pinecone e Weaviate
    • Legal. Então existe também um vídeo?
  • É um bom material introdutório, mas sinto que apresentações desse tipo passam rápido demais pela questão da seleção de características
    Nessa etapa, o julgamento humano entra de forma muito sutil, às vezes quase imperceptível, fazendo com que por fora pareça um sistema muito automatizado de “é só matemática”
    Pegando áudio como exemplo: quais características extrair para criar um vetor N-dimensional? A resposta fácil poderia ser “o máximo possível”
    Mas, primeiro, mesmo características que podem ser nomeadas facilmente talvez não tenham dados de caracterização acessíveis
    Segundo, sem conhecimento profundo do domínio, talvez você nem saiba que existem características latentes que deveria usar
    Terceiro, mesmo com conhecimento profundo do domínio, ainda assim talvez não saiba quais características latentes deveria usar
    Por exemplo, digamos que você seja fã de música minimalista com defasagem de fase ao estilo Reich. Você consulta indiretamente um banco de dados vetorial tentando encontrar músicas parecidas com obras representativas desse gênero, como Piano Phase
    O banco de dados usa várias características de áudio e música, como frequência dominante, intervalos entre inícios de notas, volume, características de timbre baseadas na distribuição de frequências, raiz e escala aparentes etc.

Mas se o conjunto de características do banco de dados não incluir “o intervalo entre as notas ao longo do tempo é constante”, a consulta pode até encontrar coisas parecidas em timbre, harmonia, melodia e ritmo, mas encontrar músicas que compartilhem a característica central — a fase relativa das duas linhas melódicas muda de forma constante — fica inteiramente por conta da sorte
Não é difícil criar exemplos semelhantes para qualquer tipo de dado: visual, texto, numérico etc.
Claro que isso não quer dizer que bancos de dados vetoriais e classificação de características sejam inúteis
Uma das primeiras perguntas a fazer ao encontrar, ou não encontrar, padrões correspondentes em um dataset específico é se há uma garantia forte de que o conjunto de características está completo; se não houver, como ele deve ser expandido

  • Bancos de dados vetoriais são voltados a busca e recuperação de resultados de busca
    Normalmente, a forma de criar vetores é fazer fine-tuning de um grande modelo pré-treinado e extrair suas representações internas
    Como o dataset contém consultas bem-sucedidas e resultados recuperados, basta usar as entradas brutas para otimizar a função de perda em relação ao objetivo de similaridade suportado pelo banco de dados vetorial
    Em modalidades comuns como tabelas, texto, imagens e áudio, quase não entra julgamento humano na seleção de características; basta aplicar attention
    A propósito, modelos texto-vetor modernos como o E5-Mistral nem sequer exigem curadoria humana no dataset

  • Você acertou bem o ponto de “não saber o que não se sabe”
    É bom ver outro fã de Steve Reich, e fiquei curioso para receber recomendações de músicas parecidas com Music for 18 Musicians, de que gosto

  • É uma ótima visão geral, mas a última seção não aborda a pergunta óbvia de decidir entre um armazenamento vetorial, como Postgres+pgvector, e um banco de dados vetorial, como Pinecone
    Eu gostaria de ver mais apresentações discutindo vários trade-offs — velocidade de consulta, velocidade de inserção e construção de índices, facilidade de uso etc. — para ajudar a escolher a opção certa para cada aplicação

    • Um tempo atrás comecei a reunir comparações de várias ferramentas de busca vetorial: http://vectorsearch.dev/
      PRs são sempre bem-vindos
    • Eu chamaria o primeiro de extensão vetorial
      Um banco de dados é um armazenamento com várias funcionalidades adicionadas
  • digitaloceanspaces.com é um provedor de hospedagem no estilo S3, então seria bom se o Hacker News tratasse isso de forma especial e, em vez de exibir o domínio simplesmente como digitaloceanspaces.com, mostrasse algo como tge-data-web.nyc3.digitaloceanspaces.com
    Mas o S3 também parece ter o mesmo problema: https://news.ycombinator.com/item?id=38876761
    Há precedentes em outros lugares. Sites em subdomínios x.github.io são tratados de forma especial aqui: https://news.ycombinator.com/from?site=lfranke.github.io

  • Este material parece bastante perigoso para um engenheiro usar como ponto de partida
    Expressões como dizer que os dados são agrupados por significado ou que são otimizados para análise são questionáveis
    O agrupamento depende dos embeddings calculados. Se você acredita que os embeddings aproximam bem o significado dos dados, talvez faça sentido pensar assim
    Mas é fácil imaginar embeddings que quebrem isso. Por exemplo, se um arquivo de áudio e um arquivo de texto com o mesmo significado forem passados pelo mesmo processo de embedding, se ele não for multimodal, é provável que fiquem distantes no espaço vetorial de embeddings
    Acho que certamente veremos embeddings que posicionam itens próximos no espaço vetorial de acordo com o modo de uso, mais do que com a similaridade semântica
    Se você estiver criando um sistema de recomendação, não vai querer agrupar de perto várias variações de uma compra única
    Por exemplo, semanticamente, os voos mais parecidos seriam outros voos para o mesmo destino em horários diferentes, ou voos para aeroportos próximos; mas, na prática, talvez você queira agrupar hotéis que as pessoas que compraram aquele voo costumam comprar junto
    Bancos de dados vetoriais também podem incluir dimensões adicionais nos dados, como consciência temporal. Não é obrigatório usar vetores que codificam significado
    Portanto, bancos de dados vetoriais são otimizados para consultas ou buscas baseadas em vetores de entrada, e não são semelhantes a consultas OLAP
    Estão mais próximos do Elasticsearch do que do Snowflake. Se você pretende usar um banco de dados vetorial esperando relatórios ou análises em larga escala sobre o espaço vetorial, até onde sei não há hoje um produto realmente utilizável para isso

    • Cálculo de embeddings ainda é um mistério para mim
      Entendo ir de uma foto de maçã para um vetor que representa “maçanidade”, e comparar esse vetor com outros vetores usando matemática comum
      O que não entendo é quem/o quê recebe a imagem como entrada e produz o vetor como saída
      O mesmo vale para documentos. Se eu quiser adicionar uma dimensão colocando mais um número no array, que parte do banco de dados vetorial preciso modificar para que essa dimensão seja incluída no cálculo vetorial?
      Ou o processo de transformar documentos, imagens ou qualquer outra coisa em representações vetoriais acontece fora do banco de dados, por algum outro método?
      Edit: o cálculo de embeddings parece ser trabalho de um algoritmo de machine learning, mas então esse algoritmo também precisa ser treinado antes. No fim, isso vira uma cadeia infinita de treinamento
  • Não entendo por que PQ foi listado como uma “estratégia de indexação”
    PQ é uma técnica de compressão/quantização de vetores, não um meio de particionar o espaço de busca
    Você pode codificar vetores com PQ em busca exaustiva/índice plano, índice IVF e HNSW, e no Faiss isso aparece respectivamente como IndexPQ, IndexIVFPQ e IndexHNSWPQ
    Se quiser, também dá para usar com árvores k-D ou ANNOY
    A frase “quando a velocidade de consulta é mais importante que a precisão, use HNSW ou Annoy para datasets muito grandes” também é problemática
    Técnicas baseadas em grafos têm grande overhead de memória e custo de construção, e não são práticas para datasets na escala de 1 bilhão
    Em geral elas são mais precisas e rápidas que técnicas IVF, porque para obter precisão parecida o IVF precisa visitar muitas células
    Por outro lado, diferentemente de outras técnicas, o IVF consegue escalar até bancos de dados na escala de 1 trilhão sem grande overhead, oferecendo um trade-off razoável entre velocidade e precisão
    Eu diria: “use quando a velocidade de consulta for importante, mas você também quiser alta precisão, e tiver um dataset de porte médio em que um índice plano/exaustivo seja impraticável”

    • É transformar um espaço contínuo em um espaço discreto
      Primeiro aplique PQ e depois execute KNN sobre os novos vetores discretos
      Com isso, é possível comprimir o espaço de vocabulário para um tamanho fixo
  • Na tabela do slide 15, parece que as células de Indexing & Search Efficiency de Traditional Databases e Vector Databases foram trocadas

    • Também acho que a última linha parece estar trocada entre elas
  • Há alguma recomendação de banco de dados de embeddings embutido, como o SQLite?
    Seria para problemas de pequena escala, mas seria bom se fosse mais prático que LMDB + FAISS

    • Vale dar uma olhada no txtai (https://github.com/neuml/txtai)
      Ele pode rodar dentro de um processo Python, armazena o conteúdo no SQLite e oferece suporte a armazenar vetores de embedding em formatos de índice vetorial local (Faiss, HNSW, Annoy)
      Só para constar, sou o principal autor do txtai
    • Acabei de concluir uma prova de conceito de busca por similaridade em comentários do HN com DuckDB
      https://github.com/patricktrainer/hackernews-comment-search
    • Para referência, a ferramenta llm do Simon Willison usa apenas SQLite e algumas UDFs
      Essa simplicidade é atraente, mas não tenho uma boa noção de quando e por que ela deixa de ser suficiente
    • Pelo que sei, em Python é possível usar o Chroma [1] de forma embutida
      Para Go, recentemente comecei a criar o chromem-go, inspirado na interface do Chroma: https://github.com/philippgille/chromem-go
      Ainda não é para recursos avançados nem uso em grande escala, mas demos de RAG funcionam
      [1] https://github.com/chroma-core/chroma
    • https://github.com/asg017/sqlite-vss