saattrupdan
commited on
Commit
•
81fc601
1
Parent(s):
79f114e
fix: Ensure different colours, remove Faroese
Browse files
app.py
CHANGED
@@ -123,6 +123,7 @@ paper](https://aclanthology.org/2023.nodalida-1.20):
|
|
123 |
|
124 |
|
125 |
UPDATE_FREQUENCY_MINUTES = 30
|
|
|
126 |
|
127 |
|
128 |
class Task(BaseModel):
|
@@ -165,11 +166,11 @@ KNOWLEDGE = Task(name="knowledge", metric="mcc")
|
|
165 |
REASONING = Task(name="reasoning", metric="mcc")
|
166 |
ALL_TASKS = [obj for obj in globals().values() if isinstance(obj, Task)]
|
167 |
|
|
|
168 |
DANISH = Language(code="da", name="Danish")
|
169 |
NORWEGIAN = Language(code="no", name="Norwegian")
|
170 |
SWEDISH = Language(code="sv", name="Swedish")
|
171 |
ICELANDIC = Language(code="is", name="Icelandic")
|
172 |
-
FAROESE = Language(code="fo", name="Faroese")
|
173 |
GERMAN = Language(code="de", name="German")
|
174 |
DUTCH = Language(code="nl", name="Dutch")
|
175 |
ENGLISH = Language(code="en", name="English")
|
@@ -189,7 +190,6 @@ DATASETS = [
|
|
189 |
Dataset(name="norne-nb", language=NORWEGIAN, task=INFORMATION_EXTRACTION),
|
190 |
Dataset(name="norne-nn", language=NORWEGIAN, task=INFORMATION_EXTRACTION),
|
191 |
Dataset(name="mim-gold-ner", language=ICELANDIC, task=INFORMATION_EXTRACTION),
|
192 |
-
Dataset(name="fone", language=FAROESE, task=INFORMATION_EXTRACTION),
|
193 |
Dataset(name="germeval", language=GERMAN, task=INFORMATION_EXTRACTION),
|
194 |
Dataset(name="conll-nl", language=DUTCH, task=INFORMATION_EXTRACTION),
|
195 |
Dataset(name="conll-en", language=ENGLISH, task=INFORMATION_EXTRACTION),
|
@@ -198,7 +198,6 @@ DATASETS = [
|
|
198 |
Dataset(name="scala-nb", language=NORWEGIAN, task=GRAMMAR),
|
199 |
Dataset(name="scala-nn", language=NORWEGIAN, task=GRAMMAR),
|
200 |
Dataset(name="scala-is", language=ICELANDIC, task=GRAMMAR),
|
201 |
-
Dataset(name="scala-fo", language=FAROESE, task=GRAMMAR),
|
202 |
Dataset(name="scala-de", language=GERMAN, task=GRAMMAR),
|
203 |
Dataset(name="scala-nl", language=DUTCH, task=GRAMMAR),
|
204 |
Dataset(name="scala-en", language=ENGLISH, task=GRAMMAR),
|
@@ -247,13 +246,48 @@ def main() -> None:
|
|
247 |
results_dfs = fetch_results()
|
248 |
last_fetch = dt.datetime.now()
|
249 |
|
250 |
-
all_languages = [
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
for
|
256 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
257 |
|
258 |
with gr.Blocks(theme=gr.themes.Monochrome()) as demo:
|
259 |
gr.Markdown(INTRO_MARKDOWN)
|
@@ -317,17 +351,18 @@ def main() -> None:
|
|
317 |
show_scale=show_scale_checkbox.value,
|
318 |
plot_width=plot_width_slider.value,
|
319 |
plot_height=plot_height_slider.value,
|
|
|
320 |
results_dfs=results_dfs,
|
321 |
),
|
322 |
)
|
323 |
-
with gr.Row():
|
324 |
-
gr.Markdown(
|
325 |
-
"<center>Made with ❤️ by the <a href=\"https://alexandra.dk\">"
|
326 |
-
"Alexandra Institute</a>.</center>"
|
327 |
-
)
|
328 |
with gr.Tab(label="About"):
|
329 |
gr.Markdown(ABOUT_MARKDOWN)
|
330 |
|
|
|
|
|
|
|
|
|
|
|
331 |
language_names_dropdown.change(
|
332 |
fn=partial(update_model_ids_dropdown, results_dfs=results_dfs),
|
333 |
inputs=[language_names_dropdown, model_ids_dropdown],
|
@@ -336,7 +371,11 @@ def main() -> None:
|
|
336 |
|
337 |
# Update plot when anything changes
|
338 |
update_plot_kwargs = dict(
|
339 |
-
fn=partial(
|
|
|
|
|
|
|
|
|
340 |
inputs=[
|
341 |
model_ids_dropdown,
|
342 |
language_names_dropdown,
|
@@ -443,6 +482,7 @@ def produce_radial_plot(
|
|
443 |
show_scale: bool,
|
444 |
plot_width: int,
|
445 |
plot_height: int,
|
|
|
446 |
results_dfs: dict[Language, pd.DataFrame] | None,
|
447 |
) -> go.Figure:
|
448 |
"""Produce a radial plot as a plotly figure.
|
@@ -460,6 +500,8 @@ def produce_radial_plot(
|
|
460 |
The width of the plot.
|
461 |
plot_height:
|
462 |
The height of the plot.
|
|
|
|
|
463 |
results_dfs:
|
464 |
The results dataframes for each language.
|
465 |
|
@@ -551,17 +593,13 @@ def produce_radial_plot(
|
|
551 |
# Add the results to a plotly figure
|
552 |
fig = go.Figure()
|
553 |
for model_id, result_list in zip(model_ids, results):
|
554 |
-
|
555 |
-
# Generate colour for model, as an RGB triplet. The same model will always
|
556 |
-
# have the same colour
|
557 |
-
random.seed(model_id)
|
558 |
-
r, g, b = tuple(random.randint(0, 255) for _ in range(3))
|
559 |
-
|
560 |
fig.add_trace(go.Scatterpolar(
|
561 |
r=result_list,
|
562 |
theta=[task.name for task in tasks],
|
563 |
-
fill='toself',
|
564 |
name=model_id,
|
|
|
|
|
565 |
line=dict(color=f'rgb({r}, {g}, {b})'),
|
566 |
))
|
567 |
|
|
|
123 |
|
124 |
|
125 |
UPDATE_FREQUENCY_MINUTES = 30
|
126 |
+
MIN_COLOUR_DISTANCE_BETWEEN_MODELS = 200
|
127 |
|
128 |
|
129 |
class Task(BaseModel):
|
|
|
166 |
REASONING = Task(name="reasoning", metric="mcc")
|
167 |
ALL_TASKS = [obj for obj in globals().values() if isinstance(obj, Task)]
|
168 |
|
169 |
+
|
170 |
DANISH = Language(code="da", name="Danish")
|
171 |
NORWEGIAN = Language(code="no", name="Norwegian")
|
172 |
SWEDISH = Language(code="sv", name="Swedish")
|
173 |
ICELANDIC = Language(code="is", name="Icelandic")
|
|
|
174 |
GERMAN = Language(code="de", name="German")
|
175 |
DUTCH = Language(code="nl", name="Dutch")
|
176 |
ENGLISH = Language(code="en", name="English")
|
|
|
190 |
Dataset(name="norne-nb", language=NORWEGIAN, task=INFORMATION_EXTRACTION),
|
191 |
Dataset(name="norne-nn", language=NORWEGIAN, task=INFORMATION_EXTRACTION),
|
192 |
Dataset(name="mim-gold-ner", language=ICELANDIC, task=INFORMATION_EXTRACTION),
|
|
|
193 |
Dataset(name="germeval", language=GERMAN, task=INFORMATION_EXTRACTION),
|
194 |
Dataset(name="conll-nl", language=DUTCH, task=INFORMATION_EXTRACTION),
|
195 |
Dataset(name="conll-en", language=ENGLISH, task=INFORMATION_EXTRACTION),
|
|
|
198 |
Dataset(name="scala-nb", language=NORWEGIAN, task=GRAMMAR),
|
199 |
Dataset(name="scala-nn", language=NORWEGIAN, task=GRAMMAR),
|
200 |
Dataset(name="scala-is", language=ICELANDIC, task=GRAMMAR),
|
|
|
201 |
Dataset(name="scala-de", language=GERMAN, task=GRAMMAR),
|
202 |
Dataset(name="scala-nl", language=DUTCH, task=GRAMMAR),
|
203 |
Dataset(name="scala-en", language=ENGLISH, task=GRAMMAR),
|
|
|
246 |
results_dfs = fetch_results()
|
247 |
last_fetch = dt.datetime.now()
|
248 |
|
249 |
+
all_languages = [language.name for language in ALL_LANGUAGES.values()]
|
250 |
+
danish_models = list({model_id for model_id in results_dfs[DANISH].index})
|
251 |
+
|
252 |
+
# Get distinct RGB values for all models
|
253 |
+
all_models = list(
|
254 |
+
{model_id for df in results_dfs.values() for model_id in df.index}
|
255 |
+
)
|
256 |
+
colour_mapping: dict[str, tuple[int, int, int]] = dict()
|
257 |
+
|
258 |
+
for i in it.count():
|
259 |
+
min_colour_distance = MIN_COLOUR_DISTANCE_BETWEEN_MODELS - i
|
260 |
+
|
261 |
+
if i > 0:
|
262 |
+
logger.info(
|
263 |
+
f"All retries failed. Trying again with min colour distance "
|
264 |
+
f"{min_colour_distance}."
|
265 |
+
)
|
266 |
+
|
267 |
+
random.seed(4242 + i)
|
268 |
+
retries_left = 10 * len(all_models)
|
269 |
+
for model_id in all_models:
|
270 |
+
r, g, b = 0, 0, 0
|
271 |
+
too_bright, similar_to_other_model = True, True
|
272 |
+
while (too_bright or similar_to_other_model) and retries_left > 0:
|
273 |
+
r, g, b = tuple(random.randint(0, 255) for _ in range(3))
|
274 |
+
too_bright = np.min([r, g, b]) > 200
|
275 |
+
similar_to_other_model = any(
|
276 |
+
np.abs(
|
277 |
+
np.array(colour) - np.array([r, g, b])
|
278 |
+
).sum() < min_colour_distance
|
279 |
+
for colour in colour_mapping.values()
|
280 |
+
)
|
281 |
+
retries_left -= 1
|
282 |
+
logger.info(f"Retries left to find a colour mapping: {retries_left}")
|
283 |
+
colour_mapping[model_id] = (r, g, b)
|
284 |
+
|
285 |
+
if retries_left:
|
286 |
+
logger.info(
|
287 |
+
f"Successfully found a colour mapping with min colour distance "
|
288 |
+
f"{min_colour_distance}."
|
289 |
+
)
|
290 |
+
break
|
291 |
|
292 |
with gr.Blocks(theme=gr.themes.Monochrome()) as demo:
|
293 |
gr.Markdown(INTRO_MARKDOWN)
|
|
|
351 |
show_scale=show_scale_checkbox.value,
|
352 |
plot_width=plot_width_slider.value,
|
353 |
plot_height=plot_height_slider.value,
|
354 |
+
colour_mapping=colour_mapping,
|
355 |
results_dfs=results_dfs,
|
356 |
),
|
357 |
)
|
|
|
|
|
|
|
|
|
|
|
358 |
with gr.Tab(label="About"):
|
359 |
gr.Markdown(ABOUT_MARKDOWN)
|
360 |
|
361 |
+
gr.Markdown(
|
362 |
+
"<center>Made with ❤️ by the <a href=\"https://alexandra.dk\">"
|
363 |
+
"Alexandra Institute</a>.</center>"
|
364 |
+
)
|
365 |
+
|
366 |
language_names_dropdown.change(
|
367 |
fn=partial(update_model_ids_dropdown, results_dfs=results_dfs),
|
368 |
inputs=[language_names_dropdown, model_ids_dropdown],
|
|
|
371 |
|
372 |
# Update plot when anything changes
|
373 |
update_plot_kwargs = dict(
|
374 |
+
fn=partial(
|
375 |
+
produce_radial_plot,
|
376 |
+
colour_mapping=colour_mapping,
|
377 |
+
results_dfs=results_dfs,
|
378 |
+
),
|
379 |
inputs=[
|
380 |
model_ids_dropdown,
|
381 |
language_names_dropdown,
|
|
|
482 |
show_scale: bool,
|
483 |
plot_width: int,
|
484 |
plot_height: int,
|
485 |
+
colour_mapping: dict[str, tuple[int, int, int]],
|
486 |
results_dfs: dict[Language, pd.DataFrame] | None,
|
487 |
) -> go.Figure:
|
488 |
"""Produce a radial plot as a plotly figure.
|
|
|
500 |
The width of the plot.
|
501 |
plot_height:
|
502 |
The height of the plot.
|
503 |
+
colour_mapping:
|
504 |
+
A mapping from model ids to RGB triplets.
|
505 |
results_dfs:
|
506 |
The results dataframes for each language.
|
507 |
|
|
|
593 |
# Add the results to a plotly figure
|
594 |
fig = go.Figure()
|
595 |
for model_id, result_list in zip(model_ids, results):
|
596 |
+
r, g, b = colour_mapping[model_id]
|
|
|
|
|
|
|
|
|
|
|
597 |
fig.add_trace(go.Scatterpolar(
|
598 |
r=result_list,
|
599 |
theta=[task.name for task in tasks],
|
|
|
600 |
name=model_id,
|
601 |
+
fill='toself',
|
602 |
+
fillcolor=f'rgba({r}, {g}, {b}, 0.6)',
|
603 |
line=dict(color=f'rgb({r}, {g}, {b})'),
|
604 |
))
|
605 |
|