Поиск по сайту Поиск

Преобразование текста в речь с помощью нейросети

Для преобразования текста в речь (Text To Speech, TTS) большинству систем необходимы качественные образцы голоса, согласованные фонемы и лингвистические признаки. Мы перевели статью о новом нейросетевом решении с менее строгими требованиями. Архитектура сети основывается на сдвиговом буфере памяти и является более простой, чем в уже существующих приложениях. Исходный код системы открыт и доступен для загрузки и тестирования.

Описание модели VoiceLoop

Методы преобразования текста в речь можно разделить на четыре типа: системы на базе правил (rule-based), конкатенативные, статистико-параметрические (основанные на скрытой марковской модели) и нейронные.  Для статистико-параметрических методов необходим тщательный отбор и фильтрация исходных образцов речи. Конкатенативные системы менее строгие, но всё же требуют несколько десятков минут качественных аудиозаписей. Появляющиеся нейронные методы в перспективе обещают подражать реальным голосам, обучаясь на данных, взятых из открытого доступа.

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

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

Входные предложения представляются в виде списка фонем. Любая из 42 фонем, используемых в словаре, кодируется как короткий вектор, а входное предложение — как список векторов соответствующих фонем (контекст на этом этапе не учитывается). В каждый момент времени кодировки фонем взвешиваются и затем суммируются с помощью вектора весов внимания. Из них формируется текущий вектор контекста, а в качестве механизма внимания используется модель Грейвза.

Отличительные свойства TTS сети:

  1. Вместо обычных рекуррентных нейронных сетей (Recurrent neural network, RNN) используется буфер памяти.
  2. Одна и та же память распределяется между всеми процессами и многократно используется для выводов.
  3. Для всех вычислений применяются неглубокие полносвязные нейронные сети.
  4. Используется предельно простой механизм считывания данных.

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

Качество метода измерялось двумя способами: для TTS использовалась средняя экспертная оценка (Mean Opinion Score, MOS), а речевой синтезатор проверялся на предварительно обученной мультиклассовой нейросети, которая достигала почти идеальных показателей на реальных данных.

Архитектура сети

Прямая передача данных по сети VoiceLoop состоит из четырёх последовательных этапов. Сначала выполняется контекстно-свободное кодирование входной фразы и речевого синтезатора. Затем вычисляется контекст и происходит обновление буфера памяти. Завершающий шаг — генерация выходных данных. В случае ошибки буфер памяти подаёт сигнал с выхода на более ранние шаги.

Архитектура модели:

Шаг 1 — кодирование синтезатора речи и исходного предложения

Каждый речевой синтезатор представлен в виде вектора. Во время обучения эти векторы сохраняются в таблице поиска (Lookup table, LUT), а для новых синтезаторов, которые обучаются уже после настройки нейросети, они вычисляются путём простой оптимизации.

Входное предложение преобразуется в последовательность фонем с помощью словаря произношения CMU (Carnegie Mellon University). В этом словаре 40 фонем, к которым добавляются ещё два элемента для обозначения пауз различной длины. Затем каждая фонема сопоставляется с кодировкой, основанной на обученной таблице поиска. В результате получается матрица кодирования фонем.

Таким образом, на первом шаге используются две неглубокие сети — таблица поиска для синтезаторов речи и таблица поиска для фонем.

Шаг 2 — вычисление контекста

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

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

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

Шаг 3 — обновление буфера

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

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

Шаг 4 – генерация вывода

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

Обучение

Вывод представляет собой вектор признаков вокодера размерностью 63, вычисленный с помощью Merlin toolkit. Во время обучения выходные данные сравниваются с истинными (ground truth) признаками вокодера с использованием среднеквадратичных потерь (Mean squared error, MSE). Этот процесс происходит на каждом временном промежутке и требует точного выравнивания входной и выходной последовательностей.

Но человеческая речь не является детерминированной — повторяя одну и ту же фразу, мы каждый раз произносим её по-разному. Поэтому нельзя ожидать, что детерминированный алгоритм спрогнозирует корректные значения. Даже один и тот же вокодер не может повторить свой голос и при этом полностью устранить MSE-потери, так как при повторном воспроизведении предложения появляется изменчивость. Проблему позволяет решить метод форсирования учителя (teacher forcing). Он устраняет большую часть отклонений и обеспечивает конкретику в произнесении предложений.

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

