Перейти к содержанию
Публикация AiManual

Silencio-2: TTS-модель на 18M параметров с эмоциями и звуковыми тегами, работающая на CPU

Silencio-2 - файнтюн Kyutai Pocket TTS на 18,2 млн параметров: теги эмоций и звуков прямо в тексте, клонирование голоса по короткому фрагменту и синтез на CPU б

Коротко

Что будет в материале

  1. 01

    Что такое Silencio-2 и почему это интересно

  2. 02

    Эмоции и звуковые теги: как управлять речью прямо в тексте

  3. 03

    Клонирование голоса: как это работает и почему важен нейтральный промпт

  4. 04

    Скорость на CPU: что на самом деле стоит за 20x реального времени

Silencio-2 - открытый файнтюн Kyutai Pocket TTS на 18,2 млн параметров. Модель синтезирует английскую речь на 24 кГц со стримингом, клонирует голос по короткому фрагменту и понимает теги прямо в тексте: <happy>, <sad>, <laugh>, <sigh>. Вместе с энкодером для клонирования это 27,9 млн параметров и около 112 МБ на диске. Такой размер позволяет держать синтез речи на CPU и не забирать VRAM у LLM, которая и так еле помещается в память.

Формат поставки - репозиторий с весами на Hugging Face. Pip-пакета нет: нужно клонировать код и поставить зависимости из requirements.txt. Веса распространяются по CC-BY-4.0 (лицензия наследуется от Pocket TTS), код инференса по MIT. Язык один: английский.

Автор заявляет примерно 20-кратное превышение реального времени на Apple M4 с 4 потоками CPU без GPU. Оговорка от него же: это один длинный прогон на ноутбуке, а не бенчмарк. Ниже - что реально даёт файнтюн, как работают теги, где модель спотыкается и для каких задач её брать.

Что такое Silencio-2 и почему это интересно

По сути это Pocket TTS 18M, дообученный на размеченных данных: эмоции и звуки помечены тегами внутри текста, и модель училась связывать конкретный тег с конкретной манерой произнесения. Архитектура и язык остались от базы. Отличие от типичных TTS в том, что интонацией управляет сам текст, а не отдельный набор параметров, и что модель целится в CPU-инференс, а не в GPU. 18,2 млн параметров - это в разы меньше, чем у многих открытых TTS на сотни миллионов параметров. Поэтому модель помещается в память целиком и не требует ускорителя. Анонс с техническими деталями опубликован в r/LocalLLaMA.

Ключевые характеристики в одной таблице

ПараметрЗначение
Параметры речевой части18,2 млн
Параметры с энкодером для клонирования27,9 млн
Размер на дискеоколо 112 МБ
Частота дискретизации24 кГц
Стримингда
Языктолько английский
Клонирование голосада, по короткому фрагменту
Теги эмоцийhappy, sad, angry, fear, surprised, whisper
Теги звуковlaugh, sigh, gasp, cough, clear_throat
Базовая модельKyutai Pocket TTS 18M
Pip-пакетнет, клонирование репозитория и requirements.txt
Лицензия весовCC-BY-4.0
Лицензия кода инференсаMIT

Чем Silencio-2 отличается от Kyutai Pocket TTS

Pocket TTS - базовая модель Kyutai, выпущенная в трёх размерах: 1,9, 6,9 и 18,2 млн параметров, с клонированием голоса и работой на CPU. Silencio-2 - файнтюн старшей версии. Что изменилось: модель научилась реагировать на теги эмоций и звуков, которых в базе не было. Что осталось прежним: архитектура, частота 24 кГц, стриминг, требование английского языка и лицензия весов CC-BY-4.0, унаследованная от Pocket TTS.

Важная оговорка: Silencio-2 не заявлена как более точная по WER. На выпущенном чекпоинте WER вообще не измерялся, а более поздняя невыпущенная стадия показала 1,9% против 1,5% у базы на 300 элементах LibriSpeech. То есть за управляемость, скорее всего, заплачено небольшой потерей разборчивости. Если нужен просто чистый английский синтез без эмоций, базовая Pocket TTS остаётся разумным выбором: как её запустить и какой размер брать, разобрано в отдельном материале.

Эмоции и звуковые теги: как управлять речью прямо в тексте

Тег - часть входной строки, а не отдельный параметр вызова. Эмоции: happy, sad, angry, fear, surprised, whisper. Звуки: laugh, sigh, gasp, cough, clear_throat. В тексте они записываются в угловых скобках, как в примере из анонса:

What a long day. [sigh] <whisper> Keep your voice down. <whisper> Keep your voice down. <angry> I said stop!

Синтаксис простой: поставили тег перед фразой, к которой он относится, и получили нужную манеру. Отдельного API, JSON-схемы или набора параметров нет. Для шаблонной генерации это удобно: сценарий верстается как разметка, а не как структура аргументов.

Один нюанс про громкость: настоящий шёпот выходит примерно в 10 раз тише обычной речи, поэтому generate() по умолчанию поднимает его уровень. Если вы микшируете дорожку с музыкой, проверяйте уровни на слух, иначе тихая реплика сравняется по громкости с обычной.

