Stickybit.← CadernoEnglishMedição · busca vetorial · 14 out 2026 ·
Medição

O preço da garantia.

Os bancos de dados que buscam por parecido usam um atalho: guardam só 1 bit por número e descartam o que parece longe, com uma margem de erro que vale quase sempre. Medimos o quase: em 1 milhão de imagens, 12 de 500 buscas perdem vizinho. Trocamos a margem por uma que vale sempre e medimos quanto isso custa: 1,36× no dado comum, 2,5× no difícil.

Espécime · 3.000 imagens reais (SIFT), 200 buscas pelos 10 mais parecidos

Carregando 3.000 imagens (400 KB)…

A conta roda aqui, no seu navegador, sobre as primeiras 3.000 imagens e 200 buscas do conjunto público SIFT, com o mesmo atalho de 1 bit e o mesmo giro aleatório do método original. Para simplificar, tudo fica numa gaveta só; no índice completo, com gavetas, a margem garantida descarta bem mais (números abaixo).

O atalho

Um bit por número, e uma nota de confiança.

Na busca por parecido, cada item (uma imagem, um trecho de texto, um cadastro) vira uma lista de números, e "parecido" quer dizer "perto" nessa lista. Achar os mais perto exige comparar a pergunta com muitos itens. Para não fazer a conta inteira em todos, os sistemas guardam um resumo de cada item e descartam pelo resumo o que já está claramente longe.

O resumo mais usado hoje se chama RaBitQ (2024). Ele gira a lista de números ao acaso e guarda, de cada número, só o sinal: positivo ou negativo, 1 bit. Junto, guarda uma nota de quanto esse resumo aponta na mesma direção que o item original. É como anotar só o rumo aproximado de cada casa em vez do endereço, mais o quanto o rumo anotado pode estar torto.

Com o resumo, o sistema estima a distância até a pergunta. Como a estimativa erra, ele só descarta um item se, mesmo descontando uma margem, o item continua longe. Tudo depende do tamanho dessa margem.

o item 32 bits por número +0,82 −0,15 +0,47 −0,91 +0,03 só o sinal o resumo 1 bit por número + − + − + nota de confiança 0,81 32 vezes menor; a nota diz o quanto o rumo pode estar torto
O resumo guarda só para que lado cada número aponta. A nota de confiança é calculada uma vez, quando o item entra no índice.
O quase

Uma margem que vale "com alta probabilidade".

O artigo original prova que o erro da estimativa fica dentro de uma margem com alta probabilidade, sobre o sorteio do giro. Para a margem, os autores escolhem um número, 1,9, e todo mundo copiou. Lemos o código de 13 sistemas que usam esse atalho: a biblioteca oficial, o Faiss (Meta), o Milvus, o LanceDB, o VectorChord, o VSAG, o pg_vectorsearch e outros. Todos usam uma margem estatística fixa (1,9, ou 2,5 num deles) ou nem isso, só buscam itens a mais e conferem. Três escrevem no próprio código que a margem não é uma garantia.

Medimos o "quase". Em 5 milhões de comparações no conjunto SIFT, 2,74% passam da margem. Na maioria das vezes isso não muda nada, porque o item estava longe mesmo. Mas em 1 milhão de imagens, com 500 buscas pelos 10 mais parecidos, 12 buscas voltaram com vizinho faltando, sem aviso nenhum.

Para recomendar um filme, isso não importa. Para conferir um nome contra uma lista de sanções, achar todos os documentos parecidos num processo ou provar que uma imagem não está numa base, um "não achei" errado e silencioso é exatamente o defeito que não pode ter.

Margem estatística (1,9) · a do artigo
488 de 500
Margem garantida · a geometria
500 de 500
Buscas que voltaram completas, com todos os 10 vizinhos verdadeiros. SIFT, 1 milhão de imagens, 500 buscas. As 12 que faltam não avisam que estão incompletas.
A margem que vale sempre

O rumo não pode entortar mais do que a nota diz.

A nota de confiança do resumo é, na verdade, um ângulo: o quanto o rumo anotado se desvia do rumo verdadeiro do item. E ângulos obedecem a uma regra simples, a mesma do triângulo, só que sobre uma esfera: o ângulo entre a pergunta e o item não pode diferir do ângulo entre a pergunta e o resumo mais do que o desvio do próprio resumo.

Isso dá uma margem que não depende de sorte, de sorteio nem do tipo de dado. Vale para todo par de pergunta e item. Com ela, o SIEVE, o nosso índice de busca, descarta pelo resumo sem nunca descartar um vizinho de verdade. Testamos em 20 milhões de pares: zero exceções.

Não é matemática nova, e dizemos isso. A regra dos ângulos foi escrita para busca por parecido em 2021 (Schubert), a ideia de comparar com um resumo sem perder ninguém aparece em teoria da informação desde 2013 (Ingber e colegas), e a nossa margem está escondida num lema do próprio artigo do RaBitQ, que preferiu a versão estatística. O que não achamos em lugar nenhum, nem nos 13 códigos que lemos, é alguém usar essa margem para descartar com garantia, com as contas em 32 bits provadas, e medir quanto ela custa.

