RealtimeVAD - Faster speech-off detection for voice pipelines

Show HN: RealtimeVAD – trading false positives for 110ms earlier end-of-speech

RealtimeVAD — это детектор голосовой активности, который определяет, что говорящий замолчал, примерно на 100 мс раньше Silero. Он использует Silero для распознавания речи, но добавляет быструю проверку уровня звука каждые 10 мс, сравнивая его с шумом комнаты и уровнем говорящего. Это позволяет голосовым ассистентам быстрее запускать распознавание, LLM и синтез речи. RealtimeVAD работает на одном ядре CPU, требует только numpy и onnxruntime, а модель Silero уже включена. Проект доступен на GitHub под лицензией alpha.

RealtimeVAD позволяет узнать, что говорящий остановился, примерно за 100 мс до того, как это сделает Silero.
  1. nowittyusername

    Можно вообще избежать этой проблемы. Я сделал «спекулятивную регенерацию» — по крайней мере, так я это называю — пайплайн, которым пользуюсь уже много месяцев, и он отлично работает. В общем, если у тебя есть доступ к inference-серверу, всё в порядке. Идея такая: каждые n миллисекунд тишины (у меня обычно 300 мс) ты отправляешь ASR-транскрипт LLM на обработку немедленно. Позволяешь модели начать отвечать, но если пользователь снова заговорит до того, как будет достигнут токен конца хода, ты отменяешь генерацию и снова ждёшь эти 300 мс. И так по кругу. Ещё нужно настроить защитное окно, чтобы финальный ответ LLM завершался независимо от скорости инференса. Работает как часы. По сути, пользователь получает задержку максимум 300 мс на это «окно тишины». Так что единственное, о чём ещё нужно беспокоиться в плане задержки, — это скорость инференса LLM, а также задержки ASR и TTS. В моём пайплайне в момент, когда пользователь замолкает, модель уже отвечает примерно за 900 мс – 1,2 сек. Это моя модель gemma 26b moe, 4-битное квантование, thinking включён... с MTP выдаёт около 300 токенов в секунду... ASR и TTS оба укладываются в 350 мс суммарно... В общем, скорости можно улучшить, отключив thinking, но я хочу, чтобы мой голосовой агент был умным, потому что у него есть вызов инструментов, а способность к здравому смыслу снижается, когда thinking выключен... весёлые времена!

  2. com2kid

    Это уже примерно третий раз, как я это пишу.

    Запусти крошечную паршивую LLM — такую, что супербыстрая. Или ещё лучше — попробуй сейчас decision-модель.

    Скорми ей предыдущий ход разговора и весь STT (вывод ASR), который у тебя есть на данный момент, и просто спроси вероятность того, что пользователь закончил говорить.

    Используй эту вероятность, чтобы сократить время VAD.

    Это не так хорошо, как настоящая speech-to-speech модель, но по сравнению с чистым VAD это срежет несколько сотен мс. А в качестве бонуса это ещё позволяет ждать дольше, когда пользователь ещё не закончил говорить.

Ещё за этот день

2026-11-13