endpointing
Определение конца речевого высказывания в streaming ASR — момент, когда пользователь закончил говорить.
Что такое endpointing
Endpointing (обнаружение конца высказывания, end-of-utterance detection) — задача в streaming ASR: определить, когда пользователь закончил говорить, чтобы финализировать транскрипцию и передать её следующему компоненту (например, LLM-агенту).
Отличие от VAD: VAD определяет наличие речи в каждый момент времени; endpointing определяет конец связного высказывания с учётом пауз.
Почему endpointing сложнее, чем VAD
Естественная речь содержит паузы внутри высказывания: «Принеси мне... [пауза] ... кофе». Слишком агрессивный endpointing обрежет фразу на паузе; слишком консервативный — создаст задержку.
Современные endpointing-системы используют акустические признаки + лингвистические модели для предсказания «завершённости» высказывания.
Методы endpointing
Timeout-based: простейший — считать высказывание законченным после N миллисекунд тишины. Параметры типично: 300–800 мс. Дёшево, но неточно.
Acoustic model: нейросеть, обученная предсказывать конец высказывания по акустическим признакам.
Hybrid: timeout + акустика + частичная транскрипция. Если частичная транскрипция «грамматически завершена», endpointing срабатывает при более короткой паузе.
Реализация в Silero VAD
Silero VAD с порогом вероятности + накопление состояний:
MIN_SILENCE_DURATION_MS = 500 # Конец высказывания при 500ms тишины
silence_duration = 0
for chunk in audio_stream:
speech_prob = vad_model(chunk)
if speech_prob < 0.5:
silence_duration += chunk_duration_ms
if silence_duration >= MIN_SILENCE_DURATION_MS:
# Эндпоинтинг!
finalize_utterance()
else:
silence_duration = 0
Связанные термины
- VAD — определяет наличие речи (шаг перед endpointing)
- ASR — endpointing нужен для streaming ASR
- транскрипция — финализируется после endpointing
- faster-whisper — используется со streaming endpointing
Готовы запустить GPU-задачу?
Запустить GPU-сервер