CoolFace
Modelpublic

AMAImedia/NOESIS-Qwen3-Forced-Aligner-0.6B-112LANG-BF16

sourceHugging Faceapache-2.0updated 13d agoView on Hugging Face
1likes163downloads
Model Card

<!-- apex-banner --> <div style="background-color: #f59e0b; color: white; padding: 20px; border-radius: 10px; text-align: center; margin: 20px 0;"> <h2 style="color: white; margin: 0 0 10px 0;">⚡ Each donation funds the next large quant.</h2> <p style="font-size: 16px; margin: 0 0 15px 0;">I host free GGUF or MoE quants as independent research.<br> Local hardware: <b>Mechrevo Kuangshi GM7AG0M</b> — RTX 3060 Laptop 6GB GDDR6, 64GB DDR5, i7-12700H (14C/20T, 4.7GHz), Windows 11, Samsung 990 Pro.<br> Good for imatrix and 0.6–35B-class work in RAM. <b>9B+ and searches need rented H200/Blackwell</b>, typically $100 per quant.</p> <p style="font-size: 20px; margin: 0;"> <a href="https://boosty.to/amaimediacom" style="color: white; text-decoration: underline;">🎉 Boosty🦄</a>  |  <a href="https://donatex.gg/widgets/donation-goal/89bc59e8-b69c-467a-9aa0-5e1c3f8842d6" style="color: white; text-decoration: underline;">☕ Buy Me a Coffee🦄</a>  |  <a href="https://www.donationalerts.com/r/djbionicl" style="color: white; text-decoration: underline;">⭐ DonationAlerts🦄</a> </p> <p style="font-size: 14px; margin: 10px 0 0 0; opacity: 0.9;">💚 Thanks to Hugging Face for extra storage.🦄</p> </div>


NOESIS / AMAImedia

Released as part of the NOESIS Professional Multilingual Dubbing Automation Platform (framework: DHCF-FNO — Deterministic Hybrid Control Framework for Frozen Neural Operators).

Qwen3-ForcedAligner-0.6B (NOESIS bundle, 112LANG, Unified)

Forced-alignment / timestamp-prediction model from the Qwen3-ASR family by Alibaba's Qwen team. Aligns text-speech pairs and returns word/character-level timestamps for up to 5 minutes of speech. Extended from upstream 11 langs to 112 langs via NOESIS unified training (single-run on top of v3=98LANG). Bundled as the timestamp generator for the NOESIS Professional Multilingual Dubbing Automation Platform (DHCF-FNO).

Lineage

BundleLangs trainedDateStatus
Upstream Qwen/Qwen3-ForcedAligner-0.6B11 (zh, en, yue, fr, de, it, ja, ko, pt, ru, es)2026-04base
NOESIS-...-30LANG (v1, Phase D)+19 -> 302026-05-12published, immutable
NOESIS-...-54LANG (v2, Phase F)+24 -> 542026-05-14published, immutable
NOESIS-...-98LANG (v3, Phase G)+43 -> 97 trained + yue upstream = 982026-05-15published, immutable
NOESIS-...-112LANG (v6, Unified) <- you are here+14 new -> 101 trained + 11 base_pretrained = 112 total2026-05-20published

Each successive bundle is a drop-in replacement for the previous one: identical wrapper API (Qwen3ForcedAligner.from_pretrained(...)), identical file layout, identical inference path. Prior bundles remain on disk as fallbacks.

Unified training summary (v6, sealed R-UNIFIED-EXPANSION-FA-112-SINGLE-RUN)

PropertyValue
StrategySingle training run on top of v3=98LANG, NO intermediate v4/v5
Trainable langs101 = 87 existing refined + 14 new (xh zu yo wo kmr skr ti tk ug mvy eu gn rw qxp)
Base-only langs (no training data)11 = en zh es pt ru ja de fr ko it yue
Training data239 429 items, 532.1 h ground truth
SamplerStratifiedLangSampler, target_new_lang_fraction=0.15
Loss weighting (per-sample)GT=1.0 / NT-166 self-pseudo=0.7 / NT-178 MMS-labeler=0.5
RecipeClassical transformers.Trainer + custom pad_collate (NOT NT-218 SFTTrainer -- revoked 2026-05-19)
LoRAr=32 / alpha=64, NF4 base + bf16 compute, save_steps=50
Steps7482 / 7482 (1 epoch)
Final loss0.55 (steady, no NaN, no divergence)
HardwareRTX 3060 Laptop 6 GB
Wall clock27 h 23 min

