Parler-TTS 是一种轻量级文本转语音 (TTS) 模型,可以按照给定说话者的风格(性别、音调、说话风格等)生成高质量、听起来自然的语音。它是 Stability AI 和爱丁堡大学的 Dan Lyth 和 Simon King 论文《具有合成注释的高保真文本到语音的自然语言指导》的复制品。
与其他 TTS 模型相反,Parler-TTS 是一个完全开源的版本。所有数据集、预处理、训练代码和权重均在许可下公开发布,使社区能够在我们的工作基础上开发自己强大的 TTS 模型。
该存储库包含 Parler-TTS 的推理和训练代码。它旨在配合数据语音存储库进行数据集注释。
重要的
08/08/2024:我们很自豪地发布两个新的 Parler-TTS 检查点:
这些检查点已经接受了 45,000 小时的有声读物数据的训练。
此外,代码还针对更快的生成进行了优化:我们添加了 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 就像“bonjour”一样简单。只需安装一次库即可:
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 名说话人进行了训练,并按姓名进行了表征。可用演讲者的完整列表包括:Laura、Gary、Jon、Lea、Karen、Rick、Brenda、David、Eileen、Jordan、Mike、Yann、Joy、James、Eric、Lauren、Rose、Will、Jason、Aaron、Naomie、艾丽莎、帕特里克、杰瑞、蒂娜、珍娜、比尔、汤姆、卡罗尔、芭芭拉、丽贝卡、安娜、布鲁斯、艾米丽。
要利用这一点,只需调整您的文本描述以指定要使用的扬声器: Jon's voice is monotone yet slightly fast in delivery, with a very close recording that almost has no background noise.
您可以将“Jon”替换为上面列表中的任何名称,以利用不同的说话者特征。每个扬声器都有独特的音质,可以用来满足您的特定需求。有关语音一致性的扬声器性能的更多详细信息,请参阅推理指南。
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}
}
欢迎贡献,因为该项目提供了许多改进和探索的可能性。
也就是说,我们正在寻找提高质量和速度的方法: