Traduzione automatica · Originale inglese

Allineamento forzato

MLX e CoreML utilizzare le stesse caratteristiche di input di Whisper: 128 Slaney-normalized mel bins da un preciso STFT da 400 punti a 16 kHz, con un hop da 160-sample e una finestra Hann periodica.

Qwen3-ForcedAligner fornisce un allineamento di timestamp a livello di parola per l'audio, esegue un singolo passaggio non autoregressivo per allineare ogni parola in una trascrizione alla sua posizione precisa nella forma d'onda audio.

Come funziona

La correzione utilizza una più lunga sottosequenza non-decreativa (LIS con uguali valori consentiti), preservando i confini condivisi e scegliendo i primi ancoraggi quando le catene hanno una lunghezza uguale. I valori fuori ordine usano la correzione più vicina o l'interpolazione. MLX

ProprietàValore
Metodo di allineamentoClassificazione dei timestamp con correzione non in diminuzione
Risoluzione dei timestamp80 m
Classi di uscita5000
Modalità di inferenzaNon autoregressivo (passo singolo)

Il MLX e CoreML runtimes posto due voltetamp slot dopo ogni parola: word<timestamp><timestamp>. Il primo prevede l'inizio della parola e il secondo la sua fine. Uno slot prima che la parola cambi le previsioni sulla parola precedente.

Uso CLI

Se non viene fornita alcuna trascrizione, l'audio viene automaticamente trascritto prima usando Qwen3-ASR:

.build/release/speech align recording.wav

Fornire una trascrizione nota per saltare la trascrizione automatica:

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

Opzioni

# 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

Supporto linguistico

Passaggio --language Il modello è ufficialmente formato in lingue 11 (en, zh, ja, ko, es, fr, de, ru, it, pt, ar); il preprocessore segmenta anche morfemi giapponesi, parole coreane, per-character cinese, e Thai / Lao / Khmer / Burmese / Tibetano in nativo tramite Apple NLTokenizer. I segni di combinazione (Devanagari matras, vocali tailandese, ecc.) sono conservati così parole come नमस्ते e สวัสดี Resta intatto.

Varianti di modello

Sono disponibili diverse varianti di modello, dimensioni di trading per l'accuratezza:

VarianteID modelloDimensione
MLX 4-bit (default)aufklarer/Qwen3-ForcedAligner-0.6B-4bit~ 979 MB
MLX 8 bitaufklarer/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

Di default di allineamento CoreML a .cpuAndNeuralEngine per l'encoder e .cpuAndGPU per il decoder di testo. SPEECH_COREML_COMPUTE_UNITS I pacchetti decoder pubblicati possono produrre timestamp errati su Neural Engine o timestamp a tutto zero con cpuOnly.

Esplicito cpuOnly selezionare i carichi dei modelli INT8 e FP16 text_decoder_cpu_v1, la cui normalizzazione RMS utilizza Float32 Eseguire un carico online per scaricare questo pacchetto; una vecchia cache offline contiene ancora il decoder legacy. GPU l'esecuzione continua a usare text_decoder. La riparazione di normalizzazione INT8 corrisponde a tutti i confini di riferimento 22 su macOS 15.8.2; la validazione fisica-iPhone rimane separata.

Seleziona una variante con --aligner-model

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

Formato di uscita

L'allineatore emette una riga per parola con timestamp di inizio e fine in pochi secondi:

[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

Ogni coppia di timestamp indica l'inizio e l'ora finale della parola nell'audio, a risoluzione di 80 ms.

Movimentazione audio a lungo

La testa classificata può affrontare fino a 400 secondi in linea di principio (5000 classi × 80 ms), ma sulla nave Qwen3-ForcedAligner-0.6B il modello è addestrato in modo affidabile fino a circa 270 secondi .

Il CLI gestisce automaticamente questo: l'audio lungo viene schiacciato al punto di saturazione e riallineato. Vedrete un messaggio di una linea quando il blocco calcia in:

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

Impostare ALIGN_DEBUG=1 per scaricare gli indici di timestamp grezzi vs. corretti durante l'indagine sulle uscite disallineate.

Limite noto: leader non-speech

Quando l'audio inizia con il non-speech (intro musicale, lungo silenzio), il modello spesso timbra la prima parola vicino 0 secondi perché il classificatore non ha alcuna nozione di "speech non ha ancora iniziato". Workaround: tagliare il primo non-speetch prima di allineare, o eseguire un VAD pre-passo con Silero per trovare il vero inizio del discorso.

Importante

Quando no --text Viene fornito, l'allineatore prima esegue un passaggio di trascrizione Qwen3-ASR completo, quindi allinea il testo risultante. Ciò significa che il primo run carica sia il modello ASR che il modello di allineatore. --text salta il passo ASR e carica solo l'allineatore.