yoonshik1205 commited on
Commit
df32536
·
1 Parent(s): 2eb4ae2

initial commit

Browse files
Files changed (5) hide show
  1. README.md +1 -1
  2. app.py +91 -0
  3. content.py +37 -0
  4. leaderboard_data.csv +22 -0
  5. utils.py +70 -0
README.md CHANGED
@@ -4,7 +4,7 @@ emoji: 🏆
4
  colorFrom: blue
5
  colorTo: purple
6
  sdk: gradio
7
- sdk_version: 5.8.0
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