Módulo 3: Modelos de Embeddings Comparison

MTEB: Massive Text Embedding Benchmark

Descripción de la cápsula

MTEB (Massive Text Embedding Benchmark) es el estándar de facto para evaluar modelos de embeddings. Creado por HuggingFace en 2022, evalúa 58+ datasets a través de 8 tareas diferentes (retrieval, classification, clustering, etc.). Los scores MTEB son la métrica principal que usas para comparar modelos.

En esta cápsula aprenderás qué es MTEB, cómo interpretar scores, las 8 tareas que evalúa, limitaciones de benchmarks, y cómo ejecutar MTEB en tus propios modelos. También verás el leaderboard actual y qué modelos dominan.

Al final, podrás evaluar objetivamente qué modelo elegir según scores MTEB.


¿Qué es MTEB?

Definición:

MTEB (Massive Text Embedding Benchmark): Framework para evaluar embeddings en 58 datasets a través de 8 tareas diferentes. Genera un score promedio (0-100) que resume performance.

Desarrollado por: HuggingFace (2022)

Objetivo: Estandarizar evaluación de embeddings (antes cada paper usaba métricas diferentes).


8 tareas evaluadas:

TareaDescripciónDatasetsMétrica
RetrievalBuscar documentos relevantes para query15nDCG@10
ClassificationClasificar texto en categorías12Accuracy
ClusteringAgrupar textos similares11V-measure
Pair Classification¿Dos textos son similares?3AP
RerankingReordenar docs por relevancia4MAP
STS (Semantic Similarity)Predecir score de similaridad10Spearman
SummarizationEncontrar mejor resumen1Spearman
BitextMiningAlinear traducciones2F1

Total: 58 datasets


MTEB Leaderboard (2026)

Top modelos (English):

Ranking | Modelo                    | MTEB Score | Dims | Tipo
--------|---------------------------|------------|------|----------
#1      | gte-Qwen2-7B-instruct     | 72.3       | 3584 | Open-source
#2      | text-embedding-3-large    | 64.6       | 3072 | OpenAI (API)
#3      | bge-large-en-v1.5         | 64.2       | 1024 | Open-source
#4      | instructor-xl             | 63.9       | 768  | Open-source
#5      | e5-mistral-7b-instruct    | 63.7       | 4096 | Open-source
#6      | text-embedding-3-small    | 62.3       | 1536 | OpenAI (API)
#7      | bge-base-en-v1.5          | 62.8       | 768  | Open-source
#8      | e5-large-v2               | 62.0       | 1024 | Open-source
#9      | all-mpnet-base-v2         | 57.8       | 768  | Open-source
#10     | all-MiniLM-L6-v2          | 56.3       | 384  | Open-source

Fuente: MTEB Leaderboard (HuggingFace)


Interpretar scores MTEB

Score range:

Score MTEB | Performance | Uso recomendado
-----------|-------------|------------------
70-100     | Excelente   | Production crítica (RAG, legal)
65-70      | Muy bueno   | Production estándar (RAG)
60-65      | Bueno       | Semantic search, prototipado
55-60      | Aceptable   | MVP, demos
<55        | Básico      | Solo para testing

Desglose por tarea:

Ejemplo: OpenAI text-embedding-3-large

Tarea                 | Score | Interpretación
----------------------|-------|----------------
Retrieval             | 60.0  | Muy bueno (RAG-ready)
Classification        | 70.1  | Excelente (mejor que retrieval)
Clustering            | 51.9  | Aceptable (no especializado)
STS                   | 84.0  | Excelente (semantic similarity)
Reranking             | 64.2  | Muy bueno
Pair Classification   | 88.4  | Excelente
Summarization         | 30.8  | Débil (no es su fuerte)
BitextMining          | 85.7  | Excelente (multiidioma)

MTEB Average: 64.6

Insights:

  • Excelente para semantic similarity (STS 84.0)
  • Bueno para retrieval (60.0) → RAG-ready
  • Débil en summarization (30.8) → No usar para eso

Tareas detalladas

1. Retrieval (más importante para RAG):

Qué evalúa:

# Dado un query, encontrar documentos relevantes
Query: "How to install Python?"
Corpus: 10,000 documentos
Tarea: Rankear documentos por relevancia

Métrica: nDCG@10 (normalized Discounted Cumulative Gain)
- 1.0 = Perfecto (docs relevantes en top 10)
- 0.0 = Terrible

Datasets:

  • NQ (Natural Questions)
  • MS MARCO
  • HotpotQA
  • FiQA
  • ...15 total

2. Classification:

Qué evalúa:

# Clasificar texto en categorías
Input: "This movie was amazing!"
Output: "Positive"

Métrica: Accuracy
- % de clasificaciones correctas

Datasets:

  • Amazon Reviews
  • IMDB
  • Banking77
  • ...12 total

3. Clustering:

Qué evalúa:

# Agrupar textos similares automáticamente
Input: 1000 textos sin labels
Output: Clusters (ej: [Tech, Sports, Politics])

Métrica: V-measure
- Qué tan bien los clusters coinciden con labels verdaderos

4. STS (Semantic Textual Similarity):

Qué evalúa:

# Predecir similaridad entre 2 textos (score 0-5)
Text A: "The cat sat on the mat"
Text B: "A feline rested on a rug"
Expected: 4.0 (muy similar)

Métrica: Spearman correlation
- Correlación entre scores predichos y verdaderos

Limitaciones de MTEB

❌ 1. Sesgo hacia inglés

# MTEB evalúa principalmente datasets en inglés
# Performance en español, chino, etc. puede ser diferente

