Мем из мультфильма о роботе и его предназначении передавать масло.

Open Source против проприетарщины: обзор TTS-моделей для русского языка

План статьи

  1. Введение в суть задачи. Для чего и зачем это нужно.

  2. Как оценивать такие модели. Метрики и нюансы сравнения.

  3. Основная часть. Разбор каждой модели. Краткое резюме. Возможности и ограничения. Выводы

  4. Итоговый вывод, общая таблица сравнений OpenSource моделей для задачи TTS.

Введение

Задача Text-to-Speech (TTS) она же задача синтеза речи — заключается в том, чтобы озвучить заранее подготовленный текст голосом спикера. Данная задача является одной из важных в системах взаимодействия человека и компьютера. Конечно, такая задача генерации речи встречается гораздо реже, чем, например, задача генерации или обработки текста, тем не менее, сферы ее применения со временем только увеличиваются в своих масштабах и становится все более востребованной.

Задача синтеза речи лежит в основе всех голосовых ассистентов, например, умная колонка Алиса, навигатор или служба технической поддержки. Кроме таких глобальных внедрений, существуют системы, которые напрямую оказывают поддержку людям, которым это действительно важно, например, помогают слепым людям получать информацию об окружающей среде. Такими технологиями озвучивают аудиокниги, персонажей в видеоиграх и еще много всего интересного.

Как и в других сферах больших данных — направление TTS развивается. Появляются новые открытые модели и репозитории, которые позволяют решать эту задачу с максимальным приближением человеческого голоса. Улучшается произношение, интонация, паузы между знаками препинания, эмоции и синтезированная речь воспринимается как настоящая.

Каково мое предназначение? Передай масло.
Каково мое предназначение? Передай масло.

Привет, Хабр, меня зовут Музафаров Данил, я работаю DS инженером в компании Raft и сегодня мы рассмотрим существующие Open Source модели и репозитории, которые решают задачи TTS для русского языка. Возможно, не все модели попадут в мой список, поэтому буду рад, если вы в комментариях посоветуете еще какие-нибудь интересные модели, на которые стоит обратить внимание и в таком случае можно будет сделать вторую часть.

Метрики успеха

Прежде, чем начать анализ и сравнение моделей, необходимо обозначить метрики, по которым мы сможем проводить оценку. В данной задаче синтеза речи сложно объективно оценивать качество речи, но точно можно замерить скорость генерации. Будем замерять скорость на GPU и CPU в секундах.

  • Latency (CPU/GPU)

Также будет моя субъективная оценка результата генерации по следующим параметрам в диапазоне от 1 до 5:

  • Естественность (Naturalness): Насколько речь приближена к человеческой по интонации, тембру, скорости, плавности речи и ее темпу;

  • Выразительность (Expressiveness): Способна ли модель передавать эмоции, варьировать интонацию и подстраиваться под контекст;

  • Легкость интеграции и настройки: Качество документации, на сколько сложно запустить проект локально на ПК

Основная часть

Итак, сегодня мы рассмотрим 7 Open Source решений, а именно:

  • Boson AI / HiggsAudio

  • ChatterBox

  • ESpeech

  • F5-TTS

  • QwenTTS

  • Silero

  • XTTS-v2

HiggsAudio

BosonAI — Компания, специализирующаяся на TTS задачах. У них есть Open Source репозиторий, который предоставляет доступ к их открытым моделям для TTS, также примеры использования.

Ссылка на Boson AI: https://www.boson.ai/blog/higgs-audio-v2Ссылка на GitHub HiggsAudio: https://github.com/boson-ai/higgs-audio

При тестировании сразу же замечаю предупреждение, что желательно иметь не менее 24 ГБ видеопамяти. К сожалению у меня только 12 ГБ, поэтому пришлось проделать некоторые операции в коде по уменьшению объема используемого кэша, который используется по умолчанию, чтобы модель влезала на мою видеокарту.

Тестирование

Системным промптом прописывается инструкция-описание того, как должен звучать голос, внешние звуки, чистота записи и прочие характеристики.

system_prompt = ( «Generate audio following instruction. <|scene_desc_start|> Audio is recorded from a quiet room. <|scene_desc_end|>» )240ef980175ac11e2d593d8a0fd54ce9

