Alinhamento forcado
Qwen3-ForcedAligner fornece alinhamento de timestamps por palavra para audio. Ele executa um unico forward pass nao autoregressivo para alinhar cada palavra de uma transcricao a sua posicao precisa na forma de onda do audio.
Como funciona
O aligner usa alinhamento CTC (Connectionist Temporal Classification) com uma etapa de correcao de monotonicidade LIS (Longest Increasing Subsequence). Isso garante que os timestamps estejam sempre em ordem, mesmo quando a saida CTC bruta contem pequenas inconsistencias.
| Propriedade | Valor |
|---|---|
| Metodo de alinhamento | CTC com correcao de monotonicidade LIS |
| Resolucao de timestamp | 80 ms |
| Classes de saida | 5000 |
| Modo de inferencia | Nao autoregressivo (unico forward pass) |
Uso do CLI
Alinhe um arquivo de audio. Se nao for fornecida uma transcricao, o audio e transcrito automaticamente primeiro usando Qwen3-ASR:
.build/release/speech align recording.wav
Forneca uma transcricao conhecida para pular a transcricao automatica:
.build/release/speech align recording.wav --text "The quick brown fox jumps over the lazy dog"
Opcoes
# 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
Suporte de idiomas
Passe --language correspondente ao idioma do áudio. O modelo é oficialmente treinado em 11 idiomas (en, zh, ja, ko, es, fr, de, ru, it, pt, ar); o pré-processador também segmenta morfemas japoneses, palavras coreanas, chinês caractere por caractere e tailandês / laosiano / khmer / birmanês / tibetano nativamente via NLTokenizer da Apple. Marcas combinantes (matras devanágari, vogais tailandesas etc.) são preservadas, portanto palavras como नमस्ते e สวัสดी permanecem intactas.
Variantes do modelo
Varias variantes de modelo estao disponiveis, trocando tamanho por precisao:
| Variante | ID do modelo | Tamanho |
|---|---|---|
| MLX 4-bit (padrao) | aufklarer/Qwen3-ForcedAligner-0.6B-4bit | ~979 MB |
| MLX 8-bit | aufklarer/Qwen3-ForcedAligner-0.6B-8bit | ~1.3 GB |
| MLX bf16 | aufklarer/Qwen3-ForcedAligner-0.6B-bf16 | ~1.8 GB |
| CoreML INT4 | aufklarer/Qwen3-ForcedAligner-0.6B-CoreML-INT4 | ~662 MB |
| CoreML INT8 | aufklarer/Qwen3-ForcedAligner-0.6B-CoreML-INT8 | ~1.1 GB |
Selecione uma variante com --aligner-model:
.build/release/speech align recording.wav --aligner-model aufklarer/Qwen3-ForcedAligner-0.6B-8bit
Formato de saida
O aligner emite uma linha por palavra com timestamps de inicio e fim em segundos:
[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
Cada par de timestamp indica o tempo de inicio e fim da palavra no audio, a uma resolucao de 80 ms.
Audio longo
A cabeca de classificacao pode em principio enderecar ate 400 segundos (5000 classes x 80 ms), mas no modelo distribuido Qwen3-ForcedAligner-0.6B a faixa treinada de forma confiavel chega ate cerca de 270 segundos. Alem desse ponto, o modelo emite indices de timestamp ruidosos e o pos-processamento LIS colapsa todas as palavras finais sobre o mesmo timestamp.
A CLI trata isso automaticamente: o audio longo e dividido no ponto de saturacao e realinhado. Voce vera uma mensagem de uma linha quando a divisao for acionada:
Audio 306.2s saturated after word 690 (272.6s); chunking remaining 33.6s (pass 2)
Defina ALIGN_DEBUG=1 para imprimir os indices de timestamp brutos e corrigidos ao investigar saidas desalinhadas.
Limitacao conhecida: nao-fala no inicio
Quando o audio comeca com conteudo nao-fala (intro musical, silencio prolongado), o modelo frequentemente marca a primeira palavra perto de 0 segundos porque o classificador nao tem nocao de "a fala ainda nao comecou". Solucao alternativa: corte o conteudo nao-fala inicial antes do alinhamento, ou execute uma pre-passagem de VAD com Silero para encontrar o inicio real da fala.
Quando nao e fornecido --text, o aligner primeiro executa um pass completo de transcricao Qwen3-ASR, depois alinha o texto resultante. Isso significa que a primeira execucao carrega tanto o modelo ASR quanto o modelo aligner. Fornecer --text pula a etapa de ASR e carrega apenas o aligner.