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.
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.
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.
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.
| Medição | Margem estatística (1,9) | Margem garantida | Na prática |
|---|---|---|---|
| SIFT, 1 milhão, 500 buscas | 16,5 ms · 488/500 completas | 22,5 ms · 500/500 | a garantia custa 1,36× |
| GIST, 100 mil, 200 buscas | 13,7 ms · 198/200 completas | 34,7 ms · 200/200 | a garantia custa 2,5× |
| GIST, 100 mil, garantida com 4 bits | 13,7 ms · 198/200 completas | 26,6 ms · 200/200 | a garantia custa 2,0× |
| GIST, 100 mil, os dois com leitura em registrador | 7,4 ms · 198/200 | 12,9 ms · 200/200 | a garantia custa 1,7×; bate a estatística de antes (13,7 ms) |
| GIST, 200 mil, os dois com leitura em registrador | 12,3 ms · 199/200 | 21,8 ms · 200/200 | 1,8×; sem a leitura nova, 24,1 e 48,1 ms |
| Contas completas por busca, GIST 100 mil | 262 | 42.219 (1 bit) · 551 (4 bits) | com 1 bit, é daqui que vem o preço |
| Comparações fora da margem, SIFT | 2,74% de 5 milhões | 0 de 20 milhões | a 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.
O que decidimos.
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.
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.
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.
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.
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.
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.
O quanto se desconta da estimativa antes de descartar. Larga demais, descarta pouco; estreita demais, descarta um vizinho de verdade.
Uma margem que vale para todo par de pergunta e item, por geometria. Não "quase sempre", nem "com alta probabilidade".
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.
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.
← Caderno de pesquisa · stickybit.com.br
- Gao e Long, RaBitQ: Quantizing High-Dimensional Vectors with a Theoretical Error Bound for Approximate Nearest Neighbor Search, SIGMOD 2024. A margem 1,9 e a garantia "com alta probabilidade"; a nossa margem sai do Lema 3.1 com o pior caso do Lema B.3.
- Schubert, A Triangle Inequality for Cosine Similarity, SISAP 2021. A regra dos ângulos usada aqui.
- Ingber, Courtade e Weissman, Compression for Quadratic Similarity Queries, IEEE Transactions on Information Theory. Resumo, ângulo e nenhum falso negativo.
- Song e colegas, TRIM, 2025. Um resumo (de outro tipo) usado como ponto de referência, com o erro guardado item a item.
- Códigos lidos em 14 out 2026: RaBitQ-Library (oficial), Faiss, Milvus/Knowhere, LanceDB, VectorChord, VSAG, zvec, ivfq, pg_vectorsearch, Elasticsearch, Weaviate e Qdrant.
- Dado: conjuntos públicos SIFT1M e GIST1M (corpus TEXMEX, Jégou, Douze e Schmid, INRIA). O espécime usa as 3.000 primeiras imagens e as 200 primeiras buscas do SIFT1M.
- Nossas páginas: SIEVE, busca por parecido com garantia · Mais rápido, outros bits (as contas em 32 bits).