FastSpeech Обзор статьи и реализация

Быстроречье Обзор статьи и его практическое применение

Узнайте о тексте в речь и о том, как это осуществляется трансформерами

В 2019 году FastSpeech продвинул границы нейронного текст-в-речь, предлагая значительное улучшение скорости вывода при сохранении устойчивости для предотвращения повторения или опущения слов. Он также позволял контролировать выходную речь в терминах речи и просодии.

В этой истории мы познакомим вас с тем, как трансформеры применяются для текста в речь, предоставим вам краткий обзор статьи FastSpeech и покажем, как вы можете его реализовать с нуля. Здесь мы предполагаем, что вы знакомы с трансформерами и их различными компонентами. Если нет, мы настоятельно рекомендуем ознакомиться с предыдущей статьей, посвященной этой теме.

Картина в стиле Ван Гога с преобразователем, говорящим в микрофон на трибуне — сгенерирована автором с использованием Canva

Оглавление

· ФонВведениеМэл-спектрограмма· Обзор статьиВведениеЭксперименты и результатыАрхитектураКодировщикРегулятор длиныДекодер· РеализацияСтратегияПолная реализация

Фон

Введение

Традиционные модели текст-в-речь (TTS) опирались на конкатенативные и статистические техники. Конкатенативные техники основывались на синтезе речи путем объединения звуков из базы данных звуков фонем (отдельных звуковых единиц языка). Статистические методы (например, HMM) пытались моделировать основные свойства речи, достаточные для генерации звуковой волны. Оба подхода часто имели проблемы с производством естественных звуков или выражением эмоций. Другими словами, они склонны воспроизводить неестественную или роботизированную речь для данного текста.

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

Мэл-спектрограмма

Спектрограмма от официального CTBTO Photostream на Flickr CC BY-SA 2.0.

В своей наиболее базовой форме, волна речи представляет собой просто последовательность амплитуд, которые представляют вариации воздушного давления во времени. Мы можем преобразовать любую волну в соответствующую Мел-спектрограмму (которая является матрицей, показывающей амплитуду различных частот в различные временные окна исходной волны) с использованием преобразования Фурье короткого окна (STFT). Легко отобразить аудио на его Мел-спектрограмму с использованием преобразования Фурье короткого окна; однако обратное преобразование гораздо сложнее, и лучшие систематические методы (например, Гриффин Лим) могут давать грубые результаты. Предпочтительным подходом является обучение модели для этой задачи. Существующие модели, обученные для этой задачи, включают WaveGlow и WaveNet.

Таким образом, чтобы повторить, методы глубокого обучения часто подходят к преобразованию текста в речь, обучая модель предсказывать Мел-спектрограмму речи, соответствующую множеству экземпляров текста. Затем она полагается на другую модель (называемую вокодером) для отображения предсказанной спектрограммы на аудио. FastSpeech использует модель WaveGlow от Nvidia.

Счастливый трансформер, пишущий научную работу в стиле Ван Гога. — Создано автором с использованием Canva

Обзор статьи

Введение

Хотя недавние методы преобразования текста в речь на основе трансформера значительно улучшили качество звука по сравнению с традиционными методами, все же остаются три основных проблемы с этими моделями:

  • Они медленно выводят речь из-за авторегрессивности декодера трансформера. Иными словами, они генерируют части Мел-спектрограммы последовательно, полагаясь на ранее сгенерированные части. То же самое относится и к старым моделям глубокого обучения на основе RNN и CNN.
  • Они неустойчивы; может происходить пропуск слов или повторение из-за небольших ошибок в оценках внимания (или выравнивания), которые передаются во время последовательной генерации.
  • У них отсутствует простой способ контроля характеристик сгенерированной речи, таких как скорость или пинация (интонация).

