ragsolver / docs /eval_report.md
CamiloS1111's picture
Upload folder using huggingface_hub
ee54756 verified
|
Raw History Blame Contribute Delete
14.5 kB

Evaluación del RAG y del pipeline — RagSolver

Generado por scripts/eval_report.py. Metodología: docs/PLAN_RAG.md §10-§11; decisiones y correcciones: docs/DECISIONS.md.

1. Retriever sobre Mathlib (MathlibQR, LeanSearch v2)

Tabla de muestra: gold de MathlibQR/MPR + premisas de miniF2F + 3000 distractores. Cobertura del gold en la tabla: 793/946 (83.8%). Métricas crudas (el recall condicionado a cobertura = crudo ÷ cobertura).

1a. 946 consultas, sin rerank

Variante recall@10 ndcg@10 mrr
denso 0.662 0.568 0.542
bm25 0.595 0.481 0.449
hibrido 0.655 0.543 0.512

1b. Muestra aleatoria de 100 consultas (semilla fija), 4 variantes

Variante recall@10 ndcg@10 mrr
denso 0.760 0.631 0.591
bm25 0.560 0.437 0.403
hibrido 0.660 0.533 0.501
hibrido_rerank 0.710 0.617 0.592

1c. Misma muestra de 100 consultas sobre el índice completo de Mathlib (mathlib_full, 278 160 declaraciones; DECISIONS #48, #56)

Variante recall@10 ndcg@10 mrr
denso 0.410 0.297 0.268
bm25 0.250 0.196 0.184
hibrido 0.380 0.276 0.250
hibrido_rerank 0.450 0.339 0.307

Los números de la tabla de muestra (1a-1b) están inflados por el tamaño del pool (3 903 candidatos); 1c es la medida realista del retriever en producción.

Índice ANN (IVF_SQ, 256 particiones, nprobes 32, refine ×5; DECISIONS #60): recall@10 respecto de la búsqueda exacta 0.989, recall@50 0.9769 (200 consultas sintéticas); latencia densa p50 2.713 s → 0.045 s (p95 2.887 → 0.078 s).

1d. Misma muestra sobre el índice completo con el índice ANN (el que usan la demo y los agentes con RAGSOLVER_MATHLIB_TABLE=mathlib_full)

Variante recall@10 ndcg@10 mrr
denso 0.420 0.302 0.270
bm25 0.250 0.196 0.184
hibrido 0.380 0.277 0.251
hibrido_rerank 0.450 0.339 0.307

2. Premisas gold de miniF2F (pruebas verificadas de DeepSeek-Prover-V2)

Problemas: 352 (con ≥1 premisa en la tabla: 352); cobertura de premisas en la tabla: 100.0%; rerank: False.

Consulta recall@8 recall@20 ndcg@10 mrr
enunciado informal (tabla de muestra) 0.080 0.153 0.076 0.129
enunciado formal (Lean) (tabla de muestra) 0.118 0.180 0.106 0.176
enunciado informal (índice completo) 0.006 0.010 0.006 0.016
enunciado formal (Lean) (índice completo) 0.009 0.018 0.007 0.015

3. Gold informal (30 consultas sobre el PDF de ejemplo)

  • Recall@5: 1.000 (Wilson 95 %: [0.886, 1.0]); MRR: 1.000
  • Consultas dependientes de figura (n=15): Recall@5 = 1.000; cobertura de entidades en las descripciones de figura = 0.911

4. Contaminación corpus informal ↔ miniF2F-v2

  • Pares con similitud > 0.9: 0 de 100×488; similitud máxima observada: 0.818
  • Top-3 más parecidos (card, problema, sim): [[23, 'imo_1959_p1', 0.8181180953979492], [58, 'induction_divisibility_3div2tooddnp1', 0.8117700815200806], [76, 'algebra_abpbcpcageq3_sumaonsqrtapbgeq3onsqrt2', 0.7985193729400635]]

5. Ablaciones end-to-end (eval-v1)

Config n pass@1 IC95 Wilson llamadas LLM (media) tokens (media) wall s (mediana) precisión uso de lemas re-recuperación OK taxonomía de errores
full 60 0.15 [0.081, 0.261] 7.62 35190 287.3 0.002 0.0 {'planning': 49, 'lean_syntax': 6, 'exhausted': 33, 'misformalization': 21, 'missing_lemma': 20, 'unknown': 3, 'abandon': 5, 'llm_output_invalid:generator': 2, 'llm_output_invalid:formalizer': 9, 'llm_output_invalid:planner': 1, 'llm_output_invalid:critic': 1}
no_rag 60 0.15 [0.081, 0.261] 7.83 23360 152.8 None None {'missing_lemma': 25, 'planning': 41, 'exhausted': 29, 'lean_syntax': 5, 'llm_output_invalid:critic': 4, 'misformalization': 17, 'llm_output_invalid:formalizer': 15, 'unknown': 4, 'abandon': 2, 'llm_output_invalid:generator': 1}
no_critic 60 0.067 [0.026, 0.159] 3.28 16433 62.4 0.001 None {'unknown': 44, 'exhausted': 44, 'llm_output_invalid:formalizer': 7, 'llm_output_invalid:generator': 4, 'llm_output_invalid:planner': 1}
baseline_a 60 0.083 [0.036, 0.181] 1.13 3012 5.2 None None {'unknown': 47, 'llm_output_invalid:baseline_a': 8}
baseline_b 60 0.0 [0.0, 0.06] 1.05 2214 5.9 None None {'llm_output_invalid:baseline_b': 3}

Resultado por problema (✔ = prueba aceptada por el kernel)

Problema full no_rag no_critic baseline_a baseline_b
mathd_algebra_67 ✔ ✔ – – –
algebra_sqineq_2unitcircatblt1 ✔ ✔ ✔ – –
mathd_algebra_28 ✔ ✔ – ✔ –
mathd_algebra_125 ✔ ✔ – ✔ –
mathd_algebra_342 – – – – –
induction_prod1p1onk3le3m1onn – – – – –
mathd_algebra_214 – – – – –
aime_1983_p2 – – – – –
amc12a_2019_p12 – – – – –
amc12b_2003_p17 ✔ – – – –
mathd_algebra_437 – – – – –
mathd_algebra_77 – – – – –
amc12b_2003_p6 – – – – –
amc12b_2020_p13 – – – – –
imo_1962_p2 – – – – –
amc12a_2010_p11 – – – – –
imo_1978_p5 – – – – –
mathd_numbertheory_728 ✔ ✔ – ✔ –
mathd_numbertheory_229 – ✔ ✔ – –
mathd_numbertheory_233 ✔ – – – –
mathd_numbertheory_403 – – – – –
mathd_numbertheory_101 ✔ ✔ ✔ ✔ –
mathd_numbertheory_109 – – – – –
numbertheory_aneqprodakp4_anmsqrtanp1eq2 – – – – –
numbertheory_sqmod3in01d – – – – –
amc12a_2003_p23 – – – – –
amc12a_2020_p10 – – – – –
amc12a_2008_p15 – – – – –
amc12a_2016_p3 ✔ ✔ – – –
amc12a_2002_p21 – – – – –
amc12b_2002_p3 – – – – –
imo_1977_p5 – – – – –
mathd_algebra_24 – – – – –
amc12_2000_p6 – – – – –
mathd_algebra_170 – – – – –
mathd_algebra_455 – – – – –
mathd_algebra_104 – ✔ – ✔ –
amc12a_2002_p6 – – – – –
amc12a_2003_p1 – – – – –
mathd_algebra_209 – – ✔ – –
imo_1987_p6 – – – – –
amc12a_2003_p25 – – – – –
amc12_2001_p5 – – – – –
amc12a_2020_p9 – – – – –
imo_1965_p1 – – – – –
imo_1992_p1 – – – – –
aime_1990_p2 – – – – –
numbertheory_notequiv2i2jasqbsqdiv8 – – – – –
imo_1981_p6 – – – – –
imo_2006_p3 – – – – –
imo_1993_p5 – – – – –
aime_1997_p11 – – – – –
mathd_numbertheory_155 – – – – –
mathd_algebra_398 – – – – –
imo_1974_p3 – – – – –
imo_1990_p3 – – – – –
mathd_algebra_185 – – – – –
imo_1964_p1_1 – – – – –
mathd_algebra_224 – – – – –
amc12b_2002_p11 – – – – –

Comparación pareada (McNemar exacto, α = 0.05; n pequeño → poca potencia)

A B sólo A sólo B p
full no_rag 2 2 1.000
full no_critic 7 2 0.180
full baseline_a 5 1 0.219
no_rag no_critic 6 1 0.125
no_rag baseline_a 4 0 0.125
no_critic baseline_a 3 4 1.000

Falsos positivos evitados (propuesta §8.3): la línea base B se autoevaluó como correcta en 55/60 problemas; en 50 de ellos la formalización directa (línea base A) no pasa el kernel.

Uso de lemas recuperados (config full)

Problema verificados en la prueba usados en el boceto recuperados
mathd_algebra_67 0 0 13
algebra_sqineq_2unitcircatblt1 1 0 25
mathd_algebra_28 0 0 24
mathd_algebra_125 0 0 40
mathd_algebra_342 0 0 27
induction_prod1p1onk3le3m1onn 0 0 33
mathd_algebra_214 0 1 41
aime_1983_p2 0 0 39
amc12a_2019_p12 0 0 35
amc12b_2003_p17 2 0 23
mathd_algebra_437 0 1 37
mathd_algebra_77 0 0 49
amc12b_2003_p6 0 0 36
amc12b_2020_p13 0 0 44
imo_1962_p2 0 0 15
amc12a_2010_p11 0 0 34
imo_1978_p5 0 0 30
mathd_numbertheory_728 0 0 30
mathd_numbertheory_229 0 0 22
mathd_numbertheory_233 0 0 38
mathd_numbertheory_403 0 2 29
mathd_numbertheory_101 0 0 19
mathd_numbertheory_109 0 0 28
numbertheory_aneqprodakp4_anmsqrtanp1eq2 0 0 51
numbertheory_sqmod3in01d 0 0 34
amc12a_2003_p23 0 0 27
amc12a_2020_p10 0 0 33
amc12a_2008_p15 0 0 18
amc12a_2016_p3 1 0 23
amc12a_2002_p21 0 0 51
amc12b_2002_p3 0 4 43
imo_1977_p5 0 0 55
mathd_algebra_24 0 0 36
amc12_2000_p6 0 0 50
mathd_algebra_170 0 0 60
mathd_algebra_455 0 0 38
mathd_algebra_104 0 0 53
amc12a_2002_p6 0 0 50
amc12a_2003_p1 0 0 31
imo_1987_p6 0 0 36
amc12a_2003_p25 0 0 31
amc12_2001_p5 0 0 34
amc12a_2020_p9 0 0 25
imo_1965_p1 0 0 35
imo_1992_p1 0 0 29
mathd_algebra_209 0 0 22
numbertheory_notequiv2i2jasqbsqdiv8 0 0 31
imo_1981_p6 0 0 42
imo_2006_p3 0 0 37
aime_1990_p2 0 0 37
imo_1993_p5 0 0 36
aime_1997_p11 0 0 44
mathd_numbertheory_155 0 0 50
mathd_algebra_398 0 0 25
imo_1974_p3 0 0 0
imo_1990_p3 0 0 32
mathd_algebra_185 0 0 49
imo_1964_p1_1 0 0 30
mathd_algebra_224 0 0 34
amc12b_2002_p11 0 0 32

Pruebas aceptadas (full):

  • mathd_algebra_67: rw [h₀, h₁] · norm_num
  • algebra_sqineq_2unitcircatblt1: have h1 : 0 ≤ (a - b) ^ 2 := sq_nonneg (a - b) · have h2 : 2 * (a * b) ≤ a ^ 2 + b ^ 2 := by · nlinarith [h1] ·
  • mathd_algebra_28: constructor · · rw [hS] · refine ⟨-5/4, ?_⟩ · norm_num · · intro c hc · rw [hS] at hc · rcases hc wi
  • mathd_algebra_125: -- SG1: derive 6 * s = 36 · have h₃ : 6 * s = 36 := by · -- rewrite f using h₁ · rw [← h₁] at h₂ · -- simp
  • amc12b_2003_p17: have hx_ne : x ≠ 0 := by · intro hx0 · have hx0' : x * y ^ 3 = 0 := by simp [hx0] · have hlog0 : Real.log (x
  • mathd_numbertheory_728: norm_num [ZMod.natCast_zmod_val, Int.ModEq]
  • mathd_numbertheory_233: norm_num at h₀ ⊢ · exact h₀
  • mathd_numbertheory_101: norm_num
  • amc12a_2016_p3: norm_num [h₀, Int.floor_eq_iff]

Modelos LLM usados en la corrida (cadena por cuota diaria): ['deepseek/deepseek-v4-flash-0731']. Re-recuperaciones tras lema faltante en full: 1 (exitosas: 0).

Desglose por estrato (pass@1, n) — eval_v1.jsonl

Por partición

partición full no_rag no_critic baseline_a baseline_b
dev 3/24 (0.12) [0.043, 0.31] 3/24 (0.12) [0.043, 0.31] 2/24 (0.08) [0.023, 0.258] 2/24 (0.08) [0.023, 0.258] 0/24 (0.00) [0.0, 0.138]
test 6/36 (0.17) [0.079, 0.319] 6/36 (0.17) [0.079, 0.319] 2/36 (0.06) [0.015, 0.181] 3/36 (0.08) [0.029, 0.218] 0/36 (0.00) [0.0, 0.096]

Por área

área full no_rag no_critic baseline_a baseline_b
algebra 5/24 (0.21) [0.092, 0.405] 4/24 (0.17) [0.067, 0.359] 2/24 (0.08) [0.023, 0.258] 2/24 (0.08) [0.023, 0.258] 0/24 (0.00) [0.0, 0.138]
combinatorics 0/12 (0.00) [0.0, 0.243] 1/12 (0.08) [0.015, 0.354] 0/12 (0.00) [0.0, 0.243] 1/12 (0.08) [0.015, 0.354] 0/12 (0.00) [0.0, 0.243]
number_theory 4/24 (0.17) [0.067, 0.359] 4/24 (0.17) [0.067, 0.359] 2/24 (0.08) [0.023, 0.258] 2/24 (0.08) [0.023, 0.258] 0/24 (0.00) [0.0, 0.138]

Por nivel de dificultad

nivel de dificultad full no_rag no_critic baseline_a baseline_b
1 7/27 (0.26) [0.132, 0.447] 8/27 (0.30) [0.159, 0.485] 4/27 (0.15) [0.059, 0.325] 5/27 (0.19) [0.082, 0.367] 0/27 (0.00) [0.0, 0.125]
2 2/21 (0.10) [0.027, 0.289] 1/21 (0.05) [0.008, 0.227] 0/21 (0.00) [0.0, 0.155] 0/21 (0.00) [0.0, 0.155] 0/21 (0.00) [0.0, 0.155]
3 0/12 (0.00) [0.0, 0.243] 0/12 (0.00) [0.0, 0.243] 0/12 (0.00) [0.0, 0.243] 0/12 (0.00) [0.0, 0.243] 0/12 (0.00) [0.0, 0.243]

Lectura (métricas de la propuesta §8.3)

  • Contribución del RAG = pass@1(full) − pass@1(sin RAG) = 0.15 − 0.15 = 0.0 (pares discordantes (2, 2)); el contexto recuperado multiplica los tokens por 1.5×; precisión de uso de lemas = 0.002.
  • Robustez del refinamiento = pass@1(full) − pass@1(sin Crítico) = 0.083 (pares discordantes (7, 2)); dentro de full, pass@1 tras el 1.er intento = 0.117 y final = 0.15: la ganancia atribuible a los reintentos es la diferencia entre ambos; el resto de la brecha con sin Crítico (mismo primer intento) es variación entre corridas.
  • Eficiencia: 7.62 llamadas LLM por problema en full (tope RNF-3: 20), 1.13 en la línea base A.
  • Verificación formal vs. autoevaluación: la línea base B se declaró correcta en 55/60 problemas; el kernel confirma 11 de esos en alguna configuración verificada.