Maskinöversättning · Engelskt original

Tvingad justering

MLX och CoreML använder samma Whisper-style ingångsfunktioner: 128 Slaney-normalized mel bins från en exakt 400-punkts STFT vid 16 kHz, med en 160-prov hop och ett periodiskt Hann-fönster.

Qwen3-ForcedAligner ger ord-nivå tidsstämpel anpassning för ljud. Det utför en icke-autoregressiv enda framåt pass för att anpassa varje ord i en transkript till sin exakta position i ljudvågformen.

Hur det fungerar

Avkodaren klassificerar varje ords start- och sluttidsstämplar. Korrektion använder en längst nondecreasing subsequence (LIS med lika värden tillåtna), bevarande av delade gränser och välja de tidigaste ankare när kedjor har lika längd. Out-of-order värden använder närmaste grannkorrigering eller interpolering. MLX utesluter förutsägelser bortom ljudtiden från sina ankare.

FastighetVärde
InriktningsmetodTimestamp klassificering med icke-ökande korrigering
Timestamp Resolution80 ms
Utgångsklasser5000
InferenslägeIcke-autoregressiva (enda framåt pass)

MLX och CoreML runtimes placerar två timestamp slots efter varje ord: word<timestamp><timestamp>. Den första förutsäger ordets start, och den andra dess slut. En slot innan ordet skiftar förutsägelser på föregående ord.

CLI Användning

Anpassa en ljudfil. Om inget transkript tillhandahålls transkriberas ljudet automatiskt först med Qwen3-ASR:

.build/release/speech align recording.wav

Ge ett känt transkript för att hoppa över automatisk transkription:

.build/release/speech align recording.wav --text "The quick brown fox jumps over the lazy dog"

Alternativ

# Specify transcript text directly
.build/release/speech align recording.wav --text "known transcript"

# Choose ASR model for auto-transcription step
.build/release/speech align recording.wav --model 1.7b

# Specify aligner model variant
.build/release/speech align recording.wav --aligner-model default

# Set language
.build/release/speech align recording.wav --language en

Språkstöd

Passar Pass --language matcha ljudets språk. Modellen är officiellt utbildad på 11 språk (en, zh, ja, ko, es, fr, de, ru, det, pt, ar); preprocessorn segmenterar också japanska morfemer, koreanska ord, kinesiska per-karaktär, och thai / Lao / Khmer / Burmese / Tibetan infödd via Apples NLTokenizerKombinera märken (Devanagari matras, thailändska vokaler, etc.) bevaras så ord som नमस्ते och สวัสดี Stanna intakt.

Modellvarianter

Flera modellvarianter finns tillgängliga, handelsstorlek för noggrannhet:

VariantModell IDStorlek
MLX 4-bitars (standard)aufklarer/Qwen3-ForcedAligner-0.6B-4bit~979 MB
MLX 8-bitarsaufklarer/Qwen3-ForcedAligner-0.6B-8bit~1.3 GB
MLX bf16aufklarer/Qwen3-ForcedAligner-0.6B-bf16~1.8 GB
CoreML INT4aufklarer/Qwen3-ForcedAligner-0.6B-CoreML-INT4~662 MB
CoreML INT8aufklarer/Qwen3-ForcedAligner-0.6B-CoreML-INT8~1.1 GB

CoreML inriktning standarder till .cpuAndNeuralEngine för kodaren och .cpuAndGPU för textdecoder. SPEECH_COREML_COMPUTE_UNITS överskrider båda. De publicerade dekoderbuntarna kan producera felaktiga tidsstämplar på Neural Engine eller all-noll timestamps med cpuOnly.

Explicit cpuOnly massor av INT8 och FP16 modeller väljer text_decoder_cpu_v1, vars RMS normalisering använder Float32 med de ursprungliga inlärda vikterna. Kör en online-belastning för att ladda ner denna bunt; en gammal offline cache fortfarande innehåller arvsavkodaren. GPU utförande fortsätter att använda text_decoderINT8 normaliseringsreparation matchar alla 22 referensgränser på macOS 15.8.2; fysisk-iPhone validering förblir separat.

Välj en variant med --aligner-model:

.build/release/speech align recording.wav --aligner-model aufklarer/Qwen3-ForcedAligner-0.6B-8bit

Output Format

Riktaren utgångar en rad per ord med start och slut tidsstämplar på några sekunder:

[0.24 - 0.48] The
[0.48 - 0.72] quick
[0.72 - 1.04] brown
[1.04 - 1.36] fox
[1.36 - 1.68] jumps
[1.68 - 1.92] over
[1.92 - 2.08] the
[2.08 - 2.40] lazy
[2.40 - 2.80] dog

Varje timestamp-par indikerar start- och sluttid för ordet i ljudet, vid 80 ms upplösning.

Long-audio hantering

Klassificeringshuvudet kan ta upp till 400 sekunder i princip (5000 klasser × 80 ms), men på den levererade Qwen3-ForcedAligner-0.6B modellen är tillförlitligt utbildad upp till ca 270 sekunder . Förflutet den punkten, modellen avger bullriga tidsstamp index och LIS efterbehandling kollapsar varje spårningsord på samma tidsstämpel.

CLI hanterar detta automatiskt: lång ljud är chunked vid mättnadspunkten och re-justerad. Du kommer att se ett en-line-meddelande när chunking sparkar in:

Audio 306.2s saturated after word 690 (272.6s); chunking remaining 33.6s (pass 2)

Ställ in ALIGN_DEBUG=1 för att dumpa rå vs. korrigerade tidsstämpelindex när du undersöker felaktiga utgångar.

Känd begränsning: ledande icke-tal

När ljudet börjar med icke-tal (musikintro, lång tystnad), stämplar modellen ofta det första ordet nära 0 sekunder eftersom klassificeraren inte har någon uppfattning om "tal har inte börjat ännu". Workaround: trim den ledande icke-tal innan du går, eller kör en VAD pre-pass med Silero för att hitta den faktiska talstarten.

Viktigt

När ingen --text tillhandahålls, går alignern först en full Qwen3-ASR transkriptionspass, anpassar sedan den resulterande texten. Detta innebär att den första körningen laddar både ASR modellen och aligner modellen. Tillhandahålla --text hoppar över ASR