Automatic Speech Recognition
ESPnet
Marathi
audio

Usage

import librosa
from espnet2.bin.asr_inference import Speech2Text

# from_pretrained also loads the bundled character LM; these are the settings
# behind the reported 24.9 % test WER (lm_weight=0.0 gives the 28.5 % no-LM result)
speech2text = Speech2Text.from_pretrained(
    model_tag="espnet/marathi_lrec2020",
    beam_size=20,
    ctc_weight=0.5,
    lm_weight=0.3,
)
# the model takes 16 kHz mono audio (the recipe upsamples the 8 kHz recordings)
speech, rate = librosa.load("audio.wav", sr=16000, mono=True)
text, *_ = speech2text(speech)[0]
print(text)

ESPnet2 ASR model

espnet/marathi_lrec2020

This model was trained by Aniket Tathe using marathi_lrec2020/asr1 recipe in espnet.

Demo: How to use in ESPnet2

Follow the ESPnet installation instructions if you haven't done that already.

cd espnet
# run.sh and the configs of this model come from espnet/espnet#6939; until it is merged, first run
# git fetch https://github.com/espnet/espnet pull/6939/head
git checkout a97a3bb6854ba84892cec5bb6c100f01c1b02326
pip install -e .
cd egs2/marathi_lrec2020/asr1
./run.sh --skip_data_prep false --skip_train true --download_model espnet/marathi_lrec2020

Model

  • ASR model: exp/asr_train_raw_char_sp/valid.acc.ave_10best.pth (valid.acc.ave.pth in the recipe), the average of the 10 epochs with the best validation accuracy (epochs 21 to 30 of 30). Character Conformer (3 encoder blocks, 256-dim, 3-block Transformer decoder), hybrid CTC/attention (ctc_weight: 0.3), label smoothing 0.1, Adam lr: 0.0005 with 5000 warmup steps, SpecAugment, speed perturbation 0.9/1.0/1.1, training utterances up to 12 s. The recipe's configuration is conf/train.yaml. The training job read the same settings from conf/tuning/train_lsm0.1.yaml, which differs from conf/train.yaml only in its comment line, so config and output_dir in the ASR config below name that file.
  • Language model: exp/lm_train_lm_char/valid.loss.ave_5best.pth (valid.loss.ave.pth in the recipe), a character LSTM LM (4 layers, 650 units, tied embeddings, dropout 0.3) trained with conf/train_lm.yaml on the 73,893 training transcripts.
  • Decoding: beam 20, ctc_weight: 0.5, lm_weight: 0.3 (conf/decode.yaml); without the LM, lm_weight: 0.0 (conf/tuning/decode_no_lm.yaml).
  • Data: crowdsourced Marathi read speech of Abraham et al. (LREC 2020), from the IIT Bombay IndicCorpora page. The train/dev/test split is a random 80/10/10 split by sentence ID generated by the recipe, not an official split: test sentences are unseen, but all 31 speakers appear in every set, so the results cannot be compared with prior work.

The previous model in this repository (the epoch-60 checkpoint of the original 2025 run, test WER 24.9 % with the LM and 27.3 % without, corpus level) is still available at revision c5268ee.

RESULTS

Environments

  • date: Tue Nov 10 03:14:41 CST 2026
  • python version: 3.12.15 (main, Oct 13 2026, 16:52:04) [GCC 15.3.0]
  • espnet2 version: espnet2 202610.post2
  • pytorch version: pytorch 2.11.0+cu128
  • Git hash: b544aaec64edfb478f1fb6f140c6822754450be9
    • Commit date: Tue Nov 10 03:14:28 2026 -0600

exp/asr_train_raw_char_sp

WER

dataset Snt Wrd Corr Sub Del Ins Err S.Err
decode_lm_lm_train_lm_char_valid.loss.ave_asr_model_valid.acc.ave/marathi_test 9301 63548 77.7 19.9 2.4 2.6 24.9 76.3
decode_no_lm_asr_model_valid.acc.ave/marathi_test 9301 63548 74.1 22.9 3.0 2.6 28.5 81.5

