
Мы недавно писали про обновление нашего публичного синтеза, silero-tts. В прошлый раз мы существенно увеличили скорость, качество и добавили поддержку омографов.
В этот раз мы хотим вас порадовать особенной фичей, которая в большинстве случаев стабильно не работает даже в гигантских моделях синтеза, которые требуют для своей работы на 3-4 порядка больше вычислительных ресурсов и современные серверные видеокарты (наш синтез запускается даже на слабых процессорах).
Как вы догадались, эта фича — это постановка вопросов. Если просуммировать основные текущие фичи:
Высокая скорость;
Поддержка SSML;
Автоматическая простановка ударений и омографов;
Установка через
torch.hub,pipи просто локально через торч;Доступны голоса
aidar,baya,kseniya,xenia(eugeneв модель с вопросами доедет чуть позже);Теперь есть поддержка 4 типов вопросов: специальные (с вопросительным словом), общие (с выделением какого-либо слова), альтернативные ("ты любишь рыбу или мясо?") и вопросы-хвостики ("не так ли?").
Для максимальной выразительности в общих вопросах настоятельно рекомендуется выделять интонационный центр звёздочками.
Послушаем примеры
Илья, общие вопросы:
Ксения, вопросы-хвостики:
Ксения, общие вопросы:
Например, вот эти аудио сгенерированы вот таким кодом:
Скрытый текст
import IPython.display as ipd texts = [ '*Организаторы* прислали нам электронные билеты?', 'Организаторы *прислали* нам электронные билеты?', 'Организаторы прислали *нам* электронные билеты?', 'Организаторы прислали нам *электронные* билеты?', 'Организаторы прислали нам электронные *билеты*?' ] for i, text in enumerate(texts): audio = model.apply_tts(text=text, speaker='xenia') ipd.display(ipd.Audio(audio, rate=48000))
Ксения, частные вопросы:
Про вопросы в русском языке

В русском языке существует три основные стратегии маркировки вопросов: грамматическая (порядок слов), лексическая (вопросительные слова, частицы) и просодическая (интонация).
Грамматическая стратегия в русской разговорной речи используется очень редко: обязательной инверсии для вопросов нет, и по порядку слов в предложении невозможно достоверно определить, вопрос это или нет.
Лексическая стратегия (через вопросительное слово и конструкции вроде "не так ли?" или "или") — самая простая для синтеза, поскольку вопрос однозначно определяется на уровне текста, а просодический контур в целом не слишком отличается от повествовательного.
Однако эта стратегия не используется в общих вопросах ("Ты дома?"), которые в корпусах составляют примерно половину от всей массы вопросов. Просодическая стратегия является самой главной в русском языке и самой сложной для TTS: интонационный акцент может ставиться практически на любое слово, вне зависимости от его позиции или части речи, и от позиции акцента зависит смысл высказывания:
Он ПРИШЁЛ? (да, явился наконец-то);
ОН пришёл? (нет, пришла его кошка).
В итоге, для реализации русской вопросительной интонации в TTS оказывается недостаточно подать корпус вопросительных предложений. Для обучения модели необходима разметка на типы вопросов в зависимости от стратегии реализации, а также выделение слова, на которое падает просодический акцент.
Как использовать новую фичу?
Просто скачайте новую модель и пишите вопросы как обычно. Если вопрос общий, то для максимальной выразительности следует выделить интонационный центр звёздочками.
Для альтернативных, специальных или вопросов-хвостиков можно не указывать интонационный центр (если указать, будет лучше звучать).
Также добавился параметр intensity=3, отвечающий за "силу" интонации. Но мы рекомендуем его оставить по-умолчанию, то есть всегда 3. В будущем значение по-умолчанию может поменяться, как и сила выразительности. Сейчас 3 соответствует скорее нормальной интонации.
На практике, самые "сложные" общие вопросы (с интонационным центром) выглядят вот так:
texts = [ '*Организаторы* прислали нам электронные билеты?', 'Организаторы *прислали* нам электронные билеты?', 'Организаторы прислали *нам* электронные билеты?', 'Организаторы прислали нам *электронные* билеты?', 'Организаторы прислали нам электронные *билеты*?' ] for i, text in enumerate(texts): audio = model.apply_tts(text=text, speaker='xenia')
Пакет pip и примеры запуска
Мы уже писали про pip-пакет, pip install silero. Если использовать его, то минимальный код запуска выглядит уже совсем лаконично:
!pip install silero from silero import silero_tts model, example_text = silero_tts(language='ru', speaker='v5_4_ru') audio = model.apply_tts(text=example_text)
Полный код запуска, например с использованием torch.hub со всеми флагами уже выглядит вот так (подробнее можно потыкать в интерактивном ноутбучке):
import torch language = 'ru' model_id = 'v5_4_ru' device = torch.device('cpu') model, example_text = torch.hub.load(repo_or_dir='snakers4/silero-models', model='silero_tts', language=language, speaker=model_id) model.to(device) # gpu or cpu sample_rate = 48000 speaker = 'xenia' put_accent=True put_yo=True put_stress_homo=True put_yo_homo=True example_text = 'Меня зовут Лева Королев. Я из готов. И я уже готов открыть все ваши замки любой сложности!' audio = model.apply_tts(text=example_text, speaker=speaker, sample_rate=sample_rate, put_accent=put_accent, put_yo=put_yo, put_stress_homo=put_stress_homo, put_yo_homo=put_yo_homo) ssml_sample = """ <speak> <p> Когда я просыпаюсь, <prosody rate="x-slow">я говорю довольно медленно</prosody>. Потом я начинаю говорить своим обычным голосом, <prosody pitch="x-high"> а могу говорить тоном выше </prosody>, или <prosody pitch="x-low">наоборот, ниже</prosody>. Потом, если повезет – <prosody rate="fast">я могу говорить и довольно быстро.</prosody> А еще я умею делать паузы любой длины, например, две секунды <break time="2000ms"/>. <p> Также я умею делать паузы между параграфами. </p> <p> <s>И также я умею делать паузы между предложениями</s> <s>Вот например как сейчас</s> </p> </p> </speak> """ audio = model.apply_tts(ssml_text=ssml_sample, speaker=speaker, sample_rate=sample_rate)
Про омографы, скорость и размер модели можно подробнее прочитать в прошлой статье.
Вместо вывода
У нас недавно получилось добиться нетривиального прогресса по сбору данных для модели расстановки омографов, плюс в дополнение к вопросам мы также планируем добавить эмфазы (яркое выделение какого-то конкретного слова в повествовательном предложении).
Если у вас есть какие-то прикольные или оригинальные идеи насчёт улучшения открытого синтеза речи - будем рады обсудить в комментариях или в тикетах в репозитории. Вы также можете прислать свои данные для ударений и омографов - мы сделаем базовую библиотеку лучше.
Комментарии (12)

