Parler-TTS — это облегченная модель преобразования текста в речь (TTS), которая может генерировать высококачественную, естественно звучащую речь в стиле данного говорящего (пол, высота тона, стиль речи и т. д.). Это воспроизведение работы из статьи «Руководство по естественному языку для высококачественного преобразования текста в речь» с синтетическими аннотациями Дэна Лита и Саймона Кинга из Stability AI и Эдинбургского университета соответственно.
В отличие от других моделей TTS, Parler-TTS представляет собой версию с полностью открытым исходным кодом . Все наборы данных, предварительная обработка, обучающий код и веса публикуются публично под разрешительной лицензией, что позволяет сообществу использовать нашу работу и разрабатывать свои собственные мощные модели TTS.
Этот репозиторий содержит код вывода и обучения для Parler-TTS. Он предназначен для сопровождения репозитория Data-Speech для аннотаций наборов данных.
Важный
08.08.2024: Мы с гордостью представляем две новые КПП Parler-TTS:
Эти контрольно-пропускные пункты были обучены на 45 тысячах часов данных аудиокниг.
Кроме того, код оптимизирован для гораздо более быстрой генерации: мы добавили совместимость с SDPA и Flash Attention 2, а также возможность компилировать модель.
Parler-TTS имеет легкие зависимости и может быть установлен в одну строку:
pip install git+https://github.com/huggingface/parler-tts.git
Пользователям Apple Silicon потребуется выполнить следующую команду, чтобы использовать ночную сборку PyTorch (2.4) для поддержки bfloat16:
pip3 install --pre torch torchaudio --index-url https://download.pytorch.org/whl/nightly/cpu
Кончик
Вы можете опробовать это в интерактивной демонстрации здесь!
Использовать Parler-TTS так же просто, как «добрый день». Просто установите библиотеку один раз:
pip install git+https://github.com/huggingface/parler-tts.git
Parler-TTS обучен генерировать речь с функциями, которыми можно управлять с помощью простой текстовой подсказки, например:
import torch
from parler_tts import ParlerTTSForConditionalGeneration
from transformers import AutoTokenizer
import soundfile as sf
device = "cuda:0" if torch . cuda . is_available () else "cpu"
model = ParlerTTSForConditionalGeneration . from_pretrained ( "parler-tts/parler-tts-mini-v1" ). to ( device )
tokenizer = AutoTokenizer . from_pretrained ( "parler-tts/parler-tts-mini-v1" )
prompt = "Hey, how are you doing today?"
description = "A female speaker delivers a slightly expressive and animated speech with a moderate speed and pitch. The recording is of very high quality, with the speaker's voice sounding clear and very close up."
input_ids = tokenizer ( description , return_tensors = "pt" ). input_ids . to ( device )
prompt_input_ids = tokenizer ( prompt , return_tensors = "pt" ). input_ids . to ( device )
generation = model . generate ( input_ids = input_ids , prompt_input_ids = prompt_input_ids )
audio_arr = generation . cpu (). numpy (). squeeze ()
sf . write ( "parler_tts_out.wav" , audio_arr , model . config . sampling_rate )
Чтобы обеспечить согласованность говорящих между поколениями, эта контрольная точка также была обучена на 34 говорящих, охарактеризованных по имени. В полный список доступных докладчиков входят: Лора, Гэри, Джон, Леа, Карен, Рик, Бренда, Дэвид, Эйлин, Джордан, Майк, Янн, Джой, Джеймс, Эрик, Лорен, Роуз, Уилл, Джейсон, Аарон, Наоми, Алиса, Патрик, Джерри, Тина, Дженна, Билл, Том, Кэрол, Барбара, Ребекка, Анна, Брюс, Эмили.
Чтобы воспользоваться этим, просто адаптируйте свое текстовое описание, указав, какой динамик использовать: Jon's voice is monotone yet slightly fast in delivery, with a very close recording that almost has no background noise.
Вы можете заменить «Джон» любым именем из списка выше, чтобы использовать другие характеристики динамика. Каждый динамик обладает уникальными вокальными данными, которые можно использовать в соответствии с вашими конкретными потребностями. Более подробную информацию о характеристиках динамиков и согласованности голоса см. в руководстве по выводам.
import torch
from parler_tts import ParlerTTSForConditionalGeneration
from transformers import AutoTokenizer
import soundfile as sf
device = "cuda:0" if torch . cuda . is_available () else "cpu"
model = ParlerTTSForConditionalGeneration . from_pretrained ( "parler-tts/parler-tts-mini-v1" ). to ( device )
tokenizer = AutoTokenizer . from_pretrained ( "parler-tts/parler-tts-mini-v1" )
prompt = "Hey, how are you doing today?"
description = "Jon's voice is monotone yet slightly fast in delivery, with a very close recording that almost has no background noise."
input_ids = tokenizer ( description , return_tensors = "pt" ). input_ids . to ( device )
prompt_input_ids = tokenizer ( prompt , return_tensors = "pt" ). input_ids . to ( device )
generation = model . generate ( input_ids = input_ids , prompt_input_ids = prompt_input_ids )
audio_arr = generation . cpu (). numpy (). squeeze ()
sf . write ( "parler_tts_out.wav" , audio_arr , model . config . sampling_rate )
Советы :
Мы создали руководство по выводу, чтобы ускорить генерацию. Подумайте о SDPA, torch.compile и потоковой передаче!
Папка обучения содержит всю информацию для обучения или точной настройки вашей собственной модели Parler-TTS. Он состоит из:
Важный
TL;DR: Выполнив шаги установки, вы можете воспроизвести рецепт обучения Parler-TTS Mini v1 с помощью следующей командной строки:
accelerate launch ./training/run_parler_tts_training.py ./helpers/training_configs/starting_point_v1.json
Важный
Вы также можете следовать этому руководству по тонкой настройке на примере набора данных с монодинамиком.
Эта библиотека создана на основе ряда гигантов с открытым исходным кодом, которым мы хотели бы выразить нашу самую искреннюю благодарность за предоставление этих инструментов!
Особая благодарность:
Если этот репозиторий оказался для вас полезным, рассмотрите возможность процитировать эту работу, а также оригинальную статью Stability AI:
@misc{lacombe-etal-2024-parler-tts,
author = {Yoach Lacombe and Vaibhav Srivastav and Sanchit Gandhi},
title = {Parler-TTS},
year = {2024},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/huggingface/parler-tts}}
}
@misc{lyth2024natural,
title={Natural language guidance of high-fidelity text-to-speech with synthetic annotations},
author={Dan Lyth and Simon King},
year={2024},
eprint={2402.01912},
archivePrefix={arXiv},
primaryClass={cs.SD}
}
Вклад приветствуется, поскольку проект предлагает множество возможностей для улучшения и исследования.
А именно, мы ищем способы улучшить качество и скорость: