Alignement forcé

Qwen3-ForcedAligner fournit un alignement d'horodatages au niveau du mot pour l'audio. Il effectue une unique passe avant non-autorégressive pour aligner chaque mot d'une transcription à sa position précise dans la forme d'onde audio.

Fonctionnement

L'aligneur utilise un alignement CTC (Connectionist Temporal Classification) avec une étape de correction de monotonie LIS (Longest Increasing Subsequence). Cela garantit que les horodatages sont toujours dans l'ordre, même lorsque la sortie CTC brute contient de légères incohérences.

PropriétéValeur
Méthode d'alignementCTC avec correction de monotonie LIS
Résolution des horodatages80 ms
Classes de sortie5000
Mode d'inférenceNon-autorégressif (une seule passe avant)

Utilisation en CLI

Aligner un fichier audio. Si aucune transcription n'est fournie, l'audio est automatiquement transcrit d'abord avec Qwen3-ASR :

.build/release/speech align recording.wav

Fournissez une transcription connue pour sauter la transcription automatique :

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

Options

# Spécifier directement le texte de la transcription
.build/release/speech align recording.wav --text "known transcript"

# Choisir le modèle ASR pour l'étape de transcription automatique
.build/release/speech align recording.wav --model 1.7b

# Spécifier la variante de modèle d'aligneur
.build/release/speech align recording.wav --aligner-model default

# Définir la langue
.build/release/speech align recording.wav --language en

Prise en charge des langues

Passez --language correspondant à la langue de l'audio. Le modèle est officiellement entraîné sur 11 langues (en, zh, ja, ko, es, fr, de, ru, it, pt, ar) ; le préprocesseur segmente également les morphèmes japonais, les mots coréens, le chinois caractère par caractère, ainsi que le thaï / lao / khmer / birman / tibétain nativement via le NLTokenizer d'Apple. Les marques combinantes (mātrās devanagari, voyelles thaïes, etc.) sont préservées, ainsi des mots comme नमस्ते et สวัสดी restent intacts.

Variantes du modèle

Plusieurs variantes de modèle sont disponibles, arbitrant entre taille et précision :

VarianteID de modèleTaille
MLX 4 bits (par défaut)aufklarer/Qwen3-ForcedAligner-0.6B-4bit~979 Mo
MLX 8 bitsaufklarer/Qwen3-ForcedAligner-0.6B-8bit~1,3 Go
MLX bf16aufklarer/Qwen3-ForcedAligner-0.6B-bf16~1,8 Go
CoreML INT4aufklarer/Qwen3-ForcedAligner-0.6B-CoreML-INT4~662 Mo
CoreML INT8aufklarer/Qwen3-ForcedAligner-0.6B-CoreML-INT8~1,1 Go

Sélectionnez une variante avec --aligner-model :

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

Format de sortie

L'aligneur produit une ligne par mot avec les horodatages de début et de fin en secondes :

[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

Chaque paire d'horodatages indique les temps de début et de fin du mot dans l'audio, à une résolution de 80 ms.

Audio long

La tête de classification peut adresser jusqu'à 400 secondes en théorie (5000 classes × 80 ms), mais sur le modèle livré Qwen3-ForcedAligner-0.6B la plage entraînée de manière fiable atteint environ 270 secondes. Au-delà, le modèle produit des indices d'horodatage bruités et le post-traitement LIS replie tous les mots de fin sur le même horodatage.

La CLI gère cela automatiquement : l'audio long est segmenté au point de saturation puis réaligné. Vous verrez un message d'une ligne lorsque le découpage se déclenche :

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

Définissez ALIGN_DEBUG=1 pour afficher les indices d'horodatage bruts et corrigés lorsque vous diagnostiquez des sorties mal alignées.

Limitation connue : non-parole en début

Lorsque l'audio commence par du contenu non vocal (intro musicale, long silence), le modèle place souvent le premier mot près de 0 seconde car le classifieur n'a pas la notion de « la parole n'a pas encore commencé ». Solution de contournement : coupez le contenu non vocal initial avant l'alignement, ou exécutez une passe VAD préalable avec Silero pour trouver le véritable début de la parole.

Important

Lorsqu'aucun --text n'est fourni, l'aligneur exécute d'abord une passe complète de transcription Qwen3-ASR, puis aligne le texte résultant. Cela signifie que la première exécution charge à la fois le modèle ASR et le modèle d'aligneur. Fournir --text saute l'étape ASR et ne charge que l'aligneur.