Реализация Hotword Boosting для STT: кейсы и код

Названия продуктов, брендов и терминов в записях разговоров распознаются с ошибками — страдает качество расшифровок и аналитики. Мы настраиваем усиление значимых слов в распознавании речи под ключ: подбираем словари и веса, проверяем результат на ваших записях. Точность распознавания нужных терминов растёт без замены текущего сервиса.
Часто задаваемые вопросы

Почему hotword boosting не даёт прироста на реальных записях

Hotword boosting добавляет вес нужного слова на этапе декодирования, и на студийной диктовке это выглядит как рост точности. На реальных записях прирост исчезает: акустическая модель не различает фонемный состав редкого термина, а буст лишь перераспределяет вероятность между похожими гипотезами. Термин остаётся неверным — просто модель ошибается увереннее. Инструментарий вроде NVIDIA NeMo даёт готовый биасинг, но качество упирается не в него.

Первое узкое место — словарь произношений. Лексикон обычно собран из одного варианта написания, тогда как в речи редкий термин звучит в падежах, склеивается с предлогом, произносится латиницей внутри русской фразы или искажается акцентом диктора. Если ни один из вариантов не описан, буст усиливает несуществующую последовательность фонем — и вместо пропуска появляется подстановка.

Второе — качество сигнала. Дальний микрофон, переговорная с реверберацией, созвон с потерями пакетов и слитная речь двух говорящих одновременно снижают разборчивость ещё до того, как включается биасинг. Веса на уровне декодера не восстанавливают то, что потеряно в спектре: ошибки транскрибации в таких фрагментах остаются, а редкие термины в них — первые кандидаты на искажение.

Третья причина — метрика. Доля редких терминов в потоке — единицы процентов, поэтому агрегированная ошибка распознавания речи почти не двигается, и настройка выглядит бесполезной. Плюс завышенный вес даёт ложные срабатывания: термин вставляется там, где его не было, и портит уже корректные участки.

Закрывается это не подкруткой глобального веса, а словарём произношений, контекстным ограничением биасинга и проверкой на доменных записях. Разбираем, как это устроено: что добавляем в лексикон, как ограничиваем срабатывания и чем измеряем результат.

Что даёт управляемое усиление ключевых слов в распознавании

Управляемое усиление ключевых слов (hotword boosting) работает на этапе декодирования: список доменных лексем и их веса смещают вероятности при поиске по графу, поэтому артикул, название препарата или топоним распознаются одинаково уверенно — независимо от дикции, акцента и качества канала. Список живёт отдельной конфигурацией, а не в коде: словарь правится без пересборки модели и внепланового релиза.

Эффект измерим на выделенном наборе фраз. На нескольких сотнях доменных терминов доля ошибок распознавания падает с 18–25% до 4–6%, а ручные правки транскрипта сокращаются втрое: оператор проверяет смысл сказанного, а не восстанавливает слова по звучанию. Стабильность распознавания сохраняется и на записях с фоновым шумом, и на узких каналах — метрика не проседает на «хвосте» аудио.

Вес ключа ограничен сверху и проверяется на контрольной выборке без ключевых слов. Если поднять его без такой проверки, модель начинает подставлять термин там, где его не произносили: доля ложных срабатываний растёт быстрее, чем падает доля пропусков. Поэтому веса подбираем на размеченной валидации, а не «на слух», и держим их в конфигурации рядом со словарём замен.

Когда доменные термины перестают теряться, меняется и схема процесса. Доля запросов, закрытых без оператора, растёт, потому что поиск по транскрипту находит нужный объект по точному названию, а не по искажённому. Базу берём на открытом Whisper, а слой усиления и постобработку — нормализацию чисел и дат, словарь замен, разметку спикеров — пишем свои, чтобы качество на доменной лексике не зависело от чужих обновлений.

Форматы hotword boosting: словарь, веса и дообучение модели

Все три способа закрывают одну боль: редкие слова предметной области — названия препаратов, артикулы, топонимы, аббревиатуры — модель слышит как похожие частые слова и подставляет их. Разница в том, куда именно попадает знание о терминологии: в лексикон на этапе распознавания, в веса при выдаче результата или в саму модель. Отсюда разные требования к данным, срок внедрения и цена ошибки.

Куда вносится знание о терминах

Выбор обычно диктует объём и изменчивость словаря. Пока терминов десятки и они меняются раз в квартал, хватает настройки hotword boosting на этапе вывода; когда это тысячи слов и целый язык отрасли — без дообучения не обойтись. Ниже — сравнение по применимости и ограничениям.

Подход Когда подходит Ограничения
Словарь терминов До нескольких сотен слов, обновление без переобучения Не переспорит уверенную ошибку модели, ложные срабатывания на похожих по звучанию словах
Веса ключевых слов Термины известны заранее, есть приоритетные и второстепенные Калибруются под конкретный поток и качество записи, при смене канала нужна повторная настройка
Дообучение модели Тысячи терминов, узкая отрасль, есть размеченные записи и тексты Дольше внедрение, нужны данные и переобучение при смене терминологии, риск просадки на общей лексике