pergunta resumo item em algum pontoda faixa azul ângulo medidopelo resumo centro da gaveta
A largura da faixa azul é o desvio que a nota de confiança registra. O item pode estar em qualquer ponto dela, nunca fora; por isso o ângulo da pergunta até o item fica preso perto do ângulo até o resumo. Fora da faixa é impossível, não improvável.
O preço

1,36× no dado comum, 2,5× no difícil.

A margem garantida é mais larga, então descarta menos e sobra mais conta completa. Comparamos as duas no mesmo motor, com o mesmo dado e as mesmas buscas.

No SIFT (1 milhão de imagens, 128 números cada), a margem estatística é 1,36× mais rápida que a garantida: 16,5 contra 22,5 milésimos de segundo por busca. É esse o preço inteiro de não perder ninguém. E a garantia ainda acelera o SIEVE: sem o resumo de 1 bit, a mesma busca leva 29,9 ms; com ele, 22,5 ms, 1,33× mais rápido, por 32 bytes a mais por imagem.

No GIST (960 números por imagem, um dado conhecido por ser difícil), a conta muda: a margem estatística é 2,5× mais rápida (13,7 contra 34,7 ms, com 100 mil imagens). Com muitos números, ela aperta muito e a garantida aperta pouco: no limiar ideal, a estatística descarta 99,6% dos itens, a garantida 59,8%.

Com um resumo de 4 bits por número em vez de 1, a garantida passa a descartar 99,8%, quase o mesmo que a estatística, e a busca cai para 26,6 ms. O preço vai para 2,0×, e não mais para baixo: as contas completas já são da mesma ordem (551 contra 262 por busca); o que sobra é ler 4 bits por número em vez de 1. E não é só no GIST: medimos 1 bit contra 4 bits em nove conjuntos de dados, de 64 a 960 números por item, incluindo embeddings de texto reais (GloVe, NYTimes, OpenAI, InstructorXL). O de 4 bits nunca foi mais lento: de 1,03× no SIFT a 3,03× nos embeddings da OpenAI. O ganho não segue o tamanho do item, segue quanto o resumo de 1 bit deixava passar. Por isso o SIEVE passou a usar 4 bits sempre, ao custo de uns 19% a mais de memória.

Depois trocamos a leitura. Em vez de consultar, para cada número de cada item, uma tabela que mora na memória, o SIEVE passou a somar 32 itens de uma vez com uma tabela que cabe dentro do registrador do processador (a técnica se chama FastScan e os bancos de vetores já a usam). A novidade é que o erro de arredondar essa tabela entra na margem: a garantia não muda, e a versão de 16 bits descarta exatamente o mesmo que a conta cheia. No GIST, a busca garantida cai de 26,0 para 12,9 ms em 100 mil imagens e de 48 para 22 ms em 200 mil. Com a mesma leitura dos dois lados, a garantia passa a custar 1,7×, e a garantida com a leitura nova fica mais rápida que a estatística com a leitura antiga (12,9 contra 13,2 ms; 22 contra 24). O que sobra do preço são as contas completas: 551 contra 262 por busca.

E não basta aumentar a folga da margem estatística até ela nunca falhar. Com folga máxima ela também vira garantia, mas outra, bem mais frouxa: deixa 2,9× mais itens para a conta completa no SIFT e 1,7× no GIST. Dá para ver isso no espécime, arrastando a folga até o fim.

SIFT · margem estatística · perde vizinhos
99,9%
SIFT · margem garantida
91,9%
SIFT · estatística com folga máxima
76,1%
GIST · margem estatística · perde vizinhos
99,6%
GIST · margem garantida
59,8%
GIST · estatística com folga máxima
32,4%
Itens descartados pelo resumo de 1 bit sem a conta completa, com o limiar no 10º vizinho verdadeiro (o melhor caso para todas). SIFT com 100 mil imagens, GIST com 50 mil, 100 buscas cada. Com 4 bits, a garantida descarta 99,96% no SIFT e 99,79% no GIST.
MediçãoMargem estatística (1,9)Margem garantidaNa prática
SIFT, 1 milhão, 500 buscas16,5 ms · 488/500 completas22,5 ms · 500/500a garantia custa 1,36×
GIST, 100 mil, 200 buscas13,7 ms · 198/200 completas34,7 ms · 200/200a garantia custa 2,5×
GIST, 100 mil, garantida com 4 bits13,7 ms · 198/200 completas26,6 ms · 200/200a garantia custa 2,0×
GIST, 100 mil, os dois com leitura em registrador7,4 ms · 198/20012,9 ms · 200/200a garantia custa 1,7×; bate a estatística de antes (13,7 ms)
GIST, 200 mil, os dois com leitura em registrador12,3 ms · 199/20021,8 ms · 200/2001,8×; sem a leitura nova, 24,1 e 48,1 ms
Contas completas por busca, GIST 100 mil26242.219 (1 bit) · 551 (4 bits)com 1 bit, é daqui que vem o preço
Comparações fora da margem, SIFT2,74% de 5 milhões0 de 20 milhõesa estatística erra pouco, mas erra
Contra não ter resumo, SIFT 1 milhão—29,9 → 22,5 ms (1,33×)a garantia já é o padrão do SIEVE
Contra não ter resumo, GIST 100 mil → 200 mil—1 bit 1,30× → 1,39× · 4 bits 1,70× → 1,89×o ganho cresce com o tamanho
Idem, 4 bits com leitura em registrador—3,5× → 4,2×a leitura dobra o ganho; custa memória

