Реалізація 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
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    816
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142