Pressione Esc para fechar

Retrieval - Similarity Search

← Voltar para o Dia 4: RAG: finalmente

Similarity Search

O que é

Similarity Search é a técnica utilizada para encontrar informações que são mais semelhantes a uma determinada consulta, de acordo com algum critério de similaridade ou distância.

Em sistemas RAG baseados em embeddings, a consulta é transformada em um vetor e comparada com os vetores armazenados na base.

Pergunta
   ↓
Embedding Model
   ↓
Query Vector
   ↓
Similarity Search
   ↓
Vetores mais semelhantes
   ↓
Chunks correspondentes

A ideia fundamental é simples: encontrar os pontos mais próximos da consulta dentro do espaço vetorial.

Por exemplo, uma pergunta sobre "solicitação de férias" pode encontrar um chunk que utiliza a expressão "pedido de férias", mesmo que as palavras não sejam exatamente iguais.

Isso acontece porque os embeddings representam relações semânticas, e não apenas palavras isoladas.

Como funciona

Imagine que cada chunk de uma base de conhecimento seja representado como um ponto em um espaço multidimensional.

             Espaço vetorial

       ● A
                    ● B

                         ★ Consulta

       ● C
             ● D

A consulta também possui uma posição nesse espaço.

O Similarity Search procura quais pontos estão mais próximos dela, de acordo com a métrica utilizada.

De forma simplificada:

Query Vector
     ↓
Comparar com vetores armazenados
     ↓
Calcular similaridade/distância
     ↓
Ordenar resultados
     ↓
Selecionar os mais próximos

Uma das métricas mais conhecidas é a Cosine Similarity, que compara o ângulo entre dois vetores:

$$
\text{similaridade}(A,B)=\frac{A\cdot B}{|A||B|}
$$

Outras métricas também podem ser utilizadas, como Euclidean Distance e Dot Product.

O mecanismo de busca utilizado depende da tecnologia e da configuração do sistema.

Por exemplo, um banco vetorial pode armazenar milhões de embeddings e utilizar estruturas de indexação para evitar comparar a consulta individualmente com todos os vetores.

Isso conecta Similarity Search ao conceito de Nearest Neighbor:

Similarity Search
       ↓
Encontrar os vetores mais semelhantes
       ↓
Nearest Neighbors
       ↓
Top-K resultados

O K representa quantos resultados serão recuperados.

Se K = 5, por exemplo, o sistema pode retornar os cinco chunks considerados mais relevantes.

Um exemplo

Imagine uma base com quatro chunks:

Chunk A:
"Como solicitar férias pelo sistema corporativo."

Chunk B:
"Procedimento para marcar o período de descanso."

Chunk C:
"Regras para utilização do plano de saúde."

Chunk D:
"Política de reembolso de despesas."

O usuário pergunta:

"Como faço para pedir minhas férias?"

A pergunta é transformada em um embedding:

Pergunta
   ↓
Embedding Model
   ↓
[0.18, -0.42, 0.71, ...]

Os chunks também possuem embeddings.

O Similarity Search compara o vetor da pergunta com os vetores armazenados:

Query
  ↓
┌─────────────────────────────┐
│ Chunk A → similaridade alta │
│ Chunk B → similaridade alta │
│ Chunk C → baixa             │
│ Chunk D → baixa             │
└─────────────────────────────┘

O sistema pode retornar:

1. Chunk A
2. Chunk B

Esses chunks então podem ser enviados ao LLM como contexto:

Pergunta
   ↓
Similarity Search
   ↓
Chunks relevantes
   ↓
Contexto
   ↓
LLM
   ↓
Resposta

Note que o Chunk B pode ser considerado relevante mesmo sem utilizar a palavra "férias". A expressão "período de descanso" possui relação semântica com a consulta.

Esse é justamente um dos principais benefícios da busca baseada em embeddings.

Por que é importante

Similarity Search é fundamental para o Dense Retrieval e, consequentemente, para muitas arquiteturas de RAG.

Ele permite que o sistema procure informações pelo significado representado nos embeddings, e não apenas pela correspondência literal de palavras.

Podemos posicioná-lo na arquitetura que estamos construindo:

Documentos
   ↓
Chunking
   ↓
Embedding
   ↓
Indexing
   ↓
Base vetorial
        ↑
        │
Pergunta
   ↓
Query Rewriting
   ↓
Query Embedding
   ↓
Similarity Search
   ↓
Top-K resultados
   ↓
Reranking
   ↓
Contexto
   ↓
LLM

Isso também ajuda a diferenciar conceitos que já estudamos:

Conceito Função
Semantic Similarity Mede o grau de relação semântica
Cosine Similarity Uma métrica para comparar vetores
Similarity Search Usa similaridade para encontrar conteúdos relevantes
Vector Search Busca realizada sobre representações vetoriais
Nearest Neighbor Identifica os vetores mais próximos
Vector Database Armazena e disponibiliza os vetores para busca
Dense Retrieval Estratégia de Retrieval baseada em representações densas

Uma observação importante: similaridade não significa necessariamente correção.

Um documento pode ser muito semelhante semanticamente à pergunta e ainda assim estar desatualizado, contradizer outra fonte ou não responder exatamente ao que foi perguntado.

Por isso, em um RAG mais sofisticado, Similarity Search costuma ser apenas uma das etapas:

Similarity Search
       ↓
Candidatos
       ↓
Reranking
       ↓
Filtros / validações
       ↓
Contexto final
       ↓
LLM

A ideia central é: Similarity Search encontra, dentro de uma coleção de representações, os conteúdos mais próximos de uma consulta segundo uma métrica de similaridade ou distância. Em RAG, ele é uma das principais formas de transformar uma pergunta em um conjunto de informações candidatas para o LLM.

link de compartilhamento