Как тег применяется к длинному тексту

Pocket TTS режет длинный текст на чанки, поэтому ведущий тег покрывает только первый чанк. Эмоция «слетает» на середине абзаца: <angry> в начале длинной реплики подействует на первое предложение, а дальше голос вернётся к нейтральному. Пакет инференса обходит это тем, что повторяет тег на каждом чанке. Если работаете с моделью напрямую, без обёртки, тег придётся дублировать вручную.

Почему теги не всегда срабатывают с первого раза

Результат зависит от сида: один и тот же текст с <angry> в разных прогонах звучит по-разному, от сдержанного раздражения до откровенного крика. Самый проблемный тег - whisper: он зависит и от строки, и от голоса, и на части фраз просто не даёт шёпота. Автор советует генерировать несколько дублей и выбирать на слух. Детерминированного поведения тут нет, и закладывать его в пайплайн без ретраев не стоит. Оговорки по стабильности тегов автор перечисляет отдельно.

Клонирование голоса: как это работает и почему важен нейтральный промпт

Клонирование идёт по короткому фрагменту записи. За него отвечает отдельный энкодер: он кодирует образец голоса и добавляет примерно 9,7 млн параметров, отсюда 27,9 млн в полной конфигурации против 18,2 млн у речевой части. Образец кодируется один раз, дальше синтез работает по полученному представлению голоса.

Главная тонкость вылезла при обучении. Если голосовой промпт - это начало эмоционального клипа, модель копирует эмоцию из промпта вместо того, чтобы слушать тег в тексте. Чтобы это победить, половина размеченных сэмплов в обучении берёт промпт из нейтральной версии того же голоса. Практический вывод: для клонирования берите ровный, спокойный фрагмент, а нужную эмоцию задавайте тегом. Тогда управление останется за текстом.

Для клонирования на CPU есть и другие варианты, например Sopro V2 Turbo 2610 на 120 млн параметров под Apache-2.0: она тяжелее, зато её обновление как раз снижало шероховатости на проблемных клонированных голосах.

Что подавать на вход для клонирования

Короткий фрагмент английской речи, желательно нейтральный по интонации и без музыки на фоне. Конкретную длину в секундах автор не называет, поэтому ориентируйтесь на формулировку «короткий клип» и на README репозитория. Язык образца должен быть английским: модель одноязычная, русскую запись она не разберёт как эталон фонетики.

Скорость на CPU: что на самом деле стоит за 20x реального времени

Заявленная цифра - около 20x реального времени на Apple M4 с 4 потоками CPU и без GPU. Читается как «20 секунд речи за секунду работы», и для процессора это много. Сам автор сразу ставит рамки: один длинный прогон на его ноутбуке, а не бенчмарк. В нём не покрыты разные длины текста, разные теги, разные голоса и повторы, поэтому переносить 20x на Intel, AMD или серверный ARM без собственных замеров нельзя.

Что реально следует из заявления: 112 МБ весов и 18,2 млн параметров помещаются в память любой современной машины, поэтому синтез можно гонять на процессоре и не занимать GPU. Для домашнего AI-стека это и есть главная ценность: LLM держит VRAM, речь синтезируется рядом на CPU. Стриминг на 24 кГц добавляет второе преимущество: первое аудио приходит, не дожидаясь конца текста.

Почему 18M параметров меняют правила игры

Открытые TTS-модели часто измеряются сотнями миллионов параметров, и CPU-инференс для них превращается в мучение. При 18,2 млн параметров и весе около 112 МБ модель ведёт себя как обычная небольшая нейросеть: быстро загружается, работает в несколько потоков, не требует квантизации и специальных ядер. Размен очевидный: компактность и скорость против абсолютного качества и выразительности. Похожий путь пробуют и другие авторы: SupraTTS-0.1-Beta на 29,6 млн параметров строится на Glow-TTS и тоже целится в CPU и edge-устройства.

Как запустить Silencio-2 локально: установка и первый запуск

Pip-пакета нет. Последовательность такая:

  1. Клонировать репозиторий с кодом инференса.
  2. Установить зависимости из requirements.txt.
  3. Скачать веса с Hugging Face (аккаунт BlueRoseLabs).
  4. Запустить синтез на коротком английском тексте без тегов и проверить, что аудио пишется и открывается.
  5. Добавить теги и клонирование, когда базовый синтез заработал.

Точные команды смотрите в README репозитория: они могут меняться, и привязка к конкретным путям или версиям зависимостей тут только запутает. Если не хочется ставить ничего локально, автор предлагает Colab-ноутбук, чтобы послушать модель в браузере.

Лицензии: что можно и что нельзя

Веса под CC-BY-4.0: коммерческое использование разрешено с указанием авторства и сохранением указания лицензии, производные веса наследуют те же условия. Код инференса под MIT: можно брать, менять и встраивать, сохраняя текст лицензии и копирайт. Это краткое изложение, а не юридическая консультация; для продукта с жёсткими требованиями к атрибуции сверьтесь с полными текстами лицензий.

Типичные грабли при установке

