Downloads · 30 days
564
69% of all-time downloads
17slever17/Qwen3-ForcedAligner-Ultra
Qwen3-ForcedAligner-Ultra is a automatic speech recognition model from 17slever17. Use it when you need speech turned into text. It is set up for transformers. The card lists the license as apache-2.0.
<p align="center" <img src="https://huggingface.co/17slever17/Qwen3-ForcedAligner-Ultra/resolve/main/assets/qwen3-forced-aligner-ultra-banner.png" alt="Qwen3-ForcedAligner-Ultra" width="100%" </p
Downloads · 30 days
564
69% of all-time downloads
All-time downloads
818
Public
Parameters
918M
5.5 GB on disk
Likes
3
Public
Click a slice to open those files.
.safetensors1.8 GB · 99%
From the Hugging Face model README
Qwen3-ForcedAligner-Ultra is a multilingual forced aligner derived from
Qwen/Qwen3-ForcedAligner-0.6B. It is designed for precise word timestamps on
heterogeneous conversational, accented, noisy, and code-switched speech, even
when the supplied transcript is not a literal match for the audio.
An optional small Local Head refines boundaries inside the selected acoustic
island at 10 ms resolution. This addresses the inherent 80 ms timestamp-bin
resolution of Qwen: the main model can select the correct acoustic island but
cannot physically place every boundary with finer precision on that grid. The main
Qwen model handles global word-to-audio alignment; the Local Head then refines
the boundary inside a bounded +/-60 ms neighborhood.
124.95 ms to 34.95 ms and >1000 ms errors from 1.565% to
0.195% relative to the official Qwen checkpoint on the same evaluation.26.59 ms, with 78.32% of endpoints within 25 ms.qwen-asr forced-aligner API.The model is intended for word-level forced alignment when both audio and a transcript are available. Typical applications include subtitle timing, transcript repair, speech-dataset preparation, dubbing tools, and timestamping ASR output that contains occasional substitutions, insertions, or omissions.
Supported languages are Chinese, English, Cantonese, French, German, Italian, Japanese, Korean, Portuguese, Russian, and Spanish. Chinese, English, French, German, Italian, Japanese, Korean, Russian, and Spanish received the most direct fine-tuning and evaluation coverage; Cantonese and Portuguese retain the underlying Qwen support and should be validated for the target domain.
All accuracy results use one recording-disjoint multilingual evaluation:
6.5h of audio;105,022 start/end timestamp endpoints;FIXED means the official Qwen fix_timestamp() post-processing was applied
once. MMS and WhisperX use their native word boundaries and do not receive
Qwen-specific post-processing. Lower is better for error metrics; higher is
better for accuracy and RTFx.
| Model | t <= 10 ms | t <= 25 ms | t <= 50 ms | t <= 100 ms |
|---|---|---|---|---|
| Official Qwen3-ForcedAligner-0.6B, FIXED | 22.087 | 46.203 | 77.597 | 91.050 |
| Qwen3-ForcedAligner-Ultra, FIXED | 26.148 | 55.207 | 89.886 | 96.663 |
| Qwen3-ForcedAligner-Ultra + Local Head, FIXED | 47.113 | 78.315 | 91.821 | 96.768 |
| MMS-300M-1130 | 9.188 | 26.144 | 55.769 | 84.202 |
| Model | MAE, ms | P90 | P95 | P97 | P99 | >240 ms | >500 ms | >1000 ms |
|---|---|---|---|---|---|---|---|---|
| Official Qwen3-ForcedAligner-0.6B, FIXED | 124.949 | 90.688 | 185.122 | 347.882 | 2106.159 | 4.017% | 2.379% | 1.565% |
| Qwen3-ForcedAligner-Ultra, FIXED | 34.947 | 50.425 | 75.684 | 110.000 | 260.908 | 1.113% | 0.509% | 0.195% |
| Qwen3-ForcedAligner-Ultra + Local Head, FIXED | 26.590 | 43.335 | 71.108 | 105.958 | 261.325 | 1.122% | 0.505% | 0.195% |
| MMS-300M-1130 | 98.179 | 132.240 | 207.041 | 315.325 | 1016.740 | 4.094% | 1.912% | 1.020% |
One additional external test used more difficult, less clean conversational audio outside the main multilingual evaluation. It shows that the Qwen-based models transfer substantially better to this recording style, especially in the catastrophic tail. This is a small start-boundary test, so it is presented as supporting evidence rather than the primary benchmark.
| Model | MAE, ms | P90, ms | >500 ms | t <= 50 ms |
|---|---|---|---|---|
| Official Qwen3-ForcedAligner-0.6B, FIXED | 89.66 | 105.20 | 4.10% | 75.25% |
| Qwen3-ForcedAligner-Ultra, FIXED | 60.94 | 81.40 | 2.12% | 76.10% |
| Qwen3-ForcedAligner-Ultra + Local Head, FIXED | 58.63 | 81.88 | 1.98% | 82.32% |
| MMS-300M-1130 | 373.86 | 321.38 | 8.49% | 59.69% |
| Model | End-to-end RTFx |
|---|---|
| Official Qwen3-ForcedAligner-0.6B | 150x |
| Qwen3-ForcedAligner-Ultra | 150x |
| Qwen3-ForcedAligner-Ultra + Local Head | 95x |
| MMS-300M-1130 | 180x |
| WhisperX English align model | 67x |
Qwen3-ForcedAligner-Ultra starts from the official
Qwen/Qwen3-ForcedAligner-0.6B checkpoint and uses a conservative multilingual
LoRA fine-tune with a trainable timestamp head. Three neighboring merged
checkpoints are averaged to reduce run-specific variance.
The selected training mixture contains approximately 70 hours of diverse, multilingual speech. Its clean supervision uses high-quality manual or manually corrected word boundaries. Derived examples preserve those gold timestamps while changing the input conditions:
The data mixture was balanced for linguistic and acoustic diversity rather than optimized for a single benchmark or recording style.
Install the official Qwen runtime:
pip install -U qwen-asr
import torch
from qwen_asr import Qwen3ForcedAligner
aligner = Qwen3ForcedAligner.from_pretrained(
"17slever17/Qwen3-ForcedAligner-Ultra",
dtype=torch.bfloat16,
device_map="cuda:0",
)
results = aligner.align(
audio="speech.wav",
text="The transcript to align.",
language="English",
)
for word in results[0]:
print(word.text, word.start_time, word.end_time)
Audio may also be passed as a URL, base64 payload, local path, or
(numpy_array, sample_rate) tuple. Batch inference follows the normal
qwen-asr API.
Install the official Qwen runtime and the small companion package:
pip install -U "https://huggingface.co/17slever17/Qwen3-ForcedAligner-Ultra/resolve/main/companion/dist/qwen_fa_ultra-0.1.1-py3-none-any.whl"
import torch
from qwen_fa_ultra import LocalBoundaryAligner
aligner = LocalBoundaryAligner.from_pretrained(
"17slever17/Qwen3-ForcedAligner-Ultra",
device="cuda:0",
dtype=torch.bfloat16,
head_batch_size=512,
)
results = aligner.align(
audio="audio.wav",
text="I really thought that was funny",
language="English",
)
for word in results[0]:
print(word.text, word.start_time, word.end_time)
Batch inference accepts lists for all three inputs:
results = aligner.align(
audio=["english.wav", "french.wav"],
text=["Good morning", "Bonjour tout le monde"],
language=["English", "French"],
)
from_pretrained() loads the main checkpoint through the official qwen-asr
runtime and resolves local_head/config.json, model.safetensors, and the
persisted feature normalizer from the same Hub repository. It does not require
a Transformers fork or trust_remote_code.
Internally, production inference runs Qwen exactly once, retains the timestamp
hidden states from that same forward pass, and applies official
fix_timestamp() once. It then extracts batched acoustic features only around
the FIXED boundaries and predicts bounded +/-60 ms corrections. If a pair of
corrections would make a word shorter than 10 ms, the two boundaries are
minimally projected around their shared midpoint to preserve a valid interval.
Neighboring words are then projected onto a strictly non-overlapping timeline.
When two words overlap, the runtime trusts the more accurate next-word START
and trims the previous word END to that boundary. Only when this would make the
previous word shorter than 10 ms is the shared boundary moved forward by the
minimum amount needed to preserve valid durations. RAW Local Head features are
not computed in production.
The Local Head remains optional. Loading the repository with
Qwen3ForcedAligner.from_pretrained() instead uses Ultra through the unchanged
official API and skips local refinement entirely.
@misc{17slever17_qwen3_forced_aligner_ultra_2026,
author = {17slever17},
title = {Qwen3-ForcedAligner-Ultra},
year = {2026},
publisher = {Hugging Face},
howpublished = {\url{https://huggingface.co/17slever17/Qwen3-ForcedAligner-Ultra}}
}