Эффективность

Полная модель содержит 9.3 миллиона параметров и работает почти в режиме реального времени на одноядерном CPU Intel Xeon E5 и в 5 раз быстрее на GPU NVIDIA M40. Следовательно, даже без специальной оптимизации VoiceLoop можно адаптировать для запуска на мобильном клиенте аналогично существующим не нейронным решениям TTS.

Обучение нового речевого синтезатора

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

Для обучения нового синтезатора необходимы образцы голоса и расшифрованный текст. Процедура обучения проводится с фиксированными весами всех сетей и проекций. Метод стохастического градиентного спуска (Stochastic Gradient Descent, SGD) позволяет обновлять только вектор речевого синтезатора для формирования вложения нового голоса. Процесс обучения при этом не отличается от описанного ранее.

Генерирование изменчивости

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

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

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

В опытах использовалось несколько наборов данных. Для сравнения с существующими решениями, создающими только один синтезатор речи, применялись датасеты с голосом одного человека. Обучение нескольких синтезаторов проводилось на выборках из набора данных VCTK. Также создан новый датасет, состоящий из четырёх-пяти публичных выступлений разных людей на YouTube.

Эксперименты для одного синтезатора

Эксперименты проходили на Blizzard Challenge 2011 и 2013 с использованием наборов данных LJ, Nancy и аудиокниг на английском. Результаты сравнивались с истинными образцами, а также с методами Char2Wav и Tacotron. Ниже показаны оценки MOS. Как можно видеть, результаты превосходят эти два решения, но всё ещё хуже, чем истинные.

Оценки MOS (Mean + SD)

МетодLJBlizzard 2011Blizzard 2013
Tacotron
Char2Wav
VoiceLoop
Ground truth
2.06 ± 1.02
3.42 ± 1.14
3.69 ± 1.04
4.60 ± 0.71
2.15 ± 1.10
3.33 ± 1.06
3.38 ± 1.00
4.56 ± 0.67
N/A
2.03 ± 1.16
3.40 ± 1.03
4.80 ± 0.50

Также выполнена оценка Mel Cepstral Distortion (MCD) — это автоматическая проверка совместимости между двумя аудиопоследовательностями. Для выравнивания сэмплов по времени применялся MCD DTW, который использует динамическую трансформацию временной шкалы (Dynamic Time Warping, DTW). По результатам оценивания VoiceLoop также превосходит остальные методы за исключением Tacotron на датасете LJ. Но из предыдущей таблицы видно, что Tacotron не является конкурентоспособным на этом наборе данных.

Оценки MCD (Mean + SD, чем ниже, тем лучше)

МетодLJBlizzard 2011Blizzard 2013
Tacotron
Char2Wav
VoiceLoop
12.82 ± 1.41
19.41 ± 5.15
14.42 ± 1.39
14.60 ± 7.02
13.97 ± 4.93
8.86 ± 1.22
N/A
18.72 ± 6.41
8.67 ± 1.26

Эксперименты для нескольких синтезаторов

Опыты проводились на наборе данных VCTK. Записи речи 109 людей делились на четыре подмножества: 22 человека из Северной Америки (мужчин и женщин) и 65, 85 и 101 случайно выбранных сэмплов, при этом оставшиеся (87, 44, 24 и 8 записей соответственно) использовались для проверки. Все подмножества были разделены на обучающую и тестовую выборки.

Как видно на рисунке, сгенерированные образцы голоса демонстрируют разное динамическое поведение для разных ораторов. Для сравнения результатов использовалась открытая реализация Char2Wav, позволяющая генерировать несколько речевых синтезаторов. Ниже можно увидеть оценки MOS и MCD, в которых VoiceLoop снова показывает лучшие результаты, чем Char2Wav.

Оценки MOS (Mean + SD)