Отсутствие пакета означает ручное управление зависимостями: конфликт версий torch или аудиобиблиотек придётся разбирать самостоятельно. Веса лежат отдельно от кода, их нужно скачать и положить туда, где их ждёт скрипт. Английский язык на входе - жёсткое ограничение: модель не обучена русской фонетике, поэтому на русском тексте разборчивой речи ждать не стоит.

История обучения: три неудачных прогона и один рабочий

Обучение шло на 2x NVIDIA T4: около 50 часов аудио, 27 тыс. клипов, финальный прогон занял примерно 6 часов. До рабочего варианта автор прошёл три неудачные попытки, и каждая даёт практический урок.

  1. Прогон 1. Теги обучились нормально и почти ничего не делали. Эмоции меняли голос, но не в ту эмоцию, которая стояла в теге.
  2. Прогон 2. Автор сгенерировал данные получше и отфильтровал их через AST (AudioSet-теггер). Подсчёт строк по тегам дал ноль клипов laugh, ноль cough и ноль clear_throat: фильтр молча вырезал нужные звуки, и модель их не видела.
  3. Прогон 3. Переход на 3-секундные скользящие окна не спас: человеческие записи скриптового смеха дали 0 из 23 выше порога при медиане 0.006. Прогон упал из-за нехватки памяти на T4: 32 клипа по 25 секунд в одном батче не помещаются.
  4. Прогон 4. Автор прослушал данные, признал их пригодными и полностью убрал фильтр. Этот вариант и стал Silencio-2.

Хронология прогонов и выводы автора описаны в том же анонсе.

Почему AST не подошёл как фильтр

AST оценивает клип целиком. Короткий смех, кашель или вдох занимают доли секунды, а запись вокруг - обычная речь, поэтому теггер видит речь и не подтверждает нужный звук. Порог отсекает такой клип, и в датасете остаётся ноль примеров класса. Вывод автора: клип-левел AudioSet-теггер плохо подходит как фильтр для коротких звуков, смешанных с речью. Практика для тех, кто собирает датасеты: считать строки по каждому тегу до обучения и проверять выборку на слух, а не доверять автоматике.

Ограничения Silencio-2: язык, WER и стабильность

Список короткий, но каждый пункт важен для продакшена.

  • Только английский. Ни русского, ни других языков.
  • WER на выпущенном чекпоинте не измерялся.
  • whisper наименее стабилен и зависит от строки и голоса.
  • Остальные теги варьируются от сида к сиду.
  • Pip-пакета нет, интеграция ручная.
  • Ведущий тег покрывает только первый чанк, если не используется обёртка с повтором.

Что значит «WER не измерялся» на практике

WER (word error rate) показывает, сколько слов в синтезированной речи распознаётся с ошибкой: дорожку прогоняют через ASR и сравнивают с исходным текстом. Для TTS это косвенная метрика разборчивости и произношения. На этом чекпоинте её не считали. Ориентир есть только для более поздней, невыпущенной стадии: 1,9% против 1,5% у базового Pocket TTS на 300 элементах LibriSpeech. Выборка маленькая, модель другая, так что цифру стоит читать как «возможна небольшая потеря точности относительно базы», а не как характеристику Silencio-2.

Для прототипов и внутренних экспериментов этого достаточно. Для продакшена, где важна разборчивость имён, чисел и артикулов, WER нужно мерить на своём домене: собрать 100-300 фраз, прогнать через ASR и посчитать ошибки. Без этого ставить модель в озвучку справочных материалов рискованно. Как выбирать TTS под озвучку с эмоциями и проверять его на своих текстах, разобрано в отдельном гайде.

Кому подходит Silencio-2 и для каких задач

Модель закрывает узкий, но практичный сценарий: англоязычная озвучка на CPU, где нужен контроль эмоций и звуков, а абсолютное качество не критично. Хорошо ложится в домашний стек рядом с локальной LLM: чат-модель занимает VRAM, Silencio-2 читает её ответы на процессоре.

Чек-лист: стоит ли брать Silencio-2

Берите, если:

  • нужен локальный TTS на CPU без GPU;
  • контент на английском;
  • готовы клонировать репозиторий и ставить зависимости вручную;
  • готовы генерировать 2-3 дубля и выбирать лучший на слух;
  • устраивает качество уровня прототипа и внутренних экспериментов;
  • нужны эмоции и звуки в тексте без отдельного API.

Не берите, если:

  • нужен русский или другой язык;
  • нужна простая интеграция через pip и стабильный интерфейс;
  • критична предсказуемость whisper;
  • нужен измеренный WER под ваш домен до запуска;
  • требуется минимальное сопровождение и поддержка.

Если сценарий шире, посмотрите в сторону более крупных решений: Breeze-TTS-2 обсуждают как модель для локального запуска с другими требованиями к памяти. Кандидатов полезно сравнивать на одном и том же тексте с именами, числами и сложной пунктуацией, слушая, где ломается интонация.

Начать стоит с малого: скачать веса, синтезировать одну фразу с <happy> и одну с <sigh>, затем повторить каждую по три раза и сравнить. Так вы за полчаса поймёте, хватает ли модели стабильности под вашу задачу, и не потратите вечер на интеграцию, которая не окупится.

Подписаться на канал