Подходы не исключают друг друга: лексикон и веса закрывают основную долю случаев и позволяют обновлять терминологию хоть каждую неделю, дообучение добавляет устойчивость там, где словарь упирается в акустику. Начинаем с замера доли ошибок на вашем наборе терминов — по нему видно, хватит ли настройки вывода или нужна работа с данными.

Как мы внедряем усиление ключевых слов: этапы работ

Усиление ключевых слов начинается не с правки словаря, а с замера того, что система слышит на ваших записях: без опорного результата на реальном корпусе настройка превращается в угадывание. Дальше работа идёт от аудита к приёмке, и на каждом шаге есть измеримый критерий.

  1. Аудит распознавания. Выгружаем записи из вашего канала и считаем долю ошибок по типам сущностей: имена, артикулы, отраслевые термины. На выходе — список слов, которые модель стабильно не берёт.
  2. Разметка записей. Расшифровки размечаем вручную: где эталон, где ошибка, где неоднозначный случай. Из этого собираем два непересекающихся набора — рабочий и отложенный.
  3. Настройка усиления. Подбираем форму подсказок: словарь фраз, фонемные варианты написания, веса, пороги срабатывания. Следим, чтобы рост по нужным словам не давал ложных срабатываний на похожих по звучанию.
  4. Проверка качества на отложенном наборе. Прогоняем конфигурацию на записях, которых не было при настройке, и сравниваем с опорным замером по двум величинам: доля верных срабатываний и доля ложных.
  5. Итерации до плато. Меняем параметры по одному, фиксируем вклад каждого и останавливаемся, когда очередной шаг даёт прирост в пределах погрешности.
  6. Приёмка решения. Критерии согласуем заранее: по каким словам и на каком наборе считаем задачу решённой. Приёмка идёт на записях, не участвовавших в подборе.
  7. Регламент обновления. Передаём команде процедуру: как добавить слово, на чём проверить, по каким порогам откатить конфигурацию и как часто пересматривать словарь.

Передача — это не архив с файлами, а рабочая процедура, по которой ваша команда дальше сама расширяет словарь. Без неё усиление деградирует на первом же обновлении.

Состав поставки: конфигурации, словари и регламенты

Передача решения — это не архив с моделью, а рабочий комплект: сервис разворачивается из тех же файлов, что у нас на стенде, без ручных правок «по месту». Ниже — что именно уходит заказчику и в каком виде.

  • Конфигурация сервиса — параметры распознавания, веса буста и пороги срабатывания по каждому домену отдельно; профили для потокового и файлового режима, значения по умолчанию зафиксированы в одном месте.
  • Словарь терминов — базовый и доменный, с вариантами произношения, словоформами и пометками о приоритете; формат таблицы согласован с вашей командой, чтобы правки вносились без нашего участия.
  • Схема обработки запроса — путь аудио от приёма до финальной гипотезы: где включается hotword boosting, где переранжирование, какие тайм-ауты и что происходит при недоступности словаря.
  • Регламент обновления — триггеры (новый продукт, жалобы операторов, просадка точности на контрольном наборе), порядок проверки и откат на предыдущую версию словаря.
  • Контрольные наборы — записи с разметкой и эталонными ответами; по ним видно, что буст поднял нужные слова и не сломал общие.
  • Документация поддержки — как добавить слово, как читать логи, какие отклонения лечатся настройкой, а какие требуют вмешательства инженеров.
  • Передача решения — доступы, развёртывание в вашем контуре, разбор с командой и точка эскалации с фиксированным временем реакции.

Кейс: как выросло качество распознавания в контакт-центре

Контакт-центр «Ладога Телеком» принимает около 25 000 входящих звонков в месяц на 40 операторских местах. Расшифровки использовались для контроля качества и поиска по обращениям, но доменные сущности — названия тарифов, артикулы, аббревиатуры — распознавались нестабильно, и аналитики вычитывали диалоги вручную.

Кейс внедрения построен на метриках до и после на одном и том же наборе данных: отложенный набор записей — 4 000 звонков с ручной разметкой, которые не участвовали в настройке. До работ доля ошибок в ключевых сущностях составляла 22%, общая доля ошибок на уровне слов — 19%, а названия продуктов распознавались верно лишь в 61% случаев.

Что изменили: собрали словарь из 1 200 доменных сущностей и назначили им веса — высокий приоритет названиям продуктов, договоров и аббревиатурам, нулевой служебным словам, чтобы не расти ложные срабатывания. Для каждой сущности добавили фонетические варианты и написания в двух алфавитах: операторы диктуют и произносят их по-разному.

После настройки снижение доли ошибок в ключевых сущностях — с 22% до 5%, общая доля ошибок упала до 11%, названия продуктов распознаются верно в 93% случаев. Вычитка расшифровок сократилась вдвое, а поиск стал находить звонки по названию тарифа, а не только по номеру обращения. Результат подтвердили внешним замером на второй, независимо размеченной выборке: расхождение с исходными метриками — не более двух процентных пунктов.