Также прописывается User Prompt. Он отвечает за само аудио наполнение, которое будет синтезировано. Итоговый Message для модели выглядит так:

messages = [ Message( role=»system», content=system_prompt, ), Message( role=»user», content=»Коллеги, всем привет! Это синтезированная речь higgs-audio. Меня зовут Музафаров Данил и я тестирую этот репозиторий.», ), ]e1a416ab2f45bf034acf4fc3253dcb1f

Далее генерация около пары минут, что само по себе достаточно долго, для английского языка мне потребовалась 1 минута.

На выходе получаем такое аудио:

Звучит буквально как...
Звучит буквально как…

Вывод

Синтезированный голос получился с сильным акцентом. Явно указать русский язык в параметрах генерации нельзя, поэтому имеем такой результат. С английским языком проблем не было, синтезированная речь была чистой и качественной.

Chatterbox

Китайская мультиязычная модель для генерации голоса

GitHub: https://github.com/resemble-ai/chatterbox

Данный репозиторий у меня не получилось запустить на GPU из-за конфликтов с зависимостями для нового типа архитектур видеокарт. Но ничего, попробуем на CPU.

Тестирование

Текст, который планирую озвучить:
«Коллеги, добрый день! Тестирую синтез речи с помощью модели Chatterbox. Это синтезированный голос Данила Музафарова».

Синтез речи со стандартным тембром (голосом)
Ошибся в паре слов с ударением, в начале некорректно использовал интонацию.

Синтез речи с клонированным голосом спикера
Здесь я предварительно записал свой голос и использовал в качестве «Аудиопромпта».
Такая же проблема с ударениями и интонацией. Но в целом похоже на голос спикера.

Вывод

С русским языком умеет работать, но не совсем хорошо. Если использовать GPU, то будет получаться довольно быстро. Для генерации каждой синтезированной аудиодорожки с текстом, который я хотел озвучить на моей CPU ушло примерно 38 секунд.

ESpeech

Русскоязычная команда разработчиков выкатили модели под TTS с gradio интерфейсом/

Ссылка на HF: https://huggingface.co/ESpeechСсылка на HF на последнюю модель: https://huggingface.co/ESpeech/ESpeech-TTS-1_RL-V2

Тут нет подробной документации, есть только скрипт, который позволяет поднять gradio веб-интерфейс и протестировать модели в нем. То есть придется самостоятельно разбирать весь код, доставая необходимые функции.

Тестирование

Запуск был очень простой. Предоставлен код, предоставлены зависимости, которые нужно установить. Создал окружение, установил зависимости, создал python скрипт и запустил gradio web-приложение.

Gradio web-интерфейс
Gradio web-интерфейс

Загружается референсное аудио, прописывается его транскрипция.
Прописывается текст для генерации (синтеза).
Также есть Advanced настройки, для более тонкой настройки речи.

Advanced настройки
Advanced настройки

Далее просто нажать на кнопку «Generate Speech».

Референсное аудио

Результат генерации

Вывод

С русской интонацией всё в порядке, если ставить знаки препинания.
С ударениями всё в порядке.
Генерация отличная, без претензий к качеству.
Скорость генерации хорошая, на 14 секунд генерации потратил 6 секунд обработки на GPU.

F5-TTS

Оригинальный репозиторий: https://github.com/SWivid/F5-TTS

В оригинальном репозитории F5-TTS отсутствует русский язык. Но на просторах HF найдена дообученная F5-TTS на русских и английских семплах: https://huggingface.co/Misha24-10/F5-TTS_RUSSIAN

Герои не носят плащи
Герои не носят плащи

Буду тестировать дообученную модель.

Тестирование

Взял дообученную русскоязычную модель с HF: https://huggingface.co/Misha24-10/F5-TTS_RUSSIAN. 

Использую последнюю версию — F5TTS_v1_Base_v4_winter.

Чтобы использовать модель необходимо иметь референсное аудио, желательно с расшифровкой, если не иметь расшифровку, то будут задействованы дополнительные ресурсы на расшифровку.

В итоге для генерации необходимо прописать следующие cli-аргументы:

