Почему мы хотим преобразовать текст в речь?

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

В декабре 2016 года Google опубликовал новое исследование под названием Tacotron-2, нейросетевое решение для синтеза речи. Прежде чем двигаться дальше, я хотел бы, чтобы вы ознакомились с результатами, опубликованными в их блоге https://google.github.io/tacotron/publications/tacotron2/, и оценили механизм.

Разве результаты не потрясающие и такие человеческие? Да, именно это побудило меня выяснить, как они это сделали, и попытаться реализовать это в конечном итоге. Я работал над внедрением Tacotron-2 и экспериментировал с ним в рамках своего курса в аспирантуре в течение трех месяцев с мюнхенским стартапом в области искусственного интеллекта под названием Luminovo.AI. Я хотел разработать такой синтезатор на выступлении Ангелы Меркель.

МОДЕЛЬ SEQ2SEQ С ВНИМАНИЕМ

Работу системы описали Джонатан Шен и Руоминг Панг, инженеры-программисты Google Brain and Machine Perception Teams.

Вкратце, это работает так: мы используем модель от последовательности к последовательности, оптимизированную для TTS, чтобы сопоставить последовательность букв с последовательностью функций, которые кодируют звук. Эти функции, 80-мерная спектрограмма звука с кадрами, вычисляемыми каждые 12,5 миллисекунд, фиксируют не только произношение слов, но и различные тонкости человеческой речи, включая громкость, скорость и интонацию. Наконец, эти функции преобразуются в форму волны 24 кГц с использованием архитектуры, подобной WaveNet.

Первая часть модели, то есть архитектура Seq2Seq, которая отвечает за преобразование текстов в мел-спектрограммы, и эти спектрограммы передаются в модель волновой сети для создания звуковых волн. Интересно то, что эти две части архитектуры Tacotron (Seq2Seq и вокодер Wavenet) можно обучать независимо. Я работал над моделью Seq2Seq.

Модель представляет собой установку «кодер-внимание-декодер», в которой используется «внимание, чувствительное к местоположению». Первая часть - это кодировщик, который преобразует последовательность символов в вектор встраивания слов. Это представление позже используется декодером для предсказания спектрограмм. Поскольку я использовал немецкий набор данных, я убедился, что в моем пространстве символов есть немецкий алфавит.

  • Кодер состоит из 3 сверточных слоев, каждый из которых содержит 512 фильтров формы 5 x 1, за которыми следует пакетная нормализация и активации ReLU.
  • Следующая часть - это сеть внимания, которая принимает выходные данные кодера в качестве входных данных и пытается суммировать полную закодированную последовательность как вектор контекста фиксированной длины для каждого шага выходных данных декодера.
  • Выходные данные последнего сверточного слоя передаются в один двунаправленный слой LSTM, содержащий 512 единиц (256 в каждом направлении) для генерации закодированных функций.

МОДЕЛИ ВНИМАНИЯ ДЛЯ РАСПОЗНАВАНИЯ РЕЧИ:

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

Допустим, у нас есть данные x = {x1, x2, x3… .xN}. Мы передаем эти данные в кодировщик, который создает закодированную выходную последовательность h = {h1, h2, h3… .hN}.

A (i) = Внимание (s (i-1), A (i-1), h), где s (i-1) - это предыдущее состояние декодирования, а A (i-1) - это предыдущий расклад.

s (i-1) равен 0 для первой итерации первого шага.

Функция внимания обычно реализуется путем отдельной оценки каждого элемента в h и последующей нормализации оценки.

G(i) = A(i,0) h(0) + A(i,1) h(1) + ……. + A(i,N) h(N)

Y (i) ~ Создать (s (i-1), G (i))

где s - результат декодирования, A (i) - вектор весов внимания, называемый выравниванием.

Наконец, s (i) = рекуррентность (s (i-1), G (i), Y (i))

Рекуррентность обычно LSTM.

ДЕКОДЕР:

Декодер представляет собой рекуррентную нейронную сеть с авторегрессией, которая предсказывает спектрограмму mel по кодированной входной последовательности по одному кадру за раз. Прогноз из предыдущего временного шага сначала проходит через небольшую предварительную сеть, содержащую 2 полностью связанных слоя из 256 скрытых блоков ReLU. Вектор контекста prenet output и внимания объединяется и проходит через стек из 2 однонаправленных слоев LSTM с 1024 единицами. Наконец, предсказанная спектрограмма мела проходит через 5-слойную сверточную пост-сеть, которая предсказывает остаток для добавления к предсказанию, чтобы улучшить общую реконструкцию. Каждый пост-чистый слой состоит из 512 фильтров с формой 5 × 1 с пакетной нормализацией, за которой следуют tanh активации на всех, кроме последнего слоя.

ФУНКЦИЯ ПОТЕРЯ:

Суммарная среднеквадратичная ошибка (MSE)

