antonio leandro

busca e recuperação

Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World graphs

paper · núcleo · Malkov, Yu. A., Yashunin, D. A. · · ~3 min de leitura do original

a tese

busca vetorial não precisa de índice auxiliar para saber por onde começar: basta empilhar grafos de vizinhança e sortear em qual camada cada ponto entra

o que fica

  1. O HNSW é inteiramente baseado em grafo: dispensa a estrutura auxiliar que os outros métodos de grafo de proximidade anexavam para a etapa de busca grosseira.
  2. A camada máxima de cada elemento é sorteada por uma distribuição que decai exponencialmente, e é esse sorteio que separa os links por escala característica de distância.
  3. Começar a busca pela camada de cima é o que dá o escalonamento logarítmico que o grafo plano da NSW não entregava.
  4. A heurística de seleção de vizinhos rende exatamente onde o algoritmo simples quebra: recall alto e dados muito agrupados.
  5. O índice vale para espaço métrico geral, não só para vetores — a função de distância é parâmetro, não premissa.
  6. A semelhança estrutural com skip list é o que abre caminho para uma implementação distribuída balanceada.

o problema

Achar o vizinho mais próximo de um ponto numa coleção pequena é uma varredura e pronto. Numa coleção grande e em dimensão alta, a varredura passa a ser praticamente o único método exato que sobra: as estruturas de partição do espaço que funcionam bem em duas ou três dimensões perdem a vantagem conforme a dimensão sobe. A saída prática é abrir mão do exato. Você aceita devolver quase sempre os K certos, mede a qualidade por recall e compra latência com essa concessão.

Uma das famílias que funciona nesse regime é a dos grafos de proximidade: cada elemento vira um nó ligado a alguns vizinhos, e a consulta vira uma caminhada gulosa pelo grafo, sempre em direção ao ponto mais próximo do alvo. O incômodo, e é ele que o paper ataca, está no começo da caminhada. Uma busca gulosa precisa de um ponto de entrada decente, e por isso os métodos de grafo de proximidade costumavam pendurar uma segunda estrutura só para a etapa grosseira — o índice deixava de ser um grafo e virava duas coisas mantidas em paralelo. O antecessor direto, a NSW, é grafo puro, mas o próprio paper apresenta o escalonamento logarítmico como ganho sobre ela.

a ideia

Em vez de um grafo, uma pilha deles. Cada elemento entra com um nível máximo sorteado por uma distribuição que decai exponencialmente: quase todo mundo fica só na camada de baixo, poucos sobem, e cada camada acima é um subconjunto aninhado da anterior. A consequência é que os links ficam separados por escala de distância — em cima, poucos nós e saltos longos; embaixo, todos os nós e ajuste fino.

A busca entra pela camada de cima e desce. A analogia é do próprio paper e é honesta: skip list, com distância no lugar de ordem. E o ponto que faz a estrutura fechar em si mesma é que a camada de cima é o índice grosseiro. Nada anexado, nada a sincronizar, uma coisa só.

O segundo movimento é menos vistoso e o paper não deixa passar: não basta ligar cada nó aos M mais próximos. Há uma heurística para escolher quais vizinhos manter, e o resumo localiza o ganho dela em dois lugares específicos — recall alto e dados muito agrupados. São justamente os regimes em que uma caminhada gulosa fica presa dentro de um cluster. Vale registrar também que nada disso assume vetores: o índice é para espaço métrico geral, e a função de distância é um parâmetro.

o que isso custou

O resultado é aproximado, e essa é a moeda: o que se ajusta não é “certo ou errado”, é onde parar na curva de recall contra tempo. Quem opera isso em produção passa a ter parâmetros de construção e de consulta para calibrar, e o próprio fato de a heurística de vizinhos existir mostra que a estrutura ingênua não bastava.

A comparação que o paper reivindica também tem contorno: superar as abordagens open-source do estado da arte restritas a vetores. Não é uma afirmação sobre tudo que existe, e o resumo não traz dataset, número nem tabela.

Este verbete foi escrito a partir do resumo do paper, não do texto integral. O que o resumo diz é o que está acima; as limitações declaradas pelos autores, o custo de memória do grafo, o comportamento sob remoção e atualização e os números dos experimentos estão no artigo completo, e eu não os vi. Para uma decisão de arquitetura, é nessas três últimas coisas que vale abrir o PDF.

onde isso aparece hoje

O HNSW virou o padrão de fato da busca por similaridade em vetores. Ele é um dos índices que a biblioteca Faiss oferece, e aparece como opção central nos sistemas dedicados a esse tipo de dado, tanto na literatura de bancos vetoriais quanto em sistemas específicos como o Manu.

A linha que ele complementa é a de compressão: a quantização de produto resolve caber na memória, o grafo resolve navegar, e combiná-las é prática corrente. E a demanda que puxou o algoritmo para o centro veio depois dele — a partir do momento em que texto virou embedding e recuperar passagem por proximidade virou a etapa inicial de pipelines de geração aumentada por recuperação, a busca aproximada deixou de ser um assunto de visão computacional e virou infraestrutura de aplicação de linguagem.

lido na íntegra por pipeline de llm, revisado por antonio leandro antes de publicar ·