Форсированное выравнивание
Qwen3-ForcedAligner обеспечивает выравнивание временных меток на уровне слов для аудио. Выполняется неавторегрессивный прямой проход, чтобы выровнять каждое слово в транскрипте с его точной позицией в аудиоволне.
Как это работает
Выравнивание использует CTC (Connectionist Temporal Classification) с шагом коррекции монотонности LIS (Longest Increasing Subsequence). Это гарантирует, что временные метки всегда идут по порядку, даже если сырой вывод CTC содержит незначительные несоответствия.
| Свойство | Значение |
|---|---|
| Метод выравнивания | CTC с коррекцией монотонности LIS |
| Разрешение временных меток | 80 мс |
| Выходных классов | 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"
Опции
# Указать текст транскрипта напрямую
.build/release/speech align recording.wav --text "known transcript"
# Выбрать ASR-модель для шага авто-транскрипции
.build/release/speech align recording.wav --model 1.7b
# Указать вариант модели выравнивания
.build/release/speech align recording.wav --aligner-model default
# Установить язык
.build/release/speech align recording.wav --language en
Поддержка языков
Передайте --language, соответствующий языку аудио. Модель официально обучена на 11 языках (en, zh, ja, ko, es, fr, de, ru, it, pt, ar); препроцессор также сегментирует японские морфемы, корейские слова, китайский по иероглифам и тайский / лаосский / кхмерский / бирманский / тибетский нативно через Apple NLTokenizer. Комбинирующие знаки (деванагарские матры, тайские гласные и т. п.) сохраняются, поэтому слова вроде नमस्ते и สวัสดী остаются неповреждёнными.
Варианты модели
Доступны несколько вариантов модели с компромиссом между размером и точностью:
| Вариант | Model ID | Размер |
|---|---|---|
| MLX 4-bit (по умолчанию) | aufklarer/Qwen3-ForcedAligner-0.6B-4bit | ~979 МБ |
| MLX 8-bit | aufklarer/Qwen3-ForcedAligner-0.6B-8bit | ~1.3 ГБ |
| MLX bf16 | aufklarer/Qwen3-ForcedAligner-0.6B-bf16 | ~1.8 ГБ |
| CoreML INT4 | aufklarer/Qwen3-ForcedAligner-0.6B-CoreML-INT4 | ~662 МБ |
| CoreML INT8 | aufklarer/Qwen3-ForcedAligner-0.6B-CoreML-INT8 | ~1.1 ГБ |
Выберите вариант через --aligner-model:
.build/release/speech align recording.wav --aligner-model aufklarer/Qwen3-ForcedAligner-0.6B-8bit
Формат вывода
Выравниватель выводит по одной строке на слово с временными метками начала и конца в секундах:
[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
Каждая пара временных меток указывает время начала и конца слова в аудио с разрешением 80 мс.
Длинное аудио
Классификационная голова в принципе может адресовать до 400 секунд (5000 классов × 80 мс), но в выпущенной модели Qwen3-ForcedAligner-0.6B надёжно обученный диапазон достигает примерно 270 секунд. Дальше модель выдаёт зашумлённые индексы временных меток, а LIS-постобработка сводит все хвостовые слова к одной и той же метке.
CLI обрабатывает это автоматически: длинное аудио разрезается в точке насыщения и выравнивается заново. Когда срабатывает разрезание, появляется однострочное сообщение:
Audio 306.2s saturated after word 690 (272.6s); chunking remaining 33.6s (pass 2)
Установите ALIGN_DEBUG=1, чтобы вывести исходные и скорректированные индексы временных меток при разборе неверно выровненных результатов.
Известное ограничение: не-речь в начале
Когда аудио начинается с не-речи (музыкальное вступление, длинная тишина), модель часто ставит метку первого слова около 0 секунд, потому что у классификатора нет понятия "речь ещё не началась". Обходной путь: обрежьте начальную не-речь перед выравниванием или запустите предварительный проход Silero VAD, чтобы найти фактическое начало речи.
Если --text не предоставлен, выравниватель сначала запускает полный проход транскрипции Qwen3-ASR, затем выравнивает получившийся текст. Это означает, что при первом запуске загружаются и ASR-модель, и модель выравнивания. Передача --text пропускает шаг ASR и загружает только выравниватель.