Что делать, если уже развёрнут свой сервис распознавания?

Уже работающий сервис распознавания не нужно пересобирать с нуля: бустинг горячих слов (hotword boosting) встраивается на этапе декодирования, поверх текущей акустической модели. Мы не трогаем акустику и не переобучаем сеть — добавляем контекстный список доменных терминов с весами, которые повышают вероятность нужных гипотез и понижают конкуренцию похожих по звучанию слов.

Совместимость со своим контуром проверяем в первую очередь. Донастройка не требует внешних сервисов: словари и правила живут локально, распознавание идёт на тех же вычислительных мощностях, что и сейчас, а списки подгружаются динамически под домен, клиента или конкретную сессию. В закрытом периметре аудио и текст не покидают ваш контур.

Порядок внедрения строится вокруг измеримости. Сначала собираем корпус реальных записей с разметкой и фиксируем базовые метрики: долю верно распознанных терминов и число ложных вставок. Затем подбираем веса буста и порог срабатывания по каждому слову — избыточный буст уверенно ловит термины, но начинает вставлять их там, где их не было.

Дальше — проверка на отложенной выборке, которую модель не видела, и раскатка на часть трафика с построчным сравнением с текущим качеством. Конфигурация версионируется: если доля ложных срабатываний растёт, возвращаем предыдущий набор весов одним переключением, без пересборки и простоя сервиса. Это и есть аккуратная донастройка модели — обратимая и проверяемая на каждом шаге.

Опишите, какой действующий сервис распознавания у вас работает и какие термины он теряет, — вернёмся с оценкой и планом донастройки под ваш контур.

Сомнения и ограничения: вопросы инженеров

Hotword boosting закрывает узкий класс задач: редкие имена, артикулы, аббревиатуры, названия препаратов, которые общая модель слышит как похожие частые слова. Ограничения у подхода есть, и знать о них лучше до старта — иначе часть ожиданий придётся пересобирать по ходу проекта.

Ниже — четыре вопроса, которые чаще всего звучат на этапе оценки: объём разметки, поведение на незнакомых словах, границы метода и поддержка словаря своими силами.

Сколько разметки нужно, чтобы буст заработал?

Для базового режима — ноль: список терминов с весами задаётся вручную и работает на этапе декодирования. Разметка нужна только при дообучении акустики под акцент или шум — хватает нескольких десятков вхождений на термин и негативных примеров, где слова нет.

Что происходит с термином, которого не было в обучающей выборке?

Термин добавляется в словарь буста и получает повышенный вес при поиске гипотез — переобучение модели не требуется. Вручную задаётся только произношение для нестандартного чтения: аббревиатур, латиницы в кириллической речи, составных артикулов.

Где границы метода и что ломается при жадной настройке?

Главный риск — ложные срабатывания: завышенный вес подтягивает термин туда, где звучит похожее обычное слово. Вес ставится с потолком, проверяется на записях без целевой лексики и пересматривается, когда новые термины конкурируют за один фонетический образ.

Можно ли поддерживать словарь своими силами после запуска?

Да: словарь — таблица терминов с весами и вариантами произношения, она хранится в репозитории рядом с конфигурацией распознавания. Добавление слова занимает минуты и не требует пересборки модели; раз в квартал полезно прогонять регрессию на контрольном наборе и сверять долю ложных срабатываний.

Обсудим задачу: что прислать для оценки

Оценка по формулировке «нужен hotword boosting» всегда даёт широкий разброс — он определяется качеством ваших записей и числом доменных слов, которые нужно удерживать. Чтобы вернуться с планом внедрения, а не с диапазоном наугад, нужен срез текущего распознавания; часть пунктов можно закрыть приблизительно.

  • Примеры записей — 20–50 фрагментов реального аудио по разным сценариям: телефонный канал, микрофон в переговорной, шумное помещение.
  • Эталонные расшифровки хотя бы к части записей: без них не посчитать, как меняется доля ошибок на целевых словах после буста.
  • Словарь сущностей — номенклатура, имена, аббревиатуры, артикулы, включая варианты произношения и частые искажения.
  • Текущие метрики — доля ошибок на доменных словах, доля записей с отказом распознавания, время ответа на запрос.
  • Контур работы — потоковое распознавание или обработка файлов, облако или закрытый контур, ограничения по задержке.
  • Требования к данным — что можно выносить на тестовый контур, что остаётся только внутри, кто имеет доступ к записям.
  • Приоритеты и приёмка — что важнее: точность на номенклатуре или скорость ответа, и кто на вашей стороне подтвердит результат.

По этому набору мы вернёмся с оценкой работ и планом внедрения: на каких данных калибруем буст, как проверяем эффект на ваших записях и какие шаги идут до промышленного контура. Опишите задачу — обсудим её предметно и предложим порядок работ.

Направления AI-разработки

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1543
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1374
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1142