f5-tts_infer-cli / —model_cfg src/f5_tts/configs/F5TTS_v1_Base_v4_winter.yaml / —ckpt_file ckpts/F5TTS_v1_Base_v4_winter/model_212000.safetensors / —vocab_file ckpts/F5TTS_v1_Base_v4_winter/vocab.txt / —ref_audio ref_danil.ogg —ref_text «Всем привет, меня зовут Музафаров Данил и сейчас я тестирую новый аудиоформат» / —gen_text «Коллеги, добрый день, меня зовут Музафаров Данил, сейчас я тестирую синтез речи на модели Эф Пять, дообученной на русский язык» —device cuda fa419a8f58a3abc863a9e200ed4c56de

  • model_cfg — конфиг модели, он изначально есть в репозитории, необходимо поменять название самого конфига и называние модели внутри с «F5TTS_v1_Base_v4» на «F5TTS_v1_Base_v4_winter»;

  • ckpt_file — веса модели;

  • vocab_file — словарь с символами, которые знает модель. Взял из русского репозитория с HF;

  • ref_audio — референсное аудио. Голос спикера, который будем клонировать;

  • ref_text — Расшифровка референсного аудио;

  • gen_text — Текст, который хотим сгенерировать;

  • device — тут либо cuda, либо cpu. Но это опционально, можно не указывать данный параметр.

Референсное аудио

Результат генерации

Вывод

Отличная генерация: порядок с произношением, порядок с интонацией.
Сгенерированное аудио 9 секунд.
На GPU — генерация составила 2 секунды. На CPU — 2 минуты.
В официальном репозитории отсутствуют модели для русского языка.
Долго работает на CPU.
Отсутствуют скрипты для инференса, работа происходит через терминал и cli-аргументы.

QwenTTS

Свежий китайский OpenSource от Qwen для синтеза речи.
GitHub: https://github.com/QwenLM/Qwen3-TTS

Простой ML инженер из лабы Alibaba
Простой ML инженер из лабы Alibaba

Здесь предоставлено 3 основные модели:

  • CustomVoice — предоставляет ограниченное количество голосов спикеров (тембров), которыми можно озвучить текст;

  • VoiceDesign — позволяет промптом описать как должен звучать голос спикера;

  • Base — клонирует голос референсного спикера и озвучивает этим голосом заданный текст.

Тестирование

Модель Qwen3-TTS-12Hz-1.7B-CustomVoice

Модель имеет поддержку нескольких языков:

[‘auto’, ‘chinese’, ‘english’, ‘french’, ‘german’, ‘italian’, ‘japanese’, ‘korean’, ‘portuguese’, ‘russian’, ‘spanish’]

Модель имеет варианты тембра нескольких спикеров:

[‘aiden’, ‘dylan’, ‘eric’, ‘ono_anna’, ‘ryan’, ‘serena’, ‘sohee’, ‘uncle_fu’, ‘vivian’]

Перейдем к синтезу речи. В методе model.generate_custom_voice() есть параметры:

  • text — синтезируемый текст;

  • language — язык генерации, явно указываем русский или Auto;

  • speaker — выбираем спикера, а именно тембр голоса, который будет озвучивать текст. Выбираем из доступных (посмотреть доступных через метод model.get_supported_speakers());

  • instruct — промпт для описания как должен быть озвучен текст. Можно не прописывать.

import torch import soundfile as sf from qwen_tts import Qwen3TTSModel model = Qwen3TTSModel.from_pretrained( «Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice», device_map=»cuda:0″, dtype=torch.bfloat16, ) wavs, sr = model.generate_custom_voice( text=»Привет, меня зовут Данил Музафаров. Это тестирование синтеза речи.», language=»Russian», speaker=»ryan», instruct=»Speak in a calm, confident voice.», ) sf.write(«output_custom_voice.wav», wavs[0], sr)c4e7a82236bd3e1fb5b3d90bfbbdedbb

Результат генерации

Вывод

Хоть модель и ставит ударения правильно, но чувствуется, что есть небольшой акцент и проблемы с интонацией. Это связано с тем, что голоса спикеров имеют изначально в качестве родного языка не русский, а китайский или английский.

Модель Qwen3-TTS-12Hz-1.7B-VoiceDesign

