Это вторая часть обзора моделей для задачи синтеза речи (Text-to-Speech). Впрошлой частия сравнил 7 Open Source моделей для этой задачи по нескольким критериям. В этот раз я решил посмотреть не только на Open Source-модели, но и на проприетарные TTS-решения.
Привет, Хабр! Меня зовут Музафаров Данил, я работаю DS инженером в компании Raft и сегодня я хочу провести сравнение моделей для синтеза речи. В этот раз хочется продемонстрировать работу таких моделей на продуктовых кейсах, рассказать о нюансах при использовании данных моделей в конкретных ситуациях и о возможных проблемах, которые могут возникнуть.
Метрики успеха
Метрики, как и прошлой части останутся такими же, чтобы можно было более удобно сравнивать новые модели с моделями из прошлой части.
Latency(CPU/GPU)
Естественность(Naturalness): Насколько речь приближена к человеческой по интонации, тембру, скорости, плавности речи и темпу?
Выразительность(Expressiveness): Способна ли модель передавать эмоции, варьировать интонацию и подстраиваться под контекст?
Легкость интеграции и настройки:Качество документации, насколько сложно запустить проект локально на ПК.
Также рассмотрим модели в двух продуктовых кейсах:
Голосовой чат-бот: возможность отвечать в real-time небольшими репликами со сложными словами и аббревиатурами.
Генерация аудиоподкастов: возможность синтезировать длинные тексты с хорошим качеством и приемлемой скоростью.
Основная часть
Сегодня рассмотрим две модели:
- CosyVoice
- Yandex SpeechKit
Оригинальный GitHub:https://github.com/FunAudioLLM/CosyVoice
Доработанный русскоязычным автором форк репозитория:https://github.com/Brakanier/FastCosyVoice
В прошлой части про TTS модели в комментариях мне посоветовали протестировать эту модель, за что я хочу сказать большое спасибо комьюнити Хабра!
Давайте рассмотрим модель CosyVoice, разработанную китайской командой Alibaba. Будем тестировать конкретно версию CosyVoice3-0.5B.
Голосовой бот
Для голосового бота критически важен синтез в реальном времени, так как в диалоге с человеком задержки должны быть минимальными. В модели CosyVoice такая возможность есть.
Рассмотрим модель на прикладном примере в качестве аудиоассистента, на данном диалоге:
(Клиент) — Здравствуйте, хочу записаться к кардиологу, давление скачет.
(CosyVoice) — Для записи продиктуйте номер полиса ОМС, СНИЛС и дату рождения.
(Клиент) — Полис у меня есть, а ещe выписка после стационара.
(CosyVoice) — При наличии ИБС, ХСН или перенесeнного ОНМК необходимы результаты ЭКГ, ЭХО-КГ и суточного мониторирования по Холтеру.
(Клиент) — Ой, а это всe обязательно?
(CosyVoice) — При повышенном АД и нестабильной ЧСС требуется консультация терапевта и направление в КДЦ согласно клиническому протоколу.
Как можно видеть, модель неплохо справляется с русскими аббревиатурами, воспроизводит речь без заметных акцентов и неверных ударений.
Генерация аудиоподкастов
Часто модели начинают ломаться при озвучивании русского текста длительностью более одной минуты: проседает качество, появляются ненужные артефакты и неверные ударения. Поэтому при задачах, связанных с синтезом длинных текстов важно это иметь в виду и проверять.
Для данного теста я подготовил отрывок из рассказа “Господин из Сан-Франциско”.
Господин из Сан-Франциско — имени его ни в Неаполе, ни на Капри никто не запомнил — ехал в Старый Свет на целых два года, с женой и дочерью, единственно ради развлечения.Он был твердо уверен, что имеет полное право на отдых, на удовольствия, на путешествие во всех отношениях отличное…
Данный текст содержит 4868 символов и 728 слов. Что является эквивалентом 2,5 страниц текста на листе бумаги А4. Из-за того, что текст является художественным, он имеет внутри себя интересные слова, где теоретически модели могут ошибиться либо с интонацией, либо с ударением, что добавляет модели cложности, но тем интереснее будет посмотреть на результаты синтеза длинного аудио.
Результат генерации
Генерация получилась хорошей, речь чистая, есть небольшие ошибки в ударениях и интонациях.
Yandex SpeechKit
Yandex SpeechKit - это набор инструментов для синтеза и распознавания речи. Очень удобный и понятный сервис, с хорошей документацией и интуитивно понятными сценариями использования. Большой набор голосов для русского языка, а также небольшой выбор для иврита, казахского, немецкого, английского и узбекского. Есть как мужские, так и женские голоса, а также есть возможность выбрать характер звучания голоса, а именно “нейтральный”, “дружелюбный”, “раздраженный” и “строгий”.
Также есть возможность создать собственный голос, но для этого нужно минимум 30 минут чистой и размеченной речи спикера. На это уже нужно выделять собственные ресурсы.
Ссылка на документацию:https://aistudio.yandex.ru/docs/ru/speechkit/tts/
Давайте рассмотрим эту технологию на наших кейсах.
Голосовой бот
(Клиент) — Здравствуйте, хочу записаться к кардиологу, давление скачет.
(Yandex SpeechKit) — Для записи продиктуйте номер полиса ОМС, СНИЛС и дату рождения.
(Клиент) — Полис у меня есть, а ещe выписка после стационара.
(Yandex SpeechKit) — При наличии ИБС, ХСН или перенесeнного ОНМК необходимы результаты ЭКГ, ЭХО-КГ и суточного мониторирования по Холтеру.
(Клиент) — Ой, а это всe обязательно?
(Yandex SpeechKit) — При повышенном АД и нестабильной ЧСС требуется консультация терапевта и направление в КДЦ согласно клиническому протоколу.
Модель Яндекса неплохо справляется с генерацией подобных фраз с аббревиатурами. Теперь рассмотрим на более длинных текстах.
Генерация аудиоподкастов
Господин из Сан-Франциско — имени его ни в Неаполе, ни на Капри никто не запомнил — ехал в Старый Свет на целых два года, с женой и дочерью, единственно ради развлечения.Он был твердо уверен, что имеет полное право на отдых, на удовольствия, на путешествие во всех отношениях отличное…
Генерация достаточно быстрая для такого текста. Но чувствуется, что речь не совсем естественная и в ней чувствуется небольшая роботизированность, но зато практически нет нареканий по интонации, произношению и ударениям. Даже если случается, что модель произносит какие-то слова некорректно, то в Yandex SpeechKit предусмотрены инструменты разметки, позволяющие это исправить. Например: поставить ударение в нужном месте через знак “+” перед нужной гласной, явно установить паузу между предложениями, выделить акцентированное слово, и даже если встречается какое-то редкое слово или сложная аббревиатура, то можно прописать полное фонетическое произношение. Более подробно можно ознакомиться по ссылке:https://aistudio.yandex.ru/docs/ru/speechkit/tts/markup/index.html
Большой плюс Yandex SpeechKit в том, что платформа поддерживает синхронный, асинхронный и потоковый синтез речи. Для сценариев с минимальными задержками Yandex также предлагает Realtime API - специальный интерфейс для голосовых ботов, ориентированный на realtime-взаимодействие. Realtime API включает в себя STT (распознавание) и TTS (синтез), плюс позволяет подключать внутреннюю базу знаний, а также задавать сценарии взаимодействия с клиентами. Это делает технологию более подходящей для голосовых ассистентов, call-центров и других диалоговых систем, где критичны скорость ответа и непрерывность общения.
Ценообразование
Yandex Speech поддерживает две схемы тарификации синтеза речи - в зависимости от версии API.
API v1 тарифицируется по общему количеству символов, отправленных на синтез за календарный месяц. Стоимость составляет 1 342 ₽ за 1 млн символов.
API v3 тарифицируется по количеству единиц тарификации. По умолчанию один запрос ограничен 250 символами и 24 секундами аудио. Стоимость одной единицы тарификации составляет 0,16266666 ₽ с НДС. Если используется unsafe_mode или потоковый режим для более длинных фраз, каждые последующие 250 символов считаются как дополнительная единица тарификации.
На практике это означает следующее:
- до 250 символов - 1 единица тарификации;
- от 251 до 500 символов - 2 единицы;
- от 501 до 750 символов - 3 единицы.
Например, запрос на синтез текста длиной 900 символов в API v3 будет тарифицироваться как 4 единицы, поэтому его стоимость составит:
4 × 0,1627 = 0,65 ₽.
Таким образом, API v1 удобнее воспринимать как оплату за общий объeм текста, а API v3 — как оплату за количество 250-символьных блоков в запросах.
Более подробно:https://aistudio.yandex.ru/docs/ru/speechkit/pricing.html
Подведем итоги и сравним модели по таблице из предыдущего выпуска
Для CosyVoice использовал
GPU - RTX 5070
Процессор - Ryzen 7500
Для Yandex SpeechKit характеристики вычислительных ресурсов не актуальны, так как это были запросы по API.
Будем озвучивать как и прошлый раз следующий текст: “Коллеги, добрый день, меня зовут Музафаров Данил. Я пишу статью на Хабр и сейчас я считаю метрики аудиогенерации по скорости.” Это аудио длительностью примерно 10-15 секунд.
Latency (CPU), сек
Latency (GPU), сек
Естественность
Выразительность
Легкость интеграции
Yandex SpeechKit
В данной статье мы рассмотрели две модели для синтеза речи: CosyVoice и Yandex SpeechKit. У каждой из них есть свои сильные и слабые стороны, и моей задачей было не просто перечислить характеристики, а показать, как эти решения ведут себя в реальных продуктовых сценариях.
Если говорить про CosyVoice, это, пожалуй, один из наиболее интересных Open Source вариантов для русского языка из тех, что мне довелось протестировать. Модель хорошо справляется с русской речью и в целом демонстрирует достойный баланс между качеством, скоростью и гибкостью. Для задач голосового бота это особенно важно. При синтезе длинных текстов CosyVoice тоже показывает себя хорошо: речь достаточно чистая и, действительно, похожая на речь референсного спикера, без явных провалов по качеству, хотя отдельные ошибки в ударениях всe же встречаются.
Yandex SpeechKit - это уже готовый продакшн-инструмент. У сервиса хорошая документация, понятный API, поддержка потокового синтеза, большой выбор голосов и достаточно предсказуемое качество. Да, в голосе чувствуется некоторая роботизированность, особенно если сравнивать с другими современными TTS, но в прикладных задачах это часто не является критичной проблемой. Сервис хорошо справляется с аббревиатурами, не ломается на длинных текстах и легко интегрируется в существующие системы. Также важно подчеркнуть высокую скорость генерации. Если нужен быстрый старт и стабильность, то это очень сильный кандидат.