Usage
import torchfrom qwen_asr import Qwen3ASRModel # pip install qwen-asr w = Qwen3ASRModel.from_pretrained("duclvQ/qwen3-asr-1.7b-vimd-full", dtype=torch.bfloat16, device_map="cuda:0")print(w.transcribe(audio="audio.wav", language="Vietnamese")[0].text)
Results
Held-out test split of ViMD (Vietnamese dialect speech, North + Central regions; 1,368 clips, 7.2 h, 939 speakers, none seen in training). WER/CER are computed after lowercasing and stripping punctuation, with language="Vietnamese" forced.
Table with columns: System, WER (all), CER (all), WER North, WER Central| System | WER (all) | CER (all) | WER North | WER Central |
|---|
| Qwen3-ASR-1.7B (zero-shot) | 11.56 | 8.12 | 8.56 | 15.45 |
| LoRA | 8.72 | 6.29 | 6.59 | 11.47 |
| QLoRA | 9.45 | 6.8 | 7.23 | 12.31 |
| Full fine-tune | 8.59 | 6.17 | 6.6 | 11.17 |
Training
- Base:
Qwen/Qwen3-ASR-1.7B. Data: ViMD North + Central train split, 10,346 clips (~55 h), clips <= 30 s. Transcripts are verbatim: numbers spelled out, fillers and repetitions kept.
- Target format:
language Vietnamese<asr_text>{transcript}. 2 epochs (1,294 steps), effective batch 16, cosine schedule, bf16, gradient checkpointing, seed 42.
Quantized variants (subfolders q8/ and q4/)
Weight-only HQQ quantization (no calibration data) of the LLM linear layers; the audio encoder stays bf16. Same test protocol as above, 400 random test clips (bf16 on the same clips: 8.68 WER).
Table with columns: Variant, Folder, WER, CER, GPU after load, Note| Variant | Folder | WER | CER | GPU after load | Note |
|---|
| bf16 | repo root | 8.68 | 6.29 | 3.80 GB | reference |
| 8-bit | q8/ | 8.69 | 6.29 | 2.66 GB | no measurable loss |
| 4-bit | |
6-bit (round-to-nearest simulation) lost nothing but HQQ has no 6-bit packing, so it is not published. 3-bit and 2-bit collapse with this method (WER 100%+ at q3; q2 hallucinates in all group sizes tried), so they are not published either. Calibrated methods (AWQ/GPTQ) or QAT would be needed for those.
HQQ inference in transformers is slow (it dequantizes each matmul): ~2x slower than bf16 here. These checkpoints are for memory savings and experimentation, not throughput.
# pip install qwen-asr hqq ; load_hqq_asr.py is in this repofrom huggingface_hub import snapshot_downloadfrom load_hqq_asr import load_hqq_asr path = snapshot_download("duclvQ/qwen3-asr-1.7b-vimd-full", allow_patterns=["q4/*"]) # or "q8/*"w = load_hqq_asr(path + "/q4")print(w.transcribe(audio="audio.wav", language="Vietnamese")[0].text)
Outputs begin with language Vietnamese<asr_text>; strip it (as for the bf16 model).
Caveats
- One seed and one hyperparameter setting per method; differences below ~0.5 WER points are not reliable.
- Part of the improvement over the base model is format learning: the base model writes digits (e.g. "2022") where the references spell numbers out, and handles fillers differently. Excluding digit clips and fillers, the neutralised gain for LoRA is 8.51 -> 6.69 WER (about 64% of the raw gain).
- Evaluated on ViMD only (read/spontaneous dialect speech); no claims about other domains. Check the ViMD dataset license before any commercial use of this model.
- Base model license: Apache-2.0 (Qwen3-ASR).