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

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

О чём речь

Разрабатывая систему синтеза речи на базе Silero TTS, столкнулся с проблемой: минимальные ошибки в расстановке ударений всего два процента из 100 приводят к ошибкам в каждом из 5-6 предложений. Для аудиокниг это критично, так процесс “выслушивания” и правки книги на 10000 предожений потребует не менее 10 часов ручного времени.

Сделал свою модель с фокусом на точность в хужожественных книгах. Получилось 99.7% на валидационном датасете. Упаковал в pip-пакет ruaccent-predictor.

Что умеет:

pip install ruaccent-predictor
ruaccent "мама мыла раму"
# → ма'ма мы'ла ра'му
Посимвольная нейросетевая модель для автоматической акцентуации русского языка - 1

Код и модель на GitHub, лицензия MIT.

Почему не достаточно Silero stress?

Silero-Stress — классная модель. Быстрая, бесплатная, для большинства задач достаточно точная.

Но:

Что важно

Silero

ruaccent-predictor

Точность

~98%

>99%

10k предложений

2-3 мин

~60 мин

Ошибок на 10k

~200

~30

Вес модели акцентора

50 Mb

30 Mb

Моя ниша: когда точность важнее скорости. Подготовка аудиокниг, учебные материалы, эталонные датасеты.

Silero-stress остаётся королём для real-time. Моя модель — для создателей аудиокниг.

Как это работает

Character-level подход

Вместо работы со словами обучил модель на символах. Почему:

  • ✅ Словарь всего 224 символа (vs десятки тысяч слов)

  • ✅ Работает с любыми словами, даже с опечатками

  • ✅ Компактно: 12.5M параметров (~30 MB)

Два формата вывода

# Апостроф после гласной (для чтения)
"В лесу' родила'сь ёлочка"

# Плюс перед гласной (для Silero TTS)
"В лес+у род+илась ёлочка"
Посимвольная нейросетевая модель для автоматической акцентуации русского языка - 2

Модель обучалась на апострофах, но я добавил автоконвертацию в формат Silero. Получился универсальный инструмент.

Архитектура

Transformer Encoder-Decoder
├─ 4 слоя encoder + 4 слоя decoder
├─ 8 attention heads
├─ 256 dimensions
└─ 12.5M параметров
Посимвольная нейросетевая модель для автоматической акцентуации русского языка - 3

Для сравнения: GPT-2 имеет 117M параметров. Моя модель в 10 раз меньше. На Github выложил все коды подготовки датасета и обучения модели, словарь vocab.json для прозрачности методики обучения.

Данные: 400+ книг

Использовал датасет Accentual-Syllabic Verse in Russian Prose — 400+ художественных произведений с ручной разметкой ударений.

Обработка:

470,000+ строк
  ↓ фильтрация (заголовки, короткие, без ударений)
224,000 валидных пар
  ↓ split
202k train + 22k validation
Посимвольная нейросетевая модель для автоматической акцентуации русского языка - 4

Словарь извлекается автоматически из данных:

  • Кириллица (А-Я, а-я, ё)

  • Пунктуация

  • Латиница (для иностранных слов)

  • Итого: 224 символа

Главная фича: теперь это pip-пакет

pip install ruaccent-predictor
ruaccent "привет мир"
Посимвольная нейросетевая модель для автоматической акцентуации русского языка - 5

Что сделал:

1. Упаковал в PyPI

  • Модель скачивается автоматически при первом запуске

  • Кэшируется локально

  • Работает offline после первой загрузки

2. Добавил CLI

# Быстрая проверка
ruaccent "текст для проверки"

# Файл целиком
ruaccent -i book.txt -o result.txt

# Формат для Silero
ruaccent --format synthesis "привет"

# Через pipe
cat file.txt | ruaccent
Посимвольная нейросетевая модель для автоматической акцентуации русского языка - 6

3. Простой Python API

from ruaccent import load_accentor

accentor = load_accentor()

# Одно предложение
result = accentor("привет мир")

# Batch обработка (быстрее)
results = accentor(texts, batch_size=8)
Посимвольная нейросетевая модель для автоматической акцентуации русского языка - 7

Производительность

Умное кэширование

Повторяющиеся фразы (“сказал он”, “ответила она”) кэшируются:

accentor("привет мир")  # ~0.5 сек
accentor("привет мир")  # ~0.0001 сек (из кэша!)
Посимвольная нейросетевая модель для автоматической акцентуации русского языка - 8

На практике экономит ~30% времени при обработке книг.

Batch-обработка

# Медленно
for text in texts:
    result = accentor(text)

# Быстро (в 4 раза)
results = accentor(texts, batch_size=8)
Посимвольная нейросетевая модель для автоматической акцентуации русского языка - 9

Бенчмарки (Mac Mini M4):

