При інтеграції голосового помічника на AWS багато клієнтів стикаються з проблемою: стандартний синтез мовлення Amazon Polly для російської мови звучить неприродно. Neural TTS для ru-RU не підтримується, а використовувати західні акценти не можна. Крім того, є обмеження на довжину тексту — під час синтезу через synthesize_speech можна передати не більше 1500 символів. Ми вирішуємо ці завдання за допомогою SSML-розмітки, асинхронної обробки через Lambda та S3, а також кастомних налаштувань просодії. За 5 років роботи ми реалізували понад 50 проєктів з TTS у хмарі, і в кожного є свої тонкощі.
Як обійти обмеження Neural для російської мови?
Основний інструмент — SSML (Speech Synthesis Markup Language). З його допомогою можна керувати паузами, темпом, наголосами та навіть вимовою окремих символів. Наприклад, якщо потрібно, щоб цифри вимовлялися по порядку, використовуємо <say-as interpret-as="digits">. А для створення природних пауз — <break time="300ms"/>. Ось приклад розмітки, яку ми застосовуємо в продакшені:
<speak> Привіт! Ваше замовлення <break time="300ms"/> номер <say-as interpret-as="digits">12345</say-as> готове. <prosody rate="slow">Будь ласка, перевірте дані.</prosody> </speak> Це дозволяє наблизити звучання до людського навіть на стандартних голосах. За даними документації AWS, SSML коригує інтонацію краще, ніж просто зміна параметрів voice. Для російської мови доступні два голоси:
| Голос | Мова | Тип | Sample Rate |
|---|---|---|---|
| Maxim | ru-RU | Standard | 8000-22050 |
| Tatyana | ru-RU | Standard | 8000-22050 |
Для порівняння, Azure Neural TTS підтримує російську, але його вартість приблизно в 2–3 рази вища при аналогічному обсязі. Amazon Polly з SSML дає 80% якості Azure за меншу ціну.
Чому варто обрати інтеграцію через Lambda та S3?
Ми використовуємо зв'язку Lambda + S3 для масштабованої та доступної за ціною синхронізації. Клієнт надсилає текст — функція Lambda синтезує мовлення через boto3 і зберігає файл у S3. Користувач отримує посилання з Presigned URL для прямого завантаження. У випадку з довгими текстами запускаємо асинхронне завдання start_speech_synthesis_task — це економить ресурси і не перевищує ліміти Lambda за часом.
import boto3 polly = boto3.client('polly', region_name='us-east-1') def synthesize_speech(text: str) -> bytes: response = polly.synthesize_speech( Text=text, OutputFormat='mp3', # mp3 | ogg_vorbis | pcm | json VoiceId='Tatyana', # Maxim | Tatyana для ru-RU LanguageCode='ru-RU', Engine='standard', # standard | neural (не для ru-RU) SampleRate='22050', # 8000 | 16000 | 22050 TextType='text', # text | ssml ) return response['AudioStream'].read() # SSML синтез ssml_text = """ <speak> Привіт! Ваше замовлення <break time="300ms"/> номер <say-as interpret-as="digits">12345</say-as> готове. </speak> """ response = polly.synthesize_speech( Text=ssml_text, TextType='ssml', OutputFormat='mp3', VoiceId='Tatyana', ) Для довгих текстів:
# Для довгих текстів — async task в S3 response = polly.start_speech_synthesis_task( Text=long_text, OutputFormat='mp3', VoiceId='Tatyana', OutputS3BucketName='my-tts-bucket', OutputS3KeyPrefix='audio/' ) task_id = response['SynthesisTask']['TaskId'] Як SSML допомагає на практиці: кейс з освітніми відеолекціями
В одному з проєктів — озвучка освітніх відеолекцій — за допомогою кастомних SSML-шаблонів ми покращили розбірливість чисел та формул на 30% без використання Neural голосів. Для цього налаштували вимову спеціальних символів: <say-as interpret-as="digits"> для номерів, <phoneme alphabet="ipa" ph="pi">π</phoneme> для грецьких літер, а також <prosody rate="85%"> для повільного промовляння складних термінів. Це дозволило зберегти низьку вартість (стандартний синтез) при високій якості сприйняття.
Що таке SSML: основні елементи для синтезу мовлення
| Тег | Призначення | Приклад |
|---|---|---|
<break> |
Пауза в мілісекундах | <break time="500ms"/> |
<say-as interpret-as="digits"> |
Вимовити цифри по порядку | номер <say-as interpret-as="digits">123</say-as> |
<prosody rate="..."> |
Керування темпом мовлення | <prosody rate="slow">важливий текст</prosody> |
<phoneme alphabet="ipa" ph="..."> |
Фонетична вимова | <phoneme alphabet="ipa" ph="dʒɪˈrɑːf">жираф</phoneme> |
<emphasis level="moderate"> |
Акцент на слові | <emphasis level="moderate">увага</emphasis> |
Ці теги допомагають обійти обмеження стандартних голосів і зробити мовлення більш природним.
Що входить в роботу з інтеграції Amazon Polly
- Повний код інтеграції з boto3, включаючи SSML-шаблони
- Документація з архітектури та виклику API
- Рекомендації щодо оптимізації вартості з урахуванням вашого обсягу
- Тестовий синтез на ваших даних для оцінки якості
- Навчання команди (1 година онлайн) основам SSML та роботи з Polly
- Пост-релізна підтримка 2 тижні для оперативного вирішення питань
Процес роботи
- Аналіз: розбираємо ваш сценарій — обсяг тексту, потрібні мови, вимоги до якості.
- Архітектура: проектуємо схему — Polly + S3 + Lambda + CloudFront (опціонально).
- Реалізація: пишемо код на Python з boto3, налаштовуємо SSML для ваших текстів.
- Тест: прогоняємо на реальних даних, вимірюємо latency p99.
- Деплой: розгортаємо у вашому акаунті AWS, видаємо доступи.
Строки: від 2 до 5 робочих днів залежно від складності. Вартість розраховується індивідуально.
Гарантія результату та підтримка
Ми займаємося інтеграцією AWS та TTS понад 5 років, всі інженери сертифіковані. Надаємо повну документацію та готові скрипти, щоб ви могли обслуговувати систему самостійно. Навчаємо команду роботі з Polly та SSML, допомагаємо з налагодженням на етапі тестування. Після завершення проєкту ви залишаєтеся з працюючим рішенням і чітким розумінням його архітектури.
Хочете оцінити якість синтезу на своїх даних? Зв'яжіться з нами — ми підготуємо демо-приклад і розрахуємо оптимальну конфігурацію під ваш сценарій. Замовте консультацію, щоб обговорити деталі.







