Примерно год назад мы запустили виртуального рассказчика в Яндекс Книгах. Он хорошо решал задачу прослушивания книг без предзаписанных аудиоверсий, но иногда звучал однообразно. Дело в том, что он был основан на небольшой нейросети — Tacotron. Проблема заключалась в том, что мы обучали модель для каждого спикера. И если спикер пользовался несколькими интонационными паттернами, то модель просто выбирала самый частый из них.

Тогда мы начали активно экспериментировать c highres‑моделями. Они могут учиться на большом количестве данных разного качества и поэтому способны воспроизводить более интонационно осмысленную речь. К тому же им не нужны вспомогательные модели, такие как PnG BERT или отдельные модели для расстановки пауз, — все эти интонационные нюансы они выучивают сами. У них есть хорошая способность к семплированию, в отличие от старых моделей, где один и тот же текст на разных генерациях произносился почти одинаково.

И вот мы покатили новые модели в прод. А я расскажу, как мы научились заводить highres‑модели для синтеза книг и делать это в реалтайме, а также какую работу пришлось для этого провести.

Архитектура и процесс обучения

Первоначально за основу обновлённого нейрорассказчика мы взяли модель Tortoise. Ранее коллеги уже публиковали подробный рассказ о том, как они заводили модель для перевода видео в Яндекс Браузере на основе этой модели. Мы сделали первую хорошую итерацию, опираясь на архитектуру, описанную в статье, и получили выигрыш порядка 68% по SBS.

Архитектура первой версии модели совпадает с архитектурой модели перевода видео в Браузере
Архитектура первой версии модели совпадает с архитектурой модели перевода видео в Браузере
Сравнение Tacotron и первой версии нашей новой модели
Сравнение Tacotron и первой версии нашей новой модели

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

Также нужно было отказываться от CLVP (CLIP‑like‑ранжировщик гипотез). Он полезен, когда мы формируем несколько гипотез из языковых моделей и хотим выбрать лучшую. Но в нашем случае генерация сразу десятка гипотез и их ранжирование для одного семпла выходили слишком дорого для скорости синтеза. Поэтому мы внесли ряд изменений.

В качестве кодека мы использовали WavTokenizer. Это кодек с single quantizer (размер codebook — 4096). У него хорошая реконструкция за счёт разогнанного декодера с attention‑блоком и других элементов. Ниже можно увидеть архитектуру:

Архитектура WavTokenizer
Архитектура WavTokenizer

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

Помимо этого, теперь обучение диффузии для каждой модели стало проще. Раньше для каждой GPT‑части модели нам нужно было доставать латенты и учить на них диффузию — а это долго. Всё это значительно ускорило эксперименты и позволило сконцентрироваться на тех из них, которые связаны с GPT и данными.

GPT‑часть модели мы учили в несколько этапов:

  • Претрейн. Для него мы брали «грязные» открытые данные на английском и русском языках.

  • SFT (supervised fine‑tuning). Мы добавляем к датасету чистые открытые книжные данные и наши закрытые данные, состоящие из голосовых образцов специально записанных нами спикеров.

  • Ptune на целевого спикера. Мы инициализируем conditioning embeddings, используя несколько семплов из датасета, и тюним только обучаемые векторы.

В итоге модель хорошо заучивала целевой голос и оставляла характеристики из этапа SFT: книжные интонации, способность понимать, когда в тексте идут диалоги, и читать их более живым голосом — со сменой стиля чтения рассказчика и персонажа. Также SFT и ptune добавили нам стабильности синтеза, поэтому теперь мы можем генерировать аудио с одной гипотезой.

Обновлённая архитектура
Обновлённая архитектура
Обучение модели
Обучение модели
P-tune на целевого спикера
P‑tune на целевого спикера

В результате мы ещё улучшили синтез, достигнув выигрыша 74% по общему впечатлению на SBS без статистически значимой просадки PSER. Голос стал более естественным и интонационно разнообразным, а также значительно повысилось качество звука.

Вторая версия нового синтеза vs старый синтез
Вторая версия нового синтеза vs старый синтез

Техническая сторона фичи — это полдела. Какие бы передовые разработки ни стояли за технологией, она должна попасть в сердца пользователей. Поэтому со многими важными деталями нам помогла команда аналитиков.

Вклад аналитиков

Голос виртуального рассказчика

Поэтому мы и задались вопросом: как понять, какой же голос подходит виртуальному рассказчику?

Поэтому мы и задались вопросом: как понять, какой же голос подходит виртуальному рассказчику?

Аналитики провели количественное исследование: какие голоса больше всего подходят разным жанрам. Мы опросили более 3000 респондентов разных возрастных групп и выяснили:

  • для остросюжетной литературы, фантастики, фэнтези, образовательной и научно‑популярной литературы пользователи чаще выбирали мужские голоса;

  • для популярной психологии, педагогики, young‑adult‑литературы, любовных романов и детской литературы лучше подходили женские голоса.

Большинству универсальных характеристик подошёл голос актёра Георгия Кармряна — мужской, оригинальный и выразительный, вдумчивый и убедительный. Именно его голос мы специально записали для обучения модели. А для тех, кто предпочитает слушать женский голос, также для обучения модели мы записали Наталью Грачёву.

Книжный датасет по жанрам

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

  • У каждого жанра своя специфика. Именно поэтому мы собирали тексты из книг разных жанров и смотрели на метрики с разбивкой по этим жанрам.

  • Важно было сохранить распределение текстов по их популярности, чтобы приоритизировать ошибки, наиболее важные для выкатки.

