mahwizzzz commited on
Commit
8b6556c
·
verified ·
1 Parent(s): f3d902c

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +3 -103
README.md CHANGED
@@ -21,25 +21,13 @@ tags:
21
  <img src="figures/canopy-m-logo.png" alt="Canopy-M Logo" width="220"/>
22
  </div>
23
 
24
- Canopy-M is a 57.9-million-parameter Conformer-CTC model for **Urdu** and **Sindhi**. It is non-autoregressive: a Macaron encoder predicts a token at every frame, and greedy CTC reads that sequence. This card reports the full development evaluation, with the language id on and no language model. The held-out test split has not been scored.
25
 
26
- Code is Apache-2.0 and lives at [Proxima-AI-Co/canopy](https://github.com/Proxima-AI-Co/canopy). The weights are this repository.
27
-
28
- | | Urdu `urd` | Sindhi `snd` | Macro |
29
- |---|---:|---:|---:|
30
- | CER | 0.132 [0.065, 0.211] | 0.107 [0.091, 0.123] | 0.119 |
31
- | WER | 0.267 [0.166, 0.383] | 0.271 [0.240, 0.304] | 0.269 |
32
- | Utterances | 14,681 | 496 | |
33
- | Speakers | 63 | 164 | |
34
-
35
- Intervals are 95% speaker-cluster bootstrap. Lower is better. Run `canopy_exp_002_urd_snd_20261005-120848`, checkpoint selected at step 40,000, evaluated 2026-10-06.
36
 
37
  ![Canopy-M versus Whisper on the Urdu and Sindhi development sets](figures/overview_cer_wer.png)
38
 
39
  ## Use
40
 
41
- `canopy-m` and `ProximaAI/Canopy-M` load the same checkpoint. A later variant is the same call with another short name or Hub id. Log in with a token that can read this repository.
42
-
43
  Install the library once, then point it at any published variant:
44
 
45
  ```bash
@@ -58,112 +46,24 @@ print(asr.transcribe("clip.wav", language="urd"))
58
  print(asr.transcribe("clip.wav", language="snd"))
59
  ```
60
 
61
- `language` accepts `urd`, `ur`, `urdu`, `snd`, `sd`, and `sindhi`. Decoding in the table above is greedy CTC. Audio at any sample rate is resampled to 16 kHz mono. Files longer than 30 seconds are transcribed in chunks. If a repository ships more than one `.pt` file, pass `filename=`.
62
-
63
- ## Model
64
-
65
- | | |
66
- |---|---|
67
- | Architecture | Conformer-CTC, Metro-style Macaron blocks |
68
- | Size | 57.9M inference parameters, d=384, 12 layers, 6 heads |
69
- | Languages | Urdu (id 1), Sindhi (id 2). Id 0 is unconditioned |
70
- | Conditioning | Language embedding and a language-ID head |
71
- | Tokenizer | Character, `char_urd_snd` |
72
- | Frontend | 16 kHz, 80-bin log-mel, 4× conv subsampling, 25 frames/s |
73
- | Objective | `(1 − 0.3) · CTC + 0.3 · auxiliary CTC` at layer 6 |
74
- | Decoder in this table | Greedy CTC, no n-gram |
75
- | Training | 40,000 steps, bf16, RTX 3090, about 9,114 hours of audio seen, ~50/50 Urdu/Sindhi |
76
- | Licence | Apache-2.0 |
77
-
78
- Each block is half SwiGLU, rotary attention, a squeeze-excite depthwise convolution (kernel 31), and a second half SwiGLU, closed by RMSNorm. The auxiliary head is dropped at export. Sindhi keeps its own letters. Urdu yeh, kaf, and heh mappings are not applied to Sindhi.
79
 
80
  ## Training data
81
 
82
- About **186.7 hours** were used in training. YouTube Sindhi is train-only and is excluded from the scores.
83
 
84
  | Language | Source | Train hours | Dev hours | Labels |
85
  |---|---|---:|---:|---|
86
  | Urdu | Common Voice + mahwiz + UrduSpeech | ~79.6 | ~17 | human |
87
  | Sindhi | Common Voice | 71.5 | 0.10 | human; mostly unvalidated `other` |
88
  | Sindhi | FLEURS `sd_in` | 12.3 | 1.33 | human, CC-BY-4.0 |
89
- | Sindhi | YouTube | 23.7 | — | Whisper pseudo-labels, train only |
90
-
91
- ## Benchmark
92
-
93
- Every system was scored on the same development clips with the same `eval_norm`. Whisper is forced to the `urdu` or `sindhi` token, fp16, greedy, `max_new_tokens=225`.
94
-
95
- | System | Params | Urdu CER | Urdu WER | Sindhi CER | Sindhi WER | Macro CER |
96
- |---|---:|---:|---:|---:|---:|---:|
97
- | **Canopy-M** | 57.9M | **0.132** | **0.267** | **0.107** | **0.271** | **0.119** |
98
- | Whisper-tiny | 39M | 1.024 | 1.477 | 1.430 | 1.599 | 1.227 |
99
- | Whisper-base | 74M | 0.855 | 1.247 | 0.624 | 1.083 | 0.739 |
100
- | whisper-small-urdu | 244M | 0.177 | 0.330 | not run | not run | — |
101
-
102
- `whisper-small-urdu` is [`khawajaaliarshad/whisper-small-urdu`](https://huggingface.co/khawajaaliarshad/whisper-small-urdu), an Urdu-only fine-tune, so it was not run on Sindhi. A value above 1.0 means the hypothesis is longer than the reference, usually a repetition or the wrong script.
103
-
104
- ![Model size against median utterance CER](figures/size_vs_cer.png)
105
-
106
- ### Urdu by source
107
-
108
- 14,681 utterances, 63 speakers: Common Voice 7,772 / 54 speakers, UrduSpeech 4,296 / 7, mahwiz 2,613 / 2.
109
-
110
- | System | CV CER | UrduSpeech CER | mahwiz CER |
111
- |---|---:|---:|---:|
112
- | Canopy-M | 0.248 | 0.022 | 0.027 |
113
- | Whisper-tiny | 1.505 | 0.642 | 0.451 |
114
- | Whisper-base | 1.520 | 0.209 | 0.283 |
115
- | whisper-small-urdu | 0.278 | 0.069 | 0.111 |
116
-
117
- ![Urdu development CER and WER by source](figures/urdu_by_source.png)
118
 
119
- Paired speaker-cluster comparison. Δ is whisper-small-urdu minus Canopy-M. A positive value means Canopy-M makes fewer errors. “No clear difference” means the 95% interval includes zero.
120
-
121
- | Subset | ΔCER [95% CI] | Verdict |
122
- |---|---|---|
123
- | All Urdu | +0.046 [−0.003, +0.118] | no clear difference |
124
- | Common Voice | +0.030 [−0.042, +0.184] | no clear difference |
125
- | UrduSpeech | +0.047 [+0.021, +0.090] | Canopy-M lower CER |
126
- | mahwiz | +0.084 [+0.074, +0.099] | Canopy-M lower CER |
127
-
128
- whisper-small-urdu was fine-tuned on Common Voice Urdu 24.0 with its own split, so its Common Voice number may include clips it trained on. Canopy-M trained on the UrduSpeech and mahwiz training splits, so those two rows are in-domain for Canopy-M.
129
-
130
- ### Sindhi by source
131
-
132
- 496 utterances, 164 speakers: Common Voice 70 / 14 speakers, FLEURS 426 / 150 speakers. FLEURS `sd_in` is India-recorded Sindhi.
133
-
134
- | System | CV CER | FLEURS CER |
135
- |---|---:|---:|
136
- | Canopy-M | 0.286 | 0.095 |
137
- | Whisper-tiny | 1.911 | 1.399 |
138
- | Whisper-base | 0.690 | 0.619 |
139
-
140
- ![Sindhi development CER and WER by source](figures/sindhi_by_source.png)
141
-
142
- Against zero-shot Whisper-base, Canopy-M is lower on every Sindhi subset. All-Sindhi ΔCER is +0.517 [+0.470, +0.568]. Whisper-base did not train on this Sindhi data. Canopy-M did.
143
-
144
- ### Robustness
145
-
146
- Median utterance CER is 0.059 on Urdu and 0.078 on Sindhi. Canopy-M produced no runaway outputs (a hypothesis longer than 3× the reference) and no empty outputs. Whisper-tiny’s runaway rate is 10.3% on Urdu and 9.1% on Sindhi.
147
-
148
- ![Per-utterance CER](figures/utterance_cer_distribution.png)
149
-
150
- ![Runaway rate](figures/runaway_rate.png)
151
-
152
- ![Paired differences](figures/paired_differences.png)
153
-
154
- Decode real-time factor on an RTX 3090 is about 0.0006 for Canopy-M, 0.0218 for Whisper-tiny, 0.0100 for Whisper-base, and 0.0069 for whisper-small-urdu. Batch sizes differed, so treat those figures as indicative.
155
 
156
  ## Intended use
157
 
158
  Research transcription of read Urdu and Sindhi at 16 kHz, one language per utterance, with the language given.
159
 
160
- ## Out of scope
161
-
162
- Surveillance, speaker identification, and any decision about a person made without review. Production deployment while the test split is unscored. Telephone, broadcast, conversational, and code-switched speech.
163
-
164
  ## Limitations
165
 
166
- - These scores are the development split. The test split (Urdu ~37 h, Sindhi FLEURS ~3.3 h plus a small Common Voice test) has not been opened.
167
  - Sindhi Common Voice development audio is 0.10 hours (70 utterances). Most of the Sindhi score is FLEURS.
168
  - Common Voice Sindhi training audio is mostly unvalidated `other`, included with `--include-unvalidated`.
169
  - Urdu Common Voice CER is 0.248. The headline 0.132 is pulled down by UrduSpeech and mahwiz.
@@ -182,4 +82,4 @@ Surveillance, speaker identification, and any decision about a person made witho
182
  }
183
  ```
184
 
185
- Also cite Common Voice, FLEURS, and the Metro-ASR / Conformer designs the block follows.
 
21
  <img src="figures/canopy-m-logo.png" alt="Canopy-M Logo" width="220"/>
22
  </div>
23
 
24
+ Canopy-M is a 57.9-million-parameter Conformer-CTC model for Urdu and Sindhi. It is non-autoregressive: a Macaron encoder predicts a token at every frame, and greedy CTC reads that sequence.
25
 
 
 
 
 
 
 
 
 
 
 
26
 
27
  ![Canopy-M versus Whisper on the Urdu and Sindhi development sets](figures/overview_cer_wer.png)
28
 
29
  ## Use
30
 
 
 
31
  Install the library once, then point it at any published variant:
32
 
33
  ```bash
 
46
  print(asr.transcribe("clip.wav", language="snd"))
47
  ```
48
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
 
50
  ## Training data
51
 
52
+ About **186.7 hours** were used in training.
53
 
54
  | Language | Source | Train hours | Dev hours | Labels |
55
  |---|---|---:|---:|---|
56
  | Urdu | Common Voice + mahwiz + UrduSpeech | ~79.6 | ~17 | human |
57
  | Sindhi | Common Voice | 71.5 | 0.10 | human; mostly unvalidated `other` |
58
  | Sindhi | FLEURS `sd_in` | 12.3 | 1.33 | human, CC-BY-4.0 |
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
 
61
  ## Intended use
62
 
63
  Research transcription of read Urdu and Sindhi at 16 kHz, one language per utterance, with the language given.
64
 
 
 
 
 
65
  ## Limitations
66
 
 
67
  - Sindhi Common Voice development audio is 0.10 hours (70 utterances). Most of the Sindhi score is FLEURS.
68
  - Common Voice Sindhi training audio is mostly unvalidated `other`, included with `--include-unvalidated`.
69
  - Urdu Common Voice CER is 0.248. The headline 0.132 is pulled down by UrduSpeech and mahwiz.
 
82
  }
83
  ```
84
 
85
+ Also cite Common Voice, and FLEURS.