Описание модели VoiceLoop:
Кодирование синтезатора речи и исходного предложения:
Каждый речевой синтезатор представлен вектором и сохраняется в таблице поиска (Lookup table, LUT).
Входное предложение преобразуется в последовательность фонем с помощью словаря произношения CMU, где каждая фонема кодируется вектором на основе обученной таблицы поиска.
Вычисление контекста:
Применяется механизм монотонного внимания, основанный на смеси гауссовских распределений Грэйвза (Gaussian Mixture Model, GMM).
В каждый выходной момент времени сеть внимания использует буфер с предыдущего шага для вычисления вектора весов внимания.
Контекстный вектор вычисляется как взвешенная сумма столбцов матрицы вложений фонем на основе вектора внимания.
Обновление буфера:
На каждом временном шаге буфер памяти обновляется с добавлением нового вектора представления на место первого столбца, при этом последний столбец удаляется, а остальные сдвигаются вправо.
Новое представление вычисляется с помощью неглубокой полносвязной нейросети с функцией активации ReLU, используя буфер, вектор контекста и предыдущие выходные данные. Оно также зависит от речевого синтезатора и добавляет проекцию его вложения в вектор контекста.
Генерация вывода:
Выходные данные генерируются с помощью проекционной матрицы синтезатора речи и нейросети, архитектура которой аналогична шагам 2 и 3.
Отличительные особенности TTS сети:
VoiceLoop использует буфер памяти вместо обычных рекуррентных нейронных сетей (RNN), что делает его более эффективным и позволяет многократное использование памяти для выводов.
Все вычисления выполняются с помощью неглубоких полносвязных нейронных сетей, что упрощает архитектуру и повышает ее надежность.
Простой механизм считывания данных делает VoiceLoop способным подражать реальным голосам на основе данных из открытого доступа, даже при наличии фонового шума и неточностей в транскрипции текста.
VoiceLoop может быть обучен новому синтезатору речи с помощью коротких аудиопоследовательностей и автоматически сгенерированного текста, что позволяет формировать различные интонации путем прайминга.
Обучение модели VoiceLoop:
Входные и выходные данные:
Входные данные представляют собой фразы в виде списков фонем (звуков речи).
Выходные данные представляют собой векторы признаков вокодера размерностью 63, которые были вычислены с помощью Merlin toolkit.
Метод обучения:
Во время обучения, модель сравнивает свои прогнозируемые результаты с истинными признаками вокодера с использованием среднеквадратичных потерь (MSE).
Это происходит на каждом временном промежутке и требует точного выравнивания входных и выходных последовательностей.
Проблема изменчивости речи:
Человеческая речь не является детерминированной и может звучать по-разному при повторных воспроизведениях.
Метод форсирования учителя (teacher forcing) используется для устранения отклонений и обеспечивает конкретность в произнесении фраз.
Эффективность модели:
Полная модель содержит 9.3 миллиона параметров и работает почти в режиме реального времени на одноядерном CPU Intel Xeon E5 и в 5 раз быстрее на GPU NVIDIA M40.
Это позволяет адаптировать VoiceLoop для запуска на мобильных устройствах, аналогично существующим не нейронным решениям TTS.
Обучение нового речевого синтезатора:
Цель TTS состоит в том, чтобы научиться подражать новому человеку на основе сравнительно короткой голосовой выборки.
Для обучения нового синтезатора требуются образцы голоса и расшифрованный текст.
Метод стохастического градиентного спуска (SGD) используется для обновления вектора речевого синтезатора без переучивания всей сети.
Генерирование изменчивости:
VoiceLoop генерирует изменчивые фразы, чтобы имитировать естественную речь.
Прайминг (priming) используется для инициализации начального буфера на основе вводного процесса.
Это позволяет придать буферу окраску и достичь желаемого уровня изменчивости в произношении фраз.
Установка и использование VoiceLoop:
Для работы с VoiceLoop необходимо выполнить следующие шаги:
Подготовка окружения:
Убедитесь, что у вас установлены Linux или macOS.
Установите Python версии 2.7.
Установите PyTorch версии 0.1.12.
Установите Festival и espeak с помощью команды: sudo apt-get install festival espeak.
Скачивание и установка VoiceLoop:
Склонируйте репозиторий VoiceLoop с помощью команды: git clone
Перейдите в каталог проекта: cd loop.
Обновите подмодули: git submodule init и git submodule update.
Установите зависимости: pip install -r scripts/requirements.txt.
Перейдите в директорию phonemizer: cd phonemizer.
Постройте и установите пакет: python setup.py build и sudo python setup.py install.
Загрузка данных и моделей:
Загрузите данные с помощью скрипта: bash scripts/download_data.sh.
Загрузите предварительно обученные модели с помощью скрипта: bash scripts/download_models.sh.
Теперь данные и модели будут доступны в соответствующих каталогах.
Генерация речи:
Если вы хотите использовать готовую модель для синтеза речи, выполните команду: python generate.py --spkr 10 --checkpoint models/vctk/bestmodel.pth --text "Hello, could you please say something?".
Результаты будут сохранены в каталоге models/vctk/results.
Обучение новых моделей:
Если вы хотите обучить свою модель, используйте команду python train.py с нужными параметрами.
Например, для обучения синтезатора с уровнем шума 4 и входной последовательностью длиной 100, выполните: python train.py --expName vctk --data data/vctk --noise 4 --seq-len 100 --epochs 90.
Генерация речи с обученной моделью:
После обучения модели, вы можете сгенерировать речь с помощью команды python generate.py, указав нужные параметры.
VoiceLoop предоставляет удобный способ генерации речи из текста и может быть использован для различных задач, включая создание виртуальных ассистентов, аудиокниг и обучение произношению иностранных языков.