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

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

Для преобразования текста в речь (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.

Стэнфордский курс: лекция 4. Введение в нейронные сети

Стэнфордский курс: лекция 4. Введение в нейронные сети

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

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

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

Улучшаем графику в старых играх и видео с помощью нейросетей

Бывало ли с вами такое: вы решили скачать любимую компьютерную игру детства и ненадолго погрузиться в счастливые воспоминания. Установили её,...
Read More
Как создать сайт-портфолио для творческого проекта

Как создать сайт-портфолио для творческого проекта

Резьба по книгам, money art, тканевые скульптуры — искусство может принимать самые разные формы. А благодаря Интернету современные художники могут...
Read More
Нейросеть описывает мир незрячим людям

Нейросеть описывает мир незрячим людям

Голосовые ассистенты могут не только играть в «города» и рассказывать о погоде — они способны на гораздо большее! Например, помогать...
Read More
Экскурсии в дата-центр: как мы провели 300 человек на закрытый объект и почему нас уже не остановить

Экскурсии в дата-центр: как мы провели 300 человек на закрытый объект и почему нас уже не остановить

Отвлекитесь немного от экрана и посмотрите на вещи, которые вас окружают. Стол, кружка, лампа, смартфон, клавиатура — всё это материальные...
Read More
Стэнфордский курс: лекция 3. Функция потерь и оптимизация

Стэнфордский курс: лекция 3. Функция потерь и оптимизация

На прошлой лекции мы разобрались, как работает классификация изображений. Что же может «потеряться» в процессе и можно ли этого избежать?...
Read More
Как ИИ отслеживает небезопасное поведение водителей

Как ИИ отслеживает небезопасное поведение водителей

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

Многозначная классификация с помощью Keras

Можно ли обучить нейросеть делать не один, а сразу несколько прогнозов? Этот вопрос возникает, когда нам необходимо классифицировать изображения по...
Read More
Большая игра, или Загадочная история домена SEX.COM

Большая игра, или Загадочная история домена SEX.COM

“The Internet is for porn” — так пелось в бродвейском мюзикле Avenue Q (пародия на «Улицу Сезам»). И, несмотря на то,...
Read More