Portfólio, code e blog

RAG Avançado - Embedding Semântico VS Re-ranker

 | #ia#rag#embeddings#re-ranker#llm#agentes#engenharia-de-software

Se você trabalha com inteligência artificial aplicada, já deve ter ouvido o mantra: “Basta jogar os documentos em um banco de vetores e fazer uma busca por similaridade”. Parece mágica. Você digita uma pergunta e, por “gravidade semântica”, os documentos certos aparecem.

Mas se você lidera times de engenharia ou desenha arquiteturas de agentes em nível de produção, sabe que a realidade é bem mais complexa. Quando o sistema falha, o cliente reclama e a IA começa a misturar alhos com bugalhos, o “achômetro” não resolve. Precisamos abrir o capô e entender a matemática e a mecânica por trás das duas forças que guiam a recuperação de informação: o embedding semântico e o re-ranker.

Vamos decifrar o que acontece por trás dos panos quando seu agente tenta “entender” um texto.


Embedding semântico

Quando enviamos um texto para um modelo de embedding — seja o Titan da AWS ou o text-embedding-3-large da OpenAI —, não estamos apenas limpando strings. Estamos traduzindo linguagem humana para a única língua que os computadores realmente entendem: geometria.

O modelo transforma uma frase em um vetor, que nada mais é do que uma lista de números reais flutuando em um espaço de altíssima dimensão (frequentemente 1536 ou 3072 dimensões). Cada dimensão dessas tenta capturar uma nuance conceitual do texto.

Similaridade de cosseno

Para descobrir se a pergunta do usuário tem a ver com um documento do seu banco, nós calculamos o quão “próximos” esses vetores estão. A ferramenta matemática padrão para isso é a similaridade de cosseno. Ela ignora o tamanho do texto (a magnitude do vetor) e foca puramente no ângulo entre eles.

Formalmente, a equação é esta:

$$ Similarity(A,B) = \cos(\theta) = \frac{A \cdot B}{\|A\| \, \|B\|} = \frac{\sum_{i=1}^{n} A_i B_i}{\sqrt{\sum_{i=1}^{n} A_i^2} \, \sqrt{\sum_{i=1}^{n} B_i^2}} $$

O que esse bando de sigmas significa na prática?

  • Resultado = 1: Os vetores apontam exatamente para a mesma direção. Máxima similaridade semântica.
  • Resultado = 0: Os vetores são ortogonais. Eles não têm absolutamente nenhuma relação entre si.

Limitação matemática

A busca vetorial por cosseno é incrivelmente rápida. Bancos como Pinecone, Milvus ou pgvector conseguem varrer milhões de vetores em milissegundos.

O problema é que essa busca rápida usa uma arquitetura que chamamos de Bi-Encoder. O modelo processa a pergunta isoladamente, processa o documento isoladamente, gera os dois vetores e depois nós apenas calculamos o ângulo. Por focar apenas na direção geral do vetor, o sistema frequentemente perde nuances de contexto fino, negações ou a ordem exata das palavras em perguntas mais complexas.


O Re-ranker

É aqui que o RAG tradicional falha e a engenharia avançada brilha. Para corrigir a miopia da busca por cosseno, introduzimos o re-ranker, que opera sob uma lógica completamente diferente: a arquitetura Cross-Encoder.

Enquanto o banco de vetores (Bi-Encoder) analisa a pergunta e o documento de forma separada, o Cross-Encoder joga os dois juntos para dentro do mesmo modelo de uma vez só.

O input que entra no modelo se parece com isso:

[CLS] Pergunta [SEP] Documento Candidato

O modelo (geralmente uma variação altamente otimizada de BERT) usa seu mecanismo de atenção plena para cruzar cada palavra da pergunta com cada palavra do documento, simultaneamente. O output não é um vetor para calcular ângulo, mas sim uma pontuação direta de classificação, normalizada por uma função Softmax.

Custo computacional

Se o Cross-Encoder é infinitamente mais preciso por analisar o contexto de forma profunda, por que não jogamos o banco de vetores fora?

Por causa do custo computacional. Fazer essa análise par a par em milhões de documentos a cada pergunta do usuário inviabilizaria qualquer operação (e destruiria o tempo de resposta da sua aplicação). Por isso, a arquitetura ideal é um pipeline híbrido:

  1. O Bi-Encoder (busca vetorial rápida) faz o trabalho pesado de infraestrutura, reduzindo o universo de milhões de documentos para os top 25 mais parecidos.
  2. O Cross-Encoder (re-ranker) entra de forma cirúrgica, analisando apenas esses 25 candidatos e reordenando-os para entregar os 3 ou 4 matematicamente perfeitos para o LLM.

Teste de estresse na vida real

Para entender a diferença brutal entre essas duas abordagens, imagine um cenário clássico de ambiguidade com a palavra “banco”.

Se o usuário pergunta:

“Qual é o horário de funcionamento do banco de madeira da praça?”

O Bi-Encoder (similaridade de cosseno) pode olhar para a palavra “banco” e ser severamente puxado na direção de documentos sobre instituições financeiras, porque esses termos têm uma densidade estatística gigante no modelo. O ângulo do vetor pode acabar apontando para o lado errado.

O re-ranker (Cross-Encoder), ao analisar a frase inteira junta, vai perceber imediatamente a relação de atenção entre “madeira”, “praça” e “banco”, jogando qualquer documento sobre finanças direto para o final da fila.


Colocar sistemas de IA em produção exige entender essas engrenagens. Otimizar a eficiência do seu agente não é tentativa e erro; é saber a hora exata de usar a velocidade da geometria vetorial ou a precisão da atenção cruzada.

Sobre Wederson S. Machado

Photo of Wederson S. Machado

Gerente de Tecnologias Emergentes com foco em Inteligência Artificial na YDUQs. Responsável pela estratégia, escala e padronização de aplicações de IA. Especialista em IA DLC Enterprise e formação de equipes para projetos em IA.