File size: 6,208 Bytes
17b190b
 
9cd3569
 
17b190b
 
3de0d0d
7887230
17b190b
79051ee
 
 
 
 
 
 
 
 
 
 
17b190b
8b5f20b
 
4f08cdd
3de0d0d
 
 
8b5f20b
 
3de0d0d
 
8b5f20b
c6f0f77
7887230
8b5f20b
3de0d0d
 
8b5f20b
c6f0f77
7887230
8b5f20b
3de0d0d
 
8b5f20b
c6f0f77
8b5f20b
3de0d0d
 
 
 
c6f0f77
3de0d0d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9cd3569
3de0d0d
 
04191fb
 
 
9cd3569
8b5f20b
3de0d0d
9cd3569
3de0d0d
 
 
 
 
9cd3569
3de0d0d
 
 
9cd3569
17b190b
 
 
 
 
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
import gradio as gr
import pandas as pd

from src.process_data import *


CITATION_TEXT = open(f"pages/citation.bib", "r").read()


languages = ["All", "Bengali", "English", "French", "German", "Italian", "Polish", "Russian", "Spanish"]
datasets = ["All", "CaFE", "CREMA-D", "EMNS", "Emozionalmente", "eNTERFACE", "JL-Corpus", "MESD", "nEMO", "Oreau", "PAVOQUE", "RAVDESS", "RESD", "SUBESCO"]
emotions = [
    "All", "anger", "anxiety", "apology", "assertiveness", 
    "calm", "concern", "disgust", "encouragement", "enthusiasm", 
    "excitement", "fear", "happiness", "neutral", "poker", 
    "sadness", "sarcasm", "surprise",
]
metric = ["f1_macro", "accuracy", "weighted_f1"]


def app():
    with gr.Blocks(theme=gr.themes.Soft(primary_hue="pink", secondary_hue="purple")) as demo:
        gr.Markdown(open("pages/header.md", "r").read(), container=True)

        with gr.Tabs():
            with gr.Tab("πŸ† Leaderboard", elem_classes='tab-item'):
                with gr.Tab("Overall Results", elem_classes='tab-item'):
                    gr.Markdown(open("pages/overall-results.md", "r").read(), elem_classes='tab-item', container=True)
                    overall_table = gr.Dataframe(show_row_numbers=True, pinned_columns=2)

                with gr.Tab("Results per Language", elem_classes='tab-item'):
                    gr.Markdown(open("pages/results-per-language.md", "r").read(), elem_classes='tab-item', container=True)
                    languages_filter = gr.CheckboxGroup(choices=languages, label="Select columns", value=languages)
                    select_lang_metric = gr.Radio(metric, value='f1_macro', label="Select metric")
                    lang_table = gr.Dataframe(show_row_numbers=True, pinned_columns=2)

                with gr.Tab("Results per Dataset", elem_classes='tab-item'):
                    gr.Markdown(open("pages/results-per-dataset.md", "r").read(), elem_classes='tab-item', container=True)
                    dataset_filter = gr.CheckboxGroup(choices=datasets, label="Select columns", value=datasets)
                    select_ds_metric = gr.Radio(metric, value='f1_macro', label="Select metric")
                    dataset_table = gr.Dataframe(show_row_numbers=True, pinned_columns=2)

                with gr.Tab("Results per Emotion", elem_classes='tab-item'):
                    gr.Markdown(open("pages/results-per-emotion.md", "r").read(), elem_classes='tab-item', container=True)
                    emo_filter = gr.CheckboxGroup(choices=emotions, label="Select columns", value=emotions)
                    emotion_table = gr.Dataframe(show_row_numbers=True, pinned_columns=2)

                df_state = gr.State()

                def update_leaderboards(languages=[], datasets=[], emotions=[], select_lang_metric="f1_macro", select_ds_metric="f1_macro"):
                    df = pd.read_json("results.jsonl", lines=True)
                    lang_dict = build_lang_dict(df)
                    ds_dict = build_ds_dict(df)
                    emo_dict = build_emo_dict(df)
                    overall = overall_leaderboard(df)
                    by_lang = leaderboard_per_group(lang_dict, languages, metric=select_lang_metric)
                    by_dataset = leaderboard_per_group(ds_dict, datasets, metric=select_ds_metric)
                    by_emotion = leaderboard_per_group(emo_dict, emotions)
                    return overall, by_lang, by_dataset, by_emotion, "Loaded successfully."

                demo.load(
                    update_leaderboards,
                    inputs=[languages_filter, dataset_filter, emo_filter],
                    outputs=[overall_table, lang_table, dataset_table, emotion_table, df_state]
                )

                def on_change(selected_languages, selected_lang_metric, selected_datasets, selected_ds_metric, selected_emotions):
                    return update_leaderboards(languages=selected_languages, select_lang_metric=selected_lang_metric, datasets=selected_datasets, select_ds_metric=selected_ds_metric, emotions=selected_emotions)

                languages_filter.change(on_change, [languages_filter, select_lang_metric, dataset_filter, select_ds_metric, emo_filter],
                                       [overall_table, lang_table, dataset_table, emotion_table])

                select_lang_metric.change(on_change, [languages_filter, select_lang_metric, dataset_filter, select_ds_metric, emo_filter],
                                       [overall_table, lang_table, dataset_table, emotion_table])

                dataset_filter.change(on_change, [languages_filter, select_lang_metric, dataset_filter, select_ds_metric, emo_filter],
                                       [overall_table, lang_table, dataset_table, emotion_table])

                select_ds_metric.change(on_change, [languages_filter, select_lang_metric, dataset_filter, select_ds_metric, emo_filter],
                                          [overall_table, lang_table, dataset_table, emotion_table])

                emo_filter.change(on_change, [languages_filter, select_lang_metric, dataset_filter, select_ds_metric, emo_filter],
                                       [overall_table, lang_table, dataset_table, emotion_table])
            
            with gr.Tab("πŸ“ About", elem_classes='tab-item'):
                gr.Markdown(open("pages/about.md", "r").read(), elem_classes='tab-item')

            with gr.Tab("πŸ”’ Evaluate your model", elem_classes='tab-item'):
                gr.Markdown(open("pages/evaluate.md", "r").read(), elem_classes='tab-item')
            
            with gr.Tab("πŸ“¬ Submit here!", elem_classes='tab-item'):
                gr.Markdown(open("pages/submit.md", "r").read(), elem_classes='tab-item')
        
        with gr.Column():
            with gr.Accordion("πŸ“™ Citation", open=False, elem_classes='tab-item'):
                citation_button = gr.Textbox(
                    label="",
                    value=CITATION_TEXT,
                    lines=20,
                    elem_id="citation-button",
                    show_copy_button=True,
                )
    
    return demo

if __name__ == "__main__":
    demo = app()
    demo.launch()