Downloads · 30 days
60
34% of all-time downloads
Hongleng/kasekor-asr-v0.0
kasekor-asr-v0.0 is a automatic speech recognition model from Hongleng. Use it when you need speech turned into text. It is set up for transformers. The card lists the license as apache-2.0.
A fine-tune of openai/whisper-small for Khmer (ខ្មែរ).
Downloads · 30 days
60
34% of all-time downloads
All-time downloads
179
Public
Parameters
242M
967 MB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors967 MB · 99%
From the Hugging Face model README
A fine-tune of openai/whisper-small for Khmer (ខ្មែរ).
Training, evaluation, and inference code: github.com/chamroeunhongleng/kaskor-asr · Case study: chamroeunhongleng.me/projects/kaskor-asr
This is an early, self-labelled v0.0 research checkpoint by a student, not a production transcription service. The numbers below are self-reported: there is no third-party benchmark result for this model.
| Checkpoint | Epoch | CER ↓ | WER ↓ | Eval loss |
|---|---|---|---|---|
checkpoint-27050 | 5 | 3.74% | 57.2% | 0.0356 |
Measured 2026-08-05 by the repository's own scripts/run_eval.py on the validation split: a fixed-seed 800-utterance subsample (seed 1234), greedy decoding, 448-token decode limit.
python scripts/run_eval.py --split val --beams 1 --eval-samples 800 \
--checkpoint checkpoints/checkpoint-27050
Character Error Rate is the primary metric. Khmer does not put spaces between words, so word-level WER punishes segmentation choices rather than recognition quality; WER is reported only as a secondary number, and it is not comparable to WER figures for space-delimited languages.
test has not yet been re-scored at the corrected decode limit.Earlier documentation of this model reported 17.48% CER. That was a measurement artifact, not a model result. Decoding was capped at 225 tokens — roughly 102 Khmer characters, because byte-fallback BPE spends about 2.2 tokens per Khmer character — while more than half the references are longer, so complete references were being scored against hypotheses truncated mid-word.
Raising the cap to 448 (max_target_positions) gives 3.74% on the same weights. The same cap was shipping in the kaskor CLI, so real transcriptions were being cut off too; both are fixed, and run_eval.py now records the split, sample count, beam width, and decode limit with every result so numbers from different settings are never compared.
If you are calling this model yourself, set max_new_tokens to 440 (448 minus the 4-token prompt prefix). The default of 225 in older Whisper example code will silently truncate Khmer output.
import soundfile as sf
from transformers import WhisperProcessor, WhisperForConditionalGeneration
processor = WhisperProcessor.from_pretrained("Hongleng/kasekor-asr-v0.0")
model = WhisperForConditionalGeneration.from_pretrained("Hongleng/kasekor-asr-v0.0")
audio, sr = sf.read("audio.wav") # 16 kHz mono, up to 30 s
inputs = processor(audio, sampling_rate=16_000, return_tensors="pt").input_features
ids = model.generate(inputs, language="km", task="transcribe",
num_beams=5, max_new_tokens=440)
print(processor.tokenizer.batch_decode(ids, skip_special_tokens=True)[0])
Or use the CLI from the training repository:
pip install git+https://github.com/chamroeunhongleng/kaskor-asr.git
kaskor audio.wav
Audio must be 16 kHz mono, and Whisper's receptive field is 30 seconds — longer recordings need chunking.
Research and prototyping on Khmer speech interfaces: transcription experiments, a starting checkpoint for further fine-tuning, and voice-input prototypes where a human still reviews the text.
Out of scope: medical, legal, financial, or safety-critical transcription; any decision made about a person from an automatic transcript; and speaker identification. Do not treat output as a record of what someone said without human verification.
| Base | openai/whisper-small |
| Data | 86,550 Khmer utterances (train), 4,807 (val), 4,815 (test); 16 kHz mono, NFC-normalised |
| Epochs | 5 (checkpoint-27050) |
| Batch | 8 × 2 gradient accumulation (effective 16) |
| LR / weight decay | 1e-5 / 0.01 |
| Augmentation | 40% of samples: speed 0.9–1.1, gain ±6 dB, noise at 15–30 dB SNR |
| Selection | CER-primary on the validation split |
The full pipeline — dataset inspection, manifest building, resampling, speaker-stratified splitting, mel caching, training, evaluation, export — is in the GitHub repository.
These weights are a derivative of openai/whisper-small and carry its Apache-2.0 licence. The training and evaluation code in the GitHub repository is MIT.
The raw audio is not published and its provenance is not yet documented. The corpus source, speaker consent, and redistribution terms are unresolved, which is exactly why the recordings stay private and why no dataset is released here. If you need to reproduce training rather than inference, you need your own Khmer speech data.
Chamroeun Hongleng — Phnom Penh, Cambodia · chamroeunhongleng.me · GitHub
Corrections and speaker-independent evaluations are welcome: open an issue on the training repository.