Обычно транскрибацию описывают так:
аудио
› Whisper
› текст
Но качество часто определяется раньше, чем запускается Whisper.
Главный вопрос:
что именно мы отправляем модели?
В записи может быть час звука, но далеко не час речи.
Паузы.
Ожидание.
Фоновый шум.
Случайные звуки.
Длинные участки, где никто ничего не говорит.
Если отправить всё целиком, модель тратит время на пустоту, теряет контекст и иногда начинает находить слова там, где их не было.
Поэтому VoxBase сначала строит карту речи.
аудио
› Silero VAD
› речевые острова
› chunks
› Whisper
VAD, Voice Activity Detection, не распознаёт слова, он отвечает на более простой вопрос:
где человек говорит, а где нет?
segments = detect_speech(audio)
chunks = merge_segments(segments, target_sec=60)
for chunk in chunks:
text = whisper(chunk)
• detect_speech() находит начало и конец каждого речевого участка
• merge_segments() собирает мелкие участки примерно в минутные блоки
• только после этого каждый блок отправляется в Whisper
Почему не транскрибировать каждый короткий сегмент отдельно?
Потому что на фрагментах по 1–2 секунды Whisper теряет контекст и начинает галлюцинировать.
Поэтому VoxBase собирает мелкие реплики в chunks примерно по 60 секунд речи.
Не весь файл целиком.
Не отдельные обрывки.
А достаточно большие блоки, чтобы модель понимала контекст.
На одном тесте запись длиной 26 минут содержала 131 речевой сегмент. VoxBase собрал их всего в 4 нормальных chunk.
На другом тесте:
62 минуты аудио
› 574 речевых сегмента
› 42:50 реальной речи
› 30,9% тишины пропущено
То есть почти треть файла вообще не пришлось транскрибировать.
Перед Whisper каждый chunk дополнительно проходит через ffmpeg:
• переводится в mono
• приводится к 16 kHz
• очищается от части шума
• нормализуется по громкости
• сохраняется как рабочий WAV
И только после этого включается локальная модель large-v3.
Главная мысль оказалась простой:
хорошая транскрибация начинается не с выбора модели.
Она начинается с того, что модель не заставляют слушать мусор.
VoxBase сначала отделяет речь от звука, восстанавливает удобный контекст и только потом просит Whisper распознать слова.
сырой звук
› карта речи
› чистые chunks
› Whisper
› транскрипт с исходными таймкодами
Поэтому Whisper здесь важен, но он лишь последний рабочий на конвейере.
#VoxBase@annsFlow
Оглавление темы 📌
Навигация по проектам канала📍
Все каналы 🎶
💻 annFlow