A busca vetorial é um método de recuperação que representa consultas e documentos como vetores (listas ordenadas de números) e retorna os documentos cujos vetores estão mais próximos do vetor da consulta. Como os números são produzidos por um modelo treinado para colocar significados parecidos perto uns dos outros, a busca vetorial consegue associar uma pergunta a um trecho mesmo quando os dois não têm nenhuma palavra em comum.
Ela é o mecanismo por trás da maioria dos sistemas de busca semântica e uma das principais formas pelas quais as ferramentas de busca com IA encontram trechos para ler antes de escrever uma resposta.
Como funciona a busca vetorial?
Um sistema de busca vetorial tem uma fase de indexação, feita com antecedência, e uma fase de consulta, feita a cada vez que alguém pesquisa.
- Dividir o conteúdo. Os documentos são cortados em blocos, geralmente com um parágrafo ou algumas centenas de tokens. Cada bloco vira um item pesquisável.
- Gerar o embedding de cada bloco. Um modelo de embedding lê o bloco e produz um vetor, por exemplo uma lista de várias centenas ou alguns milhares de números.
- Armazenar os vetores. Os vetores vão para um índice vetorial, junto com um ponteiro para o texto original e quaisquer metadados, como a URL ou a data.
- Gerar o embedding da consulta. Quando chega uma pergunta, o mesmo modelo de embedding a transforma em um vetor do mesmo tamanho.
- Encontrar os vizinhos mais próximos. O índice retorna os vetores armazenados mais próximos do vetor da consulta, e o sistema busca o texto para o qual eles apontam.
A consulta e os documentos precisam passar pelo mesmo modelo de embedding. Vetores de dois modelos diferentes vivem em espaços diferentes, e as distâncias entre eles não significam nada.
O que é um embedding?
Um embedding é o vetor que um modelo produz para um pedaço de texto. Cada posição da lista é uma dimensão, e nenhuma dimensão isolada tem um significado legível por si só. A informação está na posição do vetor inteiro em relação aos outros: textos sobre assuntos parecidos ficam próximos, e textos sem relação ficam distantes.
Modelos de embedding são redes neurais, muitas vezes relacionadas à arquitetura de um modelo de linguagem de grande porte, treinadas com pares de textos que deveriam corresponder, como uma pergunta e sua resposta. O treinamento aproxima os pares correspondentes e afasta os que não correspondem. Um modelo treinado assim coloca "como faço para resetar meu roteador" perto de um trecho intitulado "Restaurando as configurações de fábrica do seu modem".
A proximidade é medida com uma função de similaridade. As mais comuns são:
- Similaridade de cosseno, que compara o ângulo entre dois vetores e ignora o comprimento deles.
- Produto escalar, que multiplica as dimensões correspondentes e soma os resultados. Para vetores normalizados com o mesmo comprimento, ele ordena os resultados da mesma forma que a similaridade de cosseno.
- Distância euclidiana, que mede a distância em linha reta entre dois pontos.
Como um índice vetorial encontra correspondências rapidamente?
Comparar uma consulta com cada vetor armazenado é exato, mas lento quando o índice tem milhões ou bilhões de blocos. A maioria dos sistemas em produção usa, em vez disso, a busca de vizinhos mais próximos aproximados (ANN, approximate nearest neighbor), que encontra vetores com grande probabilidade de estar entre os mais próximos sem verificar todos.
Duas famílias de métodos ANN são muito usadas:
- Índices baseados em grafos, como o HNSW (hierarchical navigable small world), ligam cada vetor a alguns de seus vizinhos. A busca começa em um ponto de entrada e percorre o grafo em direção à consulta, passando a cada etapa para o vizinho que estiver mais perto.
- Índices baseados em clusters, como o IVF (inverted file index), agrupam os vetores em clusters em torno de pontos centrais. A busca compara primeiro a consulta com os centros e depois examina apenas os vetores dos poucos clusters mais próximos.
Os dois abrem mão de um pouco de precisão em troca de um grande ganho de velocidade. Configurações como quantos clusters examinar ou qual a amplitude da busca no grafo permitem que o operador escolha em que ponto desse equilíbrio o sistema fica. Os vetores também podem ser comprimidos para economizar memória, o que reduz um pouco mais a precisão.
Qual é a diferença entre busca vetorial e busca por palavras-chave?
A busca por palavras-chave, também chamada de busca lexical, compara as palavras da consulta com as palavras dos documentos, geralmente com uma fórmula de pontuação como a BM25, que favorece termos raros que aparecem com frequência. A busca vetorial compara significados, e cada abordagem lida melhor com alguns casos do que a outra.
| Busca por palavras-chave | Busca vetorial | |
|---|---|---|
| Compara | Palavras em comum | Significado parecido |
| Sinônimos e paráfrases | Perdidos, a menos que adicionados manualmente | Geralmente encontrados |
| Sequências exatas (códigos de produto, nomes, mensagens de erro) | Encontradas com confiabilidade | Às vezes perdidas ou confundidas |
| Estrutura do índice | Índice invertido de termos | Índice vetorial de embeddings |
| Explicar um resultado | Fácil: as palavras correspondentes ficam visíveis | Mais difícil: a proximidade não tem um motivo legível |
Como as fraquezas são complementares, muitos sistemas usam as duas e combinam os resultados. Isso se chama busca híbrida. Um método comum de combinação, a reciprocal rank fusion, combina as posições de cada resultado nas duas listas em vez das pontuações brutas, já que as pontuações de palavras-chave e as de similaridade estão em escalas diferentes.
Onde a busca vetorial entra na busca com IA?
As ferramentas de busca com IA usam recuperação para dar a um modelo de linguagem texto atualizado a partir do qual responder, um padrão chamado geração aumentada por recuperação. A busca vetorial costuma ser uma das etapas de recuperação. Um mecanismo de busca na web pode fornecer páginas candidatas, que depois são divididas em blocos e passam por embedding para que o sistema escolha os trechos mais próximos da pergunta.
Os vizinhos mais próximos geralmente formam uma lista prévia. Um reranker (um modelo mais lento que lê a consulta e cada trecho juntos) normalmente atribui novas pontuações a eles antes que os melhores cheguem ao modelo de linguagem, uma etapa posterior explicada em como a busca com IA escolhe quais fontes citar. A busca vetorial decide quais trechos chegam a entrar na disputa.
O que a busca vetorial significa para um site?
A busca vetorial pontua blocos, então a unidade que compete é um trecho. Uma página pode ser relevante no geral e ainda assim perder se nenhum bloco dela estiver próximo da pergunta. Um parágrafo que declara seu tema, nomeia o produto ou conceito de que trata e responde a uma pergunta tende a gerar um embedding que fica perto de consultas sobre esse tema.
Disso decorrem várias consequências práticas:
- Trechos que dependem de contexto anterior ("como mencionado acima", "este recurso") geram embeddings ruins, porque o bloco perde o assunto quando é recortado.
- Seções longas que misturam vários temas produzem vetores que ficam entre esses temas e não correspondem fortemente a nenhum deles.
- Nomes exatos, números de modelo e nomes de marca são o ponto mais fraco da busca vetorial, então escrevê-los em texto simples também ajuda a parte de palavras-chave de um sistema híbrido a encontrar a página.
- Títulos que correspondem à forma como as pessoas formulam perguntas dão um assunto claro ao bloco abaixo deles.
A otimização para mecanismos generativos recomenda os mesmos hábitos de escrita, e o mecanismo descrito aqui é grande parte do motivo.