Для генерации в методе model.generate_voice_design() необходимо прописать следующие параметры:

  • text — синтезируемый текст;

  • language — язык генерации, явно указываем русский;

  • instruct — промпт для описания как должен быть озвучен текст. 

import torch import soundfile as sf from qwen_tts import Qwen3TTSModel model = Qwen3TTSModel.from_pretrained( «Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign», device_map=»cuda:0″, dtype=torch.bfloat16, ) wavs, sr = model.generate_voice_design( text=»Коллеги, добрый день, меня зовут Данил Музафаров. Это тестирование синтеза речи.», language=»Russian», instruct=»The male voice of the announcer with a low timbre», ) sf.write(«output_voice_design.wav», wavs[0], sr)f50b893d1bc32a9f44f21e96916fadb3

Результат генерации

Вывод

Промпт необходимо описывать на английском языке, на русском не работает. Результат неплохой, инструкция по описанию голоса соблюдается.

Модель Qwen3-TTS-12Hz-1.7B-Base

Для генерации в методе model.generate_voice_clone() необходимо прописать следующие параметры:

  • text — синтезируемый текст;

  • language — язык генерации, явно указываем русский;

  • ref_audio — аудио голоса спикера, который мы хотим склонировать;

  • ref_text — расшифровка аудио голоса спикера.

