Skip to content
BotServBotServ
RAGRerankingCross-EncoderBi-EncoderRetrievalIA LocalCalidad

Reranking: Mejora de resultados RAG

Qué es Reranking en RAG. Cómo Cross-Encoder y Reranker mejoran la calidad. Guía práctica con ejemplos y modelos locales.

S

schutzgeist

12 min read
Reranking: Mejora de resultados RAG

Reranking: mejora de resultados en RAG

Qué cubre este artículo sobre Reranking

  • Qué es Reranking y por qué mejora significativamente la calidad de las respuestas en RAG
  • Cómo funcionan los Cross-Encoder y Bi-Encoder, y dónde radican las diferencias
  • Qué modelos de Reranking se adaptan mejor al despliegue local
  • Cómo implementar Reranking con sentence-transformers en Python
  • Cuándo vale la pena el esfuerzo adicional y qué obstáculos hay que considerar

Introducción: Reranking explicado de forma clara

Has construido un sistema RAG local, has llenado una base de datos vectorial con tus documentos y haces tu primera pregunta. La respuesta es aceptable, pero no es especialmente buena. A menudo el problema no está en el modelo de lenguaje, sino en los fragmentos de texto que recibe como base. Aquí es donde entra en juego el Reranking.

El Reranking es un segundo paso de filtrado después de la búsqueda inicial. Toma los resultados de la primera búsqueda y los reordena, esta vez usando un modelo más preciso. El resultado: los fragmentos realmente relevantes suben a la cima y el modelo de lenguaje obtiene material de mejor calidad para su respuesta.

¿Por qué necesito Reranking?

Imagina que le haces a tu sistema RAG la pregunta: “¿Cómo activo la copia de seguridad automática en la aplicación X?” La búsqueda vectorial devuelve 10 fragmentos de texto. El fragmento relevante con las instrucciones exactas está en la posición 7, porque la similitud semántica de los vectores allí no fue tan alta. Los fragmentos en las posiciones 1 a 6 hablan de forma más general sobre “copia de seguridad” y “backup”, pero no de la función específica.

El RAG estándar toma entonces los 3 a 5 fragmentos superiores y los pasa al modelo de lenguaje. El fragmento importante en la posición 7 se pierde. La respuesta resulta vaga o incorrecta.

Con Reranking sucede lo siguiente: un segundo modelo evalúa los 10 fragmentos nuevamente, esta vez considerando tanto la pregunta como el texto. El fragmento en la posición 7 sube a la posición 1. El modelo de lenguaje obtiene exactamente la información que necesita y proporciona una respuesta precisa.

Reranking en pocas palabras

El Reranking funciona como un proceso de selección de candidatos en dos fases. En la primera ronda, un reclutador rápido examina cientos de currículums y selecciona 20 candidatos. Esta selección es ágil, pero tosca. En la segunda ronda, un líder técnico experimentado realiza entrevistas personales con los 10 mejores candidatos. Esto toma más tiempo, pero es mucho más preciso.

En RAG, el Bi-Encoder realiza la primera ronda: convierte la pregunta y los documentos en vectores y los compara rápidamente. El Cross-Encoder realiza la segunda ronda: lee la pregunta y el documento juntos y evalúa la relevancia de forma mucho más precisa. Al final obtienes una lista ordenada donde los mejores resultados están al inicio.

¿Para quién es Reranking?

El Reranking es útil para todos los que trabajan con RAG y quieren mejorar la calidad de las respuestas sin cambiar el modelo de lenguaje. Es especialmente relevante en estos casos:

  • Tienes muchos documentos y la búsqueda vectorial a menudo devuelve resultados buenos, pero no los mejores
  • Tus preguntas son específicas y requieren fragmentos de texto precisos
  • Utilizas un modelo de lenguaje pequeño o mediano que no maneja bien contextos pobres
  • Quieres probar la calidad de tu sistema RAG de forma sistemática

Para demostraciones sencillas con pocos documentos, el Reranking no es estrictamente necesario. Pero en cuanto entran en juego volúmenes de datos reales, marca una diferencia notable.

Términos clave en torno a Reranking

TérminoSignificado
RerankingSegundo paso de ordenamiento que reevalúa los resultados de la búsqueda inicial
Cross-EncoderModelo que procesa la pregunta y el documento conjuntamente y devuelve una puntuación de relevancia
Bi-EncoderModelo que incrusta la pregunta y el documento por separado y compara vectores
RetrievalEl paso de búsqueda que extrae documentos relevantes de la base de datos
Relevance ScoreValor numérico que indica cuán relevante es un documento para una pregunta
Top-KNúmero de resultados que se mantienen después de la búsqueda o del Reranking
Re-RankSinónimo de Reranking, el reordenamiento de resultados
CohereProveedor de un modelo de Reranking alojado bien conocido
Sentence-TransformersLibrería de Python que puede ejecutar modelos de Reranking localmente
PrecisionMedida de cuántos resultados encontrados son realmente relevantes

¿Cómo funciona el Retrieval sin Reranking?

En el Retrieval estándar, primero almacenas todos los documentos como vectores en una base de datos. Un modelo de embedding se encarga de esto. Para una pregunta, también se calcula un vector. La base de datos busca entonces los vectores más cercanos al vector de la pregunta, generalmente usando similitud de coseno.

Este enfoque es rápido y escala bien para millones de documentos. Pero tiene una debilidad: la pregunta y el documento se procesan por separado. El modelo de embedding nunca ve ambos textos simultáneamente. Por lo tanto, no puede captar relaciones sutiles. Una oración como “La función está desactivada” puede ser semánticamente cercana a “¿Cómo activo la función?”, aunque no responda la pregunta.

El resultado es una clasificación tosca. Los resultados principales suelen ser relevantes, pero no siempre los más relevantes. Para muchas aplicaciones esto es suficiente. Pero cuando la precisión es importante, aquí es donde el Reranking entra en juego.

¿Cómo funciona el Reranking?

El Reranking utiliza un Cross-Encoder. A diferencia del Bi-Encoder, este procesa la pregunta y el documento en un único paso. El modelo ve ambos textos simultáneamente y puede evaluar su relación con precisión. Al final, genera una única puntuación de relevancia, un valor que describe cuán bien el documento responde a la pregunta.

El proceso funciona así:

  1. La búsqueda vectorial devuelve los Top-K resultados, por ejemplo 20 documentos
  2. El Cross-Encoder calcula una puntuación de relevancia para cada uno de estos documentos, siempre en combinación con la pregunta
  3. Los documentos se reordenan según esta puntuación
  4. Los N documentos principales, por ejemplo 5, se envían al modelo de lenguaje

Este segundo paso es más lento porque el Cross-Encoder procesa cada documento individualmente junto con la pregunta. Pero como solo se aplica a un conjunto pequeño de documentos, el tiempo total sigue siendo manejable. Típicamente, el Reranking de 20 documentos tarda unos pocos milisegundos en una GPU y menos de un segundo en una CPU.

Bi-Encoder vs. Cross-Encoder

CaracterísticaBi-EncoderCross-Encoder
ProcesamientoPregunta y documento por separadoPregunta y documento conjuntamente
VelocidadMuy rápido, escala a millonesMás lento, solo para conjuntos pequeños
PrecisiónTosca, buena para filtrado inicialPrecisa, detecta relaciones sutiles
AlmacenamientoVectores precalculados, poco trabajoSin precálculo posible, cálculo en vivo
UsoPrimera búsqueda en la base de datos vectorialSegunda clasificación de los Top-K resultados
EscalabilidadAltaLimitada por tiempo de cómputo

Los dos enfoques no compiten, se complementan. El Bi-Encoder realiza la preselección rápida, el Cross-Encoder la clasificación final precisa.

Modelos de Reranking para despliegue local

Para IA local hay varios modelos de reranking disponibles gratuitamente. Los más importantes:

BGE-Reranker de BAAI es una familia de modelos en distintos tamaños. bge-reranker-base es compacto y rápido, mientras que bge-reranker-large ofrece mayor precisión. Los modelos son multilingües y funcionan bien con textos en alemán.

ms-marco-MiniLM de Microsoft se entrenó con el dataset MS MARCO. cross-encoder/ms-marco-MiniLM-L-6-v2 es ligero y proporciona buenos resultados para contenido en inglés. Para textos en alemán, un modelo multilingüe suele ser la opción preferida.

jina-reranker de Jina AI también es multilingüe y está disponible en varios tamaños. jina-reranker-v2-base-multilingual cubre muchos idiomas y está optimizado para eficiencia.

Todos estos modelos se pueden cargar mediante la librería sentence-transformers y ejecutar localmente. Con Ollama también puedes servir modelos, pero para reranking, sentence-transformers es el camino más directo.

Ejemplo: RAG con y sin reranking

Una comparación concreta ilustra la diferencia. Supongamos que preguntas: “¿Cómo configuro el timeout para peticiones API en la librería Y?”

Sin reranking, la búsqueda vectorial devuelve estos 5 primeros resultados:

  1. “Configuración general de la librería” (Relevante, pero genérico)
  2. “Timeout en protocolos de red explicado” (Temáticamente cercano, pero no específico)
  3. “Instalación de la librería” (Contexto incorrecto)
  4. “Manejo de errores en peticiones API” (Parcialmente relevante)
  5. “Proyecto de ejemplo con librería Y” (Sin contenido sobre timeout)

La sección relevante “Configurar timeout con setTimeout(5000)” aparece en la posición 8 y nunca llega al modelo de lenguaje. La respuesta será imprecisa.

Con reranking, la nueva lista de Top-5 se ve así:

  1. “Configurar timeout con setTimeout(5000)” (Ahora en posición 1)
  2. “Configuración general de la librería”
  3. “Manejo de errores en peticiones API”
  4. “Timeout en protocolos de red explicado”
  5. “Opciones avanzadas de timeout”

El modelo de lenguaje recibe la sección correcta directamente en primer lugar y proporciona una respuesta precisa con el ejemplo de código apropiado.

Implementación con sentence-transformers

La implementación con sentence-transformers es sencilla. Solo necesitas la librería y un modelo de reranking.

from sentence_transformers import CrossEncoder

# Cargar modelo
model = CrossEncoder('BAAI/bge-reranker-base')

# Pregunta y documentos encontrados
query = "¿Cómo configuro el timeout para peticiones API?"
documents = [
    "Configuración general de la librería.",
    "Configurar timeout con setTimeout(5000).",
    "Instalación de la librería.",
    "Manejo de errores en peticiones API.",
    "Proyecto de ejemplo con librería Y."
]

# Crear pares de pregunta y documento
pairs = [[query, doc] for doc in documents]

# Calcular scores de relevancia
scores = model.predict(pairs)

# Ordenar resultados por score
ranked = sorted(zip(scores, documents), reverse=True)

for score, doc in ranked:
    print(f"{score:.4f}  {doc}")

El modelo devuelve un score para cada par. Valores más altos significan mayor relevancia. Luego ordenas los documentos por score y retienes los N primeros para el modelo de lenguaje.

En una pipeline RAG completa, el flujo funciona así: la búsqueda vectorial devuelve 20 resultados, el cross-encoder los reordena, los 5 primeros van al modelo de lenguaje. Más sobre la estructura de pipeline en Conceptos de RAG.

¿Cuándo vale la pena hacer reranking?

Reranking no siempre es necesario. Esta guía de decisión muestra cuándo es útil:

  • Muchos documentos: Con miles de documentos, la preselección se vuelve menos precisa, el reranking ayuda
  • Preguntas específicas: Cuanto más concreta sea la pregunta, más se beneficia de resultados exactos
  • Modelos de lenguaje pequeños: Los modelos con ventanas de contexto reducidas necesitan pocos fragmentos, pero altamente relevantes
  • Altos estándares de calidad: En temas de soporte o legales, la precisión importa más que la velocidad
  • Búsqueda híbrida disponible: Si ya usas Búsqueda Híbrida, el reranking complementa la combinación de búsqueda semántica y por palabras clave

Reranking vale menos cuando tienes conjuntos de documentos muy pequeños donde la búsqueda vectorial ya devuelve buenos resultados, o en aplicaciones donde la latencia es crítica y cada milisegundo cuenta.

Errores comunes en reranking

  1. Modelo incorrecto para el idioma: Un modelo de reranking entrenado solo en inglés producirá malos resultados con textos en alemán. Elige un modelo multilingüe como BGE-Reranker o jina-reranker.

  2. Demasiados documentos en el reranking: Si pasas 100 o más documentos al cross-encoder, será lento sin ganancia significativa de calidad. Entre 20 y 50 documentos es un buen compromiso.

  3. Top-K antes del reranking muy pequeño: Si la búsqueda vectorial devuelve solo 5 resultados y el documento relevante está en posición 6, el reranking no puede salvarlo. Obtén suficientes resultados, por ejemplo 20, antes de reordenar.

  4. Top-K después del reranking muy grande: Si pasas 15 documentos al modelo de lenguaje tras el reranking, las secciones menos relevantes diluyen la respuesta. Mantén solo los 3 a 5 primeros.

  5. Documentos largos sin fragmentar: Un cross-encoder tiene una longitud máxima de entrada. Si un documento es demasiado largo, se trunca y la parte importante se pierde. El Fragmentado sigue siendo importante.

  6. Sin comparativa sin reranking: Siempre compara resultados con y sin reranking. Solo así ves si el paso adicional realmente ayuda con tus datos.

  7. Modelo de reranking no en GPU: En CPU, el cross-encoder es significativamente más lento. Con consultas frecuentes, una GPU vale la pena.

  8. Interpretación incorrecta de scores: Los scores absolutos de un cross-encoder no son comparables entre modelos. Úsalos solo para ordenar dentro de un mismo modelo.