Batch Size

Скорость

1

2.5 предл/сек

8

10.1 предл/сек

32

8.7 предл/сек

Оптимум — batch_size=8.

Поддержка железа

accentor = load_accentor(device='auto')
# → CUDA (NVIDIA GPU)
# → MPS (Apple Silicon)
# → CPU (fallback)
Посимвольная нейросетевая модель для автоматической акцентуации русского языка - 10

Точность: 99.7%

На валидации (22,000 предложений):

  • ✅ Правильно: 21,934

  • ❌ Ошибки: 66

    Сложные составные слова (~40%)

    • “сельскохозяйственный” — путается на внутренних слогах

    Омографы без контекста (~30%)

    • “замок” → за’мок или замо’к? Без контекста сложно

    Поэтические вольности (~20%)

    • Авторская метрика vs обычное произношение

    Редкие слова (~10%)

Важные ограничения

  • Не исправляет “е” на “ё”

"Он подошел" → "Он подоше'л" (не "подошёл")
Посимвольная нейросетевая модель для автоматической акцентуации русского языка - 11
  • Не ставит ударения на “ё”

"ёлка" → "ёлка" (ё всегда ударная)
Посимвольная нейросетевая модель для автоматической акцентуации русского языка - 12
  • Не отмечает односложные

"я иду" → "я иду'" (не "я' иду'")
Посимвольная нейросетевая модель для автоматической акцентуации русского языка - 13

Примеры использования

CLI для быстрых задач

# Проверка
$ ruaccent "замок на замке"
за'мок на за'мке

# Файл
$ ruaccent -i book.txt -o book_accented.txt
Processing 254 lines... Done in 42s

# Формат Silero
$ ruaccent --format synthesis "привет"
прив+ет
Посимвольная нейросетевая модель для автоматической акцентуации русского языка - 14

Python для интеграции

from ruaccent import load_accentor

accentor = load_accentor()

# Простой случай
text = "Мама мыла раму."
print(accentor(text))
# → Ма'ма мы'ла ра'му.

# Batch
texts = ["первое", "второе", "третье"]
results = accentor(texts, batch_size=8)

# Оба формата
apostrophe, synthesis = accentor(text, format='both')
Посимвольная нейросетевая модель для автоматической акцентуации русского языка - 15

Интеграция с Silero TTS

from ruaccent import load_accentor
import torch

accentor = load_accentor()

# Загрузка Silero
model, _ = torch.hub.load(
     repo_or_dir='snakers4/silero-models',
     model='silero_tts',
     language='ru',
     speaker='v5_cis_base'    
)

# Подготовка текста
text = "Мама мыла раму."
accented = accentor(text, format='synthesis')

# Синтез
audio = model.apply_tts(text=accented, speaker='ru_eduard')
Посимвольная нейросетевая модель для автоматической акцентуации русского языка - 16

Кому это подойдёт

✅ Используйте ruaccent-predictor если:

  • Готовите аудиокниги (точность критична)

  • Делаете учебные материалы по русскому языку

  • Создаёте датасеты для других моделей

  • Нужна максимальная точность, время не критично

❌ Используйте Silero-stress если:

  • Синтезируете в реальном времени

  • Восстанавливаете е в ё

  • Хотите обрабатывать омографы через контекст

  • Нужна скорость

Планы развития

Ближайшее:

  • Quantization для CPU (2-3x ускорение)

  • Web-демо для тестирования

  • Docker контейнер с REST API

Среднесрочное:

  • Решение омографов через контекст

  • Одновременно ударения + ё-фикация

  • Специализация под поэзию/прозу

Попробуйте

pip install ruaccent-predictor
ruaccent "ваш текст здесь"
Посимвольная нейросетевая модель для автоматической акцентуации русского языка - 17

Полезные ссылки:

  • GitHub — код, модель, примеры

  • PyPI — установка

  • Датасет — обучающие данные

Обратная связь:

  • Issues на GitHub — баги и предложения

  • Discussions — вопросы и идеи

  • Pull requests — помощь в разработке

Итого

Модель ruaccent-predictor — инструмент для точной расстановки ударений:

>99% точности — меньше ошибок чем у аналогов на художественных текстах
Один pip install — работает из коробки
Два формата — для чтения и TTS
Открытый код — MIT, используйте как хотите

Не заменяет Silero в real-time, но хорош для оффлайн работы. В настоящий момент мой пайплайн включает комбинированную обработку silero-stress и ruaccent-predictor.

Попробуйте и поделитесь опытом в комментариях!

Вопросы к сообществу:

  1. Используете ли модели для расстановки ударений? Какие?

  2. Какая точность достаточна для ваших задач?

  3. Какие фичи были бы полезны?

Автор: Kubataba

Источник

Rambler's Top100