CER

dataset Snt Wrd Corr Sub Del Ins Err S.Err
decode_lm_lm_train_lm_char_valid.loss.ave_asr_model_valid.acc.ave/marathi_test 9301 347697 91.3 5.0 3.7 1.9 10.6 76.3
decode_no_lm_asr_model_valid.acc.ave/marathi_test 9301 347697 90.9 5.4 3.7 2.0 11.1 81.5

TER

dataset Snt Wrd Corr Sub Del Ins Err S.Err

exp/asr_train_raw_char_sp/decode_no_lm_asr_model_valid.acc.ave

WER

dataset Snt Wrd Corr Sub Del Ins Err S.Err
org/marathi_dev 9277 66369 76.4 21.1 2.4 2.1 25.7 80.5

CER

dataset Snt Wrd Corr Sub Del Ins Err S.Err
org/marathi_dev 9277 367271 91.4 5.1 3.5 1.7 10.3 80.5

TER

dataset Snt Wrd Corr Sub Del Ins Err S.Err

exp/asr_train_raw_char_sp/decode_lm_lm_train_lm_char_valid.loss.ave_asr_model_valid.acc.ave

WER

dataset Snt Wrd Corr Sub Del Ins Err S.Err
org/marathi_dev 9277 66369 79.8 18.3 1.9 2.2 22.5 75.2

CER

dataset Snt Wrd Corr Sub Del Ins Err S.Err
org/marathi_dev 9277 367271 91.8 4.6 3.5 1.6 9.7 75.2

TER

dataset Snt Wrd Corr Sub Del Ins Err S.Err

Licence

The training data (Abraham et al., LREC 2020) was released to the public free of cost, without an explicit licence. We are confirming the licence with the corpus authors and will update this card when they answer.

Dataset reference

@inproceedings{abraham-etal-2020-crowdsourcing,
    title = "Crowdsourcing Speech Data for Low-Resource Languages from Low-Income Workers",
    author = "Abraham, Basil and Goel, Danish and Siddarth, Divya and Bali, Kalika and Chopra, Manu and Choudhury, Monojit and Joshi, Pratik and Jyoti, Preethi and Sitaram, Sunayana and Seshadri, Vivek",
    booktitle = "Proceedings of the Twelfth Language Resources and Evaluation Conference",
    year = "2020",
    address = "Marseille, France",
    publisher = "European Language Resources Association",
    url = "https://aclanthology.org/2020.lrec-1.343",
    pages = "2819--2826",
}

ASR config

expand
config: conf/tuning/train_lsm0.1.yaml
print_config: false
log_level: INFO
drop_last_iter: false
dry_run: false
iterator_type: sequence
valid_iterator_type: null
output_dir: exp/asr_train_lsm0.1_raw_char_sp
ngpu: 1
seed: 777
num_workers: 8
num_att_plot: 3
dist_backend: nccl
dist_init_method: env://
dist_world_size: null
dist_rank: null
local_rank: 0
dist_master_addr: null
dist_master_port: null
dist_launcher: null
multiprocessing_distributed: false
unused_parameters: false
sharded_ddp: false
use_deepspeed: false
deepspeed_config: null
gradient_as_bucket_view: true
ddp_comm_hook: null
cudnn_enabled: true
cudnn_benchmark: false
cudnn_deterministic: true
use_tf32: false
collect_stats: false
write_collected_feats: false
max_epoch: 30
patience: null
val_scheduler_criterion:
- valid
- loss
early_stopping_criterion:
- valid
- loss
- min
best_model_criterion:
-   - valid
    - acc
    - max
-   - valid
    - loss
    - min
