Volver a Research
Recuperación

Reranking efímero: por qué la recuperación no termina en el vector

La búsqueda vectorial es excelente trayendo candidatos y mediocre ordenándolos. Por eso la recuperación seria tiene dos etapas: una rápida y aproximada, otra precisa y cara. Repasamos por qué el reranking más que duplica la calidad del ranking (con datos), el coste oculto que casi nadie cuenta, cómo se posiciona el panorama (Cohere, Voyage, Pinecone, ELSER, ColBERT, Jina) y cómo construimos un índice de reranking que vive solo lo que dura una consulta — y por qué eso nos hace mejores.

BiVelio Research8 min de lectura
Recuperación en dos etapas: una nube de candidatos se reordena, a través de una chispa efímera, en una pila clasificada

Cuando un agente de BiVelio responde sobre los documentos de una empresa, lo primero que ocurre no es generación: es recuperación. Y la calidad de la respuesta está acotada por la calidad de los fragmentos que el agente llega a ver. Si el contexto es ruidoso o está mal ordenado, ningún modelo lo arregla después (Liu et al., 2023).

La intuición ingenua es que basta con buscar por similitud de embeddings. En la práctica, la búsqueda vectorial es excelente para recall —traer rápido un conjunto razonable de candidatos— y mediocre para precisión —ordenar esos candidatos por relevancia real. Por eso la recuperación seria se hace en dos etapas. Y la segunda, el reranking, es donde se gana la respuesta.

El problema que viven los desarrolladores

El primer reflejo cuando un RAG falla es subir el top_k: traer más fragmentos. Es una trampa. Con k pequeño te dejas fuera el documento correcto; con k grande inundas la ventana de contexto — y los modelos pierden la información que cae en el medio (Liu et al., 2023). Más contexto no es mejor contexto.

El segundo reflejo es confiar todo a los embeddings densos. Otra trampa: en evaluación zero‑shot sobre dominios nuevos, los recuperadores densos pueden rendir por debajo del viejo BM25 (Thakur et al., 2021). La similitud vectorial sola no generaliza tan bien como se cree.

−22 pp
Precisión perdida
dato relevante "en el medio" del contexto
−47,7%
Recuperador denso solo
vs BM25, zero-shot (DPR en BEIR)
~65 h
Coste de ordenar bien
cross-encoder sobre 10.000 pares
Fuente: Liu et al. 2023; Thakur et al. 2021 (BEIR); Reimers & Gurevych 2019

¿La causa de fondo? Un cross‑encoder —el modelo que de verdad juzga la relevancia mirando la consulta y el documento juntos— es preciso pero costosísimo: hay que ejecutarlo una vez por cada par (consulta, documento). Reimers y Gurevych midieron que comparar exhaustivamente 10.000 frases con un cross‑encoder lleva unas 65 horas; con embeddings independientes, unos 5 segundos (Reimers & Gurevych, 2019). No puedes pasar el cross‑encoder por todo el corpus. Pero su precisión es justo lo que necesitas. La solución a esa tensión son dos etapas.

Recuperación en dos etapas

La primera etapa recupera, de forma aproximada, los kk fragmentos más afines a la consulta. Trabaja sobre embeddings densos (Karpukhin et al., 2020) y mide cercanía con similitud coseno:

sim(q,d)=eqedeqed\text{sim}(q, d) = \frac{\mathbf{e}_q \cdot \mathbf{e}_d}{\lVert \mathbf{e}_q \rVert \, \lVert \mathbf{e}_d \rVert}

Es barata y escala a millones de fragmentos, pero el embedding comprime cada documento en un único vector: pierde matices que solo se aprecian comparando la consulta y el documento palabra a palabra.

La segunda etapa —el reranker— reordena solo esos kk candidatos con un cross‑encoder que sí mira el par de forma conjunta (Nogueira & Cho, 2019). El salto de calidad es enorme: en el benchmark estándar MS MARCO, reordenar con BERT más que duplica el MRR@10 frente a BM25 (Nguyen et al., 2016; Nogueira & Cho, 2019).

MS MARCO — calidad de ranking (MRR@10)
BM25 (recuperación léxica)16.7
Reranking con cross-encoder (BERT-large)36.5

Mismo conjunto de candidatos, distinto ordenador. El reranking con cross-encoder más que duplica la métrica oficial de ranking.

Fuente: Nogueira & Cho, 2019 (Passage Re-ranking with BERT); dataset: Nguyen et al. 2016

El reranker asigna a cada candidato una puntuación sis_i y la convierte en una distribución sobre el conjunto recuperado:

pi=esij=1kesjp_i = \frac{e^{s_i}}{\sum_{j=1}^{k} e^{s_j}}

Y el patrón generaliza: en BEIR, la combinación BM25 + cross‑encoder es la mejor de media frente a recuperación léxica o densa por separado, ganando en 16 de 18 dominios (Thakur et al., 2021). Cuando hay varias fuentes de recall (léxica y densa), se fusionan por rango con Reciprocal Rank Fusion antes de rerankear (Cormack et al., 2009).

La asimetría clave

La primera etapa decide qué entra en la baraja; la segunda decide el orden. Un buen recall con mal orden desperdicia la ventana de contexto; un orden perfecto sobre un mal recall no puede recuperar lo que nunca se trajo. Necesitas las dos — y medir cada una con su métrica (recall@k y MRR/nDCG).

El coste oculto del reranking

Si el reranking es tan bueno, ¿por qué no lo usa todo el mundo a tope? Por el coste. Un cross‑encoder ejecuta una pasada del modelo por cada par, así que reordenar es caro y lento. Las cifras de ColBERT lo dejan claro: reordenar los candidatos de una sola consulta con un cross‑encoder BERT‑large tarda unos 33 segundos; la interacción tardía de ColBERT logra calidad comparable en 61 milisegundos (Khattab & Zaharia, 2020).

10.700 ms
Cross-encoder por consulta
BERT-base reordenando candidatos
61 ms
Interacción tardía
ColBERT, calidad comparable
154 → 16 GiB
Índice especializado
ColBERT → ColBERTv2 en MS MARCO
Fuente: Khattab & Zaharia 2020 (ColBERT); Santhanam et al. 2022 (ColBERTv2)

La salida habitual es mantener un índice de reranking especializado y caliente de forma permanente — una GPU servida 24/7, o un índice multivector enorme (ColBERT necesitaba 154 GiB para MS MARCO, reducidos a 16–25 GiB solo con compresión (Santhanam et al., 2022)). El problema: ese índice es caro de mantener y la mayor parte del tiempo está ocioso, esperando consultas que llegan a ráfagas.

Reranking efímero

Nuestra apuesta —lo que internamente llamamos Turbovec— es invertir la ecuación: construir el índice de reranking bajo demanda, justo cuando llega la consulta, y descartarlo cuando termina.

async function retrieve(query: string, projectId: string) {
  // Etapa 1 — recall barato sobre el índice vectorial persistente
  const candidates = await vectorSearch(query, projectId, { k: 50 })
 
  // Etapa 2 — índice de reranking efímero, vive solo esta consulta
  const boost = await buildEphemeralIndex(candidates)
  const scored = await boost.rerank(query, candidates)
 
  return scored
    .sort((a, b) => b.score - a.score)
    .slice(0, 8) // solo lo mejor entra en la ventana del agente
}

El índice efímero no compite con el almacenamiento persistente: lo complementa. La búsqueda vectorial garantiza que el candidato correcto esté entre los 50; el reranker garantiza que llegue al top‑8 que el agente realmente lee. Y como el reranking se aplica solo a esos 50 candidatos —no a todo el corpus—, el coste escala con kk (controlable), no con NN (inabordable). Pagas precisión solo cuando hay una pregunta, no por tener una GPU encendida esperando.

Cómo se posiciona el panorama

El reranking se ha vuelto un commodity excelente, pero casi todas las opciones asumen un servicio o índice permanente:

SoluciónMecanismoCoste / límite
Cohere RerankCross‑encoder gestionadoAPI por uso; ventana ~4096 tokens/doc, trocea documentos largos
Voyage rerankCross‑encoder gestionadoPresupuesto de tokens por petición; trunca por defecto
Pinecone rerankCross‑encoder alojadoContexto 512 tokens en su modelo propio; por petición
Elastic ELSER + RerankSparse aprendido + cross‑encoder512 tokens; recomendado solo inglés; coste de inferencia por consulta
sentence‑transformersCross‑encoder self‑hostedTú mantienes la GPU caliente; no escala al corpus
ColBERT / RAGatouilleInteracción tardía (multivector)Índice especializado grande y persistente
Jina RerankerCross‑encoder / listwiseInferencia por par; servicio o pesos propios

Son piezas magníficas. Pero casi todas te piden algo encendido todo el rato: una API que tarifas por consulta, una GPU servida o un índice especializado que hay que mantener fresco. El reranking efímero por consulta no es el modelo para el que fueron diseñadas.

Cómo pensamos ser los mejores

No competimos por tener el cross‑encoder más grande: competimos por dar precisión de cross‑encoder sin pagar el coste de mantenerlo caliente. Ahí enfocamos la ventaja:

El enfoque habitual

Un índice de reranking o una GPU encendidos de forma permanente, caros y ociosos la mayor parte del tiempo, dimensionados para el pico.

BiVelio

Un índice de reranking efímero: se construye con los candidatos de la consulta, ordena, y se descarta. Precisión de cross-encoder, coste proporcional al uso real.
  1. Coste proporcional al uso. Sin GPU ociosa: el índice de precisión existe solo durante la consulta. Pagas por preguntas, no por tiempo de espera.
  2. Recall híbrido, precisión enfocada. Combinamos señales léxicas (Robertson & Zaragoza, 2009) y densas (Karpukhin et al., 2020), fusionadas por rango (Cormack et al., 2009), y solo entonces aplicamos el reranking — el patrón que la evidencia premia (Thakur et al., 2021).
  3. Menos contexto, mejor ordenado. Entregamos al agente el top‑8, no el top‑50: atacamos directamente el "perdido en el medio" (Liu et al., 2023) en lugar de inundar la ventana.
  4. Reranking con contexto de la operación. No reordenamos fragmentos a ciegas: lo combinamos con el grafo de conocimiento de la empresa, la idea que desarrollamos en El grafo como contexto ambiente.
  5. Trazabilidad. Cada resultado reordenado conserva su origen y su puntuación: se puede auditar por qué un fragmento llegó al agente.

Nota: las cifras de este artículo provienen de la literatura citada (Reimers & Gurevych, Nogueira & Cho, Khattab & Zaharia, Santhanam et al., Thakur et al., Liu et al.) y describen el reranking en general. Son la motivación de nuestro diseño, no un benchmark cerrado de producto.

Referencias

Cormack, G. V., Clarke, C. L. A., & Büttcher, S. (2009). Reciprocal Rank Fusion Outperforms Condorcet and Individual Rank Learning Methods. Proceedings of the 32nd International ACM SIGIR Conference on Research and Development in Information Retrieval (SIGIR), 758–759. https://doi.org/10.1145/1571941.1572114
Karpukhin, V., Oğuz, B., Min, S., Lewis, P., Wu, L., Edunov, S., Chen, D., & Yih, W. (2020). Dense Passage Retrieval for Open-Domain Question Answering. Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing (EMNLP), 6769–6781.
Khattab, O., & Zaharia, M. (2020). ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction over BERT. Proceedings of the 43rd International ACM SIGIR Conference on Research and Development in Information Retrieval (SIGIR). https://arxiv.org/abs/2004.12832
Liu, N. F., Lin, K., Hewitt, J., Paranjape, A., Bevilacqua, M., Petroni, F., & Liang, P. (2023). Lost in the Middle: How Language Models Use Long Contexts. Transactions of the Association for Computational Linguistics (TACL). https://arxiv.org/abs/2307.03172
Nguyen, T., Rosenberg, M., Song, X., Gao, J., Tiwary, S., Majumder, R., & Deng, L. (2016). MS MARCO: A Human Generated MAchine Reading COmprehension Dataset. arXiv Preprint arXiv:1611.09268. https://arxiv.org/abs/1611.09268
Nogueira, R., & Cho, K. (2019). Passage Re-ranking with BERT. arXiv Preprint arXiv:1901.04085. https://arxiv.org/abs/1901.04085
Reimers, N., & Gurevych, I. (2019). Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks. Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing (EMNLP-IJCNLP). https://arxiv.org/abs/1908.10084
Robertson, S., & Zaragoza, H. (2009). The Probabilistic Relevance Framework: BM25 and Beyond. Foundations and Trends in Information Retrieval, 3(4), 333–389.
Santhanam, K., Khattab, O., Saad-Falcon, J., Potts, C., & Zaharia, M. (2022). ColBERTv2: Effective and Efficient Retrieval via Lightweight Late Interaction. Proceedings of the 2022 Conference of the North American Chapter of the Association for Computational Linguistics (NAACL). https://arxiv.org/abs/2112.01488
Thakur, N., Reimers, N., Rücklé, A., Srivastava, A., & Gurevych, I. (2021). BEIR: A Heterogeneous Benchmark for Zero-shot Evaluation of Information Retrieval Models. Proceedings of the 35th Conference on Neural Information Processing Systems (NeurIPS), Datasets and Benchmarks Track. https://arxiv.org/abs/2104.08663
  • #recuperación
  • #reranking
  • #embeddings
  • #rag
  • #cross-encoder

¿Quieres ver estos algoritmos en producción?

BiVelio convierte esta research en un sistema operativo de IA que opera tu empresa de punta a punta.