Mac com chip M2 e 8 GB, Go com SIMD experimental. Um índice por processo, rodadas alternadas, mediana de 6, todas as linhas. Correção (15 out 2026): a primeira versão deste texto dizia 1,14× e 4,7×. Esses números vinham de uma rodada com os índices disputando a mesma memória; refeita com cada índice isolado, a conta deu 1,36× e 2,5×. A tese não muda, o tamanho do preço sim. Ainda não medimos em servidores Intel/AMD.

A regra

O que decidimos.

  1. A garantia é o padrão

    No SIEVE, o resumo de 4 bits com margem garantida vem ligado sempre que o índice usa gavetas e os itens têm 64 números ou mais. Quem tiver pouca memória volta para 1 bit; quem quiser, desliga. A leitura em registrador é opcional, porque mais que dobra a memória do resumo.

  2. A margem estatística nunca é o padrão

    Ela existe no código para medir a diferença, não para ser usada sem querer. Quem escolhe "quase sempre" tem de escolher de propósito.

  3. O preço vem junto com a garantia

    Publicamos 1,36× e 2,5× com o mesmo destaque — e corrigimos em público quando a primeira medição saiu errada. Garantia sem preço declarado é propaganda.

  4. Não chamar de novo o que não é

    A regra dos ângulos tem dono e data. A nossa parte é usar, provar as contas e medir.

Onde vale

Quando um "não achei" errado custa caro.

Pague a garantia

  • Sanções e conformidade: conferir nomes e empresas contra listas oficiais, com prova de que nada escapou.
  • Perícia, processos e patentes: achar todos os documentos parecidos, não quase todos.
  • Deduplicação e conteúdo proibido: onde um parecido esquecido é o caso que importa.
  • Afirmar ausência: "não há nada parecido na base" só vale com garantia.

Use o atalho estatístico

  • Recomendação e busca de produto: uma busca incompleta a cada 40, mais ou menos, não muda a experiência.
  • Busca que alimenta um assistente de IA: ali o erro maior vem de outro lugar (como o texto foi cortado e representado), não do índice.
  • Dado difícil e prazo curto: no GIST, 2× é muito; se ninguém vai cobrar o vizinho perdido, não pague.
Três palavras deste texto
Resumo de 1 bit

Uma versão 32 vezes menor de cada item, que guarda só o sinal de cada número depois de um giro ao acaso. Serve para descartar sem a conta completa. Com 4 bits por número, o resumo fica 8 vezes menor que o item e guarda também em qual de 16 degraus o número caiu.

Margem

O quanto se desconta da estimativa antes de descartar. Larga demais, descarta pouco; estreita demais, descarta um vizinho de verdade.

Garantia

Uma margem que vale para todo par de pergunta e item, por geometria. Não "quase sempre", nem "com alta probabilidade".

O que ainda não medimos

Onde isso pode estar errado.

Uma máquina só

Tudo foi medido num Mac com 8 GB. O GIST com 500 mil imagens rodou usando o disco como memória, e com 1 milhão não coube. Falta medir num servidor Intel/AMD.

O corte em 64 números

A garantia liga sozinha a partir de 64 números por item. Medimos 1 contra 4 bits a partir de 64, mas resumo contra nenhum resumo só a partir de 128. Abaixo de 64, não medimos nada.

Dado difícil

No GIST, mesmo com a leitura em registrador, a garantia custa 1,7×: o que sobra são as contas completas (551 contra 262 por busca), e isso a leitura não resolve. A leitura nova mais que dobra a memória do resumo (104 → 214 MB em 200 mil imagens) e só tem a versão rápida em processadores ARM; em Intel/AMD roda uma versão sem SIMD que não medimos. Em itens de 128 números (SIFT) ela quase não muda nada (1,11× no melhor caso). As medições de 1 contra 4 bits foram com 100 mil itens; as da leitura nova, com 100 e 200 mil (GIST) e 1 milhão (SIFT), duas rodadas cada, num computador só, e uma rodada do GIST com 200 mil saiu suja (outro programa rodando junto) e foi descartada.

Busca de literatura

Lemos 13 códigos e os trabalhos que citam o RaBitQ que achamos (169 no Semantic Scholar). Pode haver alguém que já use a margem garantida e não encontramos. Se você conhece, queremos saber.

Conversar

Isto se aplica ao seu caso?

Conte em duas linhas o que você precisa decidir ou medir. A primeira conversa serve para ver se a medição resolve o seu caso, e, se não resolve, dizemos.

Conversar pelo WhatsApp algorithms@stickybit.com.br Stickybit · Porto Alegre, desde 2004

← Caderno de pesquisa · stickybit.com.br

Fontes