Локальный ASR в Яндекс Станции

Одной из задач, с которой столкнулась служба голосового ввода Яндекса, стало создание локальной системы автоматического распознавания речи (ASR) для колонки Яндекс Миди. Решение предполагало работу системы непосредственно на устройстве, что позволило бы снизить зависимость от облачных серверов и повысить скорость обработки команд. Расскажем, с какими ограничениями и трудностями столкнулись разработчики.

Ограничения

Одним из ключевых ограничений при разработке локального ASR была необходимость эффективного использования аппаратных ресурсов колонки, таких как оперативная память (RAM) и вычислительные мощности процессора. Максимально допустимое использование памяти было ограничено до 100 Мб, что наложило серьёзные ограничения на объем данных и сложность моделей, которые могли быть использованы.

Кроме того, важным параметром производительности стал RTF (Real Time Factor) — метрика, определяющая, как быстро система обрабатывает поступающие звуковые данные. Для обеспечения плавной работы в реальном времени необходим был RTF меньше единицы: обработка одной секунды звука должна занимать менее одной секунды, чтобы избежать накопления задержек и ошибок.

Важным аспектом стала и задержка (latency) — время, нужное системе для начала отображения распознанного текста после того, как пользователь начал говорить. Чем ниже задержка, тем быстрее система реагирует на команды, что критично для работы в реальном времени.

Разработка локального ASR включала в себя внедрение End of Utterance (EOU) для определения момента завершения команды пользователя. Это позволило бы минимизировать задержки и своевременного реагировать на команды, такие как «включи свет». Без точного определения конца команды выполнение действий могло бы задерживаться или запускаться преждевременно.

Архитектура

Для создания ASR была выбрана архитектура RNN-T (Recurrent Neural Network Transducer), которая обеспечивала необходимую стриминговость — возможность обработки входящего звука без пересчета предыдущих данных. Эта архитектура позволила системе обрабатывать новые фрагменты звука, не тратя ресурсы на перерасчет уже обработанных данных, что критично для поддержания низкого RTF и минимальной задержки.

Дополнительно была внедрена адаптированная версия трансформеров с ограниченным контекстом. Эти трансформеры позволили сохранить высокое качество распознавания речи, обеспечивая при этом стриминговость, что стало важным шагом в достижении нужного баланса между качеством и производительностью.

Сложности

Одним из сложных моментов в разработке стала необходимость ограничения правого контекста (задержки между произнесением слова и его обработкой), что могло негативно сказаться на качестве распознавания. Разработчики остановились на значении в 200 миллисекунд, чтобы достичь удовлетворительного качества распознавания без значительных задержек.

ML Underhood