Ettin Reranker: nueva familia de rerankers eficientes | Keryc
Hoy Hugging Face publica seis rerankers CrossEncoder basados en los encoders Ettin ModernBERT. Son modelos distillados, optimizados para reranking en pipelines retrieve-then-rerank, y cubren desde 17M hasta 1B parámetros con soporte hasta 8K tokens. Aquí te explico por qué importan, cómo usarlos y qué receta se usó para entrenarlos.
Qué es un reranker y por qué emparejarlo con un embedder
Un reranker (o cross-encoder) toma un par (consulta, documento) y devuelve una puntuación de relevancia. A diferencia de un embedder que codifica por separado y compara vectores, el reranker permite atención cruzada entre la consulta y el documento en cada capa. Eso suele dar más precisión pero es más caro computacionalmente: hay que ejecutar el modelo por cada par.
Por eso la práctica común es retrieve-then-rerank: primero un embedder rápido recupera los K candidatos, luego el reranker reordena solo esos K. Mantienes un coste controlado y te acercas mucho al resultado que obtendrías si aplicaras el cross-encoder a todo el corpus.
¿Te suena útil para búsquedas internas, asistentes o QA sobre documentos largos? Exacto. Y estos modelos soportan hasta 8192 tokens, así que sirven para documentos largos.
Modelos liberados y licencia
Hugging Face lanzó seis tamaños, todos bajo licencia Apache 2.0:
cross-encoder/ettin-reranker-17m-v1
cross-encoder/ettin-reranker-32m-v1
cross-encoder/ettin-reranker-68m-v1
cross-encoder/ettin-reranker-150m-v1
cross-encoder/ettin-reranker-400m-v1
cross-encoder/ettin-reranker-1b-v1
Todos usan los encoders Ettin (ModernBERT-style) y comparten la misma cabeza de clasificación; cambian solo el backbone.
Uso (rápido)
Tres líneas para empezar con sentence-transformers:
from sentence_transformers import CrossEncoder
model = CrossEncoder("cross-encoder/ettin-reranker-32m-v1")
scores = model.predict([
("Where was Apple founded?", "Apple Inc. was founded in Cupertino, California in 1976."),
])
print(scores)
Si prefieres la función rank para ordenar documentos:
ranked = model.rank(query="Which planet is known as the Red Planet?",
documents=[...], top_k=4, return_documents=True)
for r in ranked:
print(f"({r['score']:.2f}): {r['text']}")
Recomendación de rendimiento: carga el modelo con model_kwargs={"dtype": "bfloat16", "attn_implementation": "flash_attention_2"} y, si puedes, instala kernels para FA2 precompilado. Eso da entre 1.7x y 8.3x de throughput según tamaño y secuencia.
Arquitectura y por qué son rápidos
Backbone: Ettin ModernBERT (RoPE, GeGLU, atención sin padding, pre-entrenamiento con 2T tokens).
Head: 4 módulos que replican ModernBertForSequenceClassification, pero construidos con módulos de Sentence Transformers y un AutoModel sin cabeza, lo que permite propagar entradas sin padding y aprovechar FA2 sin desperdiciar cómputo.
Pila de la cabeza:
Transformer (FA2)
Pooling (CLS)
Dense(H, H, bias=False, GELU)
LayerNorm
Dense(H, 1)
Dato curioso: en los ablations, CLS pooling superó a mean pooling, probablemente porque las pocas capas con atención global llevan suficiente señal al token CLS.
Resultados y benchmarks (resumen técnico)
Benchmark principal: MTEB(eng, v2) Retrieval (10 tareas, top-100 rerankeado) evaluado en un flujo de dos etapas. Se emparejaron los seis rerankers con seis embedders que cubren distintos puntos calidad/latencia.
Puntos clave:
El modelo más pequeño (17M) es el más rápido del conjunto y supera a variantes MiniLM más grandes en NDCG@10.
El 17M alcanza 7517 pares/s en una H100 y 9008 pares/s en una RTX 3090, siendo a la vez más preciso que los MiniLM comparables.
El 150M aparece como el mejor reranker en la franja <600M en MTEB, ganando por margen a peers arquitectónicos de 150M.
El 1B llega casi a empatar con su teacher de 1.54B en MTEB (diferencia ~0.0001) y corre 2.4x más rápido que el teacher en H100.
Conclusión práctica: si usas MiniLM en producción, cambiar a ettin-reranker-17m o 32m puede darte mejor calidad y latencia con un cambio mínimo.
Latencia y cómo obtenerla
Recomendación de configuración para throughput máximo:
Activar bf16 y flash_attention_2 juntos.
Usar la versión modular del Transformer (estos modelos vienen así), que elimina el padding antes de pasar por FA2.
Observaciones de ablation:
bf16 aporta la mayor mejora individual, por permitir batches mayores.
FA2 con entradas padded puede ser más lento que bf16+SDPA. La clave es combinar FA2 con entradas unpadded.
Si no puedes usar FA2 (por compatibilidad), los modelos siguen siendo competitivos, pero perderás parte del acelerado que muestran en GPU moderna.
Receta de entrenamiento (técnico)
Enfoque: distillation punto-a-punto con MSELoss sobre los logits crudos del teacher.
Datos: ~143M tripletas (query, document, teacher_score) publicadas como cross-encoder/ettin-reranker-v1-data (39 splits para trazabilidad).
Orígenes: mezcla de LightOn pre-training data y un subset rerankeado del fine-tuning de LightOn.
Puntos importantes: se usó una sola pasada sobre los datos (num_train_epochs=1) y se priorizó más datos que más épocas.
Hyperparámetros por tamaño:
LR y global_batch_size varían por tamaño. Por ejemplo: 17m LR=2.4e-4, global_batch=1024; 1b LR=3e-6, global_batch=512.
Evaluación durante entrenamiento: NanoBEIR mean NDCG@10 cada 5% de pasos, y la mejor checkpoint según ese metric fue la candidata para evaluación final en MTEB.
El autor liberó el script de entrenamiento (~150 líneas) y la dataset para que cualquiera reproduzca o mejore la receta.
Implicaciones prácticas y recomendaciones
Si buscas un drop-in para mejorar tu pipeline retrieve-then-rerank: prueba ettin-reranker-17m o 32m si estás en CPU/GPU pequeñas. Calidad mejor y latencia menor.
Si tu workload admite modelos más grandes y buscas cerrar la brecha con rerankers enormes, ettin-reranker-150m y 400m ofrecen excelente equilibrio calidad/latencia.
Para despliegue en GPU moderna: habilita bfloat16 y flash_attention_2 y asegúrate de usar la versión del loader que no introduce padding innecesario.
La receta es simple a propósito: distilla de un buen teacher sobre datos amplios y específicos de retrieval. Si entrenas con un teacher aún más fuerte, la misma receta escala.
Conclusión
Estos seis rerankers son una apuesta práctica: mejores números que MiniLM en muchas tareas, velocidades competitivas gracias a diseño sin padding y FA2, y una receta reproducible con datos públicos. Si trabajas en búsqueda, QA o sistemas de recuperación de información, vale la pena probarlos y medir el impacto en tu pipeline.