Синтез мовлення на AWS: інтеграція Amazon Polly з Python та SSML

При інтеграції голосового помічника на AWS багато клієнтів стикаються з проблемою: стандартний синтез мовлення Amazon Polly для російської мови звучить неприродно. Neural TTS для ru-RU не підтримується, а використовувати західні акценти не можна. Крім того, є обмеження на довжину тексту — під час си

Напрямки 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

При інтеграції голосового помічника на 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 тижні для оперативного вирішення питань

Процес роботи

  1. Аналіз: розбираємо ваш сценарій — обсяг тексту, потрібні мови, вимоги до якості.
  2. Архітектура: проектуємо схему — Polly + S3 + Lambda + CloudFront (опціонально).
  3. Реалізація: пишемо код на Python з boto3, налаштовуємо SSML для ваших текстів.
  4. Тест: прогоняємо на реальних даних, вимірюємо latency p99.
  5. Деплой: розгортаємо у вашому акаунті AWS, видаємо доступи.

Строки: від 2 до 5 робочих днів залежно від складності. Вартість розраховується індивідуально.

Гарантія результату та підтримка

Ми займаємося інтеграцією AWS та TTS понад 5 років, всі інженери сертифіковані. Надаємо повну документацію та готові скрипти, щоб ви могли обслуговувати систему самостійно. Навчаємо команду роботі з Polly та SSML, допомагаємо з налагодженням на етапі тестування. Після завершення проєкту ви залишаєтеся з працюючим рішенням і чітким розумінням його архітектури.

Хочете оцінити якість синтезу на своїх даних? Зв'яжіться з нами — ми підготуємо демо-приклад і розрахуємо оптимальну конфігурацію під ваш сценарій. Замовте консультацію, щоб обговорити деталі.