Automatic Speech Recognition
Transformers
Safetensors
Khmer
qwen3_asr
speech
audio
khmer
qwen3-asr
Eval Results (legacy)
Instructions to use seanghay/Qwen3-ASR-0.6B-Khmer with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use seanghay/Qwen3-ASR-0.6B-Khmer with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("automatic-speech-recognition", model="seanghay/Qwen3-ASR-0.6B-Khmer")# Load model directly from transformers import AutoProcessor, AutoModelForMultimodalLM processor = AutoProcessor.from_pretrained("seanghay/Qwen3-ASR-0.6B-Khmer") model = AutoModelForMultimodalLM.from_pretrained("seanghay/Qwen3-ASR-0.6B-Khmer") - Notebooks
- Google Colab
- Kaggle
| 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<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](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} | |
| } | |
| ``` | |