МетодVCTK22VCTK65VCTK85VCTK101
Char2Wav
VoiceLoop
Ground truth
2.84 ± 1.20
3.57 ± 1.08
4.61 ± 0.75
2.85 ± 1.19
3.40 ± 1.00
4.59 ± 0.72
2.76 ± 1.19
3.10 ± 1.17
4.64 ± 0.64
2.66 ± 1.16
3.33 ± 1.10
4.63 ± 0.66

Оценки MCD (Mean + SD, чем ниже, тем лучше)

МетодVCTK22VCTK65VCTK85VCTK101
Tacotron
VoiceLoop
15.71 ± 1.82
13.74 ± 0.98
15.10 ± 1.45
14.10 ± 0.94
15.23 ± 1.49
14.16 ± 0.81
15.06 ± 1.32
14.22 ± 0.88

Идентификация говорящего

Способность системы генерировать голоса, соответствующие исходным, протестирована специально обученным классификатором. Свёрточная сеть обучалась на наборе из нескольких реальных голосов, а затем тестировалась на сгенерированных образцах. Результаты идентификации приведены в таблице — VoiceLoop оказался более точным, чем VCTK, несмотря на использование одного и того же текста. Это указывает на то, что сгенерированные голоса больше похожи на обучающие образцы. Результаты Char2Wav значительно ниже.

МетодVCTK85VCTK101
Тестовая выборка VCTK
Тестовая выборка Char2Wav
Тестовая выборка VoiceLoop
98.25
75.70
100
97.16
81.60
99.76

Обучение нового речевого синтезатора

Для проверки возможности получить новые синтезаторы использовалась модель VoiceLoop, обученная на наборе данных VCTK85. Из датасета были убраны 16 ораторов, которые впоследствии использовались как входные данные для новых синтезаторов. В то время как системам TTS обычно требуется несколько часов для моделирования одного синтезатора речи, VoiceLoop тратит на генерацию ~24 минуты. Новые речевые синтезаторы достигают оценки MOS 3.08 ± 0.95, что говорит о том, что механизм генерации не ухудшается в пределах допустимых границ.

Как в случае с несколькими синтезаторами, классификаторы обучаются на основе истинных данных, а тестируются на сгенерированных. При этом они достигают 87.6% точности идентификации.

Размер данных обучения

Эффективность обучения нового синтезатора напрямую зависит от доступной длины образцов речи. Чтобы оценить влияние объёма входных данных на точность модели, описанный выше процесс обучения повторялся для 16 речевых синтезаторов с ограниченными длинами аудиозаписей: 1, 5, 10, 15 и 20 минут. На рисунке ниже видна точность идентификации для всех установленных пределов времени. Даже с двумя предложениями на каждого оратора, что в среднем составляет около 10 секунд, можно обучить новый образец голоса и идентифицировать его с точностью 64.4%.

Эксперименты на реальных данных

Для демонстрации гибкости метода проведены эксперименты с несколькими общедоступными видео. Выбраны четыре докладчика, для каждого из которых получены лучшие четыре-пять результатов. В опытах использовалась аудиодорожка и связанный с ней автоматически сгенерированный текст из видео на YouTube. Общий объём данных составляет 6.2 часа: 8000 сегментов длиной около трёх секунд. Аудио и текст являются зашумлёнными: некоторые примеры представляют собой дискуссии, а в других слышны вопросы репортёров. Иногда присутствовало эхо микрофона или звук низкого качества.

Использовалась такая же процедура обучения, как и в других экспериментах. Достигнутая оценка MOS составляет 2.97 ± 1.03, а точность идентификации — 95.81%. При этом поддерживается возможность генерации нескольких интонаций (прайминг), что продемонстрировано на рисунке ниже.

Можно заключить, что, несмотря на значительное количество зашумлённых данных, VoiceLoop оказывается достаточно устойчив к ним и не воспроизводит фоновые шумы в синтезированной речи.

Использование VoiceLoop

Демонстрационные образцы

1. Один синтезатор

2. Несколько синтезаторов

Исходное предложение:
"Some have accepted this as a miracle without any physical explanation"

Установка

Для работы с VoiceLoop необходимы следующие инструменты:

— Linux/macOS

— Python 2.7

PyTorch 0.1.12

А также:

Для обучения модели требуется поддержка CUDA. Генерация речи с предварительно обученной моделью может выполняться на CPU.

