Обновленный русский словарь правил с добавленными йотированными фонемами и опцией проставлять ударения через U+0301. Необходимо для адекватной работы фонемайзера для piper.
PR висит в репозитории espeak-ng, но из-за слишком сильного импакта на синтез звука в существующих проектах не был принят. Выставлять правильные значения звуков для фонем (что требуется только для генератор в espeak) - отдельная задача, вникать в которую нет желания.
Если захочется внести изменения и скомпелировать data самостоятельно, в корне репозитория находится ru_rules (всё ешё требует оптимизации), а файл фонем можно дернуть из pr.
upd 03.2026 Сделал второй заход по правке фонем, чтоб решить проблему аканья и прочих коварных недочётов. Это, конечно же, немного сломало синтез на существующих моделях, но небольшое дообучение исправит ситуацию. Прикладываю файл фонем ph_russian и правил ru_rules. Старая версия скомпилированных данных оставлена в отдельном бранче.
Скопировать по пути расположения существующих данных. Например каталог, использующийся при обучении по стандартному гайду:
~/piper1-gpl/src/piper/espeak-ng-data/
Если в проекте испольуется библиотека, то данные будут находиться внутри, либо по глобальному пути установки, либо в venv:
.../Lib/site-packages/piper/espeak-ng-data/
Для оригинального пайпер:
/usr/local/share/espeak-ng-data/
После тренировки новые модели используются с этим же набором словарей. В voice примеры голосов, дообученные на небольших датасетах.
В каталоге wyoming_piper_accent лежит модифицированный код Wyoming Piper:
- Выполняется разрешение омографов (список задан в
homographs.py) с помощью библиотеки silero stress. Для отключения авторассановки предусмотрен ключ--no-automatic-stress. - Символ
+перед гласной позволяет делать расстановку в ручном режиме. Оба пункта работают только при замене словаря и использование моделей, обученыx на нём. О процессе расскывал в этом видео. - Добавлен словарь ёфикатора(~60к замен), который активируется ключом
--yo. Всё ещё остается около 4к спорных случаев: старайтесь изначально получать правильное значение, либо добавляйте проблемные слова в словарь омографов и надейтесь на библиотеку силеро. При подготовке датасетов не забывайте отключать всю автоматику. - Добавлена возможность держать несколько голосов в памяти, чтоб избежать потери времени на секундную загрузку модели, количестово активных моделей настраивается через ключ
--max-cached-voices 2. - Вернул возможность добавлять тишину между предложениями
--sentence-silence 0.2. Необходимость зависит от данных, на которых обучалась модель, но добавить пару десятых — никогда не будет лишним. - Отказ от временных файлов, все операции происходят в памяти.
- Используется BCP 47, чтоб было красиво в интерфейсе HA
# Базовая установка Piper
git clone https://github.com/rhasspy/wyoming-piper.git
cd wyoming-piper
script/setup
# подготовка к установке silero-stress, CPU-only torch (без CUDA)
./.venv/bin/pip install torch --index-url https://download.pytorch.org/whl/cpu
# silero-stress — для автоматической расстановки ударений в русском
# eng-to-ipa — для улучшенного контроля преобразования английских слов
./.venv/bin/pip install silero-stress eng-to-ipa num2words
# Скачиваем репо для замены данных
git clone https://github.com/mitrokun/espeak-ng-data.git
# Файлы фонем и словарей. Существующие 4 голоса перестанут корректно работать
# Проверьте используемую версию python, при необходимости измените путь
cp -r ./espeak-ng-data/espeak-ng-data/* ./.venv/lib/python3.12/site-packages/piper/espeak-ng-data/
# Модификация кода
cp -r ./espeak-ng-data/wyoming_piper_accent/2.0+/* ./wyoming_piper/
# Запуск (использую data в домашнем каталоге)
# В качестве примера копируем существующую модель (обучена на актуальных данных) из этого репозитория
cp ./espeak-ng-data/voice/ru_RU-mari-medium* ~/data/
./script/run --voice ru_RU-mari-medium_epoch6399 --uri 'tcp://0.0.0.0:10200' --data-dir ~/data --download-dir ~/data