Saltar al contenido
Explorar conocimiento

patrón · intermedio · 4 min de lectura

Re-ranking

Re-ranking es una segunda etapa de recuperación que re-ordena los candidatos obtenidos por un método rápido usando un modelo más preciso, mejorando la relevancia del resultado final.

No requiere conocimientos previos.

Alcance en breve

Cubre

  • re-ranking as a second-stage retrieval step that re-orders candidates with a more expensive model
  • cross-encoders vs bi-encoders, latency/cost trade-offs
  • when re-ranking helps (large candidate pools) vs when it adds unnecessary latency

No cubre

  • embedding model training
  • vector database index internals
  • retrieval evaluation metrics in depth

Supone

  • The reader understands retrieval, embeddings, and RAG pipeline concepts.

Resumen

Re-ranking (re-ordenamiento) es un paso intermedio entre la recuperación inicial y la generación en un sistema RAG. Primero, un método barato y rápido (BM25 o búsqueda vectorial) recupera un conjunto grande de candidatos (por ejemplo, 50-100). Luego, un modelo más preciso pero más costoso re-ordena esos candidatos para quedarse con los más relevantes.

El re-ranking mejora significativamente la calidad del contexto que recibe el LLM. El primer paso maximiza recall (no perder documentos relevantes), el segundo maximiza precisión (solo los más relevantes llegan al prompt).

Alcance y supuestos

Este paquete cubre re-ranking como patrón de dos etapas, el rol de cross-encoders vs bi-encoders, y cuándo el re-ranking agrega valor vs cuándo es costo innecesario.

No cubre entrenamiento de modelos de re-ranking, implementación de índices vectoriales, ni métricas profundas de evaluación de recuperación. Asume que entiendes recuperación, embeddings y pipelines RAG.

Modelo mental

Piensa en un proceso de selección. Primero, un reclutador revisa 100 currículums rápidamente y preselecciona 10 (recuperación inicial). Luego, un experto técnico entrevista a esos 10 y los ordena por idoneidad real (re-ranking).

El reclutador es rápido pero puede pasar por alto matices. El experto es más preciso pero no puede evaluar 100 candidatos en detalle. La combinación de ambos da mejor resultado que cualquiera solo.

Uso práctico

Usa re-ranking cuando:

  • ✅ Tienes un pool grande de candidatos (>20) y necesitas los mejores 3-5 para el LLM.
  • ✅ La precisión del resultado final es crítica (respuestas a clientes, diagnósticos, documentos legales).
  • ✅ Puedes tolerar 50-200ms adicionales de latencia.
  • ❌ Solo recuperas 3-5 documentos iniciales: el re-ranking agrega latencia sin beneficio.
  • ❌ El método de primera etapa ya es muy preciso para tu dominio.

Ejemplo trabajado: re-ranking con cross-encoder

Un cross-encoder evalúa pares (query, documento) y produce una puntuación de relevancia más precisa que la similitud coseno de embeddings:

interface Candidate {
  id: string;
  text: string;
  initialScore: number;
  rerankScore?: number;
}

async function retrieveAndRerank(query: string): Promise<Candidate[]> {
  // Etapa 1: recuperación rápida — top 50
  const candidates: Candidate[] = await vectorSearch(query, 50);

  // Etapa 2: re-ranking con cross-encoder — evaluar pares query-doc
  const reranked = await Promise.all(
    candidates.map(async (doc) => {
      const score = await crossEncoder.score(query, doc.text);
      return { ...doc, rerankScore: score };
    })
  );

  // Ordenar por score de re-ranking y devolver top 5
  return reranked
    .sort((a, b) => b.rerankScore - a.rerankScore)
    .slice(0, 5);
}

El cross-encoder cuesta ~10-50ms por par. Para 50 candidatos son 500-2500ms. Si tus datos cambian lentamente, puedes cachear scores. Si la latencia es crítica, reduce el pool inicial o usa un modelo de re-ranking más ligero.

Evidencia

Fuentes citadas