FastSpeech пытается решить все три проблемы. Два ключевых отличия от других архитектур трансформера состоят в следующем:

  • Декодер является неавторегрессивным, он означает абсолютно параллельное выполнение;
    таким образом, решается проблема скорости.
  • Он использует компонент регулятора длины прямо перед декодером, который стремится обеспечить идеальное соответствие между фонемами и Мел-спектрограммой и устраняет компонент перекрестного внимания.
  • Способ работы регулятора длины позволяет легко контролировать скорость речи с помощью гиперпараметра. Мелкие свойства пинии, такие как продолжительность паузы, также могут быть контролируемы аналогичным образом.
  • В обмен на это, с целью регуляции длины, во время обучения используется прецедентное обучение на уровне последовательности. Другими словами, оно полагается на другую уже обученную модель преобразования текста в речь (модель Transformer TTS).

Эксперименты и результаты

Авторы использовали набор данных LJSpeech, который включает аудио продолжительностью около 24 часов, разбросанных по 13100 аудиофайлам (каждый с соответствующим текстовым входом). Задачей тренировки является ввод текста и предсказание моделью соответствующей спектрограммы. Около 95,6% данных было использовано для обучения, а остальное разделено для валидации и тестирования.

  • Ускорение выводаОно увеличивает скорость вывода в 38 раз (или в 270 раз без учета вокодера) по сравнению с авторегрессивными моделями преобразования текста в речь на основе трансформера; отсюда и название FastSpeech.
  • Качество звукаС помощью средней оценки мнения 20 носителей английского языка авторы показали, что FastSpeech тесно соответствует качеству модели Transformer TTS и Tacotron 2 (состояние искусства на тот момент).
  • СтабильностьFastSpeech превзошел Transformer TTS и Tacotron 2 с нулевой ошибкой (в терминах пропусков и повторений) в 50 сложных примерах преобразования текста в речь по сравнению с 24% и 34% для Transformer TTS и Tacotron 2 соответственно.
  • УправляемостьАвторы представили примеры, показывающие, что работают контроль скорости и продолжительности паузы.
  • ОтсутствиеАвторы подтверждают эффективность решений, таких как интеграция 1D-сверток в трансформер и использование прецедентного обучения на уровне последовательности. Они показывают снижение производительности (в терминах средней оценки мнения) в отсутствие каждого решения.

Архитектура

Схема архитектуры FastSpeech из статьи FastSpeech

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

В энкодере и декодере используется блок Feedforward Transformer (FFT). Он похож на блок энкодера в трансформере, но вместо FFN, отвечающего за позиционное представление, используется 1D свертка. Гиперпараметр N обозначает количество последовательно соединенных блоков FFT в энкодере и декодере. В статье значение N установлено как 6.

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

Вы можете представить, что поток данных имеет следующую структуру:

Энкодер

Энкодер принимает последовательность чисел, соответствующих символам в тексте. В статье упоминается конвертер графем-фоносимволов, который может преобразовывать текст в последовательность фонетических символов, однако мы просто будем использовать буквы в качестве символьной единицы и предположим, что модель может выучить любое необходимое фонетическое представление во время обучения. Таким образом, для ввода “Say hello!” энкодер принимает последовательность из 10 чисел: [“S”,”a”,”y”,…,”!”].

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

Для входной последовательности из n символов энкодер выдает [h₁,h₂,…,hₙ], где каждое представление имеет размерность emb_dim.

Регулятор длины

Цель регулятора длины состоит просто в повторении представления энкодера для каждого символа. Идея заключается в том, что произношение каждого символа в тексте обычно соответствует нескольким (или нулевому) единицам Мел-спектрограммы (которые будут генерироваться декодером); это не только одна звуковая единица. Под единицей Мел-спектрограммы мы понимаем один столбец Мел-спектрограммы, который относится к частотному распределению звука в оконном временном интервале этого столбца и соответствует фактическому звуку в звуковой волне.

Регулятор длины работает следующим образом:

  1. Прогнозируется количество единиц Мел-спектрограммы для каждого символа.
  2. Повторяется представление энкодера в соответствии с этим количеством.

