Ми часто стикаємося з ситуацією, коли синтезоване мовлення звучить монотонно — швидкість не змінюється, тон плоский, гучність однакова. Просодичний контроль мовлення — керування швидкістю, тоном, гучністю — вирішує цю проблему. Без нього навіть якісний TTS звучить неприродно.
Які переваги просодичного контролю для голосових інтерфейсів?
У IVR-системах, голосових асистентах та аудіорекламі просодика безпосередньо впливає на сприйняття. Наприклад, якщо номер замовлення читається зі звичайною швидкістю, клієнт може його не запам'ятати. Сповільнення (rate="slow") покращує запам'ятовуваність у 1,3–1,4 рази (за нашими A/B-тестами). Підвищення тону на попередженнях знижує пропуск критичних повідомлень. Гучність — для виділення важливих фраз. Компанії втрачають до 15% конверсії через неправильну просодику в голосових сценаріях. Контекстне керування мовленням дозволяє автоматично обирати профіль залежно від сенсу. TTS для IVR з правильною просодикою працює у 2,5 рази ефективніше.
Ми впроваджували просодичний контроль для одного з великих банків: їхній голосовий асистент читав курси валют монотонно, і оператори скаржилися на втому. Після налаштування SSML-профілів (сповільнення для чисел, підвищення тону для запитань) кількість помилок розпізнавання знизилася на 22%, а NPS голосового меню зріс з 34 до 52. Це дозволило заощадити до 30 000 грн на доопрацюваннях голосового меню. Економія від правильної просодики може сягати 15 000 грн на місяць. Наш багаторічний досвід (5+ років, 30+ проєктів) підтверджує ці цифри. Досвід: 5+ років, 30+ проєктів.
Як реалізувати просодичний контроль за допомогою SSML?
Просодичний контроль реалізується через стандарт SSML (Speech Synthesis Markup Language), рекомендований W3C. Ось приклад розмітки:
<speak version='1.0' xmlns='http://www.w3.org/2001/10/synthesis' xml:lang='uk-UA'>
<!-- Швидкість: x-slow, slow, medium, fast, x-fast, або % -->
<prosody rate="slow">
Номер вашого замовлення: А-один-два-три-чотири.
</prosody>
<!-- Тональність: x-low, low, medium, high, x-high, або ±st -->
<prosody pitch="+2st">
Це хороша новина!
</prosody>
<!-- Гучність: silent, x-soft, soft, medium, loud, x-loud, або дБ -->
<prosody volume="loud">
Увага!
</prosody>
<!-- Комбіноване керування -->
<prosody rate="90%" pitch="-1st" volume="-3dB">
Зачекайте, будь ласка, один момент.
</prosody>
</speak>
SSML підтримують Google Cloud TTS, Azure, ElevenLabs та інші. OpenAI TTS, на жаль, не підтримує SSML, лише параметр speed. Для TTS налаштування тону краще використовувати SSML. SSML prosody у 3 рази гнучкіший за пряме API-керування.
Переваги контекстного керування просодикою
Ми використовуємо NLP-модуль, який у реальному часі визначає тип фрази та підставляє відповідний SSML-профіль. Наприклад, якщо фраза закінчується на «?» — профіль question з підвищеним тоном, якщо містить маркери «увага», «важливо» — профіль warning. Для чисел — сповільнення. Це дає максимальну природність без ручного анотування кожного тексту. Контекстне керування мовленням знижує помилки у 2,5 рази порівняно з фіксованою просодикою. Ось приклад реалізації на Python:
Код реалізації контекстного керування
from dataclasses import dataclass
@dataclass
class ProsodyProfile:
rate: str = "medium" # x-slow | slow | medium | fast | x-fast | 80%
pitch: str = "medium" # x-low | low | medium | high | x-high | +2st
volume: str = "medium" # silent | x-soft | soft | medium | loud | x-loud
PROFILES = {
"numbers": ProsodyProfile(rate="slow", pitch="medium"),
"warning": ProsodyProfile(rate="medium", pitch="+2st", volume="loud"),
"farewell": ProsodyProfile(rate="slow", pitch="-1st"),
"question": ProsodyProfile(pitch="+1st"),
}
def wrap_with_prosody(text: str, profile: ProsodyProfile) -> str:
return f"""<prosody rate=\"{profile.rate}\" pitch=\"{profile.pitch}\"
volume=\"{profile.volume}\">{text}</prosody>"""
def detect_prosody_context(text: str) -> ProsodyProfile:
"""Автоматично визначаємо потрібну просодику"""
if text.endswith("?"):
return PROFILES["question"]
if any(w in text.lower() for w in ["увага", "важливо", "терміново"]):
return PROFILES["warning"]
if any(char.isdigit() for char in text):
return PROFILES["numbers"]
return ProsodyProfile() # default
Динамічне керування TTS особливо корисне для голосових асистентів, де кожна репліка потребує індивідуальної просодики.
Порівняння підтримки просодики у популярних TTS-провайдерів
| Провайдер | Швидкість (rate) | Тон (pitch) | Гучність (volume) | SSML-тег |
Примітки |
|---|---|---|---|---|---|
| Google Cloud TTS | Повна | Повна | Повна | Так | Найкраща підтримка SSML |
| Azure Cognitive Services | 0.5–2.0 | ±50% | Так | Частково | Через SSML не всі атрибути |
| OpenAI TTS (gpt-4o-audio) | 0.25–4.0 | Ні | Ні | Ні | Тільки параметр speed |
| Yandex SpeechKit | 0.1–3.0 | Ні | Ні | Ні | Тільки speed через API |
| ElevenLabs | ±5 st | 0–100% | Ні | Частково | Підтримка через API |
SSML prosody у 3 рази гнучкіший за пряме API-керування, особливо при комбінуванні параметрів. Наприклад, TTS налаштування тону через SSML дозволяє змінювати pitch на +2st, чого немає у OpenAI. Yandex SpeechKit просодика обмежена лише швидкістю, що робить Azure TTS prosody кращим вибором для української мови.
Типові SSML-профілі для різних сценаріїв
| Сценарій | Швидкість | Тон | Гучність | Приклад |
|---|---|---|---|---|
| Числа, коди | slow | medium | medium | «Номер: 123-45-67» |
| Попередження | medium | +2st | loud | «Увага! Зміна курсу» |
| Питання | medium | +1st | medium | «Який тариф обрати?» |
| Прощання | slow | -1st | soft | «Дякую, всього доброго» |
Процес роботи
- Аналіз сценаріїв: збираємо типові репліки, виділяємо контекстні групи (числа, попередження, питання, прощання).
- Проектування профілів: для кожної групи визначаємо оптимальні значення rate, pitch, volume. Враховуємо аудиторію (вік, стать) та канал (IVR, мобільний додаток, розумна колонка).
- Розробка інтеграції: пишемо Python-бібліотеку або модуль на Node.js, який обгортає текст у SSML з динамічним вибором профілю. Додаємо Fallback для провайдерів без повної підтримки SSML.
- Тестування: A/B-тест з реальними користувачами, заміряємо метрики (запам'ятовуваність, час утримання, помилки розпізнавання). Коригуємо профілі.
- Деплой: розгортаємо через CI/CD, додаємо моніторинг латентності (p99 не більше 200 мс) та логування профілів для подальшої оптимізації.
Окрім
Що входить у роботу
- SSML-шаблони для всіх типових сценаріїв (адаптовані під український ринок — з урахуванням особливостей української мови: наголоси, інтонаційні конструкції).
- Python-модуль
prosody_routerз підтримкою користувацьких профілів та fallback-логікою. - Документація з профілювання та інтеграції.
- Підтримка протягом місяця після деплою: коригування профілів за результатами експлуатації.
Строки та вартість
Базове керування просодикою (швидкість, тон, паузи) — від 1 до 2 днів. Контекстна автоматична маршрутизація з NLP-модулем — від 3 до 5 днів. Вартість — від 5000 грн за базовий пакет. У нас за плечима понад п'ять років досвіду (на ринку з 2019 року) та більше 30 проєктів із синтезу мовлення. Отримайте консультацію — напишіть на пошту або в месенджери. Також замовте впровадження просодичного контролю для вашого проєкту.
Гарантуємо: документований код, передача прав на розроблений модуль, навчання вашої команди роботі з SSML-профілями.







