Update README.md
Browse files
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
|
| 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 |

|
| 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.
|
| 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 |
-

|
| 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 |
-

|
| 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 |
-

|
| 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 |
-

|
| 149 |
-
|
| 150 |
-

|
| 151 |
-
|
| 152 |
-

|
| 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,
|
|
|
|
| 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 |

|
| 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.
|