import torch import soundfile as sf from qwen_tts import Qwen3TTSModel model = Qwen3TTSModel.from_pretrained( «Qwen/Qwen3-TTS-12Hz-1.7B-Base», device_map=»cuda:0″, dtype=torch.bfloat16, #attn_implementation=»flash_attention_2″, ) ref_audio = «ref_danil.ogg» ref_text = «Всем привет, меня зовут Музафаров Данил и сейчас я тестирую новый аудио формат.» wavs, sr = model.generate_voice_clone( text=»Коллеги, добрый день, меня зовут Данил Музафаров. Это тестирование синтеза речи. Сегодня двадцать шестое января.», language=»Russian», ref_audio=ref_audio, ref_text=ref_text, ) sf.write(«output_voice_clone.wav», wavs[0], sr) 2956a8428f8474a6126fca09870c8a38

Аудио референс голоса спикера

Результат генерации

Вывод

Хороший репозиторий, всё очень удобно прописано, интуитивно понятно.
Встроенные голоса — для русского не годятся.
Хороший промпт?описание голоса спикера показало хороший результат.
Клонирование голоса спикера — отличное.
Инференс врядли подойдет для real time работы, но на проектах, где не так важен RealTime — может показать себя вполне неплохо.

Silero

Русскоязычная разработка для синтеза речи.

GitHub: https://github.com/snakers4/silero-modelsСсылка на свежую статью Хабр: https://habr.com/ru/articles/961930/

Тестирование

Можно использовать только стандартные тембры голосов спикеров. Нет возможности использовать кастомный голос.

Сами модели весят немного и помещаются на CPU

from silero import silero_tts model_id = ‘v5_ru’ device = torch.device(‘cpu’) model, example_text = silero_tts(language=’ru’, speaker=model_id) model.to(device) # gpu or cpu6d71c54fb2a4b49dee3c4a82b6efa8b9

Далее можно посмотреть доступные голоса спикеров через метод sorted(model.speakers)

[‘aidar’, ‘baya’, ‘eugene’, ‘kseniya’, ‘xenia’]fecfcf6a597f4beb9003fc9c4044cef3

Далее идет блок кода с синтезом речи

# v5_cis_base_nostress sample_rate = 48000 speaker = ‘eugene’ example_text = ‘Колл+еги, д+обрый д+ень, мен+я зов+ут Музаф+аров Дан+ил, сейч+ас +я тест+ирую с+интез р+ечи +от Сл+иеро’ audio = model.apply_tts(text=example_text, speaker=speaker, sample_rate=sample_rate) print(example_text) display(Audio(audio, rate=sample_rate))5e2e24e5655d51078f80c8389e5c1fdd

Можно заметить, что текст, который я тут прописал выглядит нестандартно, присутствуют символы «+». Это является знаком ударения для модели.

Конечно, это всё делается не вручную, а через отдельную библиотеку, которую Silero также предоставляет. Пример использования ниже.

from silero_stress import load_accentor accentor = load_accentor(lang=’ru’) # lang could be «ru» / «ukr» sample_sent = «Коллеги, добрый день, меня зовут Музафаров Данил, сейчас я тестирую синтез речи от Слиеро» print(accentor(sample_sent))1c86265f205f45d22f8d414772edef80

И мы получаем такой результат: 

Колл+еги, д+обрый д+ень, мен+я зов+ут Музаф+аров Дан+ил, сейч+ас +я тест+ирую с+интез р+ечи +от Си+лероb5e1f04de5ab42c572d574fd8ba3100d

Результат генерации

Вывод

У Silero есть лицензия на использование, поэтому бесплатно его можно использовать только в образовательных целях.

Система показала себя очень даже качественной, с удобной библиотекой, которая способна расставлять ударения в тексте, который необходимо озвучить.

Генерация даже на CPU очень быстрая.

XTTS-v2

GitHub: https://github.com/Jaden-J/Coqui-TTS-XTTS-v2-HuggingFace: https://huggingface.co/coqui/XTTS-v2

Тестирование

Посмотреть доступные модели можно через

tts —list_models6f98311fa6c4d528f37f64f7dfd20b5d

Русские модели отсутствуют, поэтому придется пользоваться мультиязычными.

Клонирование голоса и синтез нового аудио на его основе

from TTS.api import TTS device = «cpu» tts = TTS(«tts_models/multilingual/multi-dataset/xtts_v2″).to(device) tts.tts_to_file(text=»Коллеги, добрый день, меня зовут Данил Музафаров, сейчас я тестирую новую модель для синтеза речи, получается неплохо, правда не моей видеокарте не получилось запустить, но на процессоре получилось.», speaker_wav=»Данил.mp3″, language=»ru», file_path=»output_dan.wav»)f243ecfaab13a9b86aadbf731adb6576

Субъективная оценка — действительно неплохо, тембр голоса сохранился. В начале немного не верная интонация, но в остальном нормально. Аудио длительностью 11 секунд — генерировалось 19 секунд на CPU. 

Результат генерации

Есть фича, для клонирования тембра голоса спикера и воспроизведения текста на иностранных языках. Но не будем на ней подробно останавливаться.

Преобразование голоса

Есть возможность переложить тембр голоса с одного аудиофайла на второй аудиофайл. Тем самым произнести второй аудиофайл голосом из первого.

К сожалению на мультиязычной модели с русским языком это работает очень плохо, но пример как это сделать прикладываю.

tts = TTS(model_name=»voice_conversion_models/multilingual/vctk/freevc24″, progress_bar=False).to(«cpu») tts.voice_conversion_to_file(source_wav=»source_audio.ogg», target_wav=»target_audio.ogg», file_path=»mix.wav»)59c7d85b6b0a08e2a01a4ce373d24fb2

Вывод

Очень удобный репозиторий, всё интуитивно понятно. Есть возможность генерации на CPU с приемлемой скоростью. Более менее хорошо решает задачу клонирования голоса спикера и озвучивания текста. Но большой минус в том, что нет модели конкретно под русский язык. Есть возможность для дообучения своих моделей.

Клонирование и генерация речи на русском языке есть, работает нормально, но есть куда расти. Было бы хорошо, если бы была русская модель, так как вся работа идет на мультиязычной и явно режет потенциальное качество.

Хороший репозиторий, но нужно ждать русскую модель, либо дообучать самостоятельно.

Время подводить итоги
Время подводить итоги

Заключение и подведение итогов

Теперь нужно свести все результаты в таблицу, чтобы можно было наглядно оценить наши модели, которые мы рассмотрели. Ранее мы просто посмотрели как работают модели, как они звучат и некоторые моменты их реализации. В самом начале мы обговорили метрики, по которым мы будем оценивать модели и для честности замеров метрик мы будем использовать одни и те же условия. А именно будем генерировать одно и то же аудиосообщение и по нему уже проставлять оценку в таблицу. 

GPU — RTX 5070

Процессор — Ryzen 7500F

Будем озвучивать: «Коллеги, добрый день, меня зовут Музафаров Данил. Я пишу статью на Хабр и сейчас я считаю метрики аудиогенерации по скорости.» Это аудио длительностью примерно 10–15 секунд.

Модель

Latency (CPU), сек

Latency (GPU), сек

Естественность

Выразительность

Легкость интеграции

HiggsAudio

123.34

50.36

1

1

3

ChatterBox

31.63

3

3

3

ESpeech (TTS-1 RL-V2)

3.85

3.76

4,5

4

2

F5-TTS (v1_Base_v4_winter)

128.83

2.32

4,5

5

1

QwenTTS (1.7B-VoiceDesign

)

40.487

15.001

4,5

5

4

Silero (v5_ru)

2.62

0.071

4

4

4

XTTS-v2

20.65

18.54

3

3

2

Явный аутсайдер в таблице это HiggsAudio. Хоть он и показывает хорошие результаты на английском языке, к сожалению, на русском он совсем плох. По другим моделям не хочется останавливаться подробно, так как у них есть потенциал, есть свои плюсы и минусы, для каждого он сможет выбрать то, что ему больше нравится и решает его задачу.

Я надеюсь, эта статья даст первичное понимание о каждой модели и позволит быстрее прийти к конкретному выбору, который сможет решать вашу конкретную задачу. 

Буду рад комментариям и конструктивной критике, которая поможет мне в следующих статьях сделать их лучше!

Источник: habr.com

Источник: ai-news.ru

✅ Найденные теги: Open, Open Source, TTS-модели, новости, Проприетарщина, Русский Язык

ОСТАВЬТЕ СВОЙ КОММЕНТАРИЙ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Каталог бесплатных опенсорс-решений, которые можно развернуть локально и забыть о подписках

галерея

Звёздное небо с галактиками и туманностями, космос, Вселенная, астрофотография.
Женщина с длинными тёмными волосами в синем свете, нейтральный фон.
Спутник исследует черную дыру в космосе, испускающий световой луч.
Пикачу использует электрический разряд на фоне неба.
Черный углеродное волокно с текстурой плетения, отражающий свет.
Круглый экран с изображением замка и горы, рядом электронная плата.
Код на экране компьютера, программирование, интерфейс разработчика.
Статистика использования видеокарт NVIDIA RTX, показывающая изменения за октябрь-февраль.
Макросъемка клетки под микроскопом, текстура и форма на голубом фоне.
Image Not Found
Звёздное небо с галактиками и туманностями, космос, Вселенная, астрофотография.

Система оповещения обсерватории Рубина отправила 800 000 сигналов в первую ночь наблюдений.

Астрономы будут получать оповещения о небесных явлениях в течение нескольких минут после их обнаружения. Теренс О'Брайен, редактор раздела «Выходные». Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной…

Мар 2, 2026
Женщина с длинными тёмными волосами в синем свете, нейтральный фон.

Расследование в отношении 61-фунтовой машины, которая «пожирает» пластик и выплевывает кирпичи.

Обзор компактного пресса для мягкого пластика Clear Drop — и что будет дальше. Шон Холлистер, старший редактор Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной странице вашего…

Мар 2, 2026
Черный углеродное волокно с текстурой плетения, отражающий свет.

Материал будущего: как работает «бессмертный» композит

Учёные из Университета штата Северная Каролина представили композит нового поколения, способный самостоятельно восстанавливаться после серьёзных повреждений.  Речь идёт о модифицированном армированном волокном полимере (FRP), который не просто сохраняет прочность при малом весе, но и способен «залечивать» внутренние…

Мар 2, 2026
Круглый экран с изображением замка и горы, рядом электронная плата.

Круглый дисплей Waveshare для креативных проектов

Круглый 7-дюймовый сенсорный дисплей от Waveshare создан для разработчиков и дизайнеров, которым нужен нестандартный экран.  Это IPS-панель с разрешением 1 080×1 080 пикселей, поддержкой 10-точечного ёмкостного сенсора, оптической склейкой и защитным закалённым стеклом, выполненная в круглом форм-факторе.…

Мар 2, 2026

Впишите свой почтовый адрес и мы будем присылать вам на почту самые свежие новости в числе самых первых