Kimyayd commited on
Commit
f66aa8b
Β·
verified Β·
1 Parent(s): b6a45a6

Benin flag, plus four factual corrections after a full audit

Browse files
Files changed (2) hide show
  1. README.md +72 -72
  2. app.py +17 -10
README.md CHANGED
@@ -1,72 +1,72 @@
1
- ---
2
- title: FonBench
3
- emoji: πŸ—£οΈ
4
- colorFrom: indigo
5
- colorTo: yellow
6
- sdk: gradio
7
- sdk_version: 6.24.0
8
- app_file: app.py
9
- pinned: true
10
- license: apache-2.0
11
- short_description: The public speech-recognition leaderboard for Fon
12
- ---
13
-
14
- # FonBench
15
-
16
- The public speech-recognition leaderboard for **Fon**, a tonal language
17
- spoken by roughly 2.3 million people in Benin.
18
-
19
- Anyone can submit a model from the Hub: it is evaluated automatically on
20
- this Space's shared GPU (ZeroGPU) and added to the leaderboard. No account
21
- required.
22
-
23
- Evaluation runs in slices, each fitting inside one GPU allocation. When the
24
- daily quota runs out the run pauses and resumes on its own at the next
25
- slice β€” and a Space restart loses nothing either.
26
-
27
- ## Metrics
28
-
29
- Fon is written with tones (Γ‘, ɔ́, ě…) that change the meaning of words, but
30
- corpora don't follow the same convention β€” some mark no tone at all. A raw
31
- WER is therefore not comparable from one corpus to the next. Hence:
32
-
33
- - **WER_seg** β€” word errors with tones stripped. Phonetic accuracy,
34
- comparable everywhere. This is the default ranking.
35
- - **WER_ton** β€” errors on tone marks alone. Not computed when the corpus
36
- doesn't annotate tones, so the figure is never misleading.
37
- - **T-WER** = `WER_seg + 2 Γ— WER_ton` β€” the headline metric, penalising
38
- tone mistakes twice over.
39
- - **RTFx** β€” seconds of audio processed per second of compute. Higher is
40
- faster. Hardware-dependent: only compare at equal hardware.
41
-
42
- Scoring is open and reproducible: see `fonbench_eval.py`.
43
-
44
- ## Model types
45
-
46
- - 🌍 **Base** β€” generic or multilingual systems evaluated as-is. A high
47
- error rate here measures an absence, not a weakness: they have never
48
- seen Fon.
49
- - πŸ”§ **FonBench** β€” fine-tuned by this project on 30 hours of the JML
50
- corpus, under a documented protocol (see the *Fine-tuning* tab).
51
- - πŸ‘₯ **Community** β€” fine-tuned on Fon by third parties.
52
-
53
- ## Test set
54
-
55
- The main test set (2,555 utterances, 4.98 hours, 45 speakers) is **not
56
- published**. Public Fon corpora have been circulating since 2016 and
57
- several models were trained on them, which inflates their scores
58
- artificially. Its speakers are disjoint from training speakers. Only
59
- aggregate scores are made public β€” neither the audio nor the transcriptions
60
- are reachable from this Space.
61
-
62
- ## Protocol
63
-
64
- - Pinned model revision: every score is tied to the repository's commit hash.
65
- - Identical text normalisation for every model.
66
- - `trust_remote_code=False` β€” no arbitrary code is ever executed.
67
- - A (model, revision, corpus) triple is never re-evaluated.
68
-
69
- ## Submitting a model
70
-
71
- The repository must be **public** on the Hub. Recognised architectures:
72
- wav2vec2, wav2vec2-BERT, HuBERT, MMS, Whisper.
 