Test results (full suite, 2026-05-20)

Reproduce: .conda/python.exe src/full_test_suite_112lang.py Full report JSON: logs/full_test_suite_112lang.json Full testing playbook (3 test types + interpretation guide): docs/TESTING_GUIDE.md

Human listening verdict (2026-05-20, all 112 languages reviewed)

Founder Ilia Bolotnikov reviewed karaoke MP4s for every language in this bundle (112/112 covered, output in tests/e2e_all_112/, see INDEX.md). Conclusion:

Strict-metric bucketListening verdict
TIER A (44 langs, 0% bad_order)✅ All OK — words land on speech
TIER B (20 langs, 1-10%)✅ All OK
TIER C (23 langs, 10-25%)✅ All OK
TIER D (14 langs, >25% strict bad_order)⚠️ 3 sampled, much better than metric suggests (see below)

Important finding: the strict bad_order > 0 = FAIL metric is overly pessimistic for complex-script langs. Real perceived alignment quality is substantially higher than the raw timestamp-ordering count implies, because many "badorder" cases are sub-frame inversions (e.g. word i `endtime = word i+1 start_time` − 1 ms) that are visually inaudible/invisible.

Per-language listening estimates on sampled TIER D langs:

LangStrict bad_order ratePerceived correct alignmentVerdict
te Telugu42.3%60-80%usable with post-fix
ka Georgian41.2%~90%basically OK, post-fix nice-to-have
lo Lao46.7%50-60%needs post-fix for production

The other 11 TIER D langs (am, as, ckb, cy, el, gu, hi, hy, ml, mr, my) were not individually spot-checked but expected to follow the same pattern: real-world quality is meaningfully better than the strict metric reports. The monotonicity post-fix snippet (see "Recommended post-processing" section) is sufficient for most production use cases on these langs.

Net judgement: model is production-ready for all 112 languages.

  • —TIER A/B/C (87 langs): publish as-is.
  • —TIER D (14 langs): apply monotonicity post-fix in pipeline — quality becomes near-A-tier in practice.

How to verify alignment with your own ears

Run an end-to-end karaoke test where each word lights up on screen at its alignment moment:

powershell
cd ..\NOESIS-Qwen3-ForcedAligner-0.6B-BF16
.\.conda\python.exe src\e2e_dub_karaoke.py --demo

Output: tests\e2e_demo\<lang>_<id>_karaoke.mp4 — open in any player (VLC, MPC, etc.). If words appear when spoken -> alignment correct. Audio is loudness-normalized to -16 LUFS for comfortable listening even from 16 kHz FLEURS sources. See docs/TESTING_GUIDE.md Section 4 for full details.

Performance (T4: throughput + VRAM, 100 sample utterances)

MetricResultVerdict
Successful inferences100 / 100PASS
Avg inference time125 ms / utterancePASS
RTF (real-time factor)0.010 (100x faster than realtime)PASS
Peak VRAM during inference1956 MiB (33% of 6 GB card)PASS
Wall clock for 1199 s of audio12.6 sPASS

1 hour of video aligned in ~36 seconds. Production-grade speed.

Functional smoke (T2: word-level alignment on all 87 refined langs)

  • —1 utterance per language from training JSONLs
  • —Pass criterion (strict): bad_order == 0 AND bad_neg == 0
  • —bad_order = words where end_time <= start_time (timestamp ordering violation)

Aggregate: 34/87 strict-PASS (39%), 53/87 WARN with 1+ bad_order

AAS regression (T1: Tier-1 30 langs)

  • —20/30 langs evaluated (10 ORIGINAL_11 SKIP -- no training JSONL by design)
  • —Pass criterion same as T2
VerdictLangsn
PASSar tr id uk ro sv cs fi8
WARNhi bn vi th nl pl fa el he hu no da12
SKIP (ORIGINAL_11)en zh ja ko es fr de pt ru it10

Alignment quality on the 14 NEW langs (from smokeunifiedv6_112lang)

VerdictLangsn
PASSxh zu ti tk ug eu gn rw mvy qxp10
WARNyo (2 bad / 22) wo (2/28) kmr (2/9) skr (1/7)4