Например, для представлений энкодера [h₁, h₂, h₃, h₄, h₅] символов, соответствующих “knight”, происходит следующее во время вывода:

  1. Регулятор длины передает каждое представление в прогнозирующую длительность модель, которая использует представление (учитывающее отношения со всеми остальными символами в тексте) для прогнозирования целого числа, представляющего количество Мел-спектрограмм для соответствующего символа.
  2. Предположим, что прогнозирующая длительность возвращает [1, 2, 3, 2, 1], затем регулятор длины повторяет каждое скрытое состояние в соответствии с предсказанной длительностью, что дает [h₁, h₂, h₂, h₃, h₃, h₃, h₄, h₄, h₅]. Теперь нам известна длина последовательности (10), которая соответствует длине Мел-спектрограммы.
  3. Далее эта новая последовательность передается в декодер.

Заметим, что в реальной ситуации при передаче knight на FastSpeech и проверке вывода прогнозирующей длительность модели получаем [ 1, 8, 15, 3, 0, 17]. Обратите внимание, что буквы k, g, h практически не вносят вклад в Мел-спектрограмму по сравнению с другими буквами. Действительно, в основном произносится звук n, i, t, когда произносится это слово.

Управляемость Легко управлять скоростью, масштабируя предсказываемые длительности. Например, если [ 1, 8, 15, 3, 0, 17] удваивается, то для произнесения слова рыцарь потребуется в два раза больше времени (увеличение скорости в 0,5 раза), а если его умножить на половину (а затем округлить), то произнесение этого слова займет в два раза меньше времени (ускорение в 2 раза). Также можно изменить только длительность соответствующих символов (например, пробелов), чтобы контролировать длительность их произношения (например, паузы).

Обучение

Во время обучения FastSpeech не предсказывает длительности с использованием предсказателя длительности (он не обучается), а предсказывает длительности с использованием матриц внимания обученного TTS трансформера.

  • Перекрестное внимание в этом трансформере связывает каждый символ и единицу спектрограммы Mel с оценкой внимания с помощью матрицы внимания.
  • Таким образом, для предсказания количества единиц спектрограммы Mel (длительности) символа c во время обучения FastSpeech происходит подсчет количества единиц спектрограммы Mel, которые имели максимальное внимание к этому символу, используя матрицу перекрестного внимания в TTS трансформере.
  • Поскольку перекрестное внимание включает несколько матриц внимания (по одной для каждой головы), эта операция выполняется на матрице внимания, которая наиболее “диагональна”. Возможно, это гарантирует реалистичное соответствие между символами и единицами спектрограммы Mel.
  • Она также использует эту длительность для обучения предсказателя длительности (простая задача регрессии). Таким образом, нам не нужна эта модель-учитель во время вывода.

Декодер

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

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

Количество частот n_mels является гиперпараметром этого слоя. В статье установлено значение 80.

Современный футуристический трансформер, программирующий компьютер, написанный в стиле Ван Гога — сгенерировано автором с помощью Canva

Реализация

Структура FastSpeech из статьи FastSpeech

Стратегия

Архитектура FastSpeech соответствует

Мы начнем с реализации:

и

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

Теперь все, что нам нужно, это регулятор длины

потому что после того, как будет выполнен последний шаг,

Полная реализация

Чтобы избежать спама этой статьи большим количеством кода, ранее я подготовил аннотированную записную книжку с упорядоченной, оптимизированной и удобной для обучения версией оригинальной реализации для целей вывода результатов. Вы можете найти ее на Github или Google Colab. Учтите, что звук не будет воспроизводиться на Google Colab (вам нужно скачать и запустить записную книжку в автономном режиме). Настоятельно рекомендуется ознакомиться с различными компонентами, найденными в трансформерной архитектуре, прежде чем приступить к реализации.

A Modern Futuristic Jet Flying Towards the Stars Painted in Van Gogh style — Generated by Author using Canva

Я надеюсь, что объяснение, предоставленное в этой истории, помогло вам в улучшении понимания FastSpeech и его архитектуры, а также руководило вас по реализации с нуля. До следующего раза, au revoir.