Spaces:
Running
Running
| from pathlib import Path | |
| from apscheduler.schedulers.background import BackgroundScheduler | |
| import pandas as pd | |
| import gradio as gr | |
| from gradio_leaderboard import Leaderboard, ColumnFilter | |
| from constants import Constants, model_type_emoji | |
| TITLE = """<h1 align="center" id="space-title">TabArena: Public leaderboard for Tabular methods</h1>""" | |
| INTRODUCTION_TEXT = ("TabArena Leaderboard measures the performance of tabular models on a collection of tabular " | |
| "datasets manually curated. The datasets are collected to make sure they are tabular, with " | |
| "permissive license without ethical issues and so on, we refer to the paper for a full " | |
| "description of our approach.") | |
| ABOUT_TEXT = f""" | |
| ## How It Works. | |
| To evaluate the leaderboard, follow install instructions in | |
| `https://github.com/autogluon/tabrepo/tree/tabarena` and run | |
| `https://github.com/autogluon/tabrepo/blob/tabarena/examples/tabarena/run_tabarena_eval.py`. | |
| This will generate a leaderboard. You can add your own method and contact the authors if you want it to be added | |
| to the leaderboard. We require method to have public code available to be considered in the leaderboard. | |
| """ | |
| CITATION_BUTTON_LABEL = "If you use this leaderboard in your research please cite the following:" | |
| CITATION_BUTTON_TEXT = r""" | |
| @article{ | |
| TBA, | |
| } | |
| """ | |
| def get_model_family(model_name: str) -> str: | |
| prefixes_mapping = { | |
| Constants.automl: ["AutoGluon"], | |
| Constants.finetuned: ["REALMLP", "TabM", "FASTAI", "MNCA", "NN_TORCH"], | |
| Constants.tree: ["GBM", "CAT", "EBM", "XGB"], | |
| Constants.foundational: ["TABDPT", "TABICL", "TABPFN"], | |
| Constants.baseline: ["KNN", "LR"] | |
| } | |
| for method_type, prefixes in prefixes_mapping.items(): | |
| for prefix in prefixes: | |
| if prefix.lower() in model_name.lower(): | |
| return method_type | |
| return Constants.other | |
| def load_data(filename: str): | |
| df_leaderboard = pd.read_csv(Path(__file__).parent / "data" / f"{filename}.csv.zip") | |
| print(f"Loaded dataframe with {len(df_leaderboard)} rows and columns {df_leaderboard.columns}") | |
| # sort by ELO | |
| df_leaderboard.sort_values(by="elo", ascending=False, inplace=True) | |
| # add model family information | |
| df_leaderboard["family"] = df_leaderboard.loc[:, "method"].apply( | |
| lambda s: get_model_family(s) + " " + model_type_emoji[get_model_family(s)] | |
| ) | |
| # select only the columns we want to display | |
| df_leaderboard = df_leaderboard.loc[:, ["method", "family", "time_train_s", "time_infer_s", "rank", "elo"]] | |
| # round for better display | |
| df_leaderboard = df_leaderboard.round(1) | |
| # rename some columns | |
| df_leaderboard.rename(columns={ | |
| "time_train_s": "training time (s)", | |
| "time_infer_s": "inference time (s)", | |
| }, inplace=True) | |
| # TODO show ELO +/- sem | |
| return df_leaderboard | |
| def make_leaderboard(df_leaderboard: pd.DataFrame) -> Leaderboard: | |
| return Leaderboard( | |
| value=df_leaderboard, | |
| search_columns=["method"], | |
| filter_columns=[ | |
| # "method", | |
| ColumnFilter("family", type="dropdown", label="Filter by family"), | |
| ] | |
| ) | |
| def main(): | |
| demo = gr.Blocks() | |
| with demo: | |
| gr.HTML(TITLE) | |
| gr.Markdown(INTRODUCTION_TEXT, elem_classes="markdown-text") | |
| with gr.Tabs(elem_classes="tab-buttons") as tabs: | |
| with gr.TabItem('π Overall', elem_id="llm-benchmark-tab-table", id=2): | |
| df_leaderboard = load_data("leaderboard-all") | |
| leaderboard = make_leaderboard(df_leaderboard) | |
| with gr.TabItem('π Regression', elem_id="llm-benchmark-tab-table", id=0): | |
| df_leaderboard = load_data("leaderboard-regression") | |
| leaderboard = make_leaderboard(df_leaderboard) | |
| with gr.TabItem('π Classification', elem_id="llm-benchmark-tab-table", id=1): | |
| df_leaderboard = load_data("leaderboard-classification") | |
| leaderboard = make_leaderboard(df_leaderboard) | |
| with gr.TabItem("π About", elem_id="llm-benchmark-tab-table", id=4): | |
| gr.Markdown(ABOUT_TEXT, elem_classes="markdown-text") | |
| with gr.Row(): | |
| with gr.Accordion("π Citation", open=False): | |
| citation_button = gr.Textbox( | |
| value=CITATION_BUTTON_TEXT, | |
| label=CITATION_BUTTON_LABEL, | |
| lines=20, | |
| elem_id="citation-button", | |
| show_copy_button=True, | |
| ) | |
| scheduler = BackgroundScheduler() | |
| # scheduler.add_job(restart_space, "interval", seconds=1800) | |
| scheduler.start() | |
| demo.queue(default_concurrency_limit=40).launch() | |
| demo.launch() | |
| if __name__ == "__main__": | |
| main() | |