फ़ोर्स्ड अलाइनमेंट
Qwen3-ForcedAligner ऑडियो के लिए शब्द-स्तरीय timestamp अलाइनमेंट प्रदान करता है। यह एक non-autoregressive single forward pass करता है ताकि प्रत्येक शब्द को ट्रांसक्रिप्ट में ऑडियो वेवफ़ॉर्म में उसकी सटीक स्थिति से अलाइन कर सके।
यह कैसे काम करता है
अलाइनर LIS (Longest Increasing Subsequence) monotonicity सुधार चरण के साथ CTC (Connectionist Temporal Classification) अलाइनमेंट का उपयोग करता है। यह सुनिश्चित करता है कि timestamps हमेशा क्रम में हों, भले ही raw CTC आउटपुट में मामूली असंगतियाँ हों।
| प्रॉपर्टी | मान |
|---|---|
| अलाइनमेंट विधि | LIS monotonicity सुधार के साथ CTC |
| Timestamp resolution | 80 ms |
| आउटपुट classes | 5000 |
| इन्फ़रेंस मोड | नॉन-ऑटोरिग्रेसिव (सिंगल फ़ॉरवर्ड पास) |
CLI उपयोग
एक ऑडियो फ़ाइल को अलाइन करें। यदि कोई ट्रांसक्रिप्ट प्रदान नहीं किया गया है, तो ऑडियो को पहले Qwen3-ASR का उपयोग करके स्वचालित रूप से ट्रांसक्राइब किया जाता है:
.build/release/speech align recording.wav
स्वचालित ट्रांसक्रिप्शन को छोड़ने के लिए एक ज्ञात ट्रांसक्रिप्ट प्रदान करें:
.build/release/speech align recording.wav --text "The quick brown fox jumps over the lazy dog"
विकल्प
# 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
भाषा समर्थन
ऑडियो की भाषा के अनुसार --language पास करें। मॉडल आधिकारिक रूप से 11 भाषाओं (en, zh, ja, ko, es, fr, de, ru, it, pt, ar) पर प्रशिक्षित है; प्रीप्रोसेसर जापानी मॉर्फीम, कोरियाई शब्द, चीनी वर्ण-दर-वर्ण, और थाई / लाओ / ख़्मेर / बर्मी / तिब्बती को Apple के NLTokenizer के माध्यम से मूल रूप से विभाजित करता है। संयोजी चिह्न (देवनागरी मात्राएँ, थाई स्वर आदि) संरक्षित रहते हैं, ताकि नमस्ते और สวัสดี जैसे शब्द अक्षत बने रहें।
मॉडल वेरिएंट
कई मॉडल वेरिएंट उपलब्ध हैं, जो सटीकता के लिए आकार का व्यापार करते हैं:
| वेरिएंट | मॉडल ID | आकार |
|---|---|---|
| MLX 4-bit (डिफ़ॉल्ट) | 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 |
--aligner-model के साथ एक वेरिएंट चुनें:
.build/release/speech align recording.wav --aligner-model aufklarer/Qwen3-ForcedAligner-0.6B-8bit
आउटपुट फ़ॉर्मैट
अलाइनर प्रति शब्द एक line आउटपुट करता है जिसमें सेकंड में start और end timestamps होते हैं:
[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
प्रत्येक timestamp जोड़ी 80 ms resolution पर ऑडियो में शब्द के start और end समय को इंगित करती है।
लंबे ऑडियो का प्रबंधन
Classify head सिद्धांत रूप में 400 सेकंड तक address कर सकता है (5000 classes × 80 ms), लेकिन shipped Qwen3-ForcedAligner-0.6B मॉडल लगभग 270 सेकंड तक ही reliably trained है। उससे आगे, मॉडल noisy timestamp indices उत्सर्जित करता है और LIS post-processing सभी अंतिम शब्दों को एक ही timestamp पर समेट देती है।
CLI इसे स्वचालित रूप से संभालती है: लंबे ऑडियो को saturation point पर chunked किया जाता है और फिर से align किया जाता है। Chunking सक्रिय होने पर आपको एक-पंक्ति का संदेश दिखाई देगा:
Audio 306.2s saturated after word 690 (272.6s); chunking remaining 33.6s (pass 2)
Misaligned outputs की जांच करते समय raw और corrected timestamp indices को dump करने के लिए ALIGN_DEBUG=1 set करें।
ज्ञात सीमा: leading non-speech
जब ऑडियो non-speech (music intro, लंबा silence) से शुरू होता है, तो मॉडल अक्सर पहले शब्द को 0 सेकंड के पास stamp करता है क्योंकि classifier के पास "speech अभी शुरू नहीं हुई" की कोई धारणा नहीं है। Workaround: align करने से पहले leading non-speech को trim करें, या वास्तविक speech start खोजने के लिए Silero के साथ VAD pre-pass चलाएं।
जब कोई --text प्रदान नहीं किया जाता है, तो अलाइनर पहले एक पूर्ण Qwen3-ASR ट्रांसक्रिप्शन pass चलाता है, फिर परिणामी टेक्स्ट को अलाइन करता है। इसका अर्थ है कि पहला रन ASR मॉडल और अलाइनर मॉडल दोनों को लोड करता है। --text प्रदान करना ASR चरण को छोड़ देता है और केवल अलाइनर लोड करता है।