Instructions to use espnet/marathi_lrec2020 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- ESPnet
How to use espnet/marathi_lrec2020 with ESPnet:
import soundfile from espnet2.bin.asr_inference import Speech2Text model = Speech2Text.from_pretrained( "espnet/marathi_lrec2020" ) speech, rate = soundfile.read("speech.wav") text, *_ = model(speech)[0] - Notebooks
- Google Colab
- Kaggle
Ship the scored epoch-60 ASR checkpoint and the character LM
Browse filesThe previous upload held valid.loss.ave_10best.pth, which was never scored; every reported number came from the epoch-60 checkpoint (latest.pth), now shipped as 60epoch.pth. Adds the character LSTM LM used for the lm_weight 0.3 results, sets the usage example to the reported decoding settings, and replaces the dataset citation with the corpus paper (Abraham et al., LREC 2020).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- README.md +281 -6
- exp/asr_marathi_conf_old_try_3conf_16Mbin_4grad/{valid.loss.ave_10best.pth → 60epoch.pth} +2 -2
- exp/asr_marathi_conf_old_try_3conf_16Mbin_4grad/RESULTS.md +23 -5
- exp/lm_marathi_char_lm/6epoch.pth +3 -0
- exp/lm_marathi_char_lm/config.yaml +241 -0
- exp/lm_marathi_char_lm/images/loss.png +0 -0
- meta.yaml +5 -3
README.md
CHANGED
|
@@ -15,7 +15,14 @@ license: cc-by-4.0
|
|
| 15 |
import librosa
|
| 16 |
from espnet2.bin.asr_inference import Speech2Text
|
| 17 |
|
| 18 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 19 |
# librosa resamples and mixes to one channel, so any file works; 16000 is
|
| 20 |
# what nearly every espnet recogniser is trained on - check this model's
|
| 21 |
# config if its audio is not 16 kHz
|
|
@@ -58,14 +65,22 @@ cd egs2/marathi_lrec2020/asr1
|
|
| 58 |
|
| 59 |
## Marathi ASR — `marathi_lrec2020`
|
| 60 |
|
| 61 |
-
Recipe for **Marathi** ASR on the
|
| 62 |
-
[**
|
| 63 |
|
| 64 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 65 |
|
| 66 |
Decoding without LM: **`conf/decode_asr.yaml`** (`lm_weight: 0.0`).
|
| 67 |
Decoding with LM (match reported fusion): **`conf/decode_asr_lm.yaml`** (beam 20, `ctc_weight: 0.5`, `lm_weight: 0.3`).
|
| 68 |
|
|
|
|
|
|
|
|
|
|
| 69 |
---
|
| 70 |
|
| 71 |
### Test-set decoding (`marathi_test`)
|
|
@@ -86,12 +101,22 @@ Beam **20**, **CTC weight 0.5** unless noted.
|
|
| 86 |
| **CER** | 89.0 | 6.6 | 4.4 | 1.7 | 12.6 | 74.3 |
|
| 87 |
| **WER** | 76.0 | 21.6 | 2.4 | 3.0 | 27.0 | 75.0 |
|
| 88 |
|
|
|
|
|
|
|
|
|
|
| 89 |
---
|
| 90 |
|
| 91 |
### Dataset reference
|
| 92 |
|
| 93 |
-
|
| 94 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 95 |
|
| 96 |
## ASR config
|
| 97 |
|
|
@@ -422,6 +447,256 @@ distributed: false
|
|
| 422 |
|
| 423 |
</details>
|
| 424 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 425 |
|
| 426 |
|
| 427 |
### Citing ESPnet
|
|
|
|
| 15 |
import librosa
|
| 16 |
from espnet2.bin.asr_inference import Speech2Text
|
| 17 |
|
| 18 |
+
# from_pretrained also loads the bundled character LM; these are the settings
|
| 19 |
+
# behind the reported 27.0 % WER (lm_weight=0.0 gives the 29.4 % no-LM result)
|
| 20 |
+
speech2text = Speech2Text.from_pretrained(
|
| 21 |
+
model_tag="espnet/marathi_lrec2020",
|
| 22 |
+
beam_size=20,
|
| 23 |
+
ctc_weight=0.5,
|
| 24 |
+
lm_weight=0.3,
|
| 25 |
+
)
|
| 26 |
# librosa resamples and mixes to one channel, so any file works; 16000 is
|
| 27 |
# what nearly every espnet recogniser is trained on - check this model's
|
| 28 |
# config if its audio is not 16 kHz
|
|
|
|
| 65 |
|
| 66 |
## Marathi ASR — `marathi_lrec2020`
|
| 67 |
|
| 68 |
+
Recipe for **Marathi** ASR on the 109-hour crowdsourced
|
| 69 |
+
[**Marathi speech corpus**](https://www.cse.iitb.ac.in/~pjyothi/indiccorpora/#marathi) (Abraham et al., LREC 2020).
|
| 70 |
|
| 71 |
+
**ASR model:** `exp/asr_marathi_conf_old_try_3conf_16Mbin_4grad/60epoch.pth`, the epoch-60 checkpoint (`latest.pth` in the recipe) that produced every number below.
|
| 72 |
+
Training uses **`conf/train_asr_transformer.yaml`** (character Conformer: 3 blocks, 256-dim encoder, 3-block Transformer decoder, `batch_bins: 16000000`, `accum_grad: 4`, Adam `lr: 0.0005`, warmup 20k, SpecAugment, hybrid CTC/attention `ctc_weight: 0.3`) on speed-perturbed (0.9/1.0/1.1) training data.
|
| 73 |
+
|
| 74 |
+
**Language model:** `exp/lm_marathi_char_lm/6epoch.pth`, a character-level LSTM LM (4 layers, 650 units, tied embeddings, dropout 0.3, 13.6 M parameters).
|
| 75 |
+
It was trained with Adam `lr: 0.0005` on the transcripts of the speed-perturbed training set (220,939 lines, 2,307 unique sentences).
|
| 76 |
+
Epoch 6 had the lowest dev loss (1.061 nats per character token, perplexity 2.89), and training stopped early at epoch 13.
|
| 77 |
|
| 78 |
Decoding without LM: **`conf/decode_asr.yaml`** (`lm_weight: 0.0`).
|
| 79 |
Decoding with LM (match reported fusion): **`conf/decode_asr_lm.yaml`** (beam 20, `ctc_weight: 0.5`, `lm_weight: 0.3`).
|
| 80 |
|
| 81 |
+
Note: the LM's token list orders `ौ` and `-` (indices 63 and 64) the other way round from the ASR model's.
|
| 82 |
+
ESPnet fuses the two models by token index, so the LM results below include this mismatch; the two characters are 0.1 % of test-set characters.
|
| 83 |
+
|
| 84 |
---
|
| 85 |
|
| 86 |
### Test-set decoding (`marathi_test`)
|
|
|
|
| 101 |
| **CER** | 89.0 | 6.6 | 4.4 | 1.7 | 12.6 | 74.3 |
|
| 102 |
| **WER** | 76.0 | 21.6 | 2.4 | 3.0 | 27.0 | 75.0 |
|
| 103 |
|
| 104 |
+
These are sclite's per-speaker Mean rows; the recipe's speaker ID is the prompt ID, so each is a mean over the 300 test prompts.
|
| 105 |
+
Corpus-level (Sum/Avg) error rates are WER 27.3 (no LM) and 24.9 (LM), and CER 12.4 and 12.0.
|
| 106 |
+
|
| 107 |
---
|
| 108 |
|
| 109 |
### Dataset reference
|
| 110 |
|
| 111 |
+
```bibtex
|
| 112 |
+
@inproceedings{abraham-etal-2020-crowdsourcing,
|
| 113 |
+
title = {Crowdsourcing Speech Data for Low-Resource Languages from Low-Income Workers},
|
| 114 |
+
author = {Abraham, Basil and Goel, Danish and Siddarth, Divya and Bali, Kalika and Chopra, Manu and Choudhury, Monojit and Joshi, Pratik and Jyothi, Preethi and Sitaram, Sunayana and Seshadri, Vivek},
|
| 115 |
+
booktitle = {Proceedings of the 12th Conference on Language Resources and Evaluation (LREC)},
|
| 116 |
+
pages = {2819--2826},
|
| 117 |
+
year = {2020}
|
| 118 |
+
}
|
| 119 |
+
```
|
| 120 |
|
| 121 |
## ASR config
|
| 122 |
|
|
|
|
| 447 |
|
| 448 |
</details>
|
| 449 |
|
| 450 |
+
## LM config
|
| 451 |
+
|
| 452 |
+
<details><summary>expand</summary>
|
| 453 |
+
|
| 454 |
+
```
|
| 455 |
+
config: conf/train_lm_char.yaml
|
| 456 |
+
print_config: false
|
| 457 |
+
log_level: INFO
|
| 458 |
+
drop_last_iter: false
|
| 459 |
+
dry_run: false
|
| 460 |
+
iterator_type: sequence
|
| 461 |
+
valid_iterator_type: null
|
| 462 |
+
output_dir: exp/lm_marathi_char_lm
|
| 463 |
+
ngpu: 1
|
| 464 |
+
seed: 0
|
| 465 |
+
num_workers: 1
|
| 466 |
+
num_att_plot: 3
|
| 467 |
+
dist_backend: nccl
|
| 468 |
+
dist_init_method: env://
|
| 469 |
+
dist_world_size: 2
|
| 470 |
+
dist_rank: 0
|
| 471 |
+
local_rank: 0
|
| 472 |
+
dist_master_addr: localhost
|
| 473 |
+
dist_master_port: 58689
|
| 474 |
+
dist_launcher: null
|
| 475 |
+
multiprocessing_distributed: true
|
| 476 |
+
unused_parameters: false
|
| 477 |
+
sharded_ddp: false
|
| 478 |
+
use_deepspeed: false
|
| 479 |
+
deepspeed_config: null
|
| 480 |
+
gradient_as_bucket_view: true
|
| 481 |
+
ddp_comm_hook: null
|
| 482 |
+
cudnn_enabled: true
|
| 483 |
+
cudnn_benchmark: false
|
| 484 |
+
cudnn_deterministic: true
|
| 485 |
+
use_tf32: false
|
| 486 |
+
collect_stats: false
|
| 487 |
+
write_collected_feats: false
|
| 488 |
+
max_epoch: 30
|
| 489 |
+
patience: 5
|
| 490 |
+
val_scheduler_criterion:
|
| 491 |
+
- valid
|
| 492 |
+
- loss
|
| 493 |
+
early_stopping_criterion:
|
| 494 |
+
- valid
|
| 495 |
+
- loss
|
| 496 |
+
- min
|
| 497 |
+
best_model_criterion:
|
| 498 |
+
- - valid
|
| 499 |
+
- loss
|
| 500 |
+
- min
|
| 501 |
+
keep_nbest_models: 5
|
| 502 |
+
nbest_averaging_interval: 0
|
| 503 |
+
grad_clip: 5.0
|
| 504 |
+
grad_clip_type: 2.0
|
| 505 |
+
grad_noise: false
|
| 506 |
+
accum_grad: 1
|
| 507 |
+
no_forward_run: false
|
| 508 |
+
resume: true
|
| 509 |
+
train_dtype: float32
|
| 510 |
+
use_amp: false
|
| 511 |
+
log_interval: null
|
| 512 |
+
use_matplotlib: true
|
| 513 |
+
use_tensorboard: true
|
| 514 |
+
create_graph_in_tensorboard: false
|
| 515 |
+
use_wandb: false
|
| 516 |
+
wandb_project: null
|
| 517 |
+
wandb_id: null
|
| 518 |
+
wandb_entity: null
|
| 519 |
+
wandb_name: null
|
| 520 |
+
wandb_model_log_interval: -1
|
| 521 |
+
detect_anomaly: false
|
| 522 |
+
use_adapter: false
|
| 523 |
+
adapter: lora
|
| 524 |
+
save_strategy: all
|
| 525 |
+
adapter_conf: {}
|
| 526 |
+
pretrain_path: null
|
| 527 |
+
init_param: []
|
| 528 |
+
ignore_init_mismatch: false
|
| 529 |
+
freeze_param: []
|
| 530 |
+
num_iters_per_epoch: null
|
| 531 |
+
batch_size: 256
|
| 532 |
+
valid_batch_size: null
|
| 533 |
+
batch_bins: 1000000
|
| 534 |
+
valid_batch_bins: null
|
| 535 |
+
category_sample_size: 10
|
| 536 |
+
upsampling_factor: 0.5
|
| 537 |
+
category_upsampling_factor: 0.5
|
| 538 |
+
dataset_upsampling_factor: 0.5
|
| 539 |
+
dataset_scaling_factor: 1.2
|
| 540 |
+
max_batch_size: null
|
| 541 |
+
min_batch_size: 1
|
| 542 |
+
train_shape_file:
|
| 543 |
+
- exp/lm_stats_char/train/text_shape.char
|
| 544 |
+
valid_shape_file:
|
| 545 |
+
- exp/lm_stats_char/valid/text_shape.char
|
| 546 |
+
batch_type: folded
|
| 547 |
+
valid_batch_type: null
|
| 548 |
+
fold_length:
|
| 549 |
+
- 150
|
| 550 |
+
sort_in_batch: descending
|
| 551 |
+
shuffle_within_batch: false
|
| 552 |
+
sort_batch: descending
|
| 553 |
+
multiple_iterator: false
|
| 554 |
+
chunk_length: 500
|
| 555 |
+
chunk_shift_ratio: 0.5
|
| 556 |
+
num_cache_chunks: 1024
|
| 557 |
+
chunk_excluded_key_prefixes: []
|
| 558 |
+
chunk_default_fs: null
|
| 559 |
+
chunk_max_abs_length: null
|
| 560 |
+
chunk_discard_short_samples: true
|
| 561 |
+
train_data_path_and_name_and_type:
|
| 562 |
+
- - dump/raw/lm_train.txt
|
| 563 |
+
- text
|
| 564 |
+
- text
|
| 565 |
+
valid_data_path_and_name_and_type:
|
| 566 |
+
- - dump/raw/org/marathi_dev_lm_ver/text
|
| 567 |
+
- text
|
| 568 |
+
- text
|
| 569 |
+
multi_task_dataset: false
|
| 570 |
+
allow_variable_data_keys: false
|
| 571 |
+
max_cache_size: 0.0
|
| 572 |
+
max_cache_fd: 32
|
| 573 |
+
allow_multi_rates: false
|
| 574 |
+
valid_max_cache_size: null
|
| 575 |
+
exclude_weight_decay: false
|
| 576 |
+
exclude_weight_decay_conf: {}
|
| 577 |
+
optim: adam
|
| 578 |
+
optim_conf:
|
| 579 |
+
lr: 0.0005
|
| 580 |
+
weight_decay: 1.0e-06
|
| 581 |
+
scheduler: null
|
| 582 |
+
scheduler_conf: {}
|
| 583 |
+
token_list:
|
| 584 |
+
- <blank>
|
| 585 |
+
- <unk>
|
| 586 |
+
- <space>
|
| 587 |
+
- ा
|
| 588 |
+
- े
|
| 589 |
+
- र
|
| 590 |
+
- ्
|
| 591 |
+
- क
|
| 592 |
+
- स
|
| 593 |
+
- ल
|
| 594 |
+
- म
|
| 595 |
+
- ि
|
| 596 |
+
- ं
|
| 597 |
+
- ी
|
| 598 |
+
- य
|
| 599 |
+
- त
|
| 600 |
+
- न
|
| 601 |
+
- व
|
| 602 |
+
- ग
|
| 603 |
+
- ह
|
| 604 |
+
- ट
|
| 605 |
+
- च
|
| 606 |
+
- प
|
| 607 |
+
- ड
|
| 608 |
+
- आ
|
| 609 |
+
- .
|
| 610 |
+
- ज
|
| 611 |
+
- श
|
| 612 |
+
- ो
|
| 613 |
+
- द
|
| 614 |
+
- ब
|
| 615 |
+
- अ
|
| 616 |
+
- ू
|
| 617 |
+
- ु
|
| 618 |
+
- '?'
|
| 619 |
+
- ण
|
| 620 |
+
- इ
|
| 621 |
+
- ध
|
| 622 |
+
- ए
|
| 623 |
+
- फ
|
| 624 |
+
- ख
|
| 625 |
+
- ॉ
|
| 626 |
+
- ॅ
|
| 627 |
+
- ळ
|
| 628 |
+
- ँ
|
| 629 |
+
- भ
|
| 630 |
+
- थ
|
| 631 |
+
- ठ
|
| 632 |
+
- ई
|
| 633 |
+
- झ
|
| 634 |
+
- ष
|
| 635 |
+
- उ
|
| 636 |
+
- ऑ
|
| 637 |
+
- ऊ
|
| 638 |
+
- घ
|
| 639 |
+
- ढ
|
| 640 |
+
- ै
|
| 641 |
+
- ओ
|
| 642 |
+
- '2'
|
| 643 |
+
- (
|
| 644 |
+
- )
|
| 645 |
+
- '0'
|
| 646 |
+
- ृ
|
| 647 |
+
- '-'
|
| 648 |
+
- ौ
|
| 649 |
+
- '3'
|
| 650 |
+
- '1'
|
| 651 |
+
- ऐ
|
| 652 |
+
-
|
| 653 |
+
- '5'
|
| 654 |
+
- '8'
|
| 655 |
+
- छ
|
| 656 |
+
- '4'
|
| 657 |
+
- '"'
|
| 658 |
+
- ','
|
| 659 |
+
- '9'
|
| 660 |
+
- औ
|
| 661 |
+
- '!'
|
| 662 |
+
- ़
|
| 663 |
+
- ञ
|
| 664 |
+
- '7'
|
| 665 |
+
- '6'
|
| 666 |
+
- ९
|
| 667 |
+
- ऋ
|
| 668 |
+
- e
|
| 669 |
+
- g
|
| 670 |
+
- ३
|
| 671 |
+
- X
|
| 672 |
+
- १
|
| 673 |
+
- ०
|
| 674 |
+
- <sos/eos>
|
| 675 |
+
init: null
|
| 676 |
+
use_preprocessor: true
|
| 677 |
+
token_type: char
|
| 678 |
+
bpemodel: null
|
| 679 |
+
non_linguistic_symbols: null
|
| 680 |
+
cleaner: null
|
| 681 |
+
g2p: null
|
| 682 |
+
lm: seq_rnn
|
| 683 |
+
lm_conf:
|
| 684 |
+
rnn_type: lstm
|
| 685 |
+
nlayers: 4
|
| 686 |
+
unit: 650
|
| 687 |
+
tie_weights: true
|
| 688 |
+
dropout_rate: 0.3
|
| 689 |
+
model: lm
|
| 690 |
+
model_conf: {}
|
| 691 |
+
required:
|
| 692 |
+
- output_dir
|
| 693 |
+
- token_list
|
| 694 |
+
version: '202509'
|
| 695 |
+
distributed: true
|
| 696 |
+
```
|
| 697 |
+
|
| 698 |
+
</details>
|
| 699 |
+
|
| 700 |
|
| 701 |
|
| 702 |
### Citing ESPnet
|
exp/asr_marathi_conf_old_try_3conf_16Mbin_4grad/{valid.loss.ave_10best.pth → 60epoch.pth}
RENAMED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:2f84f338d92332d8eca50675faf18f078a98bc6acaad417bc6b39e17212d5bc5
|
| 3 |
+
size 33154214
|
exp/asr_marathi_conf_old_try_3conf_16Mbin_4grad/RESULTS.md
CHANGED
|
@@ -13,14 +13,22 @@
|
|
| 13 |
|
| 14 |
## Marathi ASR — `marathi_lrec2020`
|
| 15 |
|
| 16 |
-
Recipe for **Marathi** ASR on the
|
| 17 |
-
[**
|
| 18 |
|
| 19 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 20 |
|
| 21 |
Decoding without LM: **`conf/decode_asr.yaml`** (`lm_weight: 0.0`).
|
| 22 |
Decoding with LM (match reported fusion): **`conf/decode_asr_lm.yaml`** (beam 20, `ctc_weight: 0.5`, `lm_weight: 0.3`).
|
| 23 |
|
|
|
|
|
|
|
|
|
|
| 24 |
---
|
| 25 |
|
| 26 |
### Test-set decoding (`marathi_test`)
|
|
@@ -41,9 +49,19 @@ Beam **20**, **CTC weight 0.5** unless noted.
|
|
| 41 |
| **CER** | 89.0 | 6.6 | 4.4 | 1.7 | 12.6 | 74.3 |
|
| 42 |
| **WER** | 76.0 | 21.6 | 2.4 | 3.0 | 27.0 | 75.0 |
|
| 43 |
|
|
|
|
|
|
|
|
|
|
| 44 |
---
|
| 45 |
|
| 46 |
### Dataset reference
|
| 47 |
|
| 48 |
-
|
| 49 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 13 |
|
| 14 |
## Marathi ASR — `marathi_lrec2020`
|
| 15 |
|
| 16 |
+
Recipe for **Marathi** ASR on the 109-hour crowdsourced
|
| 17 |
+
[**Marathi speech corpus**](https://www.cse.iitb.ac.in/~pjyothi/indiccorpora/#marathi) (Abraham et al., LREC 2020).
|
| 18 |
|
| 19 |
+
**ASR model:** `exp/asr_marathi_conf_old_try_3conf_16Mbin_4grad/60epoch.pth`, the epoch-60 checkpoint (`latest.pth` in the recipe) that produced every number below.
|
| 20 |
+
Training uses **`conf/train_asr_transformer.yaml`** (character Conformer: 3 blocks, 256-dim encoder, 3-block Transformer decoder, `batch_bins: 16000000`, `accum_grad: 4`, Adam `lr: 0.0005`, warmup 20k, SpecAugment, hybrid CTC/attention `ctc_weight: 0.3`) on speed-perturbed (0.9/1.0/1.1) training data.
|
| 21 |
+
|
| 22 |
+
**Language model:** `exp/lm_marathi_char_lm/6epoch.pth`, a character-level LSTM LM (4 layers, 650 units, tied embeddings, dropout 0.3, 13.6 M parameters).
|
| 23 |
+
It was trained with Adam `lr: 0.0005` on the transcripts of the speed-perturbed training set (220,939 lines, 2,307 unique sentences).
|
| 24 |
+
Epoch 6 had the lowest dev loss (1.061 nats per character token, perplexity 2.89), and training stopped early at epoch 13.
|
| 25 |
|
| 26 |
Decoding without LM: **`conf/decode_asr.yaml`** (`lm_weight: 0.0`).
|
| 27 |
Decoding with LM (match reported fusion): **`conf/decode_asr_lm.yaml`** (beam 20, `ctc_weight: 0.5`, `lm_weight: 0.3`).
|
| 28 |
|
| 29 |
+
Note: the LM's token list orders `ौ` and `-` (indices 63 and 64) the other way round from the ASR model's.
|
| 30 |
+
ESPnet fuses the two models by token index, so the LM results below include this mismatch; the two characters are 0.1 % of test-set characters.
|
| 31 |
+
|
| 32 |
---
|
| 33 |
|
| 34 |
### Test-set decoding (`marathi_test`)
|
|
|
|
| 49 |
| **CER** | 89.0 | 6.6 | 4.4 | 1.7 | 12.6 | 74.3 |
|
| 50 |
| **WER** | 76.0 | 21.6 | 2.4 | 3.0 | 27.0 | 75.0 |
|
| 51 |
|
| 52 |
+
These are sclite's per-speaker Mean rows; the recipe's speaker ID is the prompt ID, so each is a mean over the 300 test prompts.
|
| 53 |
+
Corpus-level (Sum/Avg) error rates are WER 27.3 (no LM) and 24.9 (LM), and CER 12.4 and 12.0.
|
| 54 |
+
|
| 55 |
---
|
| 56 |
|
| 57 |
### Dataset reference
|
| 58 |
|
| 59 |
+
```bibtex
|
| 60 |
+
@inproceedings{abraham-etal-2020-crowdsourcing,
|
| 61 |
+
title = {Crowdsourcing Speech Data for Low-Resource Languages from Low-Income Workers},
|
| 62 |
+
author = {Abraham, Basil and Goel, Danish and Siddarth, Divya and Bali, Kalika and Chopra, Manu and Choudhury, Monojit and Joshi, Pratik and Jyothi, Preethi and Sitaram, Sunayana and Seshadri, Vivek},
|
| 63 |
+
booktitle = {Proceedings of the 12th Conference on Language Resources and Evaluation (LREC)},
|
| 64 |
+
pages = {2819--2826},
|
| 65 |
+
year = {2020}
|
| 66 |
+
}
|
| 67 |
+
```
|
exp/lm_marathi_char_lm/6epoch.pth
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:e606283953611611215b1e93759636c5764d10e01e63a02386c32cad3c78c60e
|
| 3 |
+
size 54403341
|
exp/lm_marathi_char_lm/config.yaml
ADDED
|
@@ -0,0 +1,241 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
config: conf/train_lm_char.yaml
|
| 2 |
+
print_config: false
|
| 3 |
+
log_level: INFO
|
| 4 |
+
drop_last_iter: false
|
| 5 |
+
dry_run: false
|
| 6 |
+
iterator_type: sequence
|
| 7 |
+
valid_iterator_type: null
|
| 8 |
+
output_dir: exp/lm_marathi_char_lm
|
| 9 |
+
ngpu: 1
|
| 10 |
+
seed: 0
|
| 11 |
+
num_workers: 1
|
| 12 |
+
num_att_plot: 3
|
| 13 |
+
dist_backend: nccl
|
| 14 |
+
dist_init_method: env://
|
| 15 |
+
dist_world_size: 2
|
| 16 |
+
dist_rank: 0
|
| 17 |
+
local_rank: 0
|
| 18 |
+
dist_master_addr: localhost
|
| 19 |
+
dist_master_port: 58689
|
| 20 |
+
dist_launcher: null
|
| 21 |
+
multiprocessing_distributed: true
|
| 22 |
+
unused_parameters: false
|
| 23 |
+
sharded_ddp: false
|
| 24 |
+
use_deepspeed: false
|
| 25 |
+
deepspeed_config: null
|
| 26 |
+
gradient_as_bucket_view: true
|
| 27 |
+
ddp_comm_hook: null
|
| 28 |
+
cudnn_enabled: true
|
| 29 |
+
cudnn_benchmark: false
|
| 30 |
+
cudnn_deterministic: true
|
| 31 |
+
use_tf32: false
|
| 32 |
+
collect_stats: false
|
| 33 |
+
write_collected_feats: false
|
| 34 |
+
max_epoch: 30
|
| 35 |
+
patience: 5
|
| 36 |
+
val_scheduler_criterion:
|
| 37 |
+
- valid
|
| 38 |
+
- loss
|
| 39 |
+
early_stopping_criterion:
|
| 40 |
+
- valid
|
| 41 |
+
- loss
|
| 42 |
+
- min
|
| 43 |
+
best_model_criterion:
|
| 44 |
+
- - valid
|
| 45 |
+
- loss
|
| 46 |
+
- min
|
| 47 |
+
keep_nbest_models: 5
|
| 48 |
+
nbest_averaging_interval: 0
|
| 49 |
+
grad_clip: 5.0
|
| 50 |
+
grad_clip_type: 2.0
|
| 51 |
+
grad_noise: false
|
| 52 |
+
accum_grad: 1
|
| 53 |
+
no_forward_run: false
|
| 54 |
+
resume: true
|
| 55 |
+
train_dtype: float32
|
| 56 |
+
use_amp: false
|
| 57 |
+
log_interval: null
|
| 58 |
+
use_matplotlib: true
|
| 59 |
+
use_tensorboard: true
|
| 60 |
+
create_graph_in_tensorboard: false
|
| 61 |
+
use_wandb: false
|
| 62 |
+
wandb_project: null
|
| 63 |
+
wandb_id: null
|
| 64 |
+
wandb_entity: null
|
| 65 |
+
wandb_name: null
|
| 66 |
+
wandb_model_log_interval: -1
|
| 67 |
+
detect_anomaly: false
|
| 68 |
+
use_adapter: false
|
| 69 |
+
adapter: lora
|
| 70 |
+
save_strategy: all
|
| 71 |
+
adapter_conf: {}
|
| 72 |
+
pretrain_path: null
|
| 73 |
+
init_param: []
|
| 74 |
+
ignore_init_mismatch: false
|
| 75 |
+
freeze_param: []
|
| 76 |
+
num_iters_per_epoch: null
|
| 77 |
+
batch_size: 256
|
| 78 |
+
valid_batch_size: null
|
| 79 |
+
batch_bins: 1000000
|
| 80 |
+
valid_batch_bins: null
|
| 81 |
+
category_sample_size: 10
|
| 82 |
+
upsampling_factor: 0.5
|
| 83 |
+
category_upsampling_factor: 0.5
|
| 84 |
+
dataset_upsampling_factor: 0.5
|
| 85 |
+
dataset_scaling_factor: 1.2
|
| 86 |
+
max_batch_size: null
|
| 87 |
+
min_batch_size: 1
|
| 88 |
+
train_shape_file:
|
| 89 |
+
- exp/lm_stats_char/train/text_shape.char
|
| 90 |
+
valid_shape_file:
|
| 91 |
+
- exp/lm_stats_char/valid/text_shape.char
|
| 92 |
+
batch_type: folded
|
| 93 |
+
valid_batch_type: null
|
| 94 |
+
fold_length:
|
| 95 |
+
- 150
|
| 96 |
+
sort_in_batch: descending
|
| 97 |
+
shuffle_within_batch: false
|
| 98 |
+
sort_batch: descending
|
| 99 |
+
multiple_iterator: false
|
| 100 |
+
chunk_length: 500
|
| 101 |
+
chunk_shift_ratio: 0.5
|
| 102 |
+
num_cache_chunks: 1024
|
| 103 |
+
chunk_excluded_key_prefixes: []
|
| 104 |
+
chunk_default_fs: null
|
| 105 |
+
chunk_max_abs_length: null
|
| 106 |
+
chunk_discard_short_samples: true
|
| 107 |
+
train_data_path_and_name_and_type:
|
| 108 |
+
- - dump/raw/lm_train.txt
|
| 109 |
+
- text
|
| 110 |
+
- text
|
| 111 |
+
valid_data_path_and_name_and_type:
|
| 112 |
+
- - dump/raw/org/marathi_dev_lm_ver/text
|
| 113 |
+
- text
|
| 114 |
+
- text
|
| 115 |
+
multi_task_dataset: false
|
| 116 |
+
allow_variable_data_keys: false
|
| 117 |
+
max_cache_size: 0.0
|
| 118 |
+
max_cache_fd: 32
|
| 119 |
+
allow_multi_rates: false
|
| 120 |
+
valid_max_cache_size: null
|
| 121 |
+
exclude_weight_decay: false
|
| 122 |
+
exclude_weight_decay_conf: {}
|
| 123 |
+
optim: adam
|
| 124 |
+
optim_conf:
|
| 125 |
+
lr: 0.0005
|
| 126 |
+
weight_decay: 1.0e-06
|
| 127 |
+
scheduler: null
|
| 128 |
+
scheduler_conf: {}
|
| 129 |
+
token_list:
|
| 130 |
+
- <blank>
|
| 131 |
+
- <unk>
|
| 132 |
+
- <space>
|
| 133 |
+
- ा
|
| 134 |
+
- े
|
| 135 |
+
- र
|
| 136 |
+
- ्
|
| 137 |
+
- क
|
| 138 |
+
- स
|
| 139 |
+
- ल
|
| 140 |
+
- म
|
| 141 |
+
- ि
|
| 142 |
+
- ं
|
| 143 |
+
- ी
|
| 144 |
+
- य
|
| 145 |
+
- त
|
| 146 |
+
- न
|
| 147 |
+
- व
|
| 148 |
+
- ग
|
| 149 |
+
- ह
|
| 150 |
+
- ट
|
| 151 |
+
- च
|
| 152 |
+
- प
|
| 153 |
+
- ड
|
| 154 |
+
- आ
|
| 155 |
+
- .
|
| 156 |
+
- ज
|
| 157 |
+
- श
|
| 158 |
+
- ो
|
| 159 |
+
- द
|
| 160 |
+
- ब
|
| 161 |
+
- अ
|
| 162 |
+
- ू
|
| 163 |
+
- ु
|
| 164 |
+
- '?'
|
| 165 |
+
- ण
|
| 166 |
+
- इ
|
| 167 |
+
- ध
|
| 168 |
+
- ए
|
| 169 |
+
- फ
|
| 170 |
+
- ख
|
| 171 |
+
- ॉ
|
| 172 |
+
- ॅ
|
| 173 |
+
- ळ
|
| 174 |
+
- ँ
|
| 175 |
+
- भ
|
| 176 |
+
- थ
|
| 177 |
+
- ठ
|
| 178 |
+
- ई
|
| 179 |
+
- झ
|
| 180 |
+
- ष
|
| 181 |
+
- उ
|
| 182 |
+
- ऑ
|
| 183 |
+
- ऊ
|
| 184 |
+
- घ
|
| 185 |
+
- ढ
|
| 186 |
+
- ै
|
| 187 |
+
- ओ
|
| 188 |
+
- '2'
|
| 189 |
+
- (
|
| 190 |
+
- )
|
| 191 |
+
- '0'
|
| 192 |
+
- ृ
|
| 193 |
+
- '-'
|
| 194 |
+
- ौ
|
| 195 |
+
- '3'
|
| 196 |
+
- '1'
|
| 197 |
+
- ऐ
|
| 198 |
+
-
|
| 199 |
+
- '5'
|
| 200 |
+
- '8'
|
| 201 |
+
- छ
|
| 202 |
+
- '4'
|
| 203 |
+
- '"'
|
| 204 |
+
- ','
|
| 205 |
+
- '9'
|
| 206 |
+
- औ
|
| 207 |
+
- '!'
|
| 208 |
+
- ़
|
| 209 |
+
- ञ
|
| 210 |
+
- '7'
|
| 211 |
+
- '6'
|
| 212 |
+
- ९
|
| 213 |
+
- ऋ
|
| 214 |
+
- e
|
| 215 |
+
- g
|
| 216 |
+
- ३
|
| 217 |
+
- X
|
| 218 |
+
- १
|
| 219 |
+
- ०
|
| 220 |
+
- <sos/eos>
|
| 221 |
+
init: null
|
| 222 |
+
use_preprocessor: true
|
| 223 |
+
token_type: char
|
| 224 |
+
bpemodel: null
|
| 225 |
+
non_linguistic_symbols: null
|
| 226 |
+
cleaner: null
|
| 227 |
+
g2p: null
|
| 228 |
+
lm: seq_rnn
|
| 229 |
+
lm_conf:
|
| 230 |
+
rnn_type: lstm
|
| 231 |
+
nlayers: 4
|
| 232 |
+
unit: 650
|
| 233 |
+
tie_weights: true
|
| 234 |
+
dropout_rate: 0.3
|
| 235 |
+
model: lm
|
| 236 |
+
model_conf: {}
|
| 237 |
+
required:
|
| 238 |
+
- output_dir
|
| 239 |
+
- token_list
|
| 240 |
+
version: '202509'
|
| 241 |
+
distributed: true
|
exp/lm_marathi_char_lm/images/loss.png
ADDED
|
meta.yaml
CHANGED
|
@@ -1,8 +1,10 @@
|
|
| 1 |
-
espnet: '
|
| 2 |
files:
|
| 3 |
-
asr_model_file: exp/asr_marathi_conf_old_try_3conf_16Mbin_4grad/
|
|
|
|
| 4 |
python: "3.9.23 | packaged by conda-forge | (main, Jun 4 2025, 17:57:12) \n[GCC 13.3.0]"
|
| 5 |
-
timestamp:
|
| 6 |
torch: 2.3.0+cu121
|
| 7 |
yaml_files:
|
| 8 |
asr_train_config: exp/asr_marathi_conf_old_try_3conf_16Mbin_4grad/config.yaml
|
|
|
|
|
|
| 1 |
+
espnet: '202604'
|
| 2 |
files:
|
| 3 |
+
asr_model_file: exp/asr_marathi_conf_old_try_3conf_16Mbin_4grad/60epoch.pth
|
| 4 |
+
lm_file: exp/lm_marathi_char_lm/6epoch.pth
|
| 5 |
python: "3.9.23 | packaged by conda-forge | (main, Jun 4 2025, 17:57:12) \n[GCC 13.3.0]"
|
| 6 |
+
timestamp: 1792538684.854284
|
| 7 |
torch: 2.3.0+cu121
|
| 8 |
yaml_files:
|
| 9 |
asr_train_config: exp/asr_marathi_conf_old_try_3conf_16Mbin_4grad/config.yaml
|
| 10 |
+
lm_train_config: exp/lm_marathi_char_lm/config.yaml
|