Комментарии 30
Есть ресурсы, где можно протестировать ваш движок, или это просто реклама «Приходите к нам решать интересные задачи»?
Попробуйте вот эту статью на Хабре — https://habr.com/ru/post/549480/
Тут можно потестировать прямо в публичном колабе, доступном в репозитории
Ещё лучше — в озвучку игр, которые по каким-либо причинам не имеют русской озвучки. Я бы с удовольствием послушал бы Снейка (Metal Gear Solid) или Шепарда (Mass Effect 2/3).
Для кого лучше, а для кого нет — у каждого свои интересы. В любом случае было бы здорово получить в открытом доступе такую модель, способную принимать текст и отдавать хорошо озвученный голос.
Ну, озвучку второго Mass Effect'а (а потом и третьего) на русском, насколько я знаю, не делали в том числе и потому, что было много негативных отзывов на озвучку первого. А представьте: прикрутить машину и Шепард тем же самым оригинальным голосом заговорит по-русски :) По-моему, это однозначный win без компромиссов. Только надо, чтобы качество везде было таким же запредельно высоким, как в примерах из этой статьи.
попробуйте какие-то голоса отсюда https://habr.com/ru/post/549480/
там авторы как раз сделали некоммерческое решение, чтобы физики могли юзать для своих нужд бесплатно
При выборе вокодера рассматривали вариант MELGAN?
Если да — то в связи с чем сделали выбор в пользу LPCNet?
У вокодера модель на каждого спикера отдельно или «мульти спикер»?
Мы много чего пробовали, но там проблемы с воспроизводимостью
Могли бы мысль чуть раскрыть пожалуйста?
Из своего опыта (справедливости ради — объективной оценки результата по MOS нет) — наиболее удачным сочетанием по скорости-качеству получилась связка: TacotronForward + MelGAN. По крайней мере при очень чистом тренировочном датасете.
Если не секрет, сколько часов аудио было использовано для обучения модели?
Уже можно синтезировать свой голос или пока ещё нет? С удовольствием почитал бы статью как это сделать. Сбер, сделаете?)
(Есть сайт, который позволяет такое сделать с английской речью. Но с моим русским акцентом получилось плохо.)
Привет! У меня много вопросов)
- Как работает паузная модель? Я понимаю, как сделать разметку (алайнмент и отдельный токен на паузу если тишина была более x секунд внутри предложения), но как учить отдельную модель? Как seq2seq где на входе текст а на выходе текст с токенами пауз в нужных местах или классификатор для каждого слова нужно ли после него вставить паузу? И на инференсе это работает как препроцессинг текста получается?
- Использовали ли вы фонемы? На схеме везде текст, берт может кушать текст, но ведь можно перед текст энкодером такотрона через g2p модель символы перегонять в фонемы. Были ли эксперименты с этим?
- На схеме спектрограммы ты изображал ее с 120 бинами, а не 80, как обычно. Это сильно повлияло на качество голоса в вашем случае?
- На схеме конечной архитектуры есть word labels predictor который возвращает предсказания для quantized loudness и тд. Выходной размер у сети – 64. Можно поподробнее что на выходе и как это получено? На разметке в том числе. На сколько бинов делилась громкость, как получалась (это норма магнитуды спектрограммы) и тд
- Также на схеме декодер предсказывает выходной размер в 22 за шаг (хотя размер спектрограммы 120, или 80?) – так задумано?
1. Мы пользовались MFA (montreal forced aligner) со своей калдевой моделькой, чтобы посчитать тайминги слов, и найти места в предложениях, где есть паузы (длительность тишины больше x мс). На инференсе это действительно является частью препроцессинга текста (классифицируем каждый токен, нужно ли после него поставить паузу), запускается до такотрона, а в него подаем текст уже с токенами пауз
2. Пробовали, и там шило на мыло. Сложность фонемного синтеза в том, чтобы построить качественную g2p модель. К сожалению, они ошибаются примерно также часто, как и такотрон, обученный на графемах. Вообще сейчас мы движемся в сторону гибридного синтеза, когда большинство слов озвучиваются как есть, а если синтез в каком-то слове ошибается, мы пишем текстом его транскрипцию (типа интернет -> интернэт)
3, 5. Решили не нагружать текст деталями :) Выход такотрона полностью определяется вокодером, который потом озвучивает спектрограммы. Мы используем LPCNet, для него нужны особенные фичи (20-мерные bark-спектрограммы и 2 отдельных фичи — pitch и pitch gain, в сумме 22), и тако их предсказывает. Про вокодеры мы вообще планируем отдельный большой текст, там все подробно расскажем
4. Размерность текст энкодера оригинального тако = 512. При добавлении новых модулей нам было важно, чтобы по скорости все было не хуже, поэтому, добавив topic embedding и word labels embedding, нам пришлось уменьшить text encoder. Мы уменьшили его до 384, и к нему конкатим дополнительные эмбеддинги (2 по 64). Все фичи делились на 5 бинов по 20%. Среди фичей — громкость (не честная, а просто std вейвформы слова, но этого хватает), скорость (тут сложнее: у нас есть средние длительности произнесения каждой буквы, и мы считаем ожидаемую длительность произнесения слова и фактическую; фича loudness — это отношение действительной к ожидаемой), и три фичи про pitch (наклоны и среднее). Word labels predictor для каждого слова предсказывает бин для каждой из 5 фичей (то есть размерность его выхода [1, num_tokens, 5]), потом для каждой фичи есть свой эмбеддинг слой (размерностями где-то 8, где-то 16), мы их конкатим и получаем финальные 64. Ну и в сумме получается 512 :) И сразу отвечу на возможный вопрос: конкатить оказывается лучше, чем суммировать
Синтез речи виртуальных ассистентов Салют: как мы отошли от классических научных статей, чтобы сделать его человеческим