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

Длинный синтез речи: что ломается за два часа чтения и почему 14 тестовых фраз этого не видят

Синтезированный голос прочитал роман на 15 444 слова за 1 час 58 минут, и модель отработала без сбоев. Ломалось другое: нарезка текста, склейка коротких реплик,

Коротко

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

  1. 01

    Что проверялось: роман, три масштаба и главный вывод

  2. 02

    Почему 14 тестовых фраз не увидели проблем длинного синтеза

  3. 03

    Что ломалось на самом деле: сбои в обвязке, а не в модели

  4. 04

    Как измерять качество длинного синтеза: обратная вычитка и CER

Что проверялось: роман, три масштаба и главный вывод

Роман Шамиля Алядина «Merdiven» («Лестница») прозвучал синтезированным голосом целиком: 16 глав, 15 444 слова, 1 час 58 минут звучания. Голосовая модель держалась ровно все два часа. Почти все сбои возникали в обвязке вокруг неё: в нарезке текста на предложения, склейке коротких фраз, обрезке вдохов, извлечении текста из файла книги и разметке времени. Проверочный набор из 14 фраз, по которому до этого сравнивались версии модели, ни одной из этих проблем не увидел, а в одном случае не смог отличить полезную правку от вредной. Автор разобрал этот прогон на Habr.

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

Три масштаба проверки: фразы, глава, книга

  • 14 фраз. Нарочно набиты звуками къ, гъ, нъ, дж, чтобы показать разницу между версиями модели на трудных звуках. Такой набор оценивает артикуляцию и устойчивость голоса на отдельных сложных словах.
  • Первая глава. 1 608 слов, 195 предложений, 12.3 минуты. Здесь проверялась связная проза: диалоги, короткие реплики, вдохи, темп.
  • Книга целиком. 16 глав, 15 444 слова, 118.4 минуты. Этот прогон вытаскивал редкие сбои, извлечение текста, сборку и устойчивость от главы к главе.

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

Почему 14 тестовых фраз не увидели проблем длинного синтеза

Набор из 14 фраз создавался под конкретную задачу: сравнить версии модели на трудных звуках. Он отвечает на вопрос «какая версия чище произносит къ, гъ, нъ, дж», но не отвечает на вопрос «что произойдёт, если склеить 195 предложений в одну дорожку и разметить время».

Что именно осталось незамеченным

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

Ни одна из этих проблем не проявляется на отдельной фразе. Фраза проходит пайплайн за один шаг, и все промежуточные преобразования на ней тривиальны. Длинный текст идёт через те же шаги тысячи раз, и каждый редкий дефект получает шанс сработать. Отдельный показательный случай: на одной правке проверочный набор не смог отличить полезное изменение от вредного. Короткий тест пропустил сбой и вдобавок дал противоположный сигнал.

Что ломалось на самом деле: сбои в обвязке, а не в модели

Склейка коротких реплик: как теряются целые предложения

Диалог состоит из коротких реплик, и синтезировать каждую отдельным клипом дорого: много мелких файлов, лишние паузы, рваный ритм. Логичный шаг - склеивать соседние реплики в один клип. Именно здесь и терялись целые предложения. Механика простая: при объединении фрагментов часть текста выпадает из-за неверного сопоставления границ, и в аудио пропадает целая фраза. На отдельной проверочной фразе такое не воспроизводится, потому что склейка там не происходит. Проблема вылезает на первой главе с её 195 предложениями и множеством диалогов, а на книге целиком подтверждается окончательно, потому что реплик там уже тысячи.

Обрезка вдохов и первое слово: как настройка съедает начало фразы

Чтобы убрать паузы и лишнюю тишину, аудио обрезают по краям. Настройка полезна для ритма, но агрессивный порог обрезки в начале клипа легко съедает первое слово. В романе это особенно заметно: реплика начинается, а слушатель слышит её с середины. Обратная вычитка через CER такой дефект замечает, но только если распознавалка не ушла в петлю и не выдала мусор вместо гипотезы. На короткой фразе обрезка почти никогда не режет смысл, потому что запас тишины там достаточный.

Извлечение текста и двойной пробел: хрупкость сборщика

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

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

Как измерять качество длинного синтеза: обратная вычитка и CER

Основной прибор - обратная вычитка. Синтезированное предложение прогоняется через распознавалку, и полученная гипотеза сравнивается с текстом, который ушёл на вход синтезу. Расхождение считается в CER. Дополнительно перед главой выполняется проверка на утечку через словные 6-граммы. Методика целиком описана в исходном разборе.

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

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

Проверка на утечку через словные 6-граммы

Перед прогоном главы нужно убедиться, что модель читает текст, а не вспоминает его. Если книга попала в обучающие данные, качество окажется обманчиво высоким. Проверка строится на сравнении словных 6-грамм между книгой и учебными материалами. Обе стороны перед сравнением сводятся к общему грубому латинскому скелету, потому что учебные материалы записаны в кириллице, а книга в латинице. Свёртка позволяет сравнивать разные алфавиты, но часть различий при этом теряется.

Слепые зоны обратной вычитки

У метода есть ограничения, о которых стоит помнить. Обратная вычитка не слышит ударения и вдохи, не умеет проверять числа и сама опирается на модель, у которой бывают свои сбои. CER показывает, насколько точно распознаётся произнесённый текст, но не показывает, правильно ли расставлены ударения и естественно ли звучат паузы. Числа распознавалка может нормализовать и замаскировать ошибку. Вывод простой: CER нужен как базовый контроль, но опираться только на него нельзя.

Похожая ловушка описана в разборе оценки машинности текста в humanizer-ru: метрика упала с 0,846 до 0,438, но контрольные пары показали, что оценка менялась без реальных правок. С CER та же логика: сначала убедитесь, что цифра отражает изменение аудио, а не поведение измерителя.

Что делать, если вы озвучиваете длинный текст: практические выводы

Опыт одного романа не переносится автоматически на любой другой язык и пайплайн, но он задаёт рабочий порядок проверки. Для озвучки книги нейросетью или длинного синтеза речи на локальном железе полезно сначала выстроить методику измерений, а выбор модели отложить до момента, когда станет понятно, где именно ломается пайплайн. Выбор open source TTS для аудиокниг стоит делать уже с пониманием того, какие сбои вы будете ловить.

Чек-лист для TTS-пайплайна на длинных текстах

  1. Прогонять отдельные фразы, целую главу и книгу целиком. Короткий набор проверяет голос, длинный прогон вскрывает обвязку.
  2. Проверять склейку коротких реплик на потерю предложений: сверять число предложений на входе и на выходе.
  3. Контролировать обрезку вдохов и начало фразы, особенно на репликах диалога.
  4. Валидировать извлечение текста и сборку на артефактах: двойные пробелы, переносы, спецсимволы.
  5. Считать корпусный CER, а не среднее по клипам.
  6. Помечать клипы с петлёй распознавалки и разбирать их отдельно.
  7. Делать проверку на утечку через словные 6-граммы перед прогоном главы.
  8. Помнить о слепых зонах обратной вычитки: ударения, вдохи, числа, сбои самой ASR.

Самое неприятное в этом кейсе - ложное чувство надёжности. 14 фраз давали чистый результат, пока роман на 118 минут не показал, что теряются предложения и съедаются первые слова. Если вы озвучиваете длинный текст, считайте обвязку отдельным объектом тестирования: большинство ошибок прячется именно в ней, тогда как сама голосовая модель может спокойно отработать два часа подряд.

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