kangkyu/icefall-asr-korean-multidomain-zipformer-2026-03-19
By kangkyu · ↓ 0 · ♥ 0 · Updated 2026-03-19
What's in this repo
This page lists the files in kangkyu/icefall-asr-korean-multidomain-zipformer-2026-03-19, including no-state-epoch-9-avg-3.onnx, with-state-epoch-9-avg-3.onnx, decoder-epoch-1-avg-1.int8.onnx and more.
- 8 ONNX models (.onnx files)
- 21 files, including 8 .onnx, 3 .wav, 2 .model, 2 .jsonl, 2 .txt, 1 .md
- Last updated 2026-03-19
ONNX files
| File | Size | Download |
|---|---|---|
| data/lm/no-state-epoch-9-avg-3.onnx | — | Download |
| data/lm/with-state-epoch-9-avg-3.onnx | — | Download |
| decoder-epoch-1-avg-1.int8.onnx | — | Download |
| decoder-epoch-1-avg-1.onnx | — | Download |
| encoder-epoch-1-avg-1.int8.onnx | — | Download |
| encoder-epoch-1-avg-1.onnx | — | Download |
| joiner-epoch-1-avg-1.int8.onnx | — | Download |
| joiner-epoch-1-avg-1.onnx | — | Download |
How to use
These ONNX files can be loaded with ONNX Runtime. To inspect a model graph, upload the file to the Netron viewer. Download links point to the original files on Hugging Face.
README
Korean Multi-Domain Zipformer ASR
A Korean ASR model finetuned on 6,863 hours across 3 domains from AI Hub, built on KsponSpeech pretrained weights using the icefall Zipformer transducer (74.78M parameters).
Key Feature: Korean-Only Output
This model outputs Korean text exclusively. All English words, numbers, and abbreviations are transcribed as their Korean pronunciations — exactly as spoken.
| Audio | Whisper / Other ASR | This model |
|---|---|---|
| "EBS 뉴스입니다" | EBS 뉴스입니다 | 이비에스 뉴스입니다 |
| "60분 남았습니다" | 60분 남았습니다 | 육십 분 남았습니다 |
| "3G 속도가 느려요" | 3G 속도가 느려요 | 쓰리쥐 속도가 느려요 |
The training data uses (written)/(spoken) pronunciation pairs where the spoken form (Korean) is the ground truth. This eliminates ambiguity — the model transcribes exactly what it hears.
ITN (Inverse Text Normalization) is recommended for display. We provide ITN dictionaries with 14,000+ written↔spoken pairs to convert Korean output back to mixed-script text (e.g. 육십 분 → 60분).
Performance
CER (Character Error Rate), spaces excluded. Our model measured with sherpa-onnx int8 greedy decoding on CPU.
| Engine | Type | KSP clean | KSP other |
|---|---|---|---|
| Ours + LM rescore | Open | 7.99% | 9.64% |
| Ours (greedy) | Open | 11.39% | 11.61% |
| Naver ClovaSpeech | Commercial API | 8.05% | 7.96% |
| OpenAI Whisper large-v2 | Open | 12.06% | 11.39% |
| Google STT API v2 | Commercial API | 11.82% | 11.50% |
Benchmark source: Awesome Korean Speech Recognition (2026-03)
Our model with LM rescoring surpasses Naver ClovaSpeech on KSP eval_clean (7.99% vs 8.05%) while being fully open-source.
With RNN-LM Rescoring (scale=0.2)
| Domain | Greedy | + LM Rescore | Improvement |
|---|---|---|---|
| KSP eval_clean | 11.39% | 7.99% | -3.40%p |
| KSP eval_other | 11.61% | 9.64% | -1.97%p |
Training Data
| Domain | Dataset | Hours | Weight |
|---|---|---|---|
| Spontaneous conversation | KsponSpeech | 969 | 10% |
| Telephone counseling | AIHub 상담음성 | 2,897 | 40% |
| Multi-speaker meeting | AIHub 회의음성 | 2,997 | 40% |
| Total | 6,863 |
Text was cleaned using domain-specific rules to handle transcription markers:
(written)/(spoken)pronunciation pairs → spoken form retainedn/b/o/speaker/noise/overlap markers → removed+stuttering → pre-correction syllables removed- Filler words (
아/,어/) → slash removed, Korean retained - PII masking (
**,OOO) → entire utterance excluded
Model Architecture
| Component | Details |
|---|---|
| Encoder | Zipformer (74.78M params) |
| Decoder | Embedding decoder |
| Joiner | Transducer joiner |
| Tokenizer | SentencePiece BPE, 5000 vocab |
| Loss | Pruned RNN-T (k2) |
| Input | 80-dim fbank, 16kHz mono |
How to Use
With sherpa-onnx (Recommended)
pip install sherpa-onnx
git lfs install
git clone https://huggingface.co/kangkyu/icefall-asr-korean-multidomain-zipformer-2026-03-19
cd icefall-asr-korean-multidomain-zipformer-2026-03-19
import sherpa_onnx
recognizer = sherpa_onnx.OfflineRecognizer.from_transducer(
encoder="encoder-epoch-1-avg-1.int8.onnx",
decoder="decoder-epoch-1-avg-1.int8.onnx",
joiner="joiner-epoch-1-avg-1.int8.onnx",
tokens="tokens.txt",
num_threads=4,
decoding_method="greedy_search",
)
stream = recognizer.create_stream()
stream.accept_wave_file("test_wavs/0.wav")
recognizer.decode(stream)
print(stream.result.text)
With RNN-LM Rescoring
recognizer = sherpa_onnx.OfflineRecognizer.from_transducer(
encoder="encoder-epoch-1-avg-1.int8.onnx",
decoder="decoder-epoch-1-avg-1.int8.onnx",
joiner="joiner-epoch-1-avg-1.int8.onnx",
tokens="tokens.txt",
num_threads=4,
decoding_method="modified_beam_search",
lm="data/lm/no-state-epoch-9-avg-3.onnx",
lm_scale=0.2,
)
Files
.
├── encoder-epoch-1-avg-1.onnx # Encoder FP32 (261MB)
├── encoder-epoch-1-avg-1.int8.onnx # Encoder INT8 (71MB) ← recommended
├── decoder-epoch-1-avg-1.onnx # Decoder FP32 (11MB)
├── decoder-epoch-1-avg-1.int8.onnx # Decoder INT8 (3MB)
├── joiner-epoch-1-avg-1.onnx # Joiner FP32 (10MB)
├── joiner-epoch-1-avg-1.int8.onnx # Joiner INT8 (3MB)
├── tokens.txt # BPE token list
├── bpe.model # SentencePiece BPE model
├── exp/
│ └── pretrained.pt # PyTorch checkpoint (857MB)
├── data/
│ ├── lang_bpe_5000/
│ │ ├── bpe.model
│ │ └── tokens.txt
│ ├── lm/
│ │ ├── no-state-epoch-9-avg-3.onnx # RNN-LM for offline rescoring (37MB)
│ │ └── with-state-epoch-9-avg-3.onnx # RNN-LM for streaming (37MB)
│ └── itn_pairs/
│ ├── counseling.jsonl # 3,943 pairs
│ └── meeting.jsonl # 10,998 pairs
└── test_wavs/
├── 0.wav, 1.wav, 2.wav
RNN Language Model
6.7M-parameter RNN-LM for rescoring.
| Property | Value |
|---|---|
| Architecture | LSTM, 2 layers, hidden 512, embed 512 |
| Vocab | Shared BPE 5000 |
| Validation PPL | 57.3 |
Use no-state-epoch-9-avg-3.onnx with OfflineRecognizer for rescoring.
Training Details
- Base model: johnBamma/icefall-asr-ksponspeech-zipformer-2024-06-24 (KsponSpeech 969h pretrained)
- Finetuning: 2 rounds on A40 GPU, pruned RNN-T loss, Eden LR scheduler
- Data format: Lhotse shar (sharded tar archives)
- Precision: BF16 mixed precision
Limitations
- Non-causal (offline) model — not suitable for real-time streaming. Use for batch/file transcription.
- Korean-only output — English words and numbers appear as Korean pronunciation. ITN post-processing needed for display.
- No punctuation — the model does not output punctuation marks.
License
Apache License 2.0.
This model was trained using AI datasets built as part of projects by the National Information Society Agency (NIA, 한국지능정보사회진흥원) of the Republic of Korea, provided through AI Hub.
Original datasets are not redistributed. Download directly from AI Hub to reproduce training.
Acknowledgments
- k2-fsa/icefall — Training framework
- k2-fsa/sherpa-onnx — Inference engine
- johnBamma — KsponSpeech pretrained baseline
- AI Hub (한국지능정보사회진흥원) — Training datasets
Model info
Created: 2026-03-18
Updated: 2026-03-19
View on Hugging FaceFiles (21)
Related models
More from kangkyu
No other models by this author.