Akr0n
27.03.2026 14:37Самый качественный открытый синтез на русском языке! Ну неужели никто ещё не навайбкодил движок tts для простой установки в Андроид?

snakers4 Автор
27.03.2026 14:37Сам Pytorch сделал экспорт своих моделей.
Но там их новый компилятор и теряется возможность запускать модели со всеми фишками, можно чисто голую модель дергать.
То есть нужен будет обвязочный код.

Lecron
27.03.2026 14:37Идеал вещь эфемерная, поэтому радует сам процесс движения к нему. Спасибо.
Из идей... я наиболее чувствителен к интонированию. Включая пунктуационные паузы, как внутри, так и между предложениями. Там тоже немало нюансов. Поэтому предложу для внутреннего тестирования использовать стихи. На них все моменты наиболее заметны. А уж что покажется вам достойным улучшения, смотрите сами. Не стоит ожидать профессиональной артистической декламации, но уровень школьника на 4 балла (по 5-балльной системе) вполне достижим при ограниченных системных ресурсах.

snakers4 Автор
27.03.2026 14:37В стихах нужно соблюдение внутреннего ритма. То есть нужно знать размер и под него подстраивать рисунок.
Решение задачи чтения стихов чем-то сродни пению песен. Это как бы продукт совсем с ортогональными целями.
Включая пунктуационные паузы, как внутри, так и между предложениями.
Для тонкого управления паузами сейчас есть SSML.

Lecron
27.03.2026 14:37Я не знаю, что нужно. Вам виднее. Может сложно, а может и не так.
Предлагая в качестве образца древние движки, я обжегся на человеческом восприятии. Говорю, смотрите на просодию, а люди слыша древнюю фонетику, сразу ставят крест. Но вроде вы специалисты и такое не грозит. Существовал синтезатор — Loquendo Olga. В ее исполнении, стихи интонировались вполне приемлемо. Если не твердая четверка, так тройка с плюсом.
Образец на 4pda, для скачивания требуется регистрация.

mihmig
27.03.2026 14:37С удивлением обнаружил, что синтез речи требует больше ресурсов CPU, чем распознавание...
Хотя у людей наоборот - ребёнок болтает без умолку, мало слушая родителей :)

snakers4 Автор
27.03.2026 14:37Ну у нас не требует, после прогрева на 4 потоках процессора синтез выдает более 100 секунд аудио в секунду

kondratenko
27.03.2026 14:37Вы попросили прикольных и оригинальных идей. У меня есть прикольная, но не слишком оригинальная — сконвертируйте в ONNX и добавьтесь в пакет sherpa. Там все TTS в этом пакете сразу погрустнеют.)

snakers4 Автор
27.03.2026 14:37Что касается конвертации, то ONNX-версии у нас естественно есть, но мы их придерживаем для заказчиков, когда нужна какая-то особенная кастомизация / сборка под особенное железо.
Что касается самого ONNX, тогда вся обвязка будет торчать, придется заводить пакет как минимум, и как следствие реально портативность не вырастет (тут не просто одна голая TTS модель).
Что касается именно этого проекта - даже если и публиковать какие-то артефакты в onnx, то вижу мало смысла лить им воду на мельницу.

kondratenko
27.03.2026 14:37А насколько этично, если я сам пакет для себя сделаю на базе вашей tts?
Понимаю, что там у вас несколько слоёв, не только tts, как раз для максимально живого голоса.
Вопрос исключительно теоретический.
PS, ещё видел торч адаптации для мобилок, но вызывает сомнение пригодность к конвертации всего кода. Сама голая tts, понятно, пригодна.
PS случайно не туда написал. Это долго было бы ответом в ветку про ONNX.
Kubataba
Добрый день , спасибо за обновление ! Интонации вопросительных предложений значительно улучшат натуральность синтеза - а возможность выделения ключевых слов подтвердит что Силеро лидер доступных решений синтеза на русском языке ! Очень ждем ваше обновление омографов для русского языка !