Проблема компактных моделей
Для управления музыкой и умным домом без активационного слова «Алиса» используется отдельная нейросеть. Её вес составляет всего 0,5–1,5 МБ в зависимости от железа устройства. Модель работает локально на CPU и оперативной памяти колонки, что обеспечивает мгновенный отклик, но накладывает строгие ограничения на масштабирование. Задача состояла в добавлении новых команд (например, «включи блютус» для Станции Стрит) без ухудшения работы существующих и без превышения лимитов памяти.
Сбор данных и подготовка датасета
Основная сложность заключалась в том, что логи новых запросов содержали активационное слово «Алиса», что создавало out-of-domain ситуацию для модели, ожидающей тишину или фоновый шум перед командой. Инженеры решили проблему двумя этапами:
- Претрейн: Использование 60–100 млн записей из общих логов ASR для базового понимания акустики.
- Дообучение: Сбор специализированного датасета из 400 тыс. – 1 млн записей, сделанных пользователями в реальных квартирах, где команда произносится без «Алисы» и с достаточным контекстом (2+ секунды до).
| Этап обучения | Источник данных | Объем данных |
|---|---|---|
| Претрейн | ASR-логи (неочищенные) | 60–100 млн записей |
| Дообучение | Специально записанные фразы | 400 тыс. – 1 млн записей |
Отказ от классических методов
Команда отбросала три стандартных подхода:
- Полное переобучение: Риск регрессии качества старых команд. Невозможно гарантировать, что новые данные не «сломает» распознавание фразы «дальше».
- Две независимые модели: Увеличивает нагрузку на поддержку и дублирует вычислительные затраты, так как новая модель заново учит общие акустические паттерны.
- Elastic Weight Consolidation (EWC): Требует подбора гиперпараметров «вслепую» и не дает стопроцентной гарантии сохранения старых весов.
Новый подход: Parameter-Efficient Fine-Tuning (PEFT)
Яндекс внедрил модифицированный метод PEFT, который позволяет дообучать модель на новых данных, используя «замороженные» веса старой модели как источник знаний. Архитектура разделяет вычисления на две ветки:
- Верхняя ветка: Полностью заморожена, сохраняет активации и логиты для старых команд, гарантируя их точность.
- Нижняя ветка: Обучаемые веса, нацеленные исключительно на новые фразы.
Ключевое нововведение — сжатие активаций между слоями. Это позволяет избежать двойного прогона тяжелых вычислений, снижая нагрузку на процессор устройства, при этом сохраняя необходимую информационную емкость для обучения новых паттернов.
Источник: Habr ↗