Solución: MTEB Multilingual (evalúa 100+ idiomas).


❌ 2. No evalúa latencia/costo

# MTEB solo evalúa performance (accuracy, nDCG)
# No considera:
# - Latencia (API 100ms vs local 5ms)
# - Costo ($0.13/1M tokens vs $0)
# - Tamaño de modelo (80MB vs 1.2GB)

Solución: Complementar con benchmarks de latencia/costo (Cápsulas 05-06).


❌ 3. Datasets pueden no representar tu dominio

# MTEB usa datasets públicos (Wikipedia, Reddit, etc.)
# Tu dominio puede ser diferente (legal, medical)

Solución: Evaluar en tus propios datasets (domain-specific).


❌ 4. Overfitting al benchmark

# Modelos pueden ser "tuneados" específicamente para MTEB
# Performance en producción puede diferir

Solución: A/B testing en producción (validar con usuarios reales).


Ejecutar MTEB en tus modelos

Instalación:

pip install mteb

Código básico:

from mteb import MTEB
from sentence_transformers import SentenceTransformer

# Cargar modelo
model = SentenceTransformer('all-MiniLM-L6-v2')

# Definir evaluación (solo 1 tarea para demo)
evaluation = MTEB(tasks=["Banking77Classification"])

# Ejecutar
results = evaluation.run(model, output_folder="results/")

print(results)

Output (ejemplo):

{
  "Banking77Classification": {
    "test": {
      "accuracy": 0.7234,
      "f1": 0.7123
    }
  }
}

Evaluación completa (58 datasets):

# ADVERTENCIA: Toma ~8 horas en GPU
evaluation = MTEB(tasks=MTEB(task_langs=['en']).tasks)
results = evaluation.run(model, output_folder="results/")

Evaluación selectiva (solo retrieval):

# Solo tareas de retrieval (más relevante para RAG)
retrieval_tasks = [
    "NFCorpus",
    "SciFact",
    "FiQA2018",
    "ArguAna",
    "TRECCOVID"
]

evaluation = MTEB(tasks=retrieval_tasks)
results = evaluation.run(model)

Comparación práctica: MTEB vs Real-World

Experimento:

# Modelo A: MTEB 64 (OpenAI 3-large)
# Modelo B: MTEB 58 (all-mpnet-base-v2)

# Pregunta: ¿Modelo A es 10% mejor en producción?

# Respuesta: NO necesariamente.
# Razones:
# 1. Dominio puede ser diferente (MTEB es general)
# 2. Latencia importa (modelo B es 10x más rápido)
# 3. Costo importa (modelo B es $0/query)

Conclusión: MTEB es guía, no verdad absoluta. Valida en tu dominio.


Ejercicios

Ejercicio 1: Interpretar MTEB

Modelo X tiene estos scores:

Retrieval: 58
Classification: 72
Clustering: 45
STS: 80
MTEB Average: 62

¿Para qué tarea es mejor este modelo?

Ver solución

Respuesta: Semantic Similarity (STS: 80)

Interpretación:

  • Excelente para comparar similaridad entre textos
  • Muy bueno para classification (72)
  • Aceptable para retrieval (58) → OK para RAG básico
  • Débil en clustering (45) → No usar para agrupar documentos

Caso de uso recomendado: Semantic search, duplicate detection, paraphrase detection.


Ejercicio 2: Elegir modelo según MTEB

Tienes 2 opciones:

Modelo A: MTEB 64, Costo $0.13/1M tokens, Latencia 100ms
Modelo B: MTEB 58, Costo $0 (self-hosted), Latencia 10ms

Tu caso: RAG system con 100K queries/mes, presupuesto $50/mes.

¿Cuál eliges?

Ver solución

Análisis:

Modelo A (OpenAI 3-large):

  • Performance: Excelente (MTEB 64)
  • Costo: (100K × 50 tokens) / 1M × $0.13 = $0.65/mes ✅
  • Latencia: 100ms (aceptable)

Modelo B (all-mpnet-base-v2):

  • Performance: Bueno (MTEB 58, suficiente para RAG básico)
  • Costo: $0/query (+ GPU $200/mes) ❌ (excede presupuesto)
  • Latencia: 10ms (excelente)

Recomendación: Modelo A (OpenAI 3-large)

Razones:

  1. Costo total <$1/mes (muy por debajo de presupuesto)
  2. Performance superior (MTEB 64 vs 58)
  3. Zero maintenance
  4. Self-hosting no justifica para 100K queries/mes

Resumen

Qué aprendiste:

  • MTEB: Benchmark estándar (58 datasets, 8 tareas)
  • Score range: 70+ excelente, 60-70 bueno, <60 aceptable
  • Tareas: Retrieval (RAG), Classification, STS (similarity)
  • Limitaciones: Sesgo inglés, no evalúa latencia/costo, dominio general
  • Ejecución: Código con biblioteca mteb

Conceptos clave:

  1. MTEB es guía, no verdad absoluta
  2. Retrieval score más importante para RAG
  3. Complementar con latencia, costo, y dominio específico

Recursos adicionales

  1. MTEB Leaderboard - Rankings actualizados
  2. MTEB Paper - Paper original
  3. MTEB GitHub - Código
  4. MTEB Tasks - Datasets

En la siguiente cápsula

Cápsula 05: Latencia y Throughput

Aprenderás:

  • Medir latencia (API vs local)
  • Throughput (docs/segundo)
  • Batch processing impact
  • Código de benchmarking

De performance a velocidad.


Módulo 3 - Embeddings Deep Dive Guide MTEB: el estándar para evaluar embeddings