Google создали базу данных, объединяющую записи синтезированных голосов

Google создала базу из тысячей записей синтезированной речи

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

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

Зачем записи речи собрали в единый масштабный датасет? Дело в том, что если качественный синтез окажется в руках злоумышленников, они могут использовать чужой голос в собственных корыстных целях. Чтобы этого не допустить, эксперты Google опубликовали базу из несколько тысяч отрывков из газет. Для чтения использовалось 68 разных синтезированных голосов. Правда, пока массив данных доступен только для участников конкурса Automatic Speaker Verification. Они занимаются созданием систем, позволяющих автоматически отличить синтезированную речь от реальной.

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

Правда, и там ест недостатки: есть проблемы с разборчивостью произносимой речи, присутствуют «голосовые артефакты» и некоторые другие признаки, указывающие на то, что слова произносит машина.

Не забудьте подписаться на наш канал с новостями.

Многоязычный синтез речи с клонированием

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

Например, пару месяцев назад появилась реализация синтеза речи с голосовым клонированием Real-Time-Voice-Cloning. Давайте попробуем разобраться из чего она состоит и реализуем свою многоязычную (русско-английскую) фонемную модель.

Строение

Наша модель будет состоять из четырёх нейронных сетей. Первая будет преобразовывать текст в фонемы (g2p), вторая — преобразовывать речь, которую мы хотим клонировать, в вектор признаков (чисел). Третья — будет на основе выходов первых двух синтезировать Mel спектрограммы. И, наконец, четвертая будет из спектрограмм получать звук.

Наборы данных

Для этой модели нужно много речи. Ниже базы, которые в этом помогут.

ИмяЯзыкСсылкаКомментарииМоя ссылкаКомментарии
Словарь фонемEn, RuEn,RulinkСовместил русский и английский фонемный словарь
LibriSpeechEnlink300 голосов, 360ч чистой речи
VoxCelebEnlink7000 голосов, много часов плохого звука
M-AILABSRulink3 голоса, 46ч чистой речи
open_tts, open_sttRuopen_tts, open_sttмного голосов, много часов плохого звукаlinkПочистил 4 часа речи одного спикера. Поправил аннотацию, разбил на отрезки до 7 секунд
Voxforge+audiobookRulinkмного голосов, 25ч разного качестваlinkВыбрал хорошие файлы. Разбил на отрезки. Добавил аудиокниг из интернета. Получилось 200 спикеров по паре минут на каждого
RUSLANRulinkОдин голос, 40ч чистой речиlinkПерекодировал в 16кГц
MozillaRulink50 голосов, 30ч нормального качестваlinkПерекодировал в 16кГц, Раскидал разных пользователей по папкам
Russian SingleRulinkОдин голос, 9ч чистой речиlink

Обработка текста

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

Следующим вопросом, которым следуют задаться, это использовать ли графемную, или фонемную запись. Для одноголосного и одноязычного голоса подойдет и буквенная модель. Если хотите работать с многоголосой многоязычной моделью, то советую использовать транскрипцию (Гугл тоже).

Для русского языка существует реализация под названием russian_g2p. Она построена на правилах русского языка и хорошо справляется с задачей, но имеет минусы. Не для всех слов расставляет ударения, а также не подходит для многоязычной модели. Поэтому возьмём созданный ей словарь, добавим словарь для английского языка и скормим нейронной сети (например этим 1, 2)

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

Кодирование спикеров

Сеть схожа с задачей идентификации пользователя по голосу. На выходе у разных пользователей получаются разные вектора с числами. Предлагаю использовать реализацию самого CorentinJ, которая основана на статье. Модель представляет собой трехслойный LSTM с 768 узлами, за которыми следует полносвязный слой из 256 нейронов, дающие вектор из 256 чисел.

Опыт показал, что сеть, обученная на английской речи, хорошо справляется и с русской. Это сильно упрощает жизнь, так как для обучения требуется очень много данных. Рекомендую взять уже обученную модель и дообучить на английской речи из VoxCeleb и LibriSpeech, а также всей русской речи, что найдёте. Для кодера не нужна текстовая аннотация фрагментов речи.

Тренировка

Синтез

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

Звук разбивается на отрезки длинной 25 мс с шагом 10 мс (по умолчанию в большинстве моделей). Далее с помощью преобразования Фурье для каждого кусочка вычисляется спектр (гармонические колебания, сумма которых даёт исходный сигнал) и представляется в виде графика, где вертикальная полоса — это спектр одного отрезка (по частоте), а по горизонтальной — последовательность отрезков (по времени). Этот график называется спектрограммой. Если же частоту закодировать нелинейно (нижние частоты качественнее, чем верхние), то изменится масштаб по вертикали (нужно для уменьшения данных) то такой график называют Mel спектрограммой. Так устроен человеческий слух, что небольшое отклонение на нижних частотах мы слышим лучше, чем на верхних, поэтому качество звука не пострадает

Существует несколько хороших реализаций синтеза спектрограмм, такие как Tacotron 2 и Deepvoice 3. У каждой из этих моделей есть свои реализации, например 1, 2, 3, 4. Будем использовать(как и CorentinJ) модель Tacotron от Rayhane-mamah.

Tacotron основан на сети seq2seq с механизмом внимания. Ознакомитесь с подробностями в статье.

Тренировка

Не забудьте отредактировать utils/symbols.py, если будете синтезировать не только английскую речь, hparams.pу, а так же preprocess.py.

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

  1. Запустите python synthesizer_preprocess_audio.py для создания обработанного звука и спектрограмм
  2. Запустите python synthesizer_preprocess_embeds.py для кодирования звука (получения признаков голоса)
  3. Запустите python synthesizer_train.py my_run для тренировки синтезатора

Вокодер

Теперь осталось только преобразовать спектрограммы в звук. Для этого служит последняя сеть — вокодер. Возникает вопрос, если спектрограммы получаются из звука с помощью преобразования Фурье, нельзя ли с помощью обратного преобразования получить снова звук? Ответ и да, и нет. Гармонические колебания, из которых состоит исходный сигнал, содержат как амплитуду, так и фазу, а наши спектрограммы содержат информацию только об амплитуде (ради сокращения параметров и работаем со спекрограммами), поэтому если мы сделаем обратное преобразование Фурье, то получим плохой звук.

Для решения этой проблемы придумали быстрый алгоритм Гриффина-Лима. Он делает обратное преобразование Фурье спектрограммы, получая “плохой” звук. Далее делает прямое преобразования этого звука и получают спектр, в котором уже содержится немножко информации о фазе, причём амплитуда в процессе не меняется. Далее берётся еще раз обратное преобразование и получается уже более чистый звук. К сожалению, качество сгенерированной таким алгоритмом речи оставляет желать лучшего.

На его смену пришли нейронные вокодеры, такие как WaveNet, WaveRNN, WaveGlow и другие. CorentinJ использовал модель WaveRNN за авторством fatchord

Для предобработки данных используется два подхода. Либо получить спектрограммы из звука (с помощью преобразования Фурье), или из текста (с помощью модели синтеза). Google рекомендует второй подход.

Тренировка

Итого

Мы получили модель многоязычного синтеза речи, умеющей клонировать голос.
Запустите toolbox: python demo_toolbox.py -d
Примеры можно послушать тут

Советы и выводы

Можете синтезировать свой голос онлайн с помощью colab, или посмотреть мою реализацию на github и скачать мои веса.

Источники:
http://habr.com/post/465941/
http://pronedra.ru/google-kupit-texnologiyu-dlya-razrabotki-smart-chasov-337993.html

Ссылка на основную публикацию