File size: 5,153 Bytes
6389500
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import gradio as gr
import pandas as pd
import plotly.express as px

headers = [
    "Modelo",
    "Promedio",
    "Español Mexicano",
    "Español España",
    "Español Argentino",
    "Español Cubano",
    "Español Colombiano",
    "Español Chileno"
]

data = [
    ["Gemini 2.5 Flash", 55.56, 53.33, 65.00, 40.00, 46.67, 66.67, 61.67],
    ["Gemini 2.5 Flash Lite", 51.94, 43.33, 61.67, 41.67, 41.67, 70.00, 53.33],
    ["Kimi K2 Instruct 0905", 47.22, 43.33, 53.33, 41.67, 45.00, 50.00, 50.00],
    ["DeepSeek V3.1 Terminus", 46.94, 43.33, 50.00, 38.33, 41.67, 56.67, 51.67],
    ["Llama 4 Maverick", 43.89, 40.00, 43.33, 38.33, 36.67, 58.33, 46.67],
    ["Qwen 3 Next 80b", 40.00, 35.00, 38.33, 36.67, 35.00, 53.33, 41.67],
    ["Qwen 3 235b A22b", 39.72, 36.67, 48.33, 30.00, 35.00, 48.33, 40.00],
    ["GPT OSS 120b", 38.89, 30.00, 35.00, 28.33, 31.67, 55.00, 53.33],
    ["Qwen 3 32b", 36.67, 30.00, 35.00, 35.00, 40.00, 41.67, 38.33],
    ["Llama 3.1 8b", 26.67, 25.00, 26.67, 30.00, 28.33, 23.33, 26.67]
]

df_results = pd.DataFrame(data, columns=headers)

intro_md = """
# BBS 3: Barcenas Benchmark Spanish
### Evaluación de LLMs en Diferentes Variantes del Español
"""

info_text = """
### 📚 Acerca de BBS 3
Bienvenido a la tercera edición del **Barcenas Benchmark Spanish (BBS 3)**.

#### 🎯 Objetivo
El propósito de este benchmark es evaluar y comparar el rendimiento de Modelos de Lenguaje de Gran Tamaño (LLMs) específicamente en su capacidad para entender y generar diversas **variantes dialectales del idioma español**.


En esta versión, se ha incorporado además la evaluación de conocimiento cultural, necesitará identificar que tweet corresponde a cierta variante del español.

#### 🔬 Metodología
*   **Modelos Evaluados:** Se utilizaron APIs de Cerebras, Nvidia y Google (Gemini) para ejecutar las pruebas.
*   **Protocolo de Prueba:** Se presentó a cada LLM una serie de 60 preguntas por cada variante del español. Las preguntas son de opción múltiple (tipo test: A, B, C, D) y consisten en identificar qué tweet o frase corresponde mejor a un dialecto específico (mexicano, español peninsular, argentino, etc.).
*   **Configuración:** Se utilizó una temperatura de `0.3` y un Top-p de `1.0` para garantizar consistencia.
*   **Métrica:** Se calculó el promedio de precisión sobre todas las variantes evaluadas.

#### 📊 Interpretación de Resultados Preliminares
*   **Dominio de Gemini:** Los modelos de la familia Gemini muestran un rendimiento superior consistente en la detección de matices dialectales del español, superando notablemente a sus competidores en esta fase.
*   **Desempeño de Qwen y Modelos Abiertos:** A pesar de su buen rendimiento general en otros benchmarks, los modelos Qwen y el modelo open source GPT OSS 120b muestran dificultades con las sutilezas regionales del español. En el caso del modelo OSS, esto podría deberse a una alta dependencia de datos sintéticos en su entrenamiento, que a menudo carecen de riqueza cultural.

#### 🚀 Próximos Pasos
*   **Expansión:** Inclusión de modelos propietarios de OpenAI (GPT-5), Anthropic (Claude 4.5) y xAI (Grok 4) conforme los recursos de API lo permitan.
---
**Agradecimientos:**
*   A **Ismael Medina Muñoz** (Solutions Architect en Databricks) por la idea de investigar el rendimiento en español en los LLMs.
*   A los autores del paper *"Es igual pero no es lo mismo: ¿Distinguen los LLMs las variedades del español?"*, cuyo trabajo sirvió de inspiración para segmentos de BBS 3.

**Hecho con ❤️ por Danielbrdz**
"""

def create_plot(df):
    fig = px.bar(
        df, 
        x="Promedio", 
        y="Modelo", 
        orientation='h', 
        title="Rendimiento Promedio por Modelo",
        text="Promedio",
        color="Promedio",
        color_continuous_scale="Viridis"
    )
    fig.update_layout(yaxis={'categoryorder':'total ascending'})
    fig.update_traces(texttemplate='%{text:.2f}', textposition='outside')
    return fig

custom_css = """
h1 {
    text-align: center;
    display: block;
}
h3 {
    text-align: center;
    display: block;
}
.gradio-container {
    font-family: 'Helvetica Neue', Arial, sans-serif;
}
"""

theme = gr.themes.Soft(
    primary_hue="orange",
    secondary_hue="slate",
)

with gr.Blocks(theme=theme, css=custom_css) as demo:
    
    gr.Markdown(intro_md)

    with gr.Tabs():
        with gr.Tab("🏆 Resultados (Leaderboard)"):
            
            with gr.Row():
                plot = gr.Plot(value=create_plot(df_results), label="Comparativa Visual")
            
            with gr.Row():
                gr.Markdown("### 📋 Tabla Detallada")
            
            with gr.Row():
                gr.DataFrame(
                    value=df_results,
                    headers=headers,
                    datatype=["str"] + ["number"] * 7,
                    interactive=False,
                    wrap=True,
                    column_widths=["200px"]
                )

        with gr.Tab("ℹ️ Metodología e Info"):
            with gr.Column(variant="panel"):
                gr.Markdown(info_text)

demo.launch()