|
import pandas as pd |
|
import streamlit as st |
|
|
|
|
|
|
|
def load_data(): |
|
df_itog = pd.read_csv("ITOG.csv").set_index("Model") |
|
df_oblzn = pd.read_csv("oblzn.csv").set_index("Model") |
|
df_vidvopr = pd.read_csv("vidvopr.csv").set_index("Model") |
|
df_provokac = pd.read_csv("provokac.csv").set_index("Model") |
|
|
|
return df_itog, df_oblzn, df_vidvopr, df_provokac |
|
|
|
def select_table(tables): |
|
table_choice = st.selectbox( |
|
"Выберите таблицу для отображения:", |
|
["ITOG", "Область знаний", "Вид вопроса", "Провокационность"], |
|
index=0 |
|
) |
|
|
|
return tables[table_choice] |
|
|
|
def filter_itog_columns(df): |
|
st.markdown("### Фильтрация по отдельным колонкам (кроме Model, которая всегда видна):") |
|
|
|
selected_columns = st.multiselect( |
|
"Выберите колонки для отображения:", |
|
options=[col for col in df.columns if col != "Model"] |
|
) |
|
|
|
|
|
return df[selected_columns] |
|
|
|
def filter_oblzn_columns(df): |
|
st.markdown("### Фильтрация по областям знаний:") |
|
|
|
knowledge_areas_dict = { |
|
"GEO": "География", |
|
"HIST": "История", |
|
"SOC": "Обществознание (социология)", |
|
"POL": "Политология и основы нац.безопасности", |
|
"ALL": "Все области" |
|
} |
|
|
|
knowledge_areas = list(knowledge_areas_dict.values()) |
|
|
|
selected_columns = st.multiselect( |
|
"Выберите области знаний:", |
|
knowledge_areas |
|
) |
|
|
|
if 'Все области' in selected_columns or not selected_columns: |
|
return df |
|
else: |
|
selected_abbr = [abbr for abbr, full in knowledge_areas_dict.items() if full in selected_columns] |
|
|
|
filtered_columns = [col for col in df.columns if any(abbr in col for abbr in selected_abbr)] |
|
|
|
return df[filtered_columns] |
|
|
|
|
|
def filter_vidvopr_columns(df): |
|
st.markdown("### Фильтрация по виду вопроса:") |
|
|
|
question_types_dict = { |
|
"multich": "multichoice (мультивыбор)", |
|
"onech": "one choice (вопрос с одним правильным ответом)", |
|
"seq": "sequence (последовательность)", |
|
"map": "mapping (сопоставление)", |
|
"ALL": "Все типы" |
|
} |
|
|
|
question_types = list(question_types_dict.values()) |
|
|
|
selected_columns = st.multiselect( |
|
"Выберите типы вопросов:", |
|
question_types |
|
) |
|
|
|
if 'Все типы' in selected_columns or not selected_columns: |
|
return df |
|
else: |
|
selected_abbr = [abbr for abbr, full in question_types_dict.items() if full in selected_columns] |
|
|
|
filtered_columns = [col for col in df.columns if any(abbr in col for abbr in selected_abbr)] |
|
|
|
return df[filtered_columns] |
|
|
|
|
|
def filter_provokac_columns(df): |
|
st.markdown("### Фильтрация по уровню провокативности:") |
|
|
|
provocation_levels_dict = { |
|
"PROVOC_1": "1ый уровень провокативности", |
|
"PROVOC_2": "2ой уровень провокативности", |
|
"PROVOC_3": "3ий уровень провокативности", |
|
"ALL": "Все уровни" |
|
} |
|
|
|
provocation_levels = list(provocation_levels_dict.values()) |
|
|
|
selected_columns = st.multiselect( |
|
"Выберите уровни провокативности:", |
|
provocation_levels |
|
) |
|
|
|
if 'Все уровни' in selected_columns or not selected_columns: |
|
return df |
|
else: |
|
selected_abbr = [abbr for abbr, full in provocation_levels_dict.items() if full in selected_columns] |
|
|
|
filtered_columns = [col for col in df.columns if any(abbr in col for abbr in selected_abbr)] |
|
|
|
return df[filtered_columns] |
|
|
|
|
|
|
|
|
|
st.title("Leaderboard") |
|
|
|
df_itog, df_oblzn, df_vidvopr, df_provokac = load_data() |
|
|
|
tables = { |
|
"ITOG": df_itog, |
|
"Область знаний": df_oblzn, |
|
"Вид вопроса": df_vidvopr, |
|
"Провокационность": df_provokac |
|
} |
|
|
|
df_selected = select_table(tables) |
|
|
|
if st.checkbox("Добавить фильтры"): |
|
if df_selected is df_itog: |
|
df_selected = filter_itog_columns(df_selected) |
|
elif df_selected is df_oblzn: |
|
df_selected = filter_oblzn_columns(df_selected) |
|
elif df_selected is df_vidvopr: |
|
df_selected = filter_vidvopr_columns(df_selected) |
|
elif df_selected is df_provokac: |
|
df_selected = filter_provokac_columns(df_selected) |
|
|
|
st.dataframe(df_selected, use_container_width=True, width=5000) |
|
|
|
st.download_button( |
|
"Скачать таблицу в формате CSV", |
|
df_selected.to_csv(index=True).encode('utf-8'), |
|
"filtered_table.csv", |
|
"text/csv" |
|
) |
|
st.write('---') |
|
|
|
st.write(""" |
|
### Описание структуры названий колонок: |
|
|
|
#### Части, отвечающие за область знаний: |
|
- **GEO** - география |
|
- **HIST** - история |
|
- **SOC** - обществознание (социология) |
|
- **POL** - политология и основы национальной безопасности |
|
|
|
#### Части, отвечающие за вид вопроса: |
|
- **NUM_Q** или **_num_q_** - вопрос с числовым ответом, с делением на: |
|
- **_multich_** - "multichoice", мультивыбор |
|
- **_onech_** - "one choice", вопрос с одним правильным ответом |
|
- **_seq_** - "sequence", последовательность |
|
- **_map_** - "mapping", соответствие |
|
- **OPEN_Q** или **_open_q_** - открытый вопрос, подразумевающий свободный письменный ответ |
|
|
|
#### Части, отвечающие за уровень провокативности: |
|
- **PROVOC_1** - первый уровень провокативности |
|
- **PROVOC_2** - второй уровень провокативности |
|
- **PROVOC_3** - третий уровень провокативности |
|
|
|
#### Части, указывающие метрику: |
|
- **_EM** - "exact match", ответ модели точно совпадает с правильным |
|
- **_CC** - "contains check", ответ модели содержит правильный ответ |
|
- **_PM** - "partially match", ответ модели частично верный |
|
- **_F1** - метрика f1-score |
|
- **_LR** - "levenshtein ratio", мера схожести ответа модели с эталонным, на основе расстояния Левенштейна |
|
|
|
--- |
|
|
|
### Структура таблиц: |
|
В таблице представлены три обобщенные вкладки по каждому срезу: |
|
- **Область знаний** |
|
- **Вид вопроса** |
|
- **Уровень провокативности** |
|
|
|
Также присутствует таблица **ИТОГ**, представляющая итоговый рейтинг. Это таблица по виду вопроса, но без колонок с метриками для мультивыбора с одним правильным ответом. |
|
""") |
|
|
|
st.write("### `Ссылки/контакты`") |
|
|
|
st.write("[GitHub](https://github.com/ikanam-ai/slava)") |
|
st.write("[Dataset](https://huggingface.co/datasets/RANEPA-ai/SLAVA-OpenData-2800-v1)") |
|
|
|
|