soundsgoodai/Zipformer-cr-ctc-transducer-XL-290M
Zipformer CR-CTC Transducer XL 290M
Offline English ASR model based on the Icefall/K2 pruned transducer Zipformer-CR-CTC recipe. The model was trained with a transducer objective and CR-CTC (Consistency-Regularized CTC) auxiliary loss, and supports Icefall transducer and CTC decoding.
Files
model.pt: Zipformer CR-CTC transducer checkpointbpe.model: SentencePiece BPE modeltokens.txt: Icefall token table exported frombpe.modelconfig.yaml: model architecture, feature extraction, tokenizer, Zipformer model, decoding settings, and Hugging Face Hub download-metrics query file
Evaluation
Open ASR Leaderboard English short-form result, decoded with modified_beam_search and beam size 6:
Dataset WERs:
Training Data
The model was trained on a combined English training mixture built from the training portions of the datasets below.
Common Voice Scripted Speech 25.0 - English and Common Voice Spontaneous Speech 3.0 - English are the English scripted and spontaneous Common Voice releases checked on May 12, 2026.
For data normalization, the training transcripts were processed with direct LLM normalization using a self-hosted GLM-4.7 setup, plus custom agentic workflows built in collaboration with Claude Code 4.7 and Codex 5.4.
Training
The model was trained with the k2-fsa/Icefall framework, PyTorch 2.11, and CUDA 13.0 on 8 NVIDIA B300 GPUs using bf16 automatic mixed precision.
Usage With Icefall
From an Icefall checkout, download this model repo locally:
huggingface-cli download soundsgoodai/Zipformer-cr-ctc-transducer-XL-290M \
--local-dir Zipformer-cr-ctc-transducer-XL-290MRun offline decoding through Icefall. Input audio must already be 16 kHz:
cd icefall/egs/librispeech/ASR
PYTHONPATH=../../.. python zipformer/pretrained.py \
--checkpoint /path/to/Zipformer-cr-ctc-transducer-XL-290M/model.pt \
--tokens /path/to/Zipformer-cr-ctc-transducer-XL-290M/tokens.txt \
--method modified_beam_search \
--beam-size 6 \
--num-encoder-layers "2,2,4,5,4,2" \
--downsampling-factor "1,2,4,8,4,2" \
--feedforward-dim "512,1024,2048,3072,2048,1024" \
--num-heads "4,4,4,8,4,4" \
--encoder-dim "192,384,768,1024,768,384" \
--encoder-unmasked-dim "192,192,320,384,320,192" \
--query-head-dim "32" \
--value-head-dim "12" \
--pos-head-dim "4" \
--pos-dim 48 \
--cnn-module-kernel "31,31,15,15,15,31" \
--decoder-dim 512 \
--joiner-dim 512 \
--context-size 2 \
--causal false \
--chunk-size "16,32,64,-1" \
--left-context-frames "64,128,256,-1" \
--use-transducer true \
--use-ctc true \
--use-attention-decoder false \
--use-cr-ctc true \
/path/to/audio_1.wav \
/path/to/audio_2.wavFor CTC decoding, use Icefall's CTC entrypoint with the same architecture settings:
cd icefall/egs/librispeech/ASR
PYTHONPATH=../../.. python zipformer/pretrained_ctc.py \
--checkpoint /path/to/Zipformer-cr-ctc-transducer-XL-290M/model.pt \
--tokens /path/to/Zipformer-cr-ctc-transducer-XL-290M/tokens.txt \
--method ctc-decoding \
--sample-rate 16000 \
--num-encoder-layers "2,2,4,5,4,2" \
--downsampling-factor "1,2,4,8,4,2" \
--feedforward-dim "512,1024,2048,3072,2048,1024" \
--num-heads "4,4,4,8,4,4" \
--encoder-dim "192,384,768,1024,768,384" \
--encoder-unmasked-dim "192,192,320,384,320,192" \
--query-head-dim "32" \
--value-head-dim "12" \
--pos-head-dim "4" \
--pos-dim 48 \
--cnn-module-kernel "31,31,15,15,15,31" \
--decoder-dim 512 \
--joiner-dim 512 \
--context-size 2 \
--causal false \
--chunk-size "16,32,64,-1" \
--left-context-frames "64,128,256,-1" \
--use-transducer true \
--use-ctc true \
--use-attention-decoder false \
--use-cr-ctc true \
/path/to/audio_1.wav \
/path/to/audio_2.wavThe architecture and decoding values above are also recorded in config.yaml.
Decoding Methods
The model supports the following Icefall decoding methods:
Transducer:
greedy_searchmodified_beam_searchfast_beam_search
CTC:
ctc-decoding
The reported Open ASR Leaderboard result uses modified_beam_search with beam size 6. CTC decoding is supported, but the table above does not report CTC WERs.
Feature Extraction And Resampling
For this model, use Kaldi-style fbank features. kaldifeat and kaldi-native-fbank are the recommended feature extraction backends.
Audio should be mono 16 kHz before feature extraction. For sample-rate conversion, audioop.ratecv is recommended because it matches the resampling path used for evaluation. On Python 3.13 and newer, use an audioop-compatible package such as audioop-lts.
Output Formatting
The model emits normalized English text with punctuation and capitalization. It does not automatically capitalize the first word of every sentence unless that word is normally capitalized, such as a proper noun, honorific, acronym, or similar named expression.
The model also normalizes common written forms, including numbers, dates, and currency, to digit-based forms.
Open ASR Leaderboard Evaluation
The open_asr_leaderboard/soundsgoodai runner downloads this model repo, resamples audio to 16 kHz with audioop, computes fbank features with kaldi-native-fbank, and decodes with Icefall modified_beam_search.
cd open_asr_leaderboard/soundsgoodai
bash run_zipformer.shNotes
- The model expects 16 kHz mono audio.
- The packaged leaderboard decoding configuration uses transducer
modified_beam_searchwith beam size 6. - The checkpoint is an offline ASR model and is not intended for streaming decoding.
- The checkpoint includes both transducer and CR-CTC heads, so Icefall loading should use
--use-ctc trueand--use-cr-ctc true.
References
- Zipformer paper: Zengwei Yao, Liyong Guo, Xiaoyu Yang, Wei Kang, Fangjun Kuang, Yifan Yang, Zengrui Jin, Long Lin, and Daniel Povey. "Zipformer: A faster and better encoder for automatic speech recognition." https://arxiv.org/abs/2310.11230
- CR-CTC paper: Zengwei Yao, Wei Kang, Xiaoyu Yang, Fangjun Kuang, Liyong Guo, Han Zhu, Zengrui Jin, Zhaoqing Li, Long Lin, and Daniel Povey. "CR-CTC: Consistency regularization on CTC for improved speech recognition." https://arxiv.org/abs/2410.05101
- Icefall: https://github.com/k2-fsa/icefall
- k2: https://github.com/k2-fsa/k2
- kaldifeat: https://csukuangfj.github.io/kaldifeat/intro.html
- kaldi-native-fbank: https://github.com/csukuangfj/kaldi-native-fbank
- Python
audioop.ratecv: https://docs.python.org/3.11/library/audioop.html#audioop.ratecv - audioop-lts for Python 3.13+: https://pypi.org/project/audioop-lts/
- ESB datasets: https://huggingface.co/datasets/esb/datasets
- LibriSpeech: https://www.openslr.org/12/
- Earnings22: https://github.com/revdotcom/speech-datasets/tree/main/earnings22
- AMI Meeting Corpus: https://www.idiap.ch/webarchives/sites/www.amiproject.org/ami-scientific-portal/meeting-corpus/
- Common Voice Scripted Speech 25.0 - English: https://mozilladatacollective.com/datasets/cmndapwry02jnmh07dyo46mot
- Common Voice Spontaneous Speech 3.0 - English: https://datacollective.mozillafoundation.org/datasets/cmn1pv5hi00uto1072y1074y7
- GigaSpeech: https://github.com/SpeechColab/GigaSpeech
- SPGISpeech: https://huggingface.co/datasets/kensho/spgispeech
- TED-LIUM Release 3: https://lium.univ-lemans.fr/en/ted-lium3/
- VoxPopuli: https://github.com/facebookresearch/voxpopuli
