Spaces:
Running
Running
Commit
·
df32536
1
Parent(s):
2eb4ae2
initial commit
Browse files- README.md +1 -1
- app.py +91 -0
- content.py +37 -0
- leaderboard_data.csv +22 -0
- utils.py +70 -0
README.md
CHANGED
@@ -4,7 +4,7 @@ emoji: 🏆
|
|
4 |
colorFrom: blue
|
5 |
colorTo: purple
|
6 |
sdk: gradio
|
7 |
-
sdk_version:
|
8 |
app_file: app.py
|
9 |
pinned: false
|
10 |
license: apache-2.0
|
|
|
4 |
colorFrom: blue
|
5 |
colorTo: purple
|
6 |
sdk: gradio
|
7 |
+
sdk_version: 4.44.1
|
8 |
app_file: app.py
|
9 |
pinned: false
|
10 |
license: apache-2.0
|
app.py
ADDED
@@ -0,0 +1,91 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
|
3 |
+
from utils import *
|
4 |
+
from content import *
|
5 |
+
|
6 |
+
head_style = """
|
7 |
+
<style>
|
8 |
+
@media (min-width: 1536px)
|
9 |
+
{
|
10 |
+
.gradio-container {
|
11 |
+
min-width: var(--size-full) !important;
|
12 |
+
}
|
13 |
+
}
|
14 |
+
</style>
|
15 |
+
"""
|
16 |
+
|
17 |
+
with gr.Blocks(title='KOBench Leaderboard', head=head_style) as demo:
|
18 |
+
gr.Markdown(intro_md)
|
19 |
+
|
20 |
+
with gr.Tabs(elem_classes='tab-buttons') as tabs:
|
21 |
+
with gr.TabItem('Main Leaderboard', elem_id='main', id=0):
|
22 |
+
table, type_map = build_df()
|
23 |
+
headers = [coln for coln in table.columns if not coln.startswith('_')]
|
24 |
+
datatypes = [type_map[x] for x in headers]
|
25 |
+
|
26 |
+
with gr.Row():
|
27 |
+
model_name = gr.Textbox(
|
28 |
+
value=search_default_val,
|
29 |
+
label='Model Name',
|
30 |
+
interactive=True,
|
31 |
+
visible=True,
|
32 |
+
)
|
33 |
+
model_size = gr.CheckboxGroup(
|
34 |
+
choices=MODEL_SIZE,
|
35 |
+
value=MODEL_SIZE,
|
36 |
+
label='Model Size',
|
37 |
+
interactive=True,
|
38 |
+
)
|
39 |
+
model_type = gr.CheckboxGroup(
|
40 |
+
choices=MODEL_TYPE,
|
41 |
+
value=MODEL_TYPE,
|
42 |
+
label='Model Type',
|
43 |
+
interactive=True,
|
44 |
+
)
|
45 |
+
data_component = gr.components.DataFrame(
|
46 |
+
value=table[headers],
|
47 |
+
type='pandas',
|
48 |
+
datatype=datatypes,
|
49 |
+
interactive=False,
|
50 |
+
wrap=True,
|
51 |
+
visible=True,
|
52 |
+
)
|
53 |
+
|
54 |
+
def filter_df(model_name, model_size, model_type):
|
55 |
+
df = table.copy(deep=True)
|
56 |
+
df['_vis'] = [model_size_flag(x, model_size) for x in df['_parameters']]
|
57 |
+
df['_vis'] &= pd.Series([model_type_flag(df.iloc[i], model_type) for i in range(len(df))])
|
58 |
+
if model_name != search_default_val:
|
59 |
+
model_name_lower = model_name.lower()
|
60 |
+
df['_vis'] &= pd.Series([(model_name_lower in name.lower()) for name in df['_name'].tolist()])
|
61 |
+
df = df[df['_vis']]
|
62 |
+
|
63 |
+
df['Rank'] = list(range(1, len(df)+1))
|
64 |
+
|
65 |
+
ret = gr.components.DataFrame(
|
66 |
+
value=df[headers],
|
67 |
+
type='pandas',
|
68 |
+
datatype=datatypes,
|
69 |
+
interactive=False,
|
70 |
+
wrap=True,
|
71 |
+
visible=True,
|
72 |
+
)
|
73 |
+
return ret
|
74 |
+
|
75 |
+
model_name.submit(filter_df, [model_name, model_size, model_type], data_component)
|
76 |
+
model_size.change(filter_df, [model_name, model_size, model_type], data_component)
|
77 |
+
model_type.change(filter_df, [model_name, model_size, model_type], data_component)
|
78 |
+
|
79 |
+
with gr.TabItem('About', elem_id='about', id=1):
|
80 |
+
gr.Markdown(about_md)
|
81 |
+
|
82 |
+
with gr.TabItem('Submit your model', elem_id='submit', id=2):
|
83 |
+
gr.Markdown(submit_md)
|
84 |
+
|
85 |
+
with gr.Row():
|
86 |
+
with gr.Accordion('Citation', open=False):
|
87 |
+
gr.Markdown(citation_md)
|
88 |
+
|
89 |
+
|
90 |
+
if __name__=="__main__":
|
91 |
+
demo.launch()
|
content.py
ADDED
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
benchname = 'KOBench'
|
2 |
+
|
3 |
+
intro_md = f'''
|
4 |
+
|
5 |
+
# {benchname} 리더보드
|
6 |
+
|
7 |
+
이 페이지에서는 {benchname} 벤치마크로 측정한 VLM들의 한국어 성능을 보실 수 있습니다.
|
8 |
+
|
9 |
+
이 페이지는 지속적으로 업데이트할 계획이며, 리더보드에 추가할 모델 요청을 받고 있습니다. 자세한 정보는 "Submit" 탭을 확인해 주세요.
|
10 |
+
|
11 |
+
'''.strip()
|
12 |
+
|
13 |
+
about_md = f'''
|
14 |
+
|
15 |
+
# About
|
16 |
+
|
17 |
+
{benchname} 벤치마크는 한국어 사용 환경에서 VLM의 다방면 성능을 측정하고 비교하기 위한 벤치마크입니다. 이 벤치마크는 10개 task에서의 총 275개의 한국어 질문이 있으며, 객관적 정답이 있지만 형식의 제한은 없는 서술형 문항으로 구성되어 있습니다.
|
18 |
+
|
19 |
+
## News
|
20 |
+
|
21 |
+
* **2024-12-06**: 릴리즈
|
22 |
+
|
23 |
+
'''.strip()
|
24 |
+
|
25 |
+
submit_md = f'''
|
26 |
+
|
27 |
+
# Submit (coming soon)
|
28 |
+
|
29 |
+
아직은 모델 추가 요청을 받고 있지 않습니다. 요청 시스템이 마련되면 요청을 받기 시작할 예정입니다.
|
30 |
+
|
31 |
+
'''.strip()
|
32 |
+
|
33 |
+
citation_md = f'''
|
34 |
+
|
35 |
+
TODO: citation
|
36 |
+
|
37 |
+
'''.strip()
|
leaderboard_data.csv
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
name,eval_date,num_params,clickable,hf_path,SCORE overall,SCORE object attributes,SCORE recognition,SCORE recognition-KO,SCORE relationship,SCORE KO-OCR,SCORE commonsense reasoning,SCORE document understanding,SCORE table understanding,SCORE graph and chart understanding,SCORE hallucination and robustness
|
2 |
+
gemini-1.5-flash-002,2024-12-05,,False,,73.81818181818181,74.5,90.0,50.0,68.0,72.5,78.22222222222221,89.33333333333334,83.33333333333334,61.333333333333336,40.0
|
3 |
+
claude-3-5-sonnet-20241022,2024-12-05,,False,,80.47272727272727,81.83333333333334,90.0,80.0,66.0,76.5,88.88888888888889,78.0,73.66666666666666,88.66666666666667,80.0
|
4 |
+
Molmo-7B-D-0924,2024-12-05,8021025280.0,True,allenai/Molmo-7B-D-0924,45.52727272727273,69.16666666666667,55.0,0.0,55.33333333333333,5.0,77.77777777777777,18.666666666666668,16.0,30.666666666666668,60.0
|
5 |
+
Ovis1.6-Gemma2-9B,2024-12-05,10206910518.0,True,AIDC-AI/Ovis1.6-Gemma2-9B,53.018181818181816,83.16666666666666,75.0,0.0,56.333333333333336,10.0,82.8888888888889,23.0,19.0,43.33333333333333,66.0
|
6 |
+
gpt-4o-2024-08-06,2024-12-05,,False,,77.6,77.5,80.0,90.0,64.66666666666667,80.0,87.55555555555557,77.0,82.0,68.0,70.0
|
7 |
+
gemini-1.5-flash-8b-001,2024-12-05,,False,,62.21818181818182,68.66666666666666,50.0,15.0,46.66666666666667,35.0,82.44444444444443,91.33333333333331,54.66666666666667,53.33333333333333,55.0
|
8 |
+
llava-onevision-qwen2-7b-ov,2024-12-05,8027359776.0,True,lmms-lab/llava-onevision-qwen2-7b-ov,43.78181818181818,63.66666666666666,45.0,15.0,58.66666666666666,5.0,67.77777777777777,23.0,6.666666666666666,30.666666666666668,90.0
|
9 |
+
VARCO-VISION-14B,2024-12-05,15195926048.0,True,NCSOFT/VARCO-VISION-14B,66.69090909090909,80.0,45.0,10.0,58.0,85.0,70.66666666666666,48.33333333333333,74.0,63.33333333333333,80.0
|
10 |
+
gpt-4o-2024-11-20,2024-12-05,,False,,81.96363636363637,78.33333333333333,90.0,85.0,80.0,91.5,85.55555555555556,86.66666666666666,82.33333333333333,74.66666666666667,70.0
|
11 |
+
gpt-4o-mini-2024-07-18,2024-12-05,,False,,68.2909090909091,71.33333333333334,80.0,35.0,66.33333333333334,100.0,77.77777777777777,63.0,47.66666666666666,61.333333333333336,70.0
|
12 |
+
Ovis1.6-Gemma2-27B,2024-12-05,28863552566.0,True,AIDC-AI/Ovis1.6-Gemma2-27B,53.92727272727272,86.16666666666667,80.0,0.0,61.333333333333336,5.0,78.0,32.333333333333336,11.333333333333332,46.66666666666667,70.0
|
13 |
+
MiniCPM-V-2_6,2024-12-05,8099175152.0,True,openbmb/MiniCPM-V-2_6,32.69090909090909,56.0,35.0,0.0,33.666666666666664,5.0,59.77777777777778,20.666666666666668,5.333333333333333,16.666666666666668,20.0
|
14 |
+
gemini-1.5-pro-002,2024-12-05,,False,,77.23636363636363,71.33333333333334,90.0,60.0,69.33333333333334,62.5,83.33333333333334,94.66666666666669,80.0,84.66666666666667,60.0
|
15 |
+
internlm-xcomposer2d5-7b,2024-12-05,11095734272.0,True,internlm/internlm-xcomposer2d5-7b,41.6,67.83333333333333,35.0,0.0,53.0,5.0,66.0,21.33333333333333,8.666666666666668,35.33333333333333,40.0
|
16 |
+
Qwen2-VL-7B-Instruct,2024-12-05,8291375616.0,True,Qwen/Qwen2-VL-7B-Instruct,63.52727272727272,73.16666666666666,50.0,40.0,56.0,75.0,74.88888888888889,64.33333333333334,50.0,53.33333333333333,60.0
|
17 |
+
Pixtral-12B-2409,2024-12-05,12682739712.0,False,,44.61818181818182,61.66666666666667,65.0,10.0,45.66666666666666,10.0,65.11111111111111,17.666666666666664,23.666666666666668,56.0,40.0
|
18 |
+
gpt-4-turbo-2024-04-09,2024-12-05,,False,,65.19999999999999,76.66666666666667,90.0,60.0,76.33333333333334,30.0,80.0,47.333333333333336,39.33333333333333,64.66666666666667,80.0
|
19 |
+
Llama-3.2-11B-Vision-Instruct,2024-12-05,10670220835.0,True,meta-llama/Llama-3.2-11B-Vision-Instruct,50.36363636363636,55.5,80.0,25.0,62.0,62.5,58.66666666666666,36.0,24.666666666666668,46.66666666666667,50.0
|
20 |
+
claude-3-haiku-20240307,2024-12-05,,False,,50.47272727272727,59.833333333333336,70.0,0.0,57.333333333333336,50.0,73.55555555555556,26.666666666666664,25.33333333333333,46.66666666666667,60.0
|
21 |
+
InternVL2-8B,2024-12-05,8075365376.0,True,OpenGVLab/InternVL2-8B,32.763636363636365,49.66666666666667,30.0,0.0,36.0,5.0,38.44444444444444,24.666666666666668,16.333333333333332,31.0,66.0
|
22 |
+
Qwen2-VL-72B-Instruct,2024-12-05,73405560320.0,True,Qwen/Qwen2-VL-72B-Instruct,74.76363636363637,86.66666666666666,80.0,45.0,62.66666666666666,75.0,83.11111111111111,64.0,84.33333333333334,61.333333333333336,70.0
|
utils.py
ADDED
@@ -0,0 +1,70 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import pandas as pd
|
2 |
+
|
3 |
+
MODEL_SIZE = ['<4B', '4B-10B', '10B-20B', '20B-40B', '>40B', 'Unknown']
|
4 |
+
MODEL_TYPE = ['API', 'Open Source']
|
5 |
+
search_default_val = 'Model name search (fuzzy, case insensitive)'
|
6 |
+
|
7 |
+
data_filepath = 'leaderboard_data.csv'
|
8 |
+
|
9 |
+
def build_df():
|
10 |
+
raw_df = pd.read_csv(data_filepath)
|
11 |
+
df = pd.DataFrame()
|
12 |
+
df['_name'] = raw_df['name']
|
13 |
+
|
14 |
+
names_html = []
|
15 |
+
for _, row in raw_df.iterrows():
|
16 |
+
name = row['name']
|
17 |
+
if row['clickable']:
|
18 |
+
hfp = row['hf_path']
|
19 |
+
names_html.append(f'<a href="https://huggingface.co/{hfp}">{name}</a>')
|
20 |
+
else:
|
21 |
+
names_html.append(name)
|
22 |
+
df['Name'] = names_html
|
23 |
+
|
24 |
+
df['Eval Date'] = raw_df['eval_date']
|
25 |
+
df['Parameters (B)'] = [round(params / 1e9, 1) for params in raw_df['num_params']]
|
26 |
+
df['_parameters'] = raw_df['num_params']
|
27 |
+
|
28 |
+
type_map = {
|
29 |
+
'Rank': 'number',
|
30 |
+
'Name': 'html',
|
31 |
+
'Eval Date': 'html',
|
32 |
+
'Parameters (B)': 'number',
|
33 |
+
}
|
34 |
+
|
35 |
+
for coln in raw_df.columns:
|
36 |
+
if coln.startswith('SCORE '):
|
37 |
+
df[coln[6:]] = raw_df[coln].round(2)
|
38 |
+
type_map[coln[6:]] = 'number'
|
39 |
+
|
40 |
+
df.sort_values('overall', ascending=False, inplace=True)
|
41 |
+
df.reset_index(drop=True, inplace=True)
|
42 |
+
df.insert(0, 'Rank', list(range(1, len(df)+1)))
|
43 |
+
|
44 |
+
return df, type_map
|
45 |
+
|
46 |
+
|
47 |
+
def model_size_flag(sz, FIELDS):
|
48 |
+
if pd.isna(sz) and 'Unknown' in FIELDS:
|
49 |
+
return True
|
50 |
+
if pd.isna(sz):
|
51 |
+
return False
|
52 |
+
if '<4B' in FIELDS and sz < 4e9:
|
53 |
+
return True
|
54 |
+
if '4B-10B' in FIELDS and sz >= 4e9 and sz < 1e10:
|
55 |
+
return True
|
56 |
+
if '10B-20B' in FIELDS and sz >= 1e10 and sz < 2e10:
|
57 |
+
return True
|
58 |
+
if '20B-40B' in FIELDS and sz >= 2e10 and sz < 4e10:
|
59 |
+
return True
|
60 |
+
if '>40B' in FIELDS and sz >= 4e10:
|
61 |
+
return True
|
62 |
+
return False
|
63 |
+
|
64 |
+
|
65 |
+
def model_type_flag(line, FIELDS):
|
66 |
+
if 'Open Source' in FIELDS and not pd.isna(line['_parameters']):
|
67 |
+
return True
|
68 |
+
if 'API' in FIELDS and pd.isna(line['_parameters']):
|
69 |
+
return True
|
70 |
+
return False
|