--- 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**](https://huggingface.co/Qwen/Qwen3-ASR-0.6B) on ~700 hours of Khmer speech from the [**DDD-Cambodia/khmer-speech-dataset**](https://huggingface.co/datasets/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`](https://pypi.org/project/qwen-asr/) package (transformers backend): ```bash pip install -U qwen-asr ``` ```python 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](https://huggingface.co/datasets/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…`); 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](https://github.com/QwenLM/Qwen3-ASR) by the Alibaba Qwen team. ## Citation If you use this model, please cite: ```bibtex @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: ```bibtex @misc{qwen3asr, title = {Qwen3-ASR}, author = {Qwen Team}, year = {2025}, url = {https://github.com/QwenLM/Qwen3-ASR} } ```