Ak Kula kanatlarını açtığında…

balbal-v2

A small Turkish speech recognition model that runs fast on a CPU (45M parameters, 15M outside the memory table): Conformer-CTC with the balbal looped refiner and a product-key acoustic memory, decoded with a 6-gram token KenLM. Trained on about 5,000 hours of audio.

  • Fast on a CPU: 236× faster than real time on 8 threads.
  • Phone calls: 9.46% WER / 18.44% sigWER on Mu-Bench Turkish (official harness, GPT-4.1 judge), down from 11.93 / 25.18 for balbal-v1.
  • Read speech: 5.22% WER on FLEURS Turkish test (balbal-v1: 6.54).

Larger and more accurate sibling: balbal-v2-manas (313M parameters, Turkish and English). Code (Apache 2.0): https://github.com/erayyap/balbal

Model page, benchmarks, browser demo and Android app: erayy.com/balbal · Türkçe

Model

Part Details
Acoustic model Conformer-CTC, 16 layers, d_model 176, 80 mel, 4x subsampling (40 ms frames)
Looped refiner 2-layer Transformer refiner (width 192) on top of the encoder output, 3 passes (each pass takes the previous CTC distribution as input)
Acoustic memory Product-key memory: 500×500 subkeys, 4 heads, top-16, value dim 120, 3-frame context
Vocabulary SentencePiece 1,024 pieces + CTC blank
Language model 6-gram token KenLM over the SentencePiece pieces
Parameters 45.4M, of which 30.0M are the memory table (only a few of its rows are read per frame)

Output is cased, punctuated text with per-word timestamps. Numbers come out as digits through the inverse text normalization in the code (--no-itn keeps the spoken words). Audio longer than 30 s is cut into 30 s chunks. balbal-v2 is a Turkish model; it also transcribes English, at a lower accuracy (below).

Results

Turkish

FLEURS tr test (743 clips) and Mu-Bench tr-TR (846 phone-call clips); balbal models with KenLM decoding, the other open models with their default inference. FLEURS is scored with balbal-normalizer (balbal/normalizer in the code repository); Mu-Bench with its official harness and GPT-4.1 judge. sigWER is the share of utterances with at least one meaning-changing error. CPU speed: seconds of audio per second of processing, same 100 clips, batch 1, 8 threads of an AMD Ryzen AI Max+ 395.

Model Parameters Mu-Bench WER Mu-Bench sigWER FLEURS WER / CER CPU speed
balbal-v2-manas 313M 8.20 14.89 4.06 / 1.21 123×
balbal-v2 45M 9.46 18.44 5.22 / 1.52 236×
Mihu AI STT-v2 66M 10.91 21.16 5.26 / 1.62 16×
balbal-v1 45M 11.93 25.18 6.54 / 1.85 96×
Qwen3-ASR 1.7B 1.7B 14.76 30.61 6.52 / 1.71 0.8×
Duyu-small 49M 15.70 35.22 6.62 / 1.88 30×
UfakZeka Kulak 32M 17.87 38.18 6.72 / 1.98 152×
Seda v0.2 66M 17.92 34.52 6.20 / 1.96 19×
omniASR LLM 7B 7B 21.10 44.68 – –
Whisper large-v3-turbo 809M 24.65 47.04 4.07 / 1.18 1.6×
Whisper large-v3 1.55B – – 3.71 / 1.08 0.9×
omniASR CTC 7B 7B – – 7.71 / 1.91 2.4×

English

The 8 English Open ASR Leaderboard test sets (168 hours), scored with the leaderboard's English normalizer, KenLM decoding. WER %.

Model LibriSpeech clean LibriSpeech other AMI Earnings-22 VoxPopuli GigaSpeech SPGISpeech TED-LIUM Average
balbal-v2 10.32 19.35 31.52 30.86 18.18 23.43 16.17 14.96 20.60
balbal-v2-manas 2.97 6.45 13.31 15.61 7.82 12.30 5.73 5.20 8.67

Files

model.json                       {"model": "balbal-v2"}
model.pt                         PyTorch weights (175 MB)
tokenizer/                       SentencePiece model, vocab
lm/model.binary                  6-gram token KenLM, no KIRAAT text (482 MB)
lm/tokenizer.model               same SentencePiece model
onnx/model.onnx (+ .data)        fast CPU graph: balbal custom operators (102 MB)
onnx/model-plain.onnx (+ .data)  same model, standard onnxruntime operators only (187 MB)

This folder is the MODEL_DIR the code expects. Both ONNX graphs match PyTorch within 0.04 WER points on our Turkish dev set.

The KenLM in lm/ is built without KIRAAT text. Removing it does not cost accuracy; on our Turkish dev set (721 clips), WER / CER %:

KenLM balbal-v2-manas balbal-v2
with KIRAAT text 7.16 / 2.79 8.85 / 3.38
without KIRAAT text (released) 7.13 / 2.79 8.74 / 3.33

Usage

Linux x86-64, Python 3.11 or 3.12:

pip install balbal
balbal run speech.wav          # downloads this model on the first run
balbal run --json speech.wav   # text + per-word timestamps
import balbal
model = balbal.load("balbal-v2")
print(model.transcribe("speech.wav")["text"])

The balbal library ships the fast graph's custom operators and the native beam decoder prebuilt. From source (Linux x86-64, Python 3.12):

git clone https://github.com/erayyap/balbal && cd balbal
pip install -r requirements/cpu.txt
python inference/build_native.py           # KenLM beam decoder
inference/kernels/build.sh                 # custom operators of the fast graph
huggingface-cli download erayyapagci/balbal-v2 --local-dir balbal-v2
python inference/transcribe.py --model-dir balbal-v2 speech.wav

--runtime onnx runs the plain graph (standard onnxruntime only), --runtime torch runs PyTorch, --hotwords "Eray,Hasan" biases the decoder toward given words. Streaming (WebSocket server, browser microphone demo) is in inference/streaming/. See the code repository for the Python API and training.

Limitations

  • Short clips: very short clips (a word or two) carry little context: errors are more frequent, and Turkish and English words can get mixed up.
  • Long recordings: offline transcription cuts long audio into 30-second chunks; there is no speaker diarization.

License

The weights, tokenizer and language model in this repository are released under the balbal Community License 1.0 (see LICENSE):

  • Free for research and any non-commercial use, including fine-tuning and sharing adapted versions.
  • Free for small businesses' commercial use: under US$500k revenue in the last 12 months, fewer than 25 people and under US$250k raised from outside investors. You may use it to run your own business, including on your own customer calls.
  • Not covered, at any size: selling or providing speech recognition, transcription, voice agents or other voice AI to others (as a product, API or platform) built on balbal-v2. The license grants no rights beyond the uses above.

The code in github.com/erayyap/balbal is licensed separately under Apache 2.0.

The acoustic encoder descends from NVIDIA's stt_en_conformer_ctc_small (CC BY 4.0), through balbal-v1.

Acknowledgements

Citation

@misc{yapagci2026balbalv2,
  author       = {Eray Yapa{\u{g}}c{\i}},
  title        = {balbal-v2: Turkish Speech Recognition on a CPU},
  year         = {2026},
  month        = oct,
  howpublished = {\url{https://erayy.com/balbal}},
  note         = {Code: \url{https://github.com/erayyap/balbal}}
}

Türkçe özet

balbal-v2, CPU'da hızlı çalışan küçük bir Türkçe konuşma tanıma modeli: Conformer-CTC, 3 geçişli döngülü düzeltici ve ürün-anahtar akustik bellek; 6-gram token KenLM ile çözülür. Yaklaşık 5.000 saat ses üzerinde eğitildi, 45M parametre.

Kurulum: pip install balbal, sonra balbal run ses.wav (model ilk çalıştırmada iner).

  • 8 CPU thread'inde gerçek zamanın 236 katı hız (balbal-v1: 96 kat).
  • Mu-Bench Türkçe (resmi puanlama, GPT-4.1 hakem): %9,46 WER / %18,44 sigWER (balbal-v1 %11,93 / %25,18; balbal-v2-manas %8,20 / %14,89).
  • FLEURS Türkçe test: %5,22 WER (balbal-v1 %6,54; balbal-v2-manas %4,06).

lm/ içindeki KenLM, KIRAAT metni olmadan kuruldu; bu doğruluğa mal olmadı (DEV WER 8,85 → 8,74).

Çok kısa kliplerde (bir iki kelime) bağlam az: hatalar daha sık, Türkçe ve İngilizce kelimeler karışabiliyor.

Ağırlıklar balbal Community License 1.0 ile lisanslıdır (LICENSE): araştırma ve ticari olmayan her kullanım serbest; küçük işletmeler (son 12 ayda 500 bin dolardan az gelir, 25 kişiden az çalışan, dış yatırımcıdan 250 bin dolardan az yatırım) modeli kendi işlerinde ticari olarak da ücretsiz kullanabilir. Modelle başkalarına konuşma tanıma, transkripsiyon ya da sesli asistan ürünü, API'si veya platformu sunmak ise şirketin boyutu ne olursa olsun lisansın kapsamı dışındadır. Kod ayrı olarak Apache 2.0 lisanslıdır: github.com/erayyap/balbal.

Downloads last month
-
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for erayyapagci/balbal-v2

Finetuned
(1)
this model

Space using erayyapagci/balbal-v2 1

Collection including erayyapagci/balbal-v2

Evaluation results