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

Уявіть: голосовий бот інтернет-магазину не чує назву бренду 'Supreme' або юридичний департамент втрачає термін 'індосамент'. WER на таких словах злітає до 40% — клієнт дратується і перемикається на оператора. Ми, команда з 5-річним досвідом у speech-to-text і розпізнаванні мовлення, вирішували цю пр

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    998
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1267
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1003

Уявіть: голосовий бот інтернет-магазину не чує назву бренду 'Supreme' або юридичний департамент втрачає термін 'індосамент'. WER на таких словах злітає до 40% — клієнт дратується і перемикається на оператора. Ми, команда з 5-річним досвідом у speech-to-text і розпізнаванні мовлення, вирішували цю проблему для десятків проєктів: від банківських IVR до голосових асистентів у ритейлі. Hotword Boosting — єдиний робочий метод підняти точність без даунтайму і перенавчання моделі. Boost factor у Google STT досягає 20, що означає пріоритет у 20 разів вище порівняно зі звичайними словами. Зниження WER на проблемних словах становить 20–30% без збільшення latency p99 — критично для real-time діалогів.

Як працює Hotword Boosting і чим він відрізняється від custom vocabulary?

Hotword Boosting задає вагу (boost) для конкретних слів або фраз у runtime. На відміну від статичного custom vocabulary, boosting працює динамічно: ви можете змінювати список гарячих слів залежно від контексту — наприклад, для різних станів діалогу. Документація Google Cloud Speech-to-Text описує boost factor до 20. Custom vocabulary лише додає слова до словника, але не гарантує перевагу — модель все одно може обрати альтернативу з більшою ймовірністю. Boosting же явно піднімає вагу, змушуючи модель віддавати пріоритет потрібній фразі.

Реалізація для різних провайдерів

Google STT з phrase boost

from google.cloud import speech def transcribe_with_hotwords(audio_content: bytes, hotwords: list[str]) -> str: client = speech.SpeechClient() speech_contexts = [ speech.SpeechContext( phrases=hotwords, boost=20.0 # max значення ) ] config = speech.RecognitionConfig( encoding=speech.RecognitionConfig.AudioEncoding.LINEAR16, sample_rate_hertz=16000, language_code="ru-RU", speech_contexts=speech_contexts, enable_automatic_punctuation=True, ) response = client.recognize(config=config, audio=speech.RecognitionAudio(content=audio_content)) return response.results[0].alternatives[0].transcript 

Vosk з grammar (FST-based boosting)

from vosk import Model, KaldiRecognizer import json model = Model("vosk-model-ru-0.42") # Обмежена граматика для певного контексту grammar = json.dumps(["да", "нет", "отмена", "помощ", "[unk]"]) recognizer = KaldiRecognizer(model, 16000, grammar) 

Whisper через prefix промпт — ненадійно, але працює для коротких записів з конкретними очікуваннями.

Порівняння підходів: Google STT забезпечує плавне керування boost з мінімальним latency (менше 5 мс), Vosk використовує жорсткі граматики, що збільшує latency на 10-20 мс, але дає повний контроль. Whisper не має вбудованого boosting — доводиться використовувати prefix-підказки, що знижує надійність. По latency overhead Google STT в 4 рази ефективніший за Vosk, а по гнучкості керування hotwords — в 10 разів зручніший.

Провайдер Спосіб бустингу Boost max Latency overhead Динамічні hotwords
Google STT SpeechContext boost 20 <5 мс Так
Vosk FST-граматика - (обмеження контексту) 10–20 мс Так (через перестворення recognizer)
Whisper Prefix prompt Немає контролю 0 мс Умовно (зміна prefix)

Порівняння ефективності методів boosting

Метод Точність (WER зниження) Простота інтеграції Гнучкість
Google STT boost 20-30% на цільових словах Висока (API) Висока
Vosk grammar 15-25% на обмеженому словнику Середня (FST) Середня
Whisper prefix 5-10% (нестабільно) Низька (доп. логіка) Низька

Чому важливі динамічні hotwords у голосових ботах?

У голосових ботах hotwords залежать від стану діалогу. Наприклад, на етапі greeting актуальні привітання, на payment — фінансові терміни. Без динамічного перемикання вам довелося б завантажувати всі hotwords одразу, що може погіршити точність — якщо бот постійно очікує всі варіанти, модель починає плутатися. Динамічний підхід знижує кількість хибних спрацьовувань.

DIALOG_HOTWORDS = { "greeting": ["здравствуйте", "добрый день", "привет"], "payment": ["оплатить", "счёт", "карта", "перевод", "сумма"], "cancel": ["отменить", "назад", "стоп", "выход"], } def get_hotwords_for_state(state: str) -> list[str]: return DIALOG_HOTWORDS.get(state, []) 

Це дозволяє підвищити точність на кожній стадії діалогу без впливу на загальну модель. Ми гарантуємо зниження WER на 15–20% після впровадження такої схеми. Впровадження обходиться в діапазоні $1500–$4500 залежно від складності — окупається за рахунок скорочення перепитувань та підвищення конверсії.

Типова помилка: використання всіх hotwords одночасно без урахування контексту. Це призводить до зростання false positives і зниження загальної точності — модель починає «чути» hotwords навіть там, де їх нема. Правильний підхід — ізолювати набори та змінювати їх при переході між станами.

Процес впровадження та що входить в роботу

  1. Аналіз — збираємо логи з поточного STT, виявляємо проблемні слова, частоту помилок. Заміряємо WER на тестовій вибірці.
  2. Проєктування — визначаємо набори hotwords для кожного сценарію, обираємо провайдера (Google STT, Vosk або гібрид).
  3. Реалізація — пишемо код з динамічним керуванням hotwords (як у прикладі вище). Включаємо fallback: якщо boost не спрацював, повертаємо розпізнавання без hotwords.
  4. Тестування — прогоняємо на тестовому датасеті (мінімум 1000 аудіозаписів), заміряємо WER та latency p99.
  5. Деплой — розгортаємо в production, додаємо моніторинг. Налаштовуємо алерти на різке зниження точності.
Деталі метрик Після впровадження ми фіксуємо: - WER знижується на 20-30% на цільових словах. - Latency p99 не перевищує 300 мс для Google STT. - Кількість повторних запитів (перепитувань) скорочується на 40%.

Підсумковий результат:

  • Робочий код інтеграції з обраним провайдером.
  • Документацію з налаштування hotword-наборів під ваші сценарії.
  • Звіт по заміру WER до/після.
  • Гарантію стабільної роботи — тестуємо на 1000+ аудіозаписах.

Строк реалізації: від 1 до 5 днів залежно від складності. Наші інженери мають сертифікати Google Cloud і досвід з Vosk на 15+ проєктах. Оцінимо ваш сценарій безкоштовно — просто зв'яжіться з нами. Отримайте індивідуальний розрахунок вартості для вашого проєкту — ми підберемо оптимальну схему boosting під ваш стек.