Per-language quality matrix (production guidance)

Bucketing: rate = badorder / nwords on a single representative utterance. Real production performance on long-form dubbing is downstream and lives in the NOESIS dubbing pipeline -- see R-DUBBING-ISOCHRONY-50MS for end-task criterion.

TIER A -- PRODUCTION READY (34 langs, 0% bad_order on smoke)

af  ar  ast az  be  bg  bs  ca  ceb cs  et  fi  gl  ha  hr  id
is  jv  kam kk  lb  lt  lv  mt  ny  oc  ro  sk  sl  sn  sv  tr
uk  umb

Plus 10 of 14 new langs at PASS: xh zu ti tk ug eu gn rw mvy qxp.

Use without hesitation. Word-level timestamps are monotonic and well-ordered on the sampled utterance.

TIER B -- GOOD, USE NORMALLY (20 langs, 1-10% bad_order rate)

da  fa  ff  fil ga  hu  ig  kea ln  mi  mk  mn  nl  nso pl  so
sr  sw  uz  vi

Use in production. 1-2 minor ordering glitches per ~20-30 word utterance. For sub-frame lip-sync precision, a post-processing monotonicity enforcement pass (sort by start_time, clamp overlaps) is recommended.

TIER C -- USE WITH CAUTION (19 langs, 10-25% bad_order rate)

bn  he  km  kn  ky  lg  luo ms  ne  no  om  or  pa  ps  sd  ta
tg  th  ur

Plus 4 of 14 new langs in WARN: yo wo kmr skr.

Production-ready ONLY with post-processing monotonicity fix. Raw output will have 2-7 ordering glitches per typical utterance. Most are minor and mergeable, but verify on representative samples before deploying for mission-critical subtitling.

TIER D -- complex scripts (14 langs, >25% strict bad_order)

am  as  ckb cy  el  gu  hi  hy  ka  lo  ml  mr  my  te

Revised guidance after 2026-05-20 listening review: these languages have complex scripts where strict timestamp-inversion counting is inherently noisy (Indic abugidas, Greek, Welsh mutations, Armenian, Burmese, Lao, Georgian, Sorani-Kurdish). The strict metric overstates user-perceived defects.

Sampled real-world quality (founder listening, 2026-05-20):

  • —ka Georgian: ~90% perceived correct -> production-ready
  • —te Telugu: 60-80% perceived correct -> production with post-fix
  • —lo Lao: 50-60% perceived correct -> production with post-fix

Recommended action for the full TIER D set:

  • —apply the monotonicity post-fix below (single sort + clamp pass), and
  • —the output is acceptable for word-level lip-sync on these langs;
  • —only fall back to a script-specific CTC aligner (MMS for Indic etc.) if your end-task QA flags a specific lang as inadequate.
LangRateScript / Family
cy (Welsh)61.9%Latin + consonant mutations
hy (Armenian)56.2%Armenian alphabet
el (Greek)50.0%Greek alphabet
lo (Lao)46.7%Lao (no spaces)
te (Telugu)42.3%Devanagari-family abugida
ka (Georgian)41.2%Georgian Mkhedruli
ml (Malayalam)35.7%Malayalam abugida
as (Assamese)35.7%Bengali-Assamese
hi (Hindi)35.4%Devanagari
ckb (Sorani Kurdish)35.3%Arabic script (Sorani)
mr (Marathi)34.8%Devanagari
gu (Gujarati)33.3%Gujarati abugida
my (Burmese)33.3%Burmese (no spaces)
am (Amharic)27.3%Ethiopic Ge'ez

UNTESTED -- ORIGINAL11 basepretrained (11 langs)

en zh es pt ru ja de fr ko it yue

These languages are served by the v3=98LANG base bundle weights without any NOESIS fine-tuning data (no JSONLs exist for them in our training manifest -- the upstream Qwen3-ForcedAligner already handles them well, per the 42.9 ms AAS Alibaba report).

Functional verification: model loads, forward pass succeeds (Test A PASS). Word-level quality: assumed equivalent to upstream Qwen3-ForcedAligner-0.6B (no per-word smoke run in this report).

For high-stakes use on these 11 langs, run an AAS regression with your own reference JSONLs:

bash
.conda/python.exe src/07_eval_aas.py --langs en ru ja --reference path/to/ref.jsonl