Параллельно с предсказанием кадра спектрограммы конкатенация вывода LSTM декодера и контекста внимания проецируется на скаляр и проходит через сигмовидную активацию, чтобы предсказать вероятность того, что выходная последовательность завершится. Этот прогноз «маркера остановки» используется во время вывода, чтобы позволить модели динамически определять, когда прекратить генерацию, вместо того, чтобы всегда генерировать в течение фиксированной продолжительности.

Я решил использовать pytorch для своей реализации, отслеживал обучение с помощью tenorboard, использовал графический процессор gcloud Tesla K80, подключался к портам сервера с помощью 'ssh -NfL' и активно использовал jupyter lab в процессе разработки. [спасательный комплект]

Я сослался на различные репозитории github [1, 2], чтобы понять статью, реализацию, исправление ошибок в моем собственном коде. Из-за естественной сложности постановки задачи я не мог получить удивительные речевые результаты, похожие на человеческие, но я многое узнал о преобразовании текста в речь, и это было основной целью, когда я начал работать над проектом.

Некоторые результаты для справки:

Все изображения, полученные выше, сделаны после 50 000 итераций (1 итерация = 1 пакет), то есть за 3 дня обучения. Этой модели требуется около 300 тыс. Итераций, чтобы приблизиться к человеческой. Вы можете видеть, что предсказанные мел-спектрограммы выглядят довольно хорошо, даже если внимание не изучено должным образом. Спасайтесь от ловушки и берегите внимание!

ЭКСПЕРИМЕНТЫ и ВЫВОДЫ:

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

  1. Изучите свои данные. Это самая важная часть проекта. Слушайте свои образцы данных, проверяйте длину текстовых образцов, продолжительность звуковых фрагментов и т. Д. Вы можете сэкономить много времени во время обучения, если вы хорошо знаете свои данные. M-AILABS анонсировала свой огромный набор речевых данных в начале этого года. У них есть огромный набор речевых данных на разных языках. Я использовал данные Ангелы Меркель из немецкой женской секции, у которой есть 12 часов выступлений из ее публичных выступлений и интервью. Этот набор данных был меньше по сравнению с LJSpeech (самый популярный набор данных на английском языке, 24 часа речи). Я понял это только тогда, когда начал тренироваться и целыми днями наблюдал за результатами. Итак, внимание!
  2. TTS очень вычислительно дорого. Будучи студентом, у меня был доступ только к одному графическому процессору (Nvidia Tesla K80) в облаке Google. Учитывая структуру набора данных, который я использовал, мой графический процессор допускал размер пакета только 8 во время обучения. Google говорит, что они обучают его с размером пакета 64. Сначала я попробовал с размером пакета 2 (из-за ограниченной памяти графического процессора), и когда модель не показала сходимость после 2–3 дней обучения, я отсортировал мои данные в соответствии с длиной текста и продолжительностью звука, и я начал обучение с размером пакета 8. Хотя я не мог оптимизировать больше с набором данных и графическим процессором, который у меня был. Итак, планируйте соответственно.
  3. Соотношение учителей и учителей. При принудительном обучении учителем модели помогают истинные метки, то есть она использует текущий кадр наземной истины для предсказания следующего шага декодирования. В документе не ясно, какое соотношение использовать. Даже если внимание не изучено, модель будет предсказывать хорошие кадры для обучающих данных в режиме по принуждению учителя, но в режиме оценки она не будет работать, потому что у нас нет основополагающей истины. приятно не смотря на плохие соосности). Я тренировался с 1.0, 0.75 и 0.5, чтобы модель училась выравниваниям. В режиме оценки принудительное использование учителей должно быть отключено.
  4. Тренировка и выравнивание занимают дней. Обучить систему TTS - довольно громоздкий процесс. Обучение модели может занять около 7–10 дней при условии, что у вас ограниченная поддержка графического процессора (мы не Google). А потом отладка кода с такой моделью - отдельная история.
  5. Настройка гиперпараметров - очень важная часть системы Tacotron-2. Размер пакета, скорость обучения, соотношение учителей и учителей, длина пакета - вот некоторые из параметров, которым также следует уделять особое внимание. Вещи различаются в зависимости от наборов данных, поэтому они очень чувствительны!

ЗАКЛЮЧЕНИЕ

Преобразование текста в речь по-прежнему представляет собой действительно сложную исследовательскую проблему, и работать над ней было очень интересно. Мой общий опыт был потрясающим, и я многое узнал о системах TTS, формах звуковых сигналов, повторяющихся сетях, мел-спектрограммах, механизмах внимания, и я надеюсь, что этот пост может помочь вам в любом случае в вашем путешествии с системами TTS. В будущем я хотел бы увидеть оптимизированную версию модели Tacotron-2, которая будет более надежной для разных языков, более простой в обучении и менее сложной в вычислительном отношении.

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

Особая благодарность Luminovo.AI за поддержку!