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'alignement | CTC avec correction de monotonie LIS |
| Résolution des horodatages | 80 ms |
| Classes de sortie | 5000 |
| Mode d'inférence | Non-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 :
| Variante | ID de modèle | Taille |
|---|---|---|
| MLX 4 bits (par défaut) | aufklarer/Qwen3-ForcedAligner-0.6B-4bit | ~979 Mo |
| MLX 8 bits | aufklarer/Qwen3-ForcedAligner-0.6B-8bit | ~1,3 Go |
| MLX bf16 | aufklarer/Qwen3-ForcedAligner-0.6B-bf16 | ~1,8 Go |
| CoreML INT4 | aufklarer/Qwen3-ForcedAligner-0.6B-CoreML-INT4 | ~662 Mo |
| CoreML INT8 | aufklarer/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.
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.