keep_nbest_models: 10
nbest_averaging_interval: 0
grad_clip: 5.0
grad_clip_type: 2.0
grad_noise: false
accum_grad: 4
no_forward_run: false
resume: true
train_dtype: float32
use_amp: false
log_interval: null
use_matplotlib: true
use_tensorboard: true
create_graph_in_tensorboard: false
use_wandb: false
wandb_project: null
wandb_id: null
wandb_entity: null
wandb_name: null
wandb_model_log_interval: -1
wandb_allow_val_change: true
detect_anomaly: false
use_adapter: false
adapter: lora
save_strategy: all
adapter_conf: {}
pretrain_path: null
init_param: []
ignore_init_mismatch: false
freeze_param: []
num_iters_per_epoch: null
batch_size: 20
valid_batch_size: null
batch_bins: 16000000
valid_batch_bins: null
category_sample_size: 10
upsampling_factor: 0.5
category_upsampling_factor: 0.5
dataset_upsampling_factor: 0.5
dataset_scaling_factor: 1.2
max_batch_size: null
min_batch_size: 1
train_shape_file:
- exp/asr_stats_raw_char_sp/train/speech_shape
- exp/asr_stats_raw_char_sp/train/text_shape.char
valid_shape_file:
- exp/asr_stats_raw_char_sp/valid/speech_shape
- exp/asr_stats_raw_char_sp/valid/text_shape.char
batch_type: numel
valid_batch_type: null
fold_length:
- 80000
- 150
sort_in_batch: descending
shuffle_within_batch: false
sort_batch: descending
multiple_iterator: false
chunk_length: 500
chunk_shift_ratio: 0.5
num_cache_chunks: 1024
chunk_excluded_key_prefixes: []
chunk_default_fs: null
chunk_max_abs_length: null
chunk_discard_short_samples: true
train_data_path_and_name_and_type:
-   - dump/raw/marathi_train_sp/wav.scp
    - speech
    - sound
-   - dump/raw/marathi_train_sp/text
    - text
    - text
valid_data_path_and_name_and_type:
-   - dump/raw/marathi_dev/wav.scp
    - speech
    - sound
-   - dump/raw/marathi_dev/text
    - text
    - text
multi_task_dataset: false
allow_variable_data_keys: false
max_cache_size: 0.0
max_cache_fd: 32
allow_multi_rates: false
valid_max_cache_size: null
exclude_weight_decay: false
exclude_weight_decay_conf: {}
optim: adam
optim_conf:
    lr: 0.0005
scheduler: warmuplr
scheduler_conf:
    warmup_steps: 5000
token_list:
- <blank>
- <unk>
- <space>
- ा
- े
- र
- ्
- क
- स
- ल
- म
- ि
- ं
- ी
- य
- त
- न
- व
- ग
- ह
- ट
- च
- प
- ड
- आ
- .
- ज
- श
- ो
- द
- ब
- अ
- ू
- ु
- '?'
- ण
- इ
- ध
- ए
- फ
- ख
- ॉ
- ॅ
- ळ
- ँ
- भ
- थ
- ठ
- ई
- झ
- ष
- उ
- ऑ
- ऊ
- घ
- ढ
- ै
- ओ
- '2'
- (
- )
- '0'
- ृ
- '-'
- ौ
- '3'
- '1'
- ऐ
- ‍
- '5'
- '8'
- छ
- '4'
- '"'
- ','
- '9'
- औ
- '!'
- ़
- ञ
- '7'
- '6'
- ९
- ऋ
- e
- g
- ३
- X
- १
- ०
- <sos/eos>
init: xavier_uniform
input_size: null
ctc_conf:
    dropout_rate: 0.0
    ctc_type: builtin
    reduce: true
    ignore_nan_grad: null
    zero_infinity: true
    brctc_risk_strategy: exp
    brctc_group_strategy: end
    brctc_risk_factor: 0.0
joint_net_conf: null
use_preprocessor: true
use_lang_prompt: false
use_nlp_prompt: false
token_type: char
bpemodel: null
non_linguistic_symbols: null
cleaner: null
g2p: null
speech_volume_normalize: null
rir_scp: null
rir_apply_prob: 1.0
noise_scp: null
noise_apply_prob: 1.0
noise_db_range: '13_15'
short_noise_thres: 0.5
aux_ctc_tasks: []
frontend: default
frontend_conf:
    fs: 16k
