File size: 5,758 Bytes
a1e9cea
881357e
 
9be823f
 
 
 
 
a1e9cea
9be823f
 
881357e
 
 
9be823f
881357e
9be823f
 
 
a1e9cea
9be823f
 
 
 
 
 
 
 
 
 
881357e
 
a1e9cea
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
881357e
 
 
9be823f
 
60c1c5f
a1e9cea
 
 
319595d
a1e9cea
60c1c5f
9be823f
a1e9cea
9be823f
a1e9cea
 
9be823f
 
a1e9cea
 
9be823f
 
 
60c1c5f
a1e9cea
 
 
 
 
60c1c5f
9be823f
a1e9cea
9be823f
1437ca9
 
9be823f
 
1437ca9
a1e9cea
9be823f
 
 
 
a1e9cea
 
 
319595d
a1e9cea
9be823f
 
a1e9cea
9be823f
a1e9cea
 
9be823f
 
296bc9c
a1e9cea
9be823f
 
 
a1e9cea
9be823f
a1e9cea
9be823f
a1e9cea
 
9be823f
 
 
a1e9cea
9be823f
 
 
 
881357e
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
from dataclasses import dataclass
from enum import Enum


@dataclass
class Metric:
    key: str
    col_name: str
    description: str = ""


@dataclass
class Task:
    benchmark: str
    metrics: list[Metric]
    col_name: str
    description: str
    task_type: str
    test_size: int
    dataset_url: str = ""
    primary_metric: str = ""

    def __post_init__(self):
        if not self.primary_metric:
            self.primary_metric = self.metrics[0].key

    @property
    def metric(self) -> str:
        """Backward-compatible primary metric key."""
        return self.primary_metric


MMRED_GROUP_DEFS = [
    ("mmred_dc_sa_c", "DC-SA-C", "Кто провёл больше/меньше всего времени в одиночестве?"),
    ("mmred_dc_sr_i", "DC-SR-I", "Сколько шагов X провёл в комнате Y?"),
    ("mmred_dc_cc_i", "DC-CC-I", "Сколько шагов в комнатах существовала толпа (3+ человек)?"),
    ("mmred_dc_ws_r", "DC-WS-R", "В какой комнате X провёл больше/меньше всего времени?"),
    ("mmred_dc_whs_c", "DC-WHS-C", "Кто провёл больше/меньше всего времени в комнате X?"),
]

MMRED_LENGTHS = [32, 64, 128]

MMRED_GROUP_KEYS = {group_key for group_key, _, _ in MMRED_GROUP_DEFS}

MMRED_SUBTASK_KEYS = {
    f"{group_key}_{length}"
    for group_key, _, _ in MMRED_GROUP_DEFS
    for length in MMRED_LENGTHS
}


def _mmred_metrics() -> list[Metric]:
    metrics = [
        Metric(
            "em.dc_aggregate",
            "Overall",
            "Итоговая оценка MMReD: гармоническое среднее пяти взвешенных EM по типам вопросов.",
        ),
    ]
    for group_key, group_label, group_desc in MMRED_GROUP_DEFS:
        metrics.append(
            Metric(
                f"{group_key}::em.dc_aggregate",
                group_label,
                f"{group_desc} Взвешенный EM по длинам 32/64/128.",
            )
        )
    for group_key, group_label, _ in MMRED_GROUP_DEFS:
        for length in MMRED_LENGTHS:
            metrics.append(
                Metric(
                    f"{group_key}_{length}::exact_match",
                    f"{group_label} × {length}",
                    f"Exact Match на подзадаче длины {length}.",
                )
            )
    return metrics


# Select your tasks here
# ---------------------------------------------------
class Tasks(Enum):
    ruaime = Task(
        benchmark="ruaime",
        metrics=[
            Metric(
                "exact_match",
                "Exact match",
                "Максимум из exact_match,flexible-extract и exact_match,strict-match.",
            ),
        ],
        col_name="ruAIME",
        dataset_url="https://huggingface.co/datasets/MERA-evaluation/ruAIME",
        description=(
            "Русскоязычный набор задач AIME (1983–2025): олимпиадная математика с числовыми "
            "ответами, требующая многошагового рассуждения."
        ),
        task_type="Математика, рассуждение",
        test_size=724,
        primary_metric="exact_match",
    )
    t_math = Task(
        benchmark="t_math",
        metrics=[
            Metric(
                "exact_match",
                "Exact match",
                "Математическая эквивалентность предсказания и эталона (math_verify).",
            ),
        ],
        col_name="T-math",
        dataset_url="https://huggingface.co/datasets/MERA-evaluation/T-math",
        description=(
            "310 олимпиадных математических задач на русском из Всероссийской олимпиады "
            "школьников и Московской олимпиады (2005–2025)."
        ),
        task_type="Математика, олимпиадные задачи",
        test_size=310,
        primary_metric="exact_match",
    )
    luzitania = Task(
        benchmark="luzitania",
        metrics=[
            Metric(
                "exact_match",
                "Exact match",
                "Максимум из exact_match,flexible-extract и exact_match,strict-match.",
            ),
        ],
        col_name="Luzitania",
        dataset_url="https://huggingface.co/datasets/MERA-evaluation/Luzitania",
        description=(
            "Набор для оценки многошагового математического рассуждения на русском языке: "
            "олимпиадные и продвинутые задачи с целочисленными ответами."
        ),
        task_type="Логика, рассуждение",
        test_size=251,
        primary_metric="exact_match",
    )
    mmred = Task(
        benchmark="mmred",
        metrics=_mmred_metrics(),
        col_name="MMReD",
        dataset_url="https://huggingface.co/datasets/MERA-evaluation/MMReD",
        description=(
            "Multi-Modal Reasoning in Dense Context — синтетический бенчмарк рассуждения "
            "на длинном плотном контексте. 5 типов вопросов × 3 длины (32, 64, 128) = 750 вопросов."
        ),
        task_type="Длинный контекст, рассуждение",
        test_size=750,
        primary_metric="em.dc_aggregate",
    )


NUM_FEWSHOT = 0
# ---------------------------------------------------