Настройка кастомного словаря для STT: реализация и оптимизация

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1Все 1564 услуг
Настройка кастомного словаря для STT: реализация и оптимизация
Простой
от 1 дня до 3 дней
Часто задаваемые вопросы

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

Этапы разработки AI-решения

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

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1358
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1250
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    956
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1188
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    646
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    929

Реализация кастомного словаря для STT-системы

Вы интегрируете STT для call-центра, но распознавание имён клиентов и юридических терминов даёт 40% ошибок. Модель не знает «ОГРН», «СНИЛС», «ИНН». Каждый пропущенный номер полиса или код продукта — потерянные данные. Кастомный словарь — самый быстрый способ улучшить распознавание специфических терминов, имён и аббревиатур без переобучения модели. Он работает как подсказка STT-движку: «обращай особое внимание на эти слова». Наши сертифицированные инженеры — более 8 лет опыта и 30+ внедрений STT — настроят словарь под ваш домен за 2–4 часа. Снижение Word Error Rate достигает 40% уже на второй день.

Почему кастомный словарь, а не переобучение модели?

Переобучение (fine-tuning) требует размеченных аудиоданных (минимум 10 часов) и занимает 2–4 недели. Кастомный словарь даёт результат за 1–2 дня, снижая Word Error Rate на 30–50% для целевых терминов. При этом не меняет архитектуру — вы можете менять словарь на лету, без простоя сервиса. Для большинства бизнес-сценариев (обработка заказов, юридические консультации) этого достаточно.

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

AWS Transcribe Custom Vocabulary:

import boto3

transcribe = boto3.client('transcribe')

# Создаём словарь из файла (S3)
transcribe.create_vocabulary(
    VocabularyName='corporate-terms-v1',
    LanguageCode='ru-RU',
    VocabularyFileUri='s3://my-bucket/vocabulary.txt'
)

# Формат файла vocabulary.txt:
# Phrase\tSoundsLike\tIPA\tDisplayAs
# Б-Ф-И-О\tбэ эф и о\t\tБФИО
# ИНН\tин эн эн\t\tИНН

Azure Custom Speech:

# Добавляем domain adaptation data через Azure Portal или REST API
# Поддерживает: pronunciation dictionary, phrase list
import requests

phrase_list = {
    "kind": "PhraseList",
    "locale": "ru-RU",
    "phrases": ["ОГРН", "СНИЛС", "КПП", "расчётный счёт"]
}

faster-whisper с подсказками через initial prompt:

model = WhisperModel("large-v3", device="cuda")

# Начальный промпт помогает модели ориентироваться на нужную лексику
initial_prompt = "ИНН, ОГРН, СНИЛС, КПП, расчётный счёт, генеральный директор."

segments, _ = model.transcribe(
    audio,
    initial_prompt=initial_prompt,
    language="ru"
)

Метод с initial_prompt работает ненадёжно для длинных файлов — промпт обрабатывается только для первого окна. Для продакшена лучше использовать встроенный custom vocab провайдера.

Сравнение подходов

Метод Время внедрения Снижение WER Latency overhead Сложность поддержки
AWS Custom Vocabulary 1–2 дня 30–50% 5–10% Низкая
Azure Phrase List 1–2 дня 20–40% 5–10% Низкая
faster-whisper initial prompt 1 час 10–20% 0% Средняя (требует тестирования)
Fine-tuning модели 2–4 недели 50–70% 0% Высокая

Кастомный словарь работает в 10 раз быстрее, чем переобучение модели, и обеспечивает достаточную для 90% задач точность.

Как мы снижаем WER на 40% за 2 дня?

Процесс включает аудит текущего STT, проектирование доменного словаря, реализацию через API выбранного провайдера и A/B тестирование на 100+ аудиофайлах. Мы используем звуковое сходство (SoundsLike) для аббревиатур и варианты произношения (IPA) для сложных слов. Результат — измеримый прирост точности без изменения инфраструктуры. Для одного из проектов в сфере страхования WER на терминах «ДМС», «ВЗР», «ОМС» упал с 55% до 12%.

Что делать, если словарь не помогает?

Бывает, что кастомный словарь даёт прирост менее 10% — это сигнал, что проблема глубже: возможно, аудио низкого качества, модель не адаптирована к шуму или контекст перекрывается омонимией. В таких случаях мы рекомендуем сочетать словарь с легковесным fine-tuning или аугментацией данных. Мы проводим диагностику и предлагаем оптимальную стратегию.

Типичные ошибки при настройке
  • Не указаны варианты произношения для аббревиатур (например, «БФИО» распознаётся как «бэфио»).
  • Слишком длинные фразы (более 10 слов) — снижают производительность.
  • Игнорирование региональных диалектов — для русского языка с акцентом произношение может отличаться.
  • Отсутствие тестового датасета — непонятно, улучшился ли WER.

Процесс настройки

Этап Длительность Результат
Аналитика 0,5 дня Список из 50–100 целевых терминов
Проектирование 0,5 дня Формат SoundsLike и IPA
Интеграция 0,5 дня Словарь подключён к STT
Тестирование 0,5 дня WER на репрезентативной выборке
Деплой 0,5 дня Работа в стейджинге и проде

Как поддерживать словарь в актуальном состоянии

  • Версионирование: каждое изменение — новый тег в Git (v1.0, v1.1).
  • Автоматическое обновление: CI/CD принимает новые термины из Jira/таблицы.
  • Мониторинг: алерты при падении точности более чем на 5%.

Типичная ошибка — не учитывать омонимы. Например, «БФИО» может распознаваться как «бэфио». В AWS Transcribe для этого используется столбец SoundsLike.