specaug: specaug
specaug_conf:
    apply_time_warp: true
    time_warp_window: 5
    time_warp_mode: bicubic
    apply_freq_mask: true
    freq_mask_width_range:
    - 0
    - 30
    num_freq_mask: 2
    apply_time_mask: true
    time_mask_width_range:
    - 0
    - 40
    num_time_mask: 2
normalize: global_mvn
normalize_conf:
    stats_file: exp/asr_stats_raw_char_sp/train/feats_stats.npz
model: espnet
model_conf:
    ctc_weight: 0.3
    lsm_weight: 0.1
    length_normalized_loss: false
    report_cer: true
    report_wer: true
preencoder: null
preencoder_conf: {}
encoder: conformer
encoder_conf:
    output_size: 256
    attention_heads: 4
    linear_units: 1024
    num_blocks: 3
    dropout_rate: 0.2
    positional_dropout_rate: 0.2
    attention_dropout_rate: 0.2
    input_layer: conv2d
    normalize_before: true
    macaron_style: false
    pos_enc_layer_type: rel_pos
    selfattention_layer_type: rel_selfattn
    activation_type: swish
    use_cnn_module: true
    cnn_module_kernel: 17
postencoder: null
postencoder_conf: {}
decoder: transformer
decoder_conf:
    attention_heads: 4
    linear_units: 1024
    num_blocks: 3
    dropout_rate: 0.2
    positional_dropout_rate: 0.2
    self_attention_dropout_rate: 0.2
    src_attention_dropout_rate: 0.2
preprocessor: default
preprocessor_conf: {}
required:
- output_dir
- token_list
version: 202610.post2
distributed: false

LM config

expand
config: conf/train_lm.yaml
print_config: false
log_level: INFO
drop_last_iter: false
dry_run: false
iterator_type: sequence
valid_iterator_type: null
output_dir: exp/lm_train_lm_char
ngpu: 1
seed: 0
num_workers: 1
num_att_plot: 3
dist_backend: nccl
dist_init_method: env://
dist_world_size: null
dist_rank: null
local_rank: 0
dist_master_addr: null
dist_master_port: null
dist_launcher: null
multiprocessing_distributed: false
unused_parameters: false
sharded_ddp: false
use_deepspeed: false
deepspeed_config: null
gradient_as_bucket_view: true
ddp_comm_hook: null
cudnn_enabled: true
cudnn_benchmark: false
cudnn_deterministic: true
use_tf32: false
collect_stats: false
write_collected_feats: false
max_epoch: 30
patience: 5
val_scheduler_criterion:
- valid
- loss
early_stopping_criterion:
- valid
- loss
- min
best_model_criterion:
-   - valid
    - loss
    - min
keep_nbest_models: 5
nbest_averaging_interval: 0
grad_clip: 5.0
grad_clip_type: 2.0
grad_noise: false
accum_grad: 1
no_forward_run: false
resume: true
train_dtype: float32
use_amp: false
log_interval: null
use_matplotlib: true
use_tensorboard: true
create_graph_in_tensorboard: false
use_wandb: false
wandb_project: null
wandb_id: null
wandb_entity: null
wandb_name: null
wandb_model_log_interval: -1
wandb_allow_val_change: true
detect_anomaly: false
use_adapter: false
adapter: lora
save_strategy: all
adapter_conf: {}
pretrain_path: null
init_param: []
ignore_init_mismatch: false
freeze_param: []
num_iters_per_epoch: null
batch_size: 256
valid_batch_size: null
batch_bins: 1000000
valid_batch_bins: null
category_sample_size: 10
upsampling_factor: 0.5
category_upsampling_factor: 0.5
dataset_upsampling_factor: 0.5
dataset_scaling_factor: 1.2
max_batch_size: null
min_batch_size: 1
train_shape_file:
- exp/lm_stats_char/train/text_shape.char
valid_shape_file:
- exp/lm_stats_char/valid/text_shape.char
batch_type: folded
valid_batch_type: null
fold_length:
- 150
sort_in_batch: descending
shuffle_within_batch: false
sort_batch: descending
multiple_iterator: false
chunk_length: 500
chunk_shift_ratio: 0.5
num_cache_chunks: 1024
chunk_excluded_key_prefixes: []
chunk_default_fs: null
chunk_max_abs_length: null
chunk_discard_short_samples: true
train_data_path_and_name_and_type:
-   - dump/raw/lm_train.txt
    - text
    - text
