yuriyvnv/Qwen3-ASR-1.7B-PT
ποΈ Qwen3-ASR-1.7B-PT β Portuguese Speech Recognition
<div align="center"> <img src="https://img.shields.io/badge/Parameters-1.7B-red" alt="1.7B Parameters"> <img src="https://img.shields.io/badge/Modality-Speech%20%E2%86%92%20Text-purple" alt="Speech to Text"> <img src="https://img.shields.io/badge/Language-Portuguese-green" alt="Portuguese"> <img src="https://img.shields.io/badge/Task-ASR-blue" alt="Automatic Speech Recognition"> <img src="https://img.shields.io/badge/Base-Qwen3--ASR--1.7B-orange" alt="Base model"> <img src="https://img.shields.io/badge/Precision-bf16-lightgrey" alt="bf16"> <img src="https://img.shields.io/badge/License-Apache--2.0-yellow" alt="Apache-2.0"> </div>
<br/>
A Portuguese-specialised automatic speech recognition (ASR) model, fine-tuned from Qwen/Qwen3-ASR-1.7B. It outputs cased, punctuated Portuguese text and works as a drop-in replacement for the base model.
Update. v2 release. The v1 run already gave us a clear picture of the learning curve on Portuguese (eval loss and WER plateaued around epoch 4 of 6, with -33% relative WER vs zero-shot), so for this final release we are no longer using the validation split to pick hyperparameters. Instead we fold CV22-pt train + validation together with the WAVe-filtered synthetictranscriptpt corpus into one training set to maximise the data the model sees, train for just 4 epochs (the point at which v1 converged), and validate only on the held-out CV17-pt and CV22-pt test sets. The goal is the strongest possible Portuguese model for production use, not another methodological ablation.
On Common Voice 17 (test) it reaches 8.11% WER (down from 12.63% zero-shot, -35.8% relative).
π Results
WER and CER on held-out Common Voice test sets β same samples, same protocol, no test-time tricks. "Zero-shot" is the base Qwen/Qwen3-ASR-1.7B called with language="Portuguese". The fine-tuned numbers are bold.
Lower is better. Both held-out test sets see roughly a one-third relative reduction in word error rate versus the already-strong base model.
π¬ Reproducibility note. Both the zero-shot baseline and the fine-tuned numbers above were measured with the same evaluation function (train_qwen3_asr.evaluate_model), the same greedy decoding settings, and the same reference normalisation (see next section). This is an apples-to-apples comparison.π§Ή Reference / target normalisation
Common Voice transcripts are crowd-sourced and inconsistent in casing and trailing punctuation. To give the model a clean, predictable target distribution we apply a small, deterministic written-form normalisation to every reference at load time, both during training and during evaluation:
- Capitalise the first letter if it is lowercase.
- Collapse trailing dots β any sequence of
.,β¦,..,...at the end is replaced with a single.. - Append a terminal period if the sentence does not already end in terminal punctuation (
. ! ? β¦) or a closing bracket / quote () ] } " 'etc.).
The exact function lives in src/evaluation/score_written_form.py of the project repository. Concretely:
Because the same normalisation is applied to references used for the zero-shot baseline above, the gain reported in the results table reflects the fine-tune itself β not a metric quirk caused by mismatched references.
π How to use
Install the official qwen-asr package, then load this model exactly the same way you would load the base Qwen3-ASR:
pip install qwen-asrimport torch
from qwen_asr import Qwen3ASRModel
model = Qwen3ASRModel.from_pretrained(
"yuriyvnv/Qwen3-ASR-1.7B-PT",
dtype=torch.bfloat16,
device_map="cuda:0",
)
result = model.transcribe(audio="audio.wav", language="Portuguese")
print(result[0].text)Batch inference, automatic language detection, streaming, and vLLM serving all work identically to the base model β see the upstream Qwen3-ASR documentation for details.
π οΈ Training
Dataset: yuriyvnv/synthetic_transcript_pt + fsicoli/common_voice_22_0 (pt) β Common Voice 22 Portuguese train + validation combined with synthetictranscriptpt (cvhighquality, WAVe-filtered CV17-Portuguese), shuffled with the run seed. After duration filtering and transcript-length filtering: 61,579 training samples and 9,641 validation samples.
Recipe: follows the official QwenLM SFT recipe with our local hyperparameters:
Trained on a single H100. The best checkpoint was selected by validation loss.
For the repository with all the scripts to train the QWEN models are located at : link
π Acknowledgements
This model would not exist without the work of others. Thank you to:
- The Qwen team at Alibaba Cloud for releasing Qwen3-ASR-1.7B β the backbone of this fine-tune β together with a clean, reproducible SFT recipe and the Qwen3-ASR Technical Report.
- The Mozilla Common Voice community for collecting and releasing the Portuguese speech corpus used for training and evaluation (Common Voice 22, Common Voice 17 mirror).
- Every contributor who recorded, validated, or transcribed a clip in Common Voice. This model is, very literally, your voices.
π Citation
If this model is useful in your work, please cite the base Qwen3-ASR report:
@article{qwen3asr2025,
title = {Qwen3-ASR Technical Report},
author = {Qwen Team},
year = {2025},
url = {https://arxiv.org/abs/2601.21337}
}