Форсированное выравнивание

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-bitaufklarer/Qwen3-ForcedAligner-0.6B-8bit~1.3 ГБ
MLX bf16aufklarer/Qwen3-ForcedAligner-0.6B-bf16~1.8 ГБ
CoreML INT4aufklarer/Qwen3-ForcedAligner-0.6B-CoreML-INT4~662 МБ
CoreML INT8aufklarer/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 и загружает только выравниватель.