valid_data_path_and_name_and_type:
-   - dump/raw/org/marathi_dev/text
    - text
    - text
multi_task_dataset: false
allow_variable_data_keys: false
max_cache_size: 0.0
max_cache_fd: 32
allow_multi_rates: false
valid_max_cache_size: null
exclude_weight_decay: false
exclude_weight_decay_conf: {}
optim: adam
optim_conf:
    lr: 0.0005
    weight_decay: 1.0e-06
scheduler: null
scheduler_conf: {}
token_list:
- <blank>
- <unk>
- <space>
- ा
- े
- र
- ्
- क
- स
- ल
- म
- ि
- ं
- ी
- य
- त
- न
- व
- ग
- ह
- ट
- च
- प
- ड
- आ
- .
- ज
- श
- ो
- द
- ब
- अ
- ू
- ु
- '?'
- ण
- इ
- ध
- ए
- फ
- ख
- ॉ
- ॅ
- ळ
- ँ
- भ
- थ
- ठ
- ई
- झ
- ष
- उ
- ऑ
- ऊ
- घ
- ढ
- ै
- ओ
- '2'
- (
- )
- '0'
- ृ
- '-'
- ौ
- '3'
- '1'
- ऐ
- ‍
- '5'
- '8'
- छ
- '4'
- '"'
- ','
- '9'
- औ
- '!'
- ़
- ञ
- '7'
- '6'
- ९
- ऋ
- e
- g
- ३
- X
- १
- ०
- <sos/eos>
init: null
use_preprocessor: true
token_type: char
bpemodel: null
non_linguistic_symbols: null
cleaner: null
g2p: null
lm: seq_rnn
lm_conf:
    rnn_type: lstm
    nlayers: 4
    unit: 650
    tie_weights: true
    dropout_rate: 0.3
model: lm
model_conf: {}
required:
- output_dir
- token_list
version: 202610.post2
distributed: false

Citing ESPnet

@inproceedings{watanabe2018espnet,
  author={Shinji Watanabe and Takaaki Hori and Shigeki Karita and Tomoki Hayashi and Jiro Nishitoba and Yuya Unno and Nelson Yalta and Jahn Heymann and Matthew Wiesner and Nanxin Chen and Adithya Renduchintala and Tsubasa Ochiai},
  title={{ESPnet}: End-to-End Speech Processing Toolkit},
  year={2018},
  booktitle={Proceedings of Interspeech},
  pages={2207--2211},
  doi={10.21437/Interspeech.2018-1456},
  url={http://dx.doi.org/10.21437/Interspeech.2018-1456}
}





or arXiv:

@misc{watanabe2018espnet,
  title={ESPnet: End-to-End Speech Processing Toolkit},
  author={Shinji Watanabe and Takaaki Hori and Shigeki Karita and Tomoki Hayashi and Jiro Nishitoba and Yuya Unno and Nelson Yalta and Jahn Heymann and Matthew Wiesner and Nanxin Chen and Adithya Renduchintala and Tsubasa Ochiai},
  year={2018},
  eprint={1804.00015},
  archivePrefix={arXiv},
  primaryClass={cs.CL}
}
Downloads last month
55
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Paper for espnet/marathi_lrec2020