Model reference · open weights
ufakzeka-kulak is an open-weight audio or speech model from ufakai. ufakzeka-kulak (BF16) weighs 126 MB; the smallest configuration that runs it is RTX 3060 12 GB.
For self-hosting, compare this build's requirements below with the GPU you plan to rent.
Summary of the ufakai/ufakzeka-kulak model card, 2026-11-05
What it is
| Released by | ufakai |
|---|---|
| Released | 2026-10-22 |
| VRAM | 126 MB for the weights |
What it runs on
| Card | One stream | Memory |
|---|---|---|
| RTX 3060 12 GB | fits | 11.6 GB |
| RTX 4060 Ti 16 GB | fits | 15.4 GB |
| RTX 3090 24 GB | fits | 23.4 GB |
| RTX 4090 24 GB | fits | 23.4 GB |
| RTX 5090 32 GB | fits | 31.0 GB |
| L40S 48 GB | fits | 44.0 GB |
| A100 80 GB | fits | 78.2 GB |
| H100 80 GB | fits | 78.1 GB |
| RTX PRO 6000 Blackwell 96 GB | fits | 93.8 GB |
| DGX Spark (GB10) 128 GB unified | fits | 107 GB |
| H200 141 GB | fits | 138 GB |
| B200 180 GB | fits | 176 GB |
From the model card
ufakzeka-kulak ("kulak" is Turkish for ear) is a small Turkish speech-to-text model by ufak AI, trained from scratch and released under Apache-2.0. It runs offline on a CPU, and the same weights ship for NeMo, transformers, sherpa-onnx, parakeet.cpp (GGUF) and parakeet-mlx (MLX).
The model is meant for transcribing Turkish speech offline on a laptop, a server or in a browser page, where a licence that allows commercial use and a known list of training sources matter. Identifying, tracking or profiling the people who speak is out of scope, and so is acting on a transcript about a person without someone checking it.
Limits:
| Property | Value |
|---|---|
| Developed by | ufak AI |
| Model | ufakzeka-kulak |
| Licence | Apache-2.0 |
| Language | Turkish |
| Size | 31,564,935 parameters; the NeMo file is 126,955,520 bytes |
| Architecture | FastConformer encoder (16 layers, width 256, 4 attention heads, time reduction 8) feeding two outputs, a token-and-duration transducer (TDT) decoder with durations 0, 1, 2, 3, 4 and a CTC head |
| Vocabulary | SentencePiece BPE, 1,024 pieces, trained only on the training transcripts after decontamination |
| Input | mono audio at 16,000 Hz, 80 log-mel features, one utterance at a time |
| Output | written Turkish, described below |
| Training | from scratch, on the sources listed under Training data; the training of this model ran on A100 80 GB GPUs for 52.3 GPU session hours, counting setup, validation passes and checkpoint saves as well as training steps |
Output. The model writes Turkish with capital letters, full stops, commas, question marks, apostrophes and hyphens inside words. Other punctuation in the training text was mapped to these (an exclamation mark to a full stop, a semicolon or a colon to a comma). Numbers are written as words, so the model writes "iki bin yirmi ikide", not 2022'de. Circumflex letters are written without the circumflex.
| Path in the repo | Runtime | Precision | Checked against NeMo on the development sets |
|---|---|---|---|
ufakzeka-kulak.nemo | NeMo 3.0.0 | float32 | the reference |
transformers-tdt/, transformers-ctc/ | transformers 5.20.1 | float32 | the same token ids as NeMo on every utterance (TDT yes, CTC yes) |
sherpa-onnx-tdt/, sherpa-onnx-ctc/ | sherpa-onnx 1.13.8 | float32 and int8 | every shipped file, at input gain 8; CTC with the caller pad |
gguf/ | parakeet.cpp v0.6.1 | f32 and q8_0 | both files, TDT and CTC |
mlx/ | parakeet-mlx 0.5.3 with mlx 0.32.4, and our feature function | float32 weights, run at bfloat16 | TDT, with our feature function |
LICENSE, ATTRIBUTION.md | the Apache-2.0 licence of the weights, and the credits of every data source |
"Checked" means that the file was decoded on Common Voice dev and FLEURS Turkish dev and its normalised WER stayed within 0.0050 of NeMo's on both sets, with no failed utterance; a reduced copy (int8, q8_0, or the MLX weights run at bfloat16) was also held to its full-precision copy by the same margin. The sherpa-onnx, parakeet.cpp and parakeet-mlx checks ran under Linux x86-64; parakeet.cpp and parakeet-mlx ran on the CPU. One SHA256SUMS file at the top level lists every file of the release, LICENSE and ATTRIBUTION.md included, except this card, SHA256SUMS itself and the Hub's .gitattributes. Add "SHA256SUMS" to the allow_patterns below, then sha256sum -c --ignore-missing SHA256SUMS (GNU coreutils) in the download folder checks the files you fetched.
Everything is in this one repo. The NeMo file sits at the top level, where NeMo's from_pretrained looks for it, and NeMo downloads only that file; each other runtime has its own folder, and the examples below download only the folder they use.
The examples below read speech.wav, one utterance of mono audio at 16,000 Hz. The install lines name the versions the files were checked with.
The checkpoint holds both the TDT decoder and the CTC head; TDT is the default.
pip install "nemo_toolkit[asr]==3.0.0"
from nemo.collections.asr.models import ASRModel
model = ASRModel.from_pretrained("ufakai/ufakzeka-kulak")
print(model.transcribe(["speech.wav"])[0].text)
model.change_decoding_strategy(decoder_type="ctc") # the CTC head
print(model.transcribe(["speech.wav"])[0].text)
pip install transformers==5.20.1 torch soundfile==0.14.0 huggingface_hub==1.33.0
import soundfile as sf
import torch
from huggingface_hub import snapshot_download
from transformers import ParakeetForTDTQuoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.
Benchmarks
As published on the model card: the maker's own numbers, not measured by AxForge.
| Task | Dataset | Metric | Score |
|---|---|---|---|
| Speech recognition | FLEURS Turkish (test) | WER (normalised) | 0.092 |
| Speech recognition | FLEURS Turkish (test) | CER (normalised) | 0.034 |
| Speech recognition | Common Voice Scripted Speech 27.0 Turkish (test) | WER (normalised) | 0.092 |
| Speech recognition | Common Voice Scripted Speech 27.0 Turkish (test) | CER (normalised) | 0.024 |