Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
Commit
·
7b90636
1
Parent(s):
fbd0e7d
Add reranking functionality and update data loading methods for improved leaderboard display
Browse files- app.py +46 -33
- results/reranking_results.json +110 -0
- utils.py +29 -8
app.py
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
import gradio as gr
|
2 |
-
from utils import submit_gradio_module, load_retrieval_results
|
3 |
from fuzzywuzzy import fuzz
|
4 |
|
5 |
HEADER = """<div style="text-align: center; margin-bottom: 20px;">
|
@@ -41,42 +41,42 @@ CITATION_BUTTON_TEXT = """
|
|
41 |
"""
|
42 |
|
43 |
retrieval_df = None
|
44 |
-
|
45 |
|
46 |
-
def search_leaderboard(model_name, columns_to_show):
|
47 |
if len(model_name.strip()) == 0:
|
48 |
-
return
|
49 |
|
50 |
-
threshold = 95 # You can adjust this value to make the search more or less strict
|
51 |
-
filtered_df = retrieval_df.copy()
|
52 |
-
|
53 |
def calculate_similarity(row):
|
54 |
similarity = fuzz.partial_ratio(model_name.lower(), row["Model"].lower())
|
55 |
return similarity if similarity >= threshold else 0
|
56 |
|
57 |
-
|
58 |
filtered_df["similarity"] = filtered_df.apply(calculate_similarity, axis=1)
|
59 |
-
|
60 |
-
# Filter and sort the dataframe
|
61 |
filtered_df = filtered_df[filtered_df["similarity"] > 0].sort_values('similarity', ascending=False)
|
62 |
-
|
63 |
-
# Remove the similarity column before returning
|
64 |
filtered_df = filtered_df.drop('similarity', axis=1)
|
65 |
-
|
66 |
-
# Filter the columns to show
|
67 |
filtered_df = filtered_df.loc[:, columns_to_show]
|
68 |
|
69 |
return filtered_df
|
70 |
|
|
|
|
|
|
|
|
|
|
|
|
|
71 |
|
72 |
def main():
|
73 |
-
global retrieval_df,
|
74 |
-
|
75 |
-
|
76 |
-
retrieval_df
|
77 |
-
|
|
|
|
|
|
|
|
|
78 |
|
79 |
-
columns_to_show = ["Model", "Web Search Dataset (Overall Score)", "Model Size (in Millions)", "Embedding Dimension", "Max Tokens", "Num Likes"]
|
80 |
with gr.Blocks() as demo:
|
81 |
gr.HTML(HEADER)
|
82 |
|
@@ -90,15 +90,15 @@ def main():
|
|
90 |
label="Search",
|
91 |
scale=5
|
92 |
)
|
93 |
-
|
94 |
label="Columns to Show",
|
95 |
choices=retrieval_df.columns.tolist(),
|
96 |
-
value=
|
97 |
scale=4
|
98 |
)
|
99 |
|
100 |
retrieval_leaderboard = gr.Dataframe(
|
101 |
-
value=retrieval_df[
|
102 |
datatype="markdown",
|
103 |
wrap=True,
|
104 |
show_fullscreen_button=True,
|
@@ -107,13 +107,13 @@ def main():
|
|
107 |
|
108 |
# Submit the search box and the leaderboard
|
109 |
search_box_retrieval.input(
|
110 |
-
|
111 |
-
inputs=[search_box_retrieval,
|
112 |
outputs=retrieval_leaderboard
|
113 |
)
|
114 |
-
|
115 |
lambda columns: retrieval_df.loc[:, columns],
|
116 |
-
inputs=
|
117 |
outputs=retrieval_leaderboard
|
118 |
)
|
119 |
|
@@ -126,23 +126,36 @@ def main():
|
|
126 |
with gr.Tab("📊 Reranking"):
|
127 |
with gr.Tabs():
|
128 |
with gr.Tab("👑 Leaderboard"):
|
129 |
-
|
|
|
130 |
placeholder="Search for models...",
|
131 |
label="Search",
|
132 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
133 |
)
|
134 |
|
135 |
reranker_leaderboard = gr.Dataframe(
|
136 |
-
value=
|
137 |
datatype="markdown",
|
138 |
wrap=True,
|
139 |
show_fullscreen_button=True,
|
140 |
interactive=False
|
141 |
)
|
142 |
|
143 |
-
|
144 |
-
|
145 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
146 |
outputs=reranker_leaderboard
|
147 |
)
|
148 |
|
|
|
1 |
import gradio as gr
|
2 |
+
from utils import submit_gradio_module, load_retrieval_results, load_reranking_results
|
3 |
from fuzzywuzzy import fuzz
|
4 |
|
5 |
HEADER = """<div style="text-align: center; margin-bottom: 20px;">
|
|
|
41 |
"""
|
42 |
|
43 |
retrieval_df = None
|
44 |
+
reranking_df = None
|
45 |
|
46 |
+
def search_leaderboard(df, model_name, columns_to_show, threshold=95):
|
47 |
if len(model_name.strip()) == 0:
|
48 |
+
return df.loc[:, columns_to_show]
|
49 |
|
|
|
|
|
|
|
50 |
def calculate_similarity(row):
|
51 |
similarity = fuzz.partial_ratio(model_name.lower(), row["Model"].lower())
|
52 |
return similarity if similarity >= threshold else 0
|
53 |
|
54 |
+
filtered_df = df.copy()
|
55 |
filtered_df["similarity"] = filtered_df.apply(calculate_similarity, axis=1)
|
|
|
|
|
56 |
filtered_df = filtered_df[filtered_df["similarity"] > 0].sort_values('similarity', ascending=False)
|
|
|
|
|
57 |
filtered_df = filtered_df.drop('similarity', axis=1)
|
|
|
|
|
58 |
filtered_df = filtered_df.loc[:, columns_to_show]
|
59 |
|
60 |
return filtered_df
|
61 |
|
62 |
+
def retrieval_search_leaderboard(model_name, columns_to_show):
|
63 |
+
return search_leaderboard(retrieval_df, model_name, columns_to_show)
|
64 |
+
|
65 |
+
def reranking_search_leaderboard(model_name, columns_to_show):
|
66 |
+
return search_leaderboard(reranking_df, model_name, columns_to_show)
|
67 |
+
|
68 |
|
69 |
def main():
|
70 |
+
global retrieval_df, reranking_df
|
71 |
+
|
72 |
+
# Prepare retrieval dataframe
|
73 |
+
retrieval_df = load_retrieval_results(prepare_for_display=True)
|
74 |
+
retrieval_columns_to_show = ["Model", "Web Search Dataset (Overall Score)", "Model Size (in Millions)", "Embedding Dimension", "Max Tokens", "Num Likes"]
|
75 |
+
|
76 |
+
# Prepare reranking dataframe
|
77 |
+
reranking_df = load_reranking_results(prepare_for_display=True)
|
78 |
+
reranking_columns_to_show = reranking_df.columns.tolist()
|
79 |
|
|
|
80 |
with gr.Blocks() as demo:
|
81 |
gr.HTML(HEADER)
|
82 |
|
|
|
90 |
label="Search",
|
91 |
scale=5
|
92 |
)
|
93 |
+
retrieval_columns_to_show_input = gr.CheckboxGroup(
|
94 |
label="Columns to Show",
|
95 |
choices=retrieval_df.columns.tolist(),
|
96 |
+
value=retrieval_columns_to_show,
|
97 |
scale=4
|
98 |
)
|
99 |
|
100 |
retrieval_leaderboard = gr.Dataframe(
|
101 |
+
value=retrieval_df[retrieval_columns_to_show],
|
102 |
datatype="markdown",
|
103 |
wrap=True,
|
104 |
show_fullscreen_button=True,
|
|
|
107 |
|
108 |
# Submit the search box and the leaderboard
|
109 |
search_box_retrieval.input(
|
110 |
+
retrieval_search_leaderboard,
|
111 |
+
inputs=[search_box_retrieval, retrieval_columns_to_show_input],
|
112 |
outputs=retrieval_leaderboard
|
113 |
)
|
114 |
+
retrieval_columns_to_show_input.select(
|
115 |
lambda columns: retrieval_df.loc[:, columns],
|
116 |
+
inputs=retrieval_columns_to_show_input,
|
117 |
outputs=retrieval_leaderboard
|
118 |
)
|
119 |
|
|
|
126 |
with gr.Tab("📊 Reranking"):
|
127 |
with gr.Tabs():
|
128 |
with gr.Tab("👑 Leaderboard"):
|
129 |
+
with gr.Row():
|
130 |
+
search_box_reranker = gr.Textbox(
|
131 |
placeholder="Search for models...",
|
132 |
label="Search",
|
133 |
+
scale=5
|
134 |
+
)
|
135 |
+
reranking_columns_to_show_input = gr.CheckboxGroup(
|
136 |
+
label="Columns to Show",
|
137 |
+
choices=reranking_df.columns.tolist(),
|
138 |
+
value=reranking_columns_to_show,
|
139 |
+
scale=4
|
140 |
)
|
141 |
|
142 |
reranker_leaderboard = gr.Dataframe(
|
143 |
+
value=reranking_df[reranking_columns_to_show],
|
144 |
datatype="markdown",
|
145 |
wrap=True,
|
146 |
show_fullscreen_button=True,
|
147 |
interactive=False
|
148 |
)
|
149 |
|
150 |
+
# Submit the search box and the leaderboard
|
151 |
+
search_box_reranker.input(
|
152 |
+
reranking_search_leaderboard,
|
153 |
+
inputs=[search_box_reranker, reranking_columns_to_show_input],
|
154 |
+
outputs=reranker_leaderboard
|
155 |
+
)
|
156 |
+
reranking_columns_to_show_input.select(
|
157 |
+
lambda columns: reranking_df.loc[:, columns],
|
158 |
+
inputs=reranking_columns_to_show_input,
|
159 |
outputs=reranker_leaderboard
|
160 |
)
|
161 |
|
results/reranking_results.json
ADDED
@@ -0,0 +1,110 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
[
|
2 |
+
{
|
3 |
+
"Model":"BAAI\/bge-reranker-v2-m3",
|
4 |
+
"Overall Score":85.4,
|
5 |
+
"Model Size (in Millions)":568.0,
|
6 |
+
"Downloads Last Month (Jan-Feb)":889663,
|
7 |
+
"MRR@10":79.41,
|
8 |
+
"NDCG@10":95.1,
|
9 |
+
"MAP":81.69
|
10 |
+
},
|
11 |
+
{
|
12 |
+
"Model":"NAMAA-Space\/Namaa-ARA-Reranker-V1",
|
13 |
+
"Overall Score":84.1,
|
14 |
+
"Model Size (in Millions)":568.0,
|
15 |
+
"Downloads Last Month (Jan-Feb)":118,
|
16 |
+
"MRR@10":76.48,
|
17 |
+
"NDCG@10":93.14,
|
18 |
+
"MAP":82.67
|
19 |
+
},
|
20 |
+
{
|
21 |
+
"Model":"NAMAA-Space\/GATE-Reranker-V1",
|
22 |
+
"Overall Score":76.81,
|
23 |
+
"Model Size (in Millions)":135.0,
|
24 |
+
"Downloads Last Month (Jan-Feb)":714,
|
25 |
+
"MRR@10":62.61,
|
26 |
+
"NDCG@10":89.7,
|
27 |
+
"MAP":78.11
|
28 |
+
},
|
29 |
+
{
|
30 |
+
"Model":"cross-encoder\/ms-marco-MiniLM-L-12-v2",
|
31 |
+
"Overall Score":60.54,
|
32 |
+
"Model Size (in Millions)":33.4,
|
33 |
+
"Downloads Last Month (Jan-Feb)":765472,
|
34 |
+
"MRR@10":41.69,
|
35 |
+
"NDCG@10":67.62,
|
36 |
+
"MAP":72.32
|
37 |
+
},
|
38 |
+
{
|
39 |
+
"Model":"Omartificial-Intelligence-Space\/Arabic-MiniLM-L12-v2-all-nli-triplet",
|
40 |
+
"Overall Score":58.17,
|
41 |
+
"Model Size (in Millions)":118.0,
|
42 |
+
"Downloads Last Month (Jan-Feb)":475,
|
43 |
+
"MRR@10":42.28,
|
44 |
+
"NDCG@10":75.63,
|
45 |
+
"MAP":56.59
|
46 |
+
},
|
47 |
+
{
|
48 |
+
"Model":"aubmindlab\/bert-base-arabert",
|
49 |
+
"Overall Score":56.69,
|
50 |
+
"Model Size (in Millions)":136.0,
|
51 |
+
"Downloads Last Month (Jan-Feb)":74132,
|
52 |
+
"MRR@10":40.16,
|
53 |
+
"NDCG@10":71.14,
|
54 |
+
"MAP":58.77
|
55 |
+
},
|
56 |
+
{
|
57 |
+
"Model":"OrdalieTech\/Solon-embeddings-large-0.1",
|
58 |
+
"Overall Score":54.73,
|
59 |
+
"Model Size (in Millions)":560.0,
|
60 |
+
"Downloads Last Month (Jan-Feb)":29994,
|
61 |
+
"MRR@10":32.59,
|
62 |
+
"NDCG@10":60.18,
|
63 |
+
"MAP":71.41
|
64 |
+
},
|
65 |
+
{
|
66 |
+
"Model":"intfloat\/multilingual-e5-large-instruct",
|
67 |
+
"Overall Score":53.39,
|
68 |
+
"Model Size (in Millions)":560.0,
|
69 |
+
"Downloads Last Month (Jan-Feb)":371648,
|
70 |
+
"MRR@10":48.35,
|
71 |
+
"NDCG@10":56.06,
|
72 |
+
"MAP":55.78
|
73 |
+
},
|
74 |
+
{
|
75 |
+
"Model":"Omartificial-Intelligence-Space\/Arabic-all-nli-triplet-Matryoshka",
|
76 |
+
"Overall Score":52.16,
|
77 |
+
"Model Size (in Millions)":135.0,
|
78 |
+
"Downloads Last Month (Jan-Feb)":1784,
|
79 |
+
"MRR@10":40.58,
|
80 |
+
"NDCG@10":54.7,
|
81 |
+
"MAP":61.2
|
82 |
+
},
|
83 |
+
{
|
84 |
+
"Model":"Snowflake\/snowflake-arctic-embed-l-v2.0",
|
85 |
+
"Overall Score":51.61,
|
86 |
+
"Model Size (in Millions)":568.0,
|
87 |
+
"Downloads Last Month (Jan-Feb)":83755,
|
88 |
+
"MRR@10":32.16,
|
89 |
+
"NDCG@10":58.63,
|
90 |
+
"MAP":64.05
|
91 |
+
},
|
92 |
+
{
|
93 |
+
"Model":"aubmindlab\/bert-large-arabertv2",
|
94 |
+
"Overall Score":50.84,
|
95 |
+
"Model Size (in Millions)":371.0,
|
96 |
+
"Downloads Last Month (Jan-Feb)":8939,
|
97 |
+
"MRR@10":27.84,
|
98 |
+
"NDCG@10":53.42,
|
99 |
+
"MAP":71.27
|
100 |
+
},
|
101 |
+
{
|
102 |
+
"Model":"Omartificial-Intelligence-Space\/Arabic-labse-Matryoshka",
|
103 |
+
"Overall Score":48.76,
|
104 |
+
"Model Size (in Millions)":471.0,
|
105 |
+
"Downloads Last Month (Jan-Feb)":460,
|
106 |
+
"MRR@10":32.71,
|
107 |
+
"NDCG@10":56.6,
|
108 |
+
"MAP":56.97
|
109 |
+
}
|
110 |
+
]
|
utils.py
CHANGED
@@ -10,17 +10,38 @@ api = HfApi()
|
|
10 |
OWNER = "Navid-AI"
|
11 |
DATASET_REPO_ID = f"{OWNER}/requests-dataset"
|
12 |
|
13 |
-
|
14 |
-
base_path = Path(__file__).parent
|
15 |
-
results_dir = base_path / "results"
|
16 |
|
17 |
-
|
18 |
-
|
19 |
-
|
|
|
|
|
20 |
else:
|
21 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
return df
|
23 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
24 |
def get_model_info(model_id, verbose=False):
|
25 |
model_info = api.model_info(model_id)
|
26 |
num_downloads = model_info.downloads
|
@@ -49,7 +70,7 @@ def submit_model(model_name, revision, precision, params, license, task):
|
|
49 |
if task == "Retriever":
|
50 |
df = load_retrieval_results()
|
51 |
elif task == "Reranker":
|
52 |
-
df =
|
53 |
else:
|
54 |
return gr.Error(f"Error: Task '{task}' is not supported.")
|
55 |
|
|
|
10 |
OWNER = "Navid-AI"
|
11 |
DATASET_REPO_ID = f"{OWNER}/requests-dataset"
|
12 |
|
13 |
+
results_dir = Path(__file__).parent / "results"
|
|
|
|
|
14 |
|
15 |
+
def load_retrieval_results(prepare_for_display=False):
|
16 |
+
# Load the retrieval results
|
17 |
+
dataframe_path = results_dir / "retrieval_results.json"
|
18 |
+
if dataframe_path.exists():
|
19 |
+
df = pd.read_json(dataframe_path)
|
20 |
else:
|
21 |
+
raise FileNotFoundError(f"File '{dataframe_path}' not found.")
|
22 |
+
|
23 |
+
if prepare_for_display:
|
24 |
+
df[["Model"]] = df[["Model"]].map(lambda x: f'<a href="https://huggingface.co/{x}" target="_blank">{x}</a>')
|
25 |
+
df.drop(columns=["Revision", "Precision", "Task"], inplace=True)
|
26 |
+
df.sort_values("Web Search Dataset (Overall Score)", ascending=False, inplace=True)
|
27 |
+
|
28 |
return df
|
29 |
|
30 |
+
def load_reranking_results(prepare_for_display=False):
|
31 |
+
# Load the reranking results
|
32 |
+
dataframe_path = results_dir / "reranking_results.json"
|
33 |
+
if dataframe_path.exists():
|
34 |
+
df = pd.read_json(dataframe_path)
|
35 |
+
else:
|
36 |
+
raise FileNotFoundError(f"File '{dataframe_path}' not found.")
|
37 |
+
|
38 |
+
if prepare_for_display:
|
39 |
+
df[["Model"]] = df[["Model"]].map(lambda x: f'<a href="https://huggingface.co/{x}" target="_blank">{x}</a>')
|
40 |
+
df.sort_values("Overall Score", ascending=False, inplace=True)
|
41 |
+
|
42 |
+
return df
|
43 |
+
|
44 |
+
|
45 |
def get_model_info(model_id, verbose=False):
|
46 |
model_info = api.model_info(model_id)
|
47 |
num_downloads = model_info.downloads
|
|
|
70 |
if task == "Retriever":
|
71 |
df = load_retrieval_results()
|
72 |
elif task == "Reranker":
|
73 |
+
df = load_reranking_results()
|
74 |
else:
|
75 |
return gr.Error(f"Error: Task '{task}' is not supported.")
|
76 |
|