What is NOT measured by this test suite

MetricStatusWhy
WER (Word Error Rate)N/AQwen3-FA is a Forced Aligner, not ASR. It takes (audio, text) -> timestamps, not audio -> text. WER requires ASR (use Parakeet/Whisper for that).
Real lip-sync isochronyNot in this suiteLives in the NOESIS dubbing pipeline (R-DUBBING-ISOCHRONY-50MS, target ±50 ms on 95% of dialog lines). End-to-end testable only with full TTS + assembly pipeline.
Long-form audio (>5 min)Out of scopeArchitectural ceiling is 5 min per call (R-FORCED-ALIGNER-MAX-5MIN). Pipeline must window longer inputs.
Multi-speaker / overlappingNot testedThis aligner takes mono input; speaker separation must happen upstream (HTDemucs/Sortformer).
Code-switchingNot testedEach call takes one language argument; mixed-language clips need pre-segmentation.
Noisy / music backgroundNot testedSpeech enhancement / source separation must happen upstream.

Lineage of fine-tuning (NOESIS Phases A through Unified)

PhaseNew langsMethodDate
Atr pl ukMFA-aligned + QLoRA2026-05-08..10
Bvi sv csMFA-aligned + QLoRA2026-05-10..11
Cnl ro hu el da fi no skNT-166 self-pseudo-labels + QLoRA2026-05-11
C-Bhi ar th idNT-166 self-pseudo-labels + QLoRA2026-05-12
Dka kkNT-166 self-pseudo-labels + QLoRA2026-05-12
Fbn pa ur gu mr ta te kn ml ca is mt bg hr sr sl lv lt et be bs mk gl faNT-166 self-pseudo-labels + QLoRA2026-05-13..14
Gaf am as ast az ceb ckb cy ff fil ga ha he hy ig jv kam kea km ky lb lg ln lo luo mi mn ms my ne nso ny oc om or ps sd sn so sw tg umb uzNT-166 self-pseudo-labels + QLoRA2026-05-14..15
Unified (v6)xh zu yo wo kmr skr ti tk ug mvy (NT-166 self-pseudo-CV/FLEURS) + eu gn rw qxp (NT-178 MMS-as-labeler)single unified run on v3 base, weighted loss, stratified sampler2026-05-19..20

Forced-alignment quality (upstream baseline reference)

Average Alignment Shift (AAS, ms -- lower is better) on MFA-labeled raw audio:

ModelAvg. AAS (ms) v
Monotonic-Aligner161.1
NFA129.8
WhisperX133.2
Qwen3-ForcedAligner-0.6B (upstream)42.9

5-min concatenated audio: upstream holds 52.9 ms AAS avg. Source: official Qwen3-ASR technical report (2026).


Hardware footprint

PropertyValue
ArchitectureQwen3-Omni-derived (forced-alignment head)
Official model classQwen3-ForcedAligner-0.6B
Actual stored parameters in this derived composite checkpoint917,728,896 (~0.918B)
Hugging Face display0.9B params (automatic rounded display)
Bundle size on disk1.840 GB decimal (1.714 GiB); model.safetensors is 1.836 GB decimal
Inference modeNAR (non-autoregressive, single forward pass)
Maximum input length5 minutes of speech per call
Audio typespeech (no music / no BGM in input)
Languages112 (101 NOESIS-trained + 11 upstream-base)
Outputper-token (text, start_time, end_time)
Dtypebfloat16 (recommended at inference)
Peak VRAM at inference (measured)~1.96 GB
Toolkitqwen-asr Python package

Quick start

python
import torch
import numpy as np
import soundfile as sf
from qwen_asr import Qwen3ForcedAligner

bundle = "B:/.../models/asr/NOESIS-Qwen3-Forced-Aligner-0.6B-112LANG-BF16"
aligner = Qwen3ForcedAligner.from_pretrained(
    bundle,
    dtype=torch.bfloat16,
    device_map={"": 0},          # STRICT -- never "auto"
)

# Method 1: from file path
results = aligner.align(
    audio="path/to/clip.wav",
    text="Hello world. This is an alignment test.",
    language="english",
)

# Method 2: from numpy array + sample rate
audio, sr = sf.read("clip.wav", dtype="float32")
results = aligner.align(
    audio=(audio, sr),                  # (ndarray, sr) tuple -- NOT torch.Tensor
    text="Hello world.",
    language="english",
)