Выполните следующие команды в выбранной директории проекта:

Данные

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

Скрипт скачивает и выполняет предварительную обработку подвыборки датасета VCTK, которая содержит голоса людей с американским акцентом. Расположение набора данных:

Предварительно обученные модели

Модели можно скачать, выполнив:

После загрузки они будут находиться в каталоге models. Модель для одного синтезатора находится в папке blizzard.

SPTK и WORLD

Для генерации речи необходимы SPTK 3.9 и вокодер WORLD:

Расположение:

Быстрый старт

Если вы хотите воспользоваться уже обученной моделью, то после установки необходимых инструментов выполните команду:

Результаты будут находиться в models/vctk/results. Вы получите:

— сгенерированный образец, сохранённый как gen_10.wav

— исходный (истинный) образец orig.wav.

Вы можете использовать тот же текст с другим голосом:

Обучение

Один синтезатор

Модель для единичного голосового синтезатора обучена на Blizzard 2011. Выполните команду:

Затем продолжите обучение с новыми параметрами:

Несколько синтезаторов

Для начала следует обучить модель с уровнем шума 4 и входной последовательностью длиной 100:

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

Теперь вы можете генерировать голосовые предложения, используя скрипт generate.py. Например:

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

С оригинальной статьёй можно ознакомиться на сайте arxiv.org.

6 трендовых доменных зон для онлайн-бизнеса

6 трендовых доменных зон для онлайн-бизнеса

Первое знакомство клиента с организацией сегодня чаще всего происходит через всемирную паутину. Чем ярче проект — тем больше шансы выделиться...
Read More
Обучаем виртуального дракона фигурам высшего пилотажа

Обучаем виртуального дракона фигурам высшего пилотажа

В наши дни компьютерная графика присутствует во всех популярных видах визуального контента: от видеороликов YouTube-блогеров до полнометражных фильмов. Но проработка...
Read More
Стэнфордский курс: лекция 9. Архитектуры CNN

Стэнфордский курс: лекция 9. Архитектуры CNN

На прошлом уроке мы узнали о наиболее популярных библиотеках и фреймворках для глубокого обучения, рассмотрели их особенности и области применения....
Read More
GPT-2: нейросеть, которая закончит за вас предложение

GPT-2: нейросеть, которая закончит за вас предложение

Встречали ли вы когда-нибудь собеседника, который после нескольких сказанных вами слов заканчивал за вас предложение? GPT-2 умеет и не такое:...
Read More
Жуткие сайты, которые вызовут у вас мурашки

Жуткие сайты, которые вызовут у вас мурашки

Интернет может не только развлекать вас новыми мемами и видеороликами, но и быть по-настоящему пугающим. В честь Хэллоуина представляем несколько...
Read More
10 ингредиентов надёжной инфраструктуры хостинга REG.RU

10 ингредиентов надёжной инфраструктуры хостинга REG.RU

Привет! На связи редакция блога. И сегодня мы расскажем в деталях об одной из сторон инфраструктуры REG.RU, объясним как работает...
Read More
Голосовой помощник Apple, которому можно доверять

Голосовой помощник Apple, которому можно доверять

Мы гораздо больше доверяем тем людям, общаться с которыми нам легко и приятно. Обычно так происходит, когда их стиль и...
Read More
Как организовать техническую поддержку пользователей

Как организовать техническую поддержку пользователей

Быстрая техподдержка очень важна для клиентов, особенно в критических ситуациях. От скорости и качества решения проблемы зависит лояльность пользователя и...
Read More
Роботы в облаках: совмещение ROS и Jupyter

Роботы в облаках: совмещение ROS и Jupyter

Робототехника — одна из самых популярных и прогрессивно развивающихся отраслей. Ролики Boston Dynamics на YouTube собирают миллионы просмотров. Если вы...
Read More
Стэнфордский курс: лекция 8. ПО для глубокого обучения

Стэнфордский курс: лекция 8. ПО для глубокого обучения

В предыдущих главах мы познакомились с основами обучения нейросетей и выяснили, чему при этом стоит уделять больше внимания. Сегодня вы...
Read More