Сроки: базовая интеграция — 1–2 дня, включая наполнение словаря. Оценим ваш проект за 2 дня. Получите консультацию по вашему кейсу за 1 день — наши инженеры имеют сертификаты AWS AI и Azure AI Engineer.

Для детального изучения рекомендую официальную документацию: AWS Transcribe Custom Vocabulary и Wikipedia: Speech recognition.

Распознавание и синтез речи: ASR, TTS, клонирование голоса

Заказчик приходит с задачей: транскрибировать 40 000 часов колл-центра за неделю. Штатный облачный ASR (Google Speech-to-Text) выдаёт WER 28% на отраслевой лексике и стоит ощутимо дорого при таких объёмах. Задача — снизить WER ниже 10% и перейти на self-hosted инференс.

Типовые проблемы, с которыми приходят

WER не сходится к нужной метрике. Чаще всего виновата не архитектура, а данные: шумные аудио без нормализации уровня (-23 LUFS вместо стандарта), смешанные языки в одном канале, акцент, специфическая доменная лексика. Whisper large-v3 из коробки даёт WER 8–12% на чистом русском и проваливается до 25–35% на записях с PSTN-артефактами и узкополосным кодеком G.711.

Диаризация ломается при больше двух спикеров. pyannote/speaker-diarization-3.1 работает стабильно при 2–3 говорящих, но DER (Diarization Error Rate) растёт с 6% до 18–22% при 5+ участниках конференции. Проблема усугубляется перекрёстными репликами: по умолчанию min_duration_on=0.1 срезает короткие вставки.

Клонирование голоса — латентность или качество. XTTS v2 (Coqui) даёт натуральный голос, но при потоковой генерации stream_chunk_size=20 первый аудиочанк прилетает через 1.4–2.0 с — неприемлемо для интерактивных сценариев. StyleTTS2 и Kokoro быстрее, но требуют точной подготовки референсного аудио.

Как это решается на практике

Базовый стек для production-пайплайна:

  • ASR: openai/whisper-large-v3 или faster-whisper (CTranslate2-бэкенд, x4 скорость vs оригинал)
  • Диаризация: pyannote.audio 3.x + интеграция через whisperx для выравнивания по словам
  • TTS: XTTS v2 для качества, Edge-TTS или Silero для низкой латентности
  • Клонирование: XTTS v2 (3–6 с референсного аудио) или OpenVoice v2

Типичный пайплайн для колл-центра выглядит так: аудио из очереди Kafka → нормализация ffmpeg -af loudnorm до -23 LUFS → faster-whisper с beam_size=5, vad_filter=Truepyannote диаризация → постпроцессинг (пунктуация через deepmultilingualpunctuation) → запись в PostgreSQL с временными метками.

Кейс из практики. Финтех-компания с 12 000 звонков/день. Исходный WER на русском с банковской лексикой — 22% (Google STT). После fine-tuning whisper-medium на 200 часах размеченных записей через Hugging Face transformers + Seq2SeqTrainer с learning_rate=1e-5, warmup_steps=500 — WER упал до 7.3%. Инференс на одной A10G через faster-whisper с compute_type=float16 обрабатывает 40-минутный звонок за 55 секунд. Итоговая стоимость инференса — $0.0008/мин против $0.016/мин у облачного провайдера.

Дообучение Whisper на доменных данных

Когда общая модель не справляется, fine-tuning — первый инструмент. Минимальный датасет для заметного улучшения — 20–30 часов размеченного аудио в целевом домене. Разметку можно получить через итеративный процесс: прогнать через базовую модель → вручную исправить 10–15% ошибок → переобучить → повторить.

training_args = Seq2SeqTrainingArguments(
    per_device_train_batch_size=16,
    gradient_accumulation_steps=2,
    learning_rate=1e-5,
    warmup_steps=500,
    max_steps=5000,
    fp16=True,
    predict_with_generate=True,
    generation_max_length=225,
)

Важно: при fine-tuning Whisper нужно замораживать encoder первые 1000 шагов (model.freeze_encoder()), иначе акустические признаки разъедутся раньше, чем decoder адаптируется к новой лексике.

Синтез речи: выбор под задачу

Модель Латентность (TTFB) Натуральность MOS Клонирование Языки
XTTS v2 1.2–2.0 с 4.1–4.3 Да, 3 с референса 17
StyleTTS2 0.3–0.6 с 4.0–4.2 Да, требует адаптации en, + fine-tune
Kokoro-82M 0.08–0.15 с 3.7–3.9 Нет en, ja
Silero TTS 0.05–0.1 с 3.4–3.6 Нет ru, en, de, и др.
Edge-TTS ~0.4 с (cloud) 4.0 Нет 100+

Для интерактивных ботов с требованием TTFB < 300 мс — Silero или Kokoro. Для озвучки контента, где важна натуральность — XTTS v2 с потоковой отдачей через WebSocket.

Процесс работы

Начинаем с аудит-сессии: берём 2–4 часа ваших записей, прогоняем через несколько моделей, замеряем WER/CER, смотрим на распределение ошибок по типам (лексические, акустические, язык). Это занимает 1–2 дня и сразу показывает, нужен ли fine-tuning или достаточно пост-обработки.

Далее — выбор архитектуры под ваш throughput: один GPU для 1000 мин/день или кластер с балансировщиком для 100 000+ мин/день. Деплой через Docker-контейнер с FastAPI или Triton Inference Server для батчированного инференса.

Сроки зависят от сложности: базовая интеграция готовой модели — 1–2 недели. Fine-tuning с подготовкой данных и валидацией — 4–8 недель. Полная разработка голосового пайплайна (ASR + диаризация + TTS + мониторинг) — 2–4 месяца.