Аналитики изучили нашу базу и выделили несколько жанров:

  • классические сказки и фольклор;

  • биографии, автобиографии, мемуары;

  • детская проза;

  • научно‑популярная литература;

  • литературная фантастика и эпическое фэнтези;

  • фэнтези, young‑adult‑литература;

  • психология, педагогика и воспитание;

  • классическая проза;

  • образовательная и академическая литература;

  • лёгкая развлекательная литература;

  • литература для самообразования и развития;

  • научно‑популярная литература естественнонаучного направления;

  • любовные романы.

Затем каждый жанр разбили на несколько поджанров и собрали текстовый датасет. Так мы смогли понять, в каких жанрах виртуальный рассказчик справляется хорошо, а где его нужно было дообучить. Например, модель отлично читала вслух научпоп, а художественная литература давалась ей с трудом. Но в итоге мы научили её читать одинаково хорошо.

Метрики

Чтобы максимально информативно замерять качество моделей, аналитики помогли нам собрать метрику — аспектный SBS. Для этого разные люди сравнивают пары аудиозаписей по разным аспектам — качеству звука, интонациям, скорости аудио, естественности речи и общему впечатлению. Такая метрика позволяет контролируемо улучшать отдельные характеристики моделей, легко интерпретировать результаты и понимать слабые места моделей.

Вот примеры замеров на разных срезах (новая модель против старой):

Срез, где есть прямая речь
Срез, где есть прямая речь
Срез повествовательной речи
Срез повествовательной речи
Сравнение качества моделей при озвучке разных жанров
Фантастика и эпическое фэнтези
Фантастика и эпическое фэнтези
Фэнтези, young-adult-литература
Фэнтези, young‑adult‑литература
Детская проза
Детская проза
Классическая проза
Классическая проза
Научно-популярная литература
Научно‑популярная литература
Биографии, автобиографии, мемуары
Биографии, автобиографии, мемуары
Литература для самообразования и развития
Литература для самообразования и развития

Но в процессе мы столкнулись с несколькими проблемами. Например, мы выяснили, что предпочтения людей были смещены к звучанию старых моделей. Это объяснялось тем, что люди просто привыкли именно к такому звучанию синтеза. Здесь нам удалось исправить проблему более прозрачными формулировками в заданиях.

К тому же мы не сразу нашли оптимальную длину текстов, чтобы замерять, как модель справляется с длинными предложениями. Важно, чтобы люди не теряли фокус, слушая длинные куски текста. Опытным путём мы пришли к длине отрезка в 30 секунд.

Метрику детекции ошибок произношения тоже пришлось немного адаптировать. Более естественный синтезированный голос, который отдаёт новая модель, иногда может вставить «хезитации» — звуки‑паразиты. Те самые, которые неосознанно произносит человек, когда задумывается. В большинстве случаев это звучит естественно, но иногда синтез может проглатывать какие‑то буквы или, наоборот, растягивать их. Чтобы отловить такие моменты, нам пришлось изменить задания для оценивающих записи: теперь они могут понимать, какая из хезитаций полезная, а какая — нет.

Как наша технология работает в продакшне

Для работы в реалтайме нам потребовалось значительно ускорить GPT‑часть модели. Главное, что мы сделали, — перевели инференс на TensorRT‑LLM. Это позволило перейти от RTF, значительно превышающего 1, к RTF, равному 0,2 на одной GPU. Простыми словами, пользователь начинает слушать нейрорассказчика в десятки раз быстрее.

Также мы адаптировали инференс WavTokenizer, чтобы отдавать аудио в стриминговом формате. Нам важно отдавать первый чанк аудио достаточно быстро, а не ждать, пока насинтезируется весь абзац аудио.

В итоге инференс в нашей модели устроен следующим образом:

  1. Модель начинает генерировать аудиотокены. Как только она сгенерировала достаточно токенов для трёх секунд аудио, мы прогоняем на них декодер WavTokenizer и отдаём первые две секунды синтеза.

  2. В это же время генерация продолжается. Как только модель смогла сгенерировать ещё токенов на секунду аудио, мы берём левый и правый контекст для WavTokenizer и отдаём секунду, предшествующую ей.

  3. В конце генерации оставшиеся токены генерируются с секундой левого контекста.

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

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

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

  2. Компонент с GPT получает запросы от препроцессора и начинает генерацию.

  3. В конце — WavTokenizer. При получении токенов он начинает их декодирование в аудио, которое и отдаётся пользователю.

Пайплайн синтеза
Пайплайн синтеза
И ещё несколько примеров работы нового виртуального рассказчика

Про замеры с 11labs

Мы решили сравнить свою модель с ключевыми лидерами в области синтеза речи — 11labs. В итоге получили заметный выигрыш в сравнении с двумя их мужскими голосами. А это значит, что у нас получился довольно крутой синтез голоса для чтения книг.

Наша модель vs Brian 11labs
Наша модель vs Brian 11labs
Наша модель vs Will 11labs
Наша модель vs Will 11labs

В результате пользователи получили быстрого и эмоционального виртуального рассказчика, который читает их любимые книги с выражением.

Сейчас виртуальный рассказчик способен прочитать больше 120 000 книг — а это значит, что пользователи смогут послушать книги, у которых не было предзаписанной аудиоверсии. Это не только хорошая новость для любителей аудиокниг и людей с аудиальным восприятием, но и возможность для слабовидящих пользователей открыть для себя новые произведения.

А ещё это повод переосмыслить знакомые произведения: раньше вы читали их про себя, а с виртуальным рассказчиком и его интонациями вам могут открыться новые грани книги. Запускайте виртуального рассказчика и делитесь своими впечатлениями в комментариях!

Комментарии (0)