Y1OV commited on
Commit
0e55551
·
verified ·
1 Parent(s): 46920e7

Upload 2 files

Browse files
Files changed (2) hide show
  1. Leaderboard.py +196 -0
  2. streamlit_app.py +17 -0
Leaderboard.py ADDED
@@ -0,0 +1,196 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ import streamlit as st
3
+
4
+
5
+
6
+ def load_data():
7
+ df_itog = pd.read_csv("ITOG.csv").set_index("Model")
8
+ df_oblzn = pd.read_csv("oblzn.csv").set_index("Model")
9
+ df_vidvopr = pd.read_csv("vidvopr.csv").set_index("Model")
10
+ df_provokac = pd.read_csv("provokac.csv").set_index("Model")
11
+
12
+ return df_itog, df_oblzn, df_vidvopr, df_provokac
13
+
14
+ def select_table(tables):
15
+ table_choice = st.selectbox(
16
+ "Выберите таблицу для отображения:",
17
+ ["ITOG", "Область знаний", "Вид вопроса", "Провокационность"],
18
+ index=0
19
+ )
20
+
21
+ return tables[table_choice]
22
+
23
+ def filter_itog_columns(df):
24
+ st.markdown("### Фильтрация по отдельным колонкам (кроме Model, которая всегда видна):")
25
+
26
+ selected_columns = st.multiselect(
27
+ "Выберите колонки для отображения:",
28
+ options=[col for col in df.columns if col != "Model"]
29
+ )
30
+
31
+
32
+ return df[selected_columns]
33
+
34
+ def filter_oblzn_columns(df):
35
+ st.markdown("### Фильтрация по областям знаний:")
36
+
37
+ knowledge_areas_dict = {
38
+ "GEO": "География",
39
+ "HIST": "История",
40
+ "SOC": "Обществознание (социология)",
41
+ "POL": "Политология и основы нац.безопасности",
42
+ "ALL": "Все области"
43
+ }
44
+
45
+ knowledge_areas = list(knowledge_areas_dict.values())
46
+
47
+ selected_columns = st.multiselect(
48
+ "Выберите области знаний:",
49
+ knowledge_areas
50
+ )
51
+
52
+ if 'Все области' in selected_columns or not selected_columns:
53
+ return df
54
+ else:
55
+ selected_abbr = [abbr for abbr, full in knowledge_areas_dict.items() if full in selected_columns]
56
+
57
+ filtered_columns = [col for col in df.columns if any(abbr in col for abbr in selected_abbr)]
58
+
59
+ return df[filtered_columns]
60
+
61
+
62
+ def filter_vidvopr_columns(df):
63
+ st.markdown("### Фильтрация по виду вопроса:")
64
+
65
+ question_types_dict = {
66
+ "multich": "multichoice (мультивыбор)",
67
+ "onech": "one choice (вопрос с одним правильным ответом)",
68
+ "seq": "sequence (последовательность)",
69
+ "map": "mapping (сопоставление)",
70
+ "ALL": "Все типы"
71
+ }
72
+
73
+ question_types = list(question_types_dict.values())
74
+
75
+ selected_columns = st.multiselect(
76
+ "Выберите типы вопросов:",
77
+ question_types
78
+ )
79
+
80
+ if 'Все типы' in selected_columns or not selected_columns:
81
+ return df
82
+ else:
83
+ selected_abbr = [abbr for abbr, full in question_types_dict.items() if full in selected_columns]
84
+
85
+ filtered_columns = [col for col in df.columns if any(abbr in col for abbr in selected_abbr)]
86
+
87
+ return df[filtered_columns]
88
+
89
+
90
+ def filter_provokac_columns(df):
91
+ st.markdown("### Фильтрация по уровню провокативности:")
92
+
93
+ provocation_levels_dict = {
94
+ "PROVOC_1": "1ый уровень провокативности",
95
+ "PROVOC_2": "2ой уровень провокативности",
96
+ "PROVOC_3": "3ий уровень провокативности",
97
+ "ALL": "Все уровни"
98
+ }
99
+
100
+ provocation_levels = list(provocation_levels_dict.values())
101
+
102
+ selected_columns = st.multiselect(
103
+ "Выберите уровни провокативности:",
104
+ provocation_levels
105
+ )
106
+
107
+ if 'Все уровни' in selected_columns or not selected_columns:
108
+ return df
109
+ else:
110
+ selected_abbr = [abbr for abbr, full in provocation_levels_dict.items() if full in selected_columns]
111
+
112
+ filtered_columns = [col for col in df.columns if any(abbr in col for abbr in selected_abbr)]
113
+
114
+ return df[filtered_columns]
115
+
116
+
117
+
118
+
119
+ st.title("Leaderboard")
120
+
121
+ df_itog, df_oblzn, df_vidvopr, df_provokac = load_data()
122
+
123
+ tables = {
124
+ "ITOG": df_itog,
125
+ "Область знаний": df_oblzn,
126
+ "Вид вопроса": df_vidvopr,
127
+ "Провокационность": df_provokac
128
+ }
129
+
130
+ df_selected = select_table(tables)
131
+
132
+ if st.checkbox("Добавить фильтры"):
133
+ if df_selected is df_itog:
134
+ df_selected = filter_itog_columns(df_selected)
135
+ elif df_selected is df_oblzn:
136
+ df_selected = filter_oblzn_columns(df_selected)
137
+ elif df_selected is df_vidvopr:
138
+ df_selected = filter_vidvopr_columns(df_selected)
139
+ elif df_selected is df_provokac:
140
+ df_selected = filter_provokac_columns(df_selected)
141
+
142
+ st.dataframe(df_selected, use_container_width=True, width=5000)
143
+
144
+ st.download_button(
145
+ "Скачать таблицу в формате CSV",
146
+ df_selected.to_csv(index=False).encode('utf-8'),
147
+ "filtered_table.csv",
148
+ "text/csv"
149
+ )
150
+ st.write('---')
151
+
152
+ st.write("""
153
+ ### Описание структуры названий колонок:
154
+
155
+ #### Части, отвечающие за область знаний:
156
+ - **GEO** - география
157
+ - **HIST** - история
158
+ - **SOC** - обществознание (социология)
159
+ - **POL** - политология и основы национальной безопасности
160
+
161
+ #### Части, отвечающие за вид вопроса:
162
+ - **NUM_Q** или **_num_q_** - вопрос с числовым ответом, с делением на:
163
+ - **_multich_** - "multichoice", мультивыбор
164
+ - **_onech_** - "one choice", вопрос с одним правильным ответом
165
+ - **_seq_** - "sequence", последовательность
166
+ - **_map_** - "mapping", соответствие
167
+ - **OPEN_Q** или **_open_q_** - открытый вопрос, подразумевающий свободный письменный ответ
168
+
169
+ #### Части, отвечающие за уровень провокативности:
170
+ - **PROVOC_1** - первый уровень провокативности
171
+ - **PROVOC_2** - второй уровень провокативности
172
+ - **PROVOC_3** - третий уровень провокативности
173
+
174
+ #### Части, указывающие метрику:
175
+ - **_EM** - "exact match", ответ модели точно совпадает с правильным
176
+ - **_CC** - "contains check", ответ модели содержит правильный ответ
177
+ - **_PM** - "partially match", ответ модели частично верный
178
+ - **_F1** - метрика f1-score
179
+ - **_LR** - "levenshtein ratio", мера схожести ответа модели с эталонным, на основе расстояния Левенштейна
180
+
181
+ ---
182
+
183
+ ### Структура таблиц:
184
+ В таблице представлены три обобщенные вкладки по каждому срезу:
185
+ - **Область знаний**
186
+ - **Вид вопроса**
187
+ - **Уровень провокативности**
188
+
189
+ Также присутствует таблица **ИТОГ**, представляющая итоговый рейтинг. Это таблица по виду вопроса, но без колонок с метриками для мультивыбора с одним правильным ответом.
190
+ """)
191
+
192
+ st.write("### `Ссылки/контакты`")
193
+
194
+ st.write("[GitHub](https://github.com/ikanam-ai/slava)")
195
+ st.write("[Dataset](https://huggingface.co/datasets/RANEPA-ai/SLAVA-OpenData-2800-v1)")
196
+
streamlit_app.py ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+
3
+ main_page = st.Page("main.py", title="Главная"
4
+ )
5
+ Leaderboard_page = st.Page("Leaderboard.py", title="Лидерборд"
6
+ )
7
+
8
+ pg = st.navigation(
9
+ {
10
+ "Main": [main_page, Leaderboard_page],
11
+ }
12
+ )
13
+ st.set_page_config(page_title="Leaderboard", layout="wide", page_icon="🏆",
14
+ )
15
+ pg.run()
16
+
17
+