--- language: - pt license: apache-2.0 library_name: transformers tags: - automatic-speech-recognition - speech - qwen3-asr - qwen - portuguese - fine-tuned - common-voice datasets: - fsicoli/common_voice_22_0 - fixie-ai/common_voice_17_0 - yuriyvnv/synthetic_transcript_pt base_model: Qwen/Qwen3-ASR-1.7B pipeline_tag: automatic-speech-recognition model-index: - name: Qwen3-ASR-1.7B-PT results: - task: type: automatic-speech-recognition dataset: name: Common Voice 17 (test) type: fixie-ai/common_voice_17_0 config: pt split: test metrics: - type: wer value: 8.11 name: WER - type: cer value: 2.41 name: CER - task: type: automatic-speech-recognition dataset: name: Common Voice 22 (test) type: fsicoli/common_voice_22_0 config: pt split: test metrics: - type: wer value: 8.5 name: WER - type: cer value: 2.55 name: CER --- # πŸŽ™οΈ Qwen3-ASR-1.7B-PT β€” Portuguese Speech Recognition
1.7B Parameters Speech to Text Portuguese Automatic Speech Recognition Base model bf16 Apache-2.0

A Portuguese-specialised automatic speech recognition (ASR) model, fine-tuned from [Qwen/Qwen3-ASR-1.7B](https://huggingface.co/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 synthetic_transcript_pt 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](https://huggingface.co/Qwen/Qwen3-ASR-1.7B) called with `language="Portuguese"`. The fine-tuned numbers are **bold**. | Test set | Samples | Zero-shot WER | **Fine-tuned WER** | Ξ” WER | CER (zero-shot β†’ fine-tuned) | |---|---:|---:|---:|---:|:--:| | Common Voice 17 (test) | 9,467 | 12.63 | 8.11 | **-4.52** (-35.8%) | 3.51 β†’ 2.41 | | Common Voice 22 (test) | 9,641 | 12.91 | 8.50 | **-4.41** (-34.2%) | 3.6 β†’ 2.55 | 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: 1. **Capitalise the first letter** if it is lowercase. 2. **Collapse trailing dots** β€” any sequence of `.`, `…`, `..`, `...` at the end is replaced with a single `.`. 3. **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: | Raw reference | Normalised | |--------------------------------|----------------------------------| | `bom dia` | `Bom dia.` | | `o gato dorme...` | `O gato dorme.` | | `como estΓ‘s?` | `Como estΓ‘s?` *(unchanged)* | | `"oi"` | `"Oi"` *(closing quote β†’ no `.`)* | 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: ```bash pip install qwen-asr ``` ```python import 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](https://github.com/QwenLM/Qwen3-ASR) for details. ## πŸ› οΈ Training **Dataset:** [yuriyvnv/synthetic_transcript_pt + fsicoli/common_voice_22_0 (pt)](https://huggingface.co/datasets/yuriyvnv/synthetic_transcript_pt) β€” Common Voice 22 Portuguese train + validation combined with synthetic_transcript_pt (cv_high_quality, 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](https://github.com/QwenLM/Qwen3-ASR/tree/main/finetuning) with our local hyperparameters: | Parameter | Value | |---|---| | Learning rate | 2e-05 | | Scheduler | linear | | Warmup ratio | 0.02 | | Per-device batch size | 92 | | Gradient accumulation | 2 | | Effective batch size | 184 | | Epochs | 4.0 | | Precision | bf16 mixed | | Gradient checkpointing | enabled | | Optimizer | AdamW (fused) | 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](https://github.com/yuriyvnv/TTS-Augmented-ASR) ## πŸ™ 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](https://huggingface.co/Qwen/Qwen3-ASR-1.7B) β€” the backbone of this fine-tune β€” together with a clean, reproducible [SFT recipe](https://github.com/QwenLM/Qwen3-ASR/tree/main/finetuning) and the [Qwen3-ASR Technical Report](https://arxiv.org/abs/2601.21337). - **The Mozilla Common Voice community** for collecting and releasing the Portuguese speech corpus used for training and evaluation ([Common Voice 22](https://huggingface.co/datasets/fsicoli/common_voice_22_0), [Common Voice 17 mirror](https://huggingface.co/datasets/fixie-ai/common_voice_17_0)). - **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: ```bibtex @article{qwen3asr2025, title = {Qwen3-ASR Technical Report}, author = {Qwen Team}, year = {2025}, url = {https://arxiv.org/abs/2601.21337} } ```