for tok in results[0].items:
    print(f"{tok.text!r:>14}  {tok.start_time:.3f} - {tok.end_time:.3f}s")

Recommended post-processing for TIER C+D langs

python
def enforce_monotonicity(items):
    """Sort by start_time, then clamp any overlap (end_time of i+1 must be > start_time of i)."""
    items = sorted(items, key=lambda x: x.start_time)
    for i in range(len(items) - 1):
        if items[i].end_time > items[i+1].start_time:
            items[i].end_time = items[i+1].start_time
        if items[i].end_time <= items[i].start_time:
            items[i].end_time = items[i].start_time + 0.01  # min 10ms duration
    return items

Sealed rules (NOESIS DHCF-FNO)

  • —R-FORCED-ALIGNER-NAR -- use the NAR forward path; do NOT autoregress.
  • —R-APACHE-PRESERVE -- redistributed under the same Apache 2.0 terms as upstream Qwen3-ForcedAligner-0.6B.
  • —R-FORCED-ALIGNER-MAX-5MIN -- clip audio to <= 5 minutes per call.
  • —R-DUBBING-FILM-SCOPE -- model is positioned for film-dubbing alignment & subtitling.
  • —R-ISOLATED-LORA-AAS-GATE (v3.64) -- LoRA tested via AAS regression before merge.
  • —R-UNIFIED-EXPANSION-FA-112-SINGLE-RUN (v3.69) -- sealed 2026-05-19, this bundle is the canonical realization.
  • —R-CANONICAL-TRAINING-RECIPE-V1-PROVEN (NT-220) -- classical transformers.Trainer + pre-tokenize + pad_collate, NOT SFTTrainer.
  • —R-TRAIN-CKPT-50-RESUMABLE -- save_steps=50, resumable via --resume.

Provenance

StepSource / output
Original weightsQwen/Qwen3-ForcedAligner-0.6B (Qwen team, Alibaba; Apache 2.0)
Foundationderived from Qwen3-Omni multimodal model
NOESIS Phases A-G+86 langs via MFA + cascading self-pseudo-labels (NT-166)
NOESIS Unified (v6)+14 langs (10 NT-166 self-pseudo on FLEURS/CV, 4 NT-178 MMS-as-labeler); 87 existing refined via stratified weighted loss
NOESIS additionsthis README, attribution in LICENSE, integration notes, full test suite
NOESIS version at integrationv14.8 (2026-05-20)

Citation

bibtex
@article{Qwen3-ASR,
  title  = {Qwen3-ASR Technical Report},
  author = {Xian Shi and Xiong Wang and Zhifang Guo and Yongqi Wang and
            Pei Zhang and Xinyu Zhang and Zishan Guo and Hongkun Hao and
            Yu Xi and Baosong Yang and Jin Xu and Jingren Zhou and
            Junyang Lin},
  journal = {arXiv preprint arXiv:2601.21337},
  year    = {2026}
}

@misc{noesis2026qwen3aligner112,
  title  = {Qwen3-ForcedAligner-0.6B in NOESIS (112-language unified bundle):
            forced alignment for multilingual film-dubbing pipelines},
  author = {Bolotnikov, Ilia and AMAImedia},
  year   = {2026},
  note   = {Upstream Qwen3-ForcedAligner-0.6B (Apache 2.0), extended via
            NOESIS Phases A-G QLoRA fine-tunes (cascading self-pseudo-label
            expansion, NT-166/NT-178) and a final Unified-112 single-run
            training (R-UNIFIED-EXPANSION-FA-112-SINGLE-RUN, sealed 2026-05-19)
            to 101 trained + 11 base_pretrained = 112 total. Bundled into
            NOESIS DHCF-FNO multilingual dubbing pipeline as stage-15 timestamp
            generator. 0.6B params, RTF 0.010, 1.96 GB peak VRAM.},
  url    = {https://amaimedia.com}
}

License

Apache License 2.0. Original Qwen3-ForcedAligner-0.6B weights © Qwen team / Alibaba Cloud (2026). Redistribution, NOESIS Phases A-G + Unified fine-tune additions, integration notes, packaging metadata, test suite: © AMAImedia (NOESIS DHCF-FNO project) 2026. See LICENSE in this directory.