Открыть список
Как стать автором
Обновить

Синтез речи виртуальных ассистентов Салют: как мы отошли от классических научных статей, чтобы сделать его человеческим

Блог компании SberDevicesМашинное обучениеИскусственный интеллектNatural Language Processing
Всего голосов 47: ↑46 и ↓1 +45
Просмотры5K
Комментарии 30

Комментарии 30

Не нашел ссылок.
Есть ресурсы, где можно протестировать ваш движок, или это просто реклама «Приходите к нам решать интересные задачи»?
привет! Синтез можно послушать в устройствах Сбера (SberBox и SberPortal) и в мобильных приложениях СберБанк Онлайн и Сбер Салют
Т.е. нужно приобрести устройства SberBox или SberPortal чтоб послушать синтез?
НЛО прилетело и опубликовало эту надпись здесь
Привет! Голоса наших ассистентов, конечно, эксклюзивно доступны в наших девайсах и приложениях с ассистентами.

Следите за анонсами в том числе и на хабре, скоро будут крутые новости по вашему вопросу :)

Попробуйте вот эту статью на Хабре — https://habr.com/ru/post/549480/
Тут можно потестировать прямо в публичном колабе, доступном в репозитории

И не надо покупать никакие боксы и вот это тоже естественно не надо


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

=)

Парни, а вы не пробовали финально доучивать сетку с помощью GAN-механизма? Думаю, это как раз с метрикой robotness помогло бы ;-)
Мы довольно много проделали с GAN'ами экспериментов в своё время, особенно когда занимались синтезом речи знаменитостей (Смоктуновский, Винни-Пух и т.д.). В целом GAN'ы хорошо помогали на старых такотронах, где спектрограмма на выходе сетки при не очень хороших записях в трейне получалась несколько подразмытой. Сейчас на текущих моделях GAN'ы дают прирост в пределах погрешности, но мы продолжаем с ними экспериментировать.
Как бы это дело к чтению электронных книг прикрутить? Пользовался бы однозначно.

Ещё лучше — в озвучку игр, которые по каким-либо причинам не имеют русской озвучки. Я бы с удовольствием послушал бы Снейка (Metal Gear Solid) или Шепарда (Mass Effect 2/3).

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

Ну, озвучку второго Mass Effect'а (а потом и третьего) на русском, насколько я знаю, не делали в том числе и потому, что было много негативных отзывов на озвучку первого. А представьте: прикрутить машину и Шепард тем же самым оригинальным голосом заговорит по-русски :) По-моему, это однозначный win без компромиссов. Только надо, чтобы качество везде было таким же запредельно высоким, как в примерах из этой статьи.

кстати у тех же авторов, которые придумали такотрон, была статья про speak fluently in foreign language, мы года полтора назад что-то попробовали, и наши голоса научились разговаривали по-английски, но со странным акцентом. История отложилась, но когда-нибудь точно докрутим качество до приличного

попробуйте какие-то голоса отсюда https://habr.com/ru/post/549480/
там авторы как раз сделали некоммерческое решение, чтобы физики могли юзать для своих нужд бесплатно

Спасибо за материал, комплексное представление даёт!

При выборе вокодера рассматривали вариант MELGAN?
Если да — то в связи с чем сделали выбор в пользу LPCNet?
У вокодера модель на каждого спикера отдельно или «мульти спикер»?
Про GAN и в том числе MelGAN можете прочитать ответ выше. Мы много чего пробовали, но там проблемы с воспроизводимостью. В наших экспериментах single speaker LPCNet работает наиболее качественно из тех вокодеров, что могут держать реалтайм на 1 ядре цпу. С мультиспикером еще что-то пробовали, но работает хуже. А вообще про вокодеры тоже напишем статью, там было много подводных камней типа замены подсчета pitch от алгоритма Ына на Reaper
Если я правильно уловил посыл упомиания GAN в комменте выше, то он наверное не только про вокодер :)
Мы много чего пробовали, но там проблемы с воспроизводимостью

Могли бы мысль чуть раскрыть пожалуйста?

Из своего опыта (справедливости ради — объективной оценки результата по MOS нет) — наиболее удачным сочетанием по скорости-качеству получилась связка: TacotronForward + MelGAN. По крайней мере при очень чистом тренировочном датасете.
Про воспроизводимость: конечное качество вокодера зависит не только от самого вокодера, но и просто от голоса, на котором он обучается. LPCNet например на мужских голосах работает хуже, чем на женских (разница между ground truth и кописинтезом для мужских голосов на слух больше), или на одном голосе лучше LPCNet, а на другом — WaveGlow. Но еще и результаты из статей иногда не воспроизводятся, ParallelWavegan например у нас совсем плохо озвучивал
Спасибо!
С ParallelWavegan тоже не удалось приемлемого получить.
Странно, у нас ровным счётом все наоборот parallel wavegan показывает наилучшее качество по отношению звучания и стабильности обучения, в отличие от lpc
Классная статья, спасибо. И супер качество голоса.

Если не секрет, сколько часов аудио было использовано для обучения модели?
Очень много:) После всех чисток 20-40 часов примерно

А 20-40 часов это реально много? Если не трудно, не могли бы Вы привести примерный расчет того, сколько времени нужно на разметку и предобработку, скажем, одного часа?

Все дикторы работают по-разному, но в среднем это один час хороших данных за 4-5 часов работы диктора в студии

Уже можно синтезировать свой голос или пока ещё нет? С удовольствием почитал бы статью как это сделать. Сбер, сделаете?)


(Есть сайт, который позволяет такое сделать с английской речью. Но с моим русским акцентом получилось плохо.)

Привет! Пока мы сконцентрированы на качестве нашего синтеза, но идея интересная, увидели, спасибо :)

Привет! У меня много вопросов)


  1. Как работает паузная модель? Я понимаю, как сделать разметку (алайнмент и отдельный токен на паузу если тишина была более x секунд внутри предложения), но как учить отдельную модель? Как seq2seq где на входе текст а на выходе текст с токенами пауз в нужных местах или классификатор для каждого слова нужно ли после него вставить паузу? И на инференсе это работает как препроцессинг текста получается?
  2. Использовали ли вы фонемы? На схеме везде текст, берт может кушать текст, но ведь можно перед текст энкодером такотрона через g2p модель символы перегонять в фонемы. Были ли эксперименты с этим?
  3. На схеме спектрограммы ты изображал ее с 120 бинами, а не 80, как обычно. Это сильно повлияло на качество голоса в вашем случае?
  4. На схеме конечной архитектуры есть word labels predictor который возвращает предсказания для quantized loudness и тд. Выходной размер у сети – 64. Можно поподробнее что на выходе и как это получено? На разметке в том числе. На сколько бинов делилась громкость, как получалась (это норма магнитуды спектрограммы) и тд
  5. Также на схеме декодер предсказывает выходной размер в 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 :) И сразу отвечу на возможный вопрос: конкатить оказывается лучше, чем суммировать
точно, как в fastspeech2 эмбеддинги используются для бинов pitch и тд) Спасибо за подробный ответ!
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.