Hardware, costos y seguridad en reranking

Los modelos de reranking son más pequeños que los modelos de lenguaje, pero más grandes que los modelos de embedding puros. bge-reranker-base tiene alrededor de 280 millones de parámetros y se ejecuta en CPU moderna en tiempo aceptable. Para aplicaciones en producción con muchas solicitudes, se recomienda una GPU.

Los costos son moderados, ya que todos los modelos mencionados están disponibles gratuitamente. Solo incurren gastos de hardware, lo cual es una ventaja de la IA local. Comparado con APIs de reranking alojadas como Cohere, ahorras costos recurrentes, pero cambias conveniencia por operaciones propias.

En cuanto a seguridad, el reranking es seguro mientras se ejecute localmente. Ni la pregunta ni los documentos salen de tu sistema. Esto es especialmente importante con datos sensibles. Los servicios de reranking alojados transmiten tus textos a servidores externos, lo que puede ser un riesgo con documentos internos.

Enlaces y recursos adicionales sobre reranking

FAQ: Reranking - Preguntas frecuentes

¿Qué es el reranking en RAG?

El reranking es un segundo paso de ordenamiento después de la búsqueda vectorial. Un Cross-Encoder evalúa la pregunta y el documento de forma conjunta, reordenando los resultados para que los más relevantes aparezcan primero.

¿Necesito reranking para colecciones pequeñas de documentos?

Con pocos documentos, la búsqueda vectorial suele dar buenos resultados. El reranking cobra sentido a partir de varios cientos o miles de documentos, o cuando tienes requisitos de calidad elevados.

¿Cuál es la diferencia entre Bi-Encoder y Cross-Encoder?

Un Bi-Encoder procesa la pregunta y el documento por separado, siendo rápido. Un Cross-Encoder los procesa juntos y es más preciso, pero más lento. Ambos se complementan bien en una pipeline RAG.

¿Qué modelo de reranking es adecuado para textos en alemán?

Los modelos multilingües como BGE-Reranker o jina-reranker-v2-base-multilingual funcionan bien para contenido en alemán. Los modelos exclusivamente en inglés como ms-marco-MiniLM son menos apropiados para este idioma.

¿Cuántos documentos debería reranking?

Un buen valor oscila entre 20 y 50 documentos. Demasiados pocos corre el riesgo de que el documento relevante ni siquiera esté incluido. Demasiados ralentizan el proceso sin proporcionar gran beneficio.

¿Funciona el reranking también en CPU?

Sí, la mayoría de modelos de reranking se ejecutan en CPU. Para aplicaciones en producción con muchas consultas, una GPU es significativamente más rápida.

¿Puedo usar reranking con Ollama?

Ollama se centra en modelos de lenguaje y embedding. Para reranking específicamente, sentence-transformers con un Cross-Encoder es el camino más directo. Puedes usar ambas herramientas en paralelo dentro de una pipeline.

¿Cuánta mejora aporta realmente el reranking?

Depende de tus datos. En muchos casos, el reranking mejora notablemente la precisión de los resultados principales. Compara los resultados con y sin reranking usando un conjunto de pruebas para medir el efecto.

¿Es el reranking lo mismo que Hybrid Search?

No. Hybrid Search combina búsqueda semántica y por palabras clave en la primera fase. El reranking reordena los resultados después. Ambos enfoques pueden combinarse y se refuerzan mutuamente.

¿Tengo que entrenar un modelo de reranking?

En la mayoría de casos, no. Los modelos preentrenados como BGE-Reranker cubren muchos casos de uso. Para dominios muy específicos, el fine-tuning puede ayudar, pero no es necesario para empezar.

¿Alarga el reranking notablemente el tiempo de respuesta?

Con 20 documentos reordenados, el paso toma algunos milisegundos en una GPU. En una CPU puede estar por debajo de un segundo. Comparado con la generación de texto del modelo de lenguaje, su contribución suele ser pequeña.

Fuentes y lecturas complementarias

  • Documentación de Sentence Transformers sobre Cross-Encoders
  • BGE-Reranker de BAAI en Hugging Face
  • Modelos Reranker de Jina AI
  • Modelos Cross-Encoder MS MARCO de Microsoft
  • Documentación de Cohere Rerank API como comparación con modelos locales
Volver al blog
Share:

Entradas relacionadas