MohamedRashad commited on
Commit
7b90636
·
1 Parent(s): fbd0e7d

Add reranking functionality and update data loading methods for improved leaderboard display

Browse files
Files changed (3) hide show
  1. app.py +46 -33
  2. results/reranking_results.json +110 -0
  3. 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
- original_columns_order = None
45
 
46
- def search_leaderboard(model_name, columns_to_show):
47
  if len(model_name.strip()) == 0:
48
- return retrieval_df.loc[:, columns_to_show]
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
- # Add a new column for similarity scores
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, original_columns_order
74
- retrieval_df = load_retrieval_results()
75
- retrieval_df[["Model"]] = retrieval_df[["Model"]].map(lambda x: f'<a href="https://huggingface.co/{x}" target="_blank">{x}</a>')
76
- retrieval_df.drop(columns=["Revision", "Precision", "Task"], inplace=True)
77
- retrieval_df.sort_values("Web Search Dataset (Overall Score)", ascending=False, inplace=True)
 
 
 
 
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
- columns_to_show_input = gr.CheckboxGroup(
94
  label="Columns to Show",
95
  choices=retrieval_df.columns.tolist(),
96
- value=columns_to_show,
97
  scale=4
98
  )
99
 
100
  retrieval_leaderboard = gr.Dataframe(
101
- value=retrieval_df[columns_to_show],
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
- search_leaderboard,
111
- inputs=[search_box_retrieval, columns_to_show_input],
112
  outputs=retrieval_leaderboard
113
  )
114
- columns_to_show_input.select(
115
  lambda columns: retrieval_df.loc[:, columns],
116
- inputs=columns_to_show_input,
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
- search_box_reranker = gr.Textbox(
 
130
  placeholder="Search for models...",
131
  label="Search",
132
- interactive=True
 
 
 
 
 
 
133
  )
134
 
135
  reranker_leaderboard = gr.Dataframe(
136
- value=retrieval_df[columns_to_show],
137
  datatype="markdown",
138
  wrap=True,
139
  show_fullscreen_button=True,
140
  interactive=False
141
  )
142
 
143
- search_box_reranker.submit(
144
- search_leaderboard,
145
- inputs=search_box_reranker,
 
 
 
 
 
 
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
- def load_retrieval_results():
14
- base_path = Path(__file__).parent
15
- results_dir = base_path / "results"
16
 
17
- retrieval_dataframe_path = results_dir / "retrieval_results.json"
18
- if not retrieval_dataframe_path.exists():
19
- df = pd.DataFrame(columns=["Model", "Revision", "Precision", "Task", "Model Size (in Millions)", "Embedding Dimension", "Max Tokens", "Num Likes", "Web Search Dataset (Overall Score)"])
 
 
20
  else:
21
- df = pd.read_json(retrieval_dataframe_path)
 
 
 
 
 
 
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 = load_retrieval_results()
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