1
+ ---
2
+ title: FonBench
3
+ emoji: πŸ—£οΈ
4
+ colorFrom: indigo
5
+ colorTo: yellow
6
+ sdk: gradio
7
+ sdk_version: 6.24.0
8
+ app_file: app.py
9
+ pinned: true
10
+ license: apache-2.0
11
+ short_description: The public speech-recognition leaderboard for Fon
12
+ ---
13
+
14
+ # FonBench πŸ‡§πŸ‡―
15
+
16
+ The public speech-recognition leaderboard for **Fon**, a tonal language
17
+ spoken by over two million people in Benin.
18
+
19
+ Anyone can submit a model from the Hub: it is evaluated automatically on
20
+ this Space's shared GPU (ZeroGPU) and added to the leaderboard. No account
21
+ required.
22
+
23
+ Evaluation runs in slices, each fitting inside one GPU allocation. When the
24
+ daily quota runs out the run pauses and resumes on its own at the next
25
+ slice β€” and a Space restart loses nothing either.
26
+
27
+ ## Metrics
28
+
29
+ Fon is written with tones (Γ‘, ɔ́, ě…) that change the meaning of words, but
30
+ corpora don't follow the same convention β€” some mark no tone at all. A raw
31
+ WER is therefore not comparable from one corpus to the next. Hence:
32
+
33
+ - **WER_seg** β€” word errors with tones stripped. Phonetic accuracy,
34
+ comparable everywhere. This is the default ranking.
35
+ - **WER_ton** β€” errors on tone marks alone. Not computed when the corpus
36
+ doesn't annotate tones, so the figure is never misleading.
37
+ - **T-WER** = `WER_seg + 2 Γ— WER_ton` β€” the headline metric, penalising
38
+ tone mistakes twice over.
39
+ - **RTFx** β€” seconds of audio processed per second of compute. Higher is
40
+ faster. Hardware-dependent: only compare at equal hardware.
41
+
42
+ Scoring is open and reproducible: see `fonbench_eval.py`.
43
+
44
+ ## Model types
45
+
46
+ - 🌍 **Base** β€” generic or multilingual systems evaluated as-is. A high
47
+ error rate here measures an absence, not a weakness: they have never
48
+ seen Fon.
49
+ - πŸ”§ **FonBench** β€” fine-tuned by this project on 30 hours of the JML
50
+ corpus, under a documented protocol (see the *Fine-tuning* tab).
51
+ - πŸ‘₯ **Community** β€” fine-tuned on Fon by third parties.
52
+
53
+ ## Test set
54
+
55
+ The main test set (2,555 utterances, 4.98 hours, 45 speakers) is **not
56
+ published**. Public Fon corpora have been circulating since 2016 and
57
+ several models were trained on them, which inflates their scores
58
+ artificially. Its 45 speakers are strictly disjoint from the 471 training
59
+ speakers β€” verified, zero in common. Only aggregate scores are made public β€” neither the audio nor the transcriptions
60
+ are reachable from this Space.
61
+
62
+ ## Protocol
63
+
64
+ - Pinned model revision: every score is tied to the repository's commit hash.
65
+ - Identical text normalisation for every model.
66
+ - `trust_remote_code=False` β€” no arbitrary code is ever executed.
67
+ - A (model, revision, corpus) triple is never re-evaluated.
68
+
69
+ ## Submitting a model
70
+
71
+ The repository must be **public** on the Hub. Recognised architectures:
72
+ wav2vec2, wav2vec2-BERT, HuBERT, MMS, Whisper.
app.py CHANGED
@@ -42,6 +42,7 @@ CSS = """
42
  .fb-title { font-size:2.4rem; font-weight:800; letter-spacing:-.03em;
43
  color:var(--fb-indigo); line-height:1.05; margin:0; }
44
  .fb-title span { color:var(--fb-ocre); }
 
45
  .fb-sub { color:var(--fb-muted); margin:.35rem 0 0; font-size:1.02rem; }
46
 
47
  .fb-note { font-size:.9rem; line-height:1.6; color:var(--fb-ink); }
@@ -232,7 +233,7 @@ def build_table(benchmark_id: str, vue: str, archs: list[str],
232
  for c in ("maison", "tiers", "base")}
233
  meta = (
234
  "<div class='fb-meta'>"
235
- f"<span><b>{bench.get('name', benchmark_id)}</b></span>"
236
  f"<span><b>{bench.get('num_utterances', '?')}</b> utterances</span>"
237
  f"<span><b>{bench.get('duration_hours', '?')}</b> hours</span>"
238
  + ("<span class='fb-badge'>private test set</span>"
@@ -390,9 +391,10 @@ it is built by taking turns across speakers, each contributing a little
390
  before any one of them dominates. For generalisation, the diversity of
391
  voices matters more than raw volume.
392
 
393
- Test-set speakers are **disjoint** from training speakers, and a temporal
394
- cutoff separates the transcripts. A model therefore cannot score well by
395
- having memorised a voice or a sentence.
 
396
 
397
  ### The protocol
398
 
@@ -404,7 +406,7 @@ gradient checkpointing.
404
  | Resulting model | Base | Learning rate | Batch | Wall time | Final dev loss | WER_seg |
405
  |---|---|---|---|---|---|---|
406
  | `wav2vec2-large-xlsr-53-fon-30h` | facebook/wav2vec2-large-xlsr-53 | 3Β·10⁻⁴ | 8Γ—2 | 54 min | **0.468** | **38.6%** |
407
- | `mms-300m-fon-30h` | facebook/mms-300m | 3Β·10⁻⁴ | 8Γ—2 | ~50 min | not retained | **42.8%** |
408
  | `w2v-bert-2.0-fon-30h` | facebook/w2v-bert-2.0 | 3Β·10⁻⁡ | 4Γ—4 | 116 min | 3.102 | 96.9% |
409
  | `AfriHuBERT-fon-30h` | ajesujoba/AfriHuBERT | 3Β·10⁻⁡ | 8Γ—2 | 24 min | 3.078 | 100.0% |
410
 
@@ -420,9 +422,13 @@ with 30 hours of well-chosen data.
420
  `w2v-bert-2.0` and `AfriHuBERT` do learn: their loss drops clearly during
421
  training. But it plateaus around 3.1 against 0.47 for the run that
422
  succeeds β€” the signature of settling into CTC's trivial solution, emitting
423
- the blank symbol everywhere. This is not a learning-rate problem: retrying
424
- at 3·10⁻⁡ produced exactly the same outcome. They would need far more
425
- epochs, or more data.
 
 
 
 
426
 
427
  Both failures stay in the leaderboard. Removing them would paint a
428
  flattering and false picture of what fine-tuning guarantees.
@@ -438,7 +444,7 @@ A_PROPOS = """
438
  ## FonBench
439
 
440
  The first public speech-recognition leaderboard for **Fon**, a tonal
441
- language spoken by roughly 2.3 million people in Benin. The project answers
442
  a concrete difficulty: until now, published Fon results were not comparable
443
  with one another, for lack of a shared protocol and a shared test set.
444
 
@@ -491,7 +497,8 @@ def build_ui() -> gr.Blocks:
491
  with gr.Blocks(title="FonBench β€” Fon ASR leaderboard") as demo:
492
  gr.HTML(
493
  "<div class='fb-head'>"
494
- "<p class='fb-title'>Fon<span>Bench</span></p>"
 
495
  "<p class='fb-sub'>The public speech-recognition leaderboard for "
496
  "Fon, a tonal language of Benin</p>"
497
  "</div>"
 
42
  .fb-title { font-size:2.4rem; font-weight:800; letter-spacing:-.03em;
43
  color:var(--fb-indigo); line-height:1.05; margin:0; }
44
  .fb-title span { color:var(--fb-ocre); }
45
+ .fb-title .fb-flag { font-size:1.7rem; vertical-align:.18em; }
46
  .fb-sub { color:var(--fb-muted); margin:.35rem 0 0; font-size:1.02rem; }
47
 
48
  .fb-note { font-size:.9rem; line-height:1.6; color:var(--fb-ink); }
 
233
  for c in ("maison", "tiers", "base")}
234
  meta = (
235
  "<div class='fb-meta'>"
236
+ f"<span>πŸ‡§πŸ‡― <b>{bench.get('name', benchmark_id)}</b></span>"
237
  f"<span><b>{bench.get('num_utterances', '?')}</b> utterances</span>"
238
  f"<span><b>{bench.get('duration_hours', '?')}</b> hours</span>"
239
  + ("<span class='fb-badge'>private test set</span>"
 
391
  before any one of them dominates. For generalisation, the diversity of
392
  voices matters more than raw volume.
393
 
394
+ The 471 training speakers and the 45 test speakers are **strictly
395
+ disjoint** β€” verified, zero in common. A temporal cutoff separates the
396
+ transcripts; 20 sentences out of 2,555 (0.8%) do appear in both, too few to
397
+ move a score but worth stating rather than claiming a perfect separation.
398
 
399
  ### The protocol
400
 
 
406
  | Resulting model | Base | Learning rate | Batch | Wall time | Final dev loss | WER_seg |
407
  |---|---|---|---|---|---|---|
408
  | `wav2vec2-large-xlsr-53-fon-30h` | facebook/wav2vec2-large-xlsr-53 | 3Β·10⁻⁴ | 8Γ—2 | 54 min | **0.468** | **38.6%** |
409
+ | `mms-300m-fon-30h` | facebook/mms-300m | 3Β·10⁻⁴ | 8Γ—2 | not retained | not retained | **42.8%** |
410
  | `w2v-bert-2.0-fon-30h` | facebook/w2v-bert-2.0 | 3Β·10⁻⁡ | 4Γ—4 | 116 min | 3.102 | 96.9% |
411
  | `AfriHuBERT-fon-30h` | ajesujoba/AfriHuBERT | 3Β·10⁻⁡ | 8Γ—2 | 24 min | 3.078 | 100.0% |
412
 
 
422
  `w2v-bert-2.0` and `AfriHuBERT` do learn: their loss drops clearly during
423
  training. But it plateaus around 3.1 against 0.47 for the run that
424
  succeeds β€” the signature of settling into CTC's trivial solution, emitting
425
+ the blank symbol everywhere. This is not a learning-rate problem: both were
426
+ first run at 3Β·10⁻⁴, then rerun at 3Β·10⁻⁡ β€” the figures in the table β€” for
427
+ exactly the same outcome. They would need far more epochs, or more data.
428
+
429
+ The `mms-300m` run predates per-model logging, so its wall time and final
430
+ loss are genuinely lost. They are shown as *not retained* rather than
431
+ reconstructed from memory.
432
 
433
  Both failures stay in the leaderboard. Removing them would paint a
434
  flattering and false picture of what fine-tuning guarantees.
 
444
  ## FonBench
445
 
446
  The first public speech-recognition leaderboard for **Fon**, a tonal
447
+ language spoken by over two million people in Benin. The project answers
448
  a concrete difficulty: until now, published Fon results were not comparable
449
  with one another, for lack of a shared protocol and a shared test set.
450
 
 
497
  with gr.Blocks(title="FonBench β€” Fon ASR leaderboard") as demo:
498
  gr.HTML(
499
  "<div class='fb-head'>"
500
+ "<p class='fb-title'>Fon<span>Bench</span> "
501
+ "<span class='fb-flag'>πŸ‡§πŸ‡―</span></p>"
502
  "<p class='fb-sub'>The public speech-recognition leaderboard for "
503
  "Fon, a tonal language of Benin</p>"
504
  "</div>"