seanghay's picture
Update README.md
351f1cc verified
|
Raw
History Blame Contribute Delete
4.28 kB
metadata
license: apache-2.0
language:
  - km
base_model:
  - Qwen/Qwen3-ASR-0.6B
datasets:
  - DDD-Cambodia/khmer-speech-dataset
pipeline_tag: automatic-speech-recognition
library_name: transformers
tags:
  - automatic-speech-recognition
  - speech
  - audio
  - khmer
  - qwen3-asr
metrics:
  - cer
model-index:
  - name: Qwen3-ASR-0.6B-Khmer
    results:
      - task:
          type: automatic-speech-recognition
          name: Automatic Speech Recognition
        dataset:
          type: khmer
          name: Khmer held-out dev set (in-domain)
        metrics:
          - type: cer
            value: 1.96
            name: CER
      - task:
          type: automatic-speech-recognition
          name: Automatic Speech Recognition
        dataset:
          type: khmer
          name: Khmer out-of-domain set
        metrics:
          - type: cer
            value: 7.91
            name: CER

Qwen3-ASR-0.6B-Khmer

A Khmer (ខ្មែរ) automatic speech recognition model, fine-tuned from Qwen/Qwen3-ASR-0.6B on ~700 hours of Khmer speech from the DDD-Cambodia/khmer-speech-dataset. It substantially improves Khmer transcription accuracy over the base model while keeping the compact 0.6B footprint.

Results

Character Error Rate (CER, lower is better). Khmer has no spaces between words, so CER is computed space-insensitive; the out-of-domain set is additionally normalized by removing punctuation.

Evaluation set Clips CER (corpus) CER (avg) Median CER Perfect (CER=0)
In-domain dev 1,000 1.96% 1.95% 0.65% 49.2%
Out-of-domain 2,906 7.91% 8.26% 6.25% 26.4%
  • CER (corpus) = total edit distance ÷ total reference characters (micro-average).
  • CER (avg) = mean of per-clip CER (macro-average).

Usage

Install the qwen-asr package (transformers backend):

pip install -U qwen-asr
import torch
from qwen_asr import Qwen3ASRModel

model = Qwen3ASRModel.from_pretrained(
    "seanghay/Qwen3-ASR-0.6B-Khmer",
    dtype=torch.bfloat16,
    device_map="cuda:0",
    max_inference_batch_size=32,
    max_new_tokens=256,  # increase for long audio to avoid truncation
)

results = model.transcribe(
    audio="path/to/khmer.wav",  # local path, URL, base64, or (np.ndarray, sr)
)

print(results[0].text)

Audio is resampled to 16 kHz mono internally. Long recordings are automatically chunked; for long clips set a larger max_new_tokens so the transcript is not cut off.

Training

Base model Qwen/Qwen3-ASR-0.6B
Language Khmer (km)
Training data DDD-Cambodia/khmer-speech-dataset (~700 h, ~384k clips)
Epochs 3 (35,997 steps)
Effective batch size 32 (per-device 4 × grad-accum 8)
Learning rate 2e-5, linear schedule with warmup
Precision bf16
Hardware 1× NVIDIA RTX 3090 (24 GB)
Final eval loss 0.040

The model is trained to emit a language tag followed by the transcript (language Khmer<asr_text>…); the qwen-asr package parses this automatically.

Limitations

  • Tuned primarily for read/clean Khmer speech. Accuracy degrades on noisy, spontaneous, or heavily code-switched (Khmer–English) technical speech, where English terms may be transliterated phonetically into Khmer script.
  • Output is unpunctuated / minimally segmented Khmer text.
  • As with most ASR models, very long or hesitant/repetitive speech can occasionally produce repeated phrases.

License

Released under the Apache-2.0 license, inheriting the license of the base Qwen3-ASR-0.6B model.

Acknowledgements

Built on Qwen3-ASR by the Alibaba Qwen team.

Citation

If you use this model, please cite:

@misc{seanghay2026qwen3asrkhmer,
  title  = {Qwen3-ASR-0.6B-Khmer},
  author = {Seanghay},
  year   = {2026},
  howpublished = {\url{https://huggingface.co/seanghay/Qwen3-ASR-0.6B-Khmer}}
}

This model is fine-tuned from Qwen3-ASR:

@misc{qwen3asr,
  title  = {Qwen3-ASR},
  author = {Qwen Team},
  year   = {2025},
  url    = {https://github.com/QwenLM/Qwen3-ASR}
}