Parler-TTS é um modelo leve de conversão de texto em fala (TTS) que pode gerar fala de alta qualidade e som natural no estilo de um determinado locutor (gênero, tom, estilo de fala, etc.). É uma reprodução do trabalho do artigo Orientação em linguagem natural de conversão de texto em fala de alta fidelidade com anotações sintéticas de Dan Lyth e Simon King, da Stability AI e da Universidade de Edimburgo, respectivamente.
Ao contrário de outros modelos TTS, Parler-TTS é uma versão totalmente de código aberto . Todos os conjuntos de dados, pré-processamento, código de treinamento e pesos são divulgados publicamente sob licença permissiva, permitindo que a comunidade desenvolva nosso trabalho e desenvolva seus próprios modelos TTS poderosos.
Este repositório contém o código de inferência e treinamento para Parler-TTS. Ele foi projetado para acompanhar o repositório Data-Speech para anotação de conjuntos de dados.
Importante
08/08/2024: Temos o orgulho de lançar dois novos pontos de verificação Parler-TTS:
Esses pontos de verificação foram treinados em 45 mil horas de dados de audiolivros.
Além disso, o código é otimizado para geração muito mais rápida: adicionamos compatibilidade com SDPA e Flash Attention 2, bem como a capacidade de compilar o modelo.
Parler-TTS possui dependências leves e pode ser instalado em uma linha:
pip install git+https://github.com/huggingface/parler-tts.git
Os usuários do Apple Silicon precisarão executar um comando de acompanhamento para usar a versão noturna do PyTorch (2.4) para suporte ao bfloat16:
pip3 install --pre torch torchaudio --index-url https://download.pytorch.org/whl/nightly/cpu
Dica
Você pode experimentá-lo diretamente em uma demonstração interativa aqui!
Usar Parler-TTS é tão simples quanto “bonjour”. Basta instalar a biblioteca uma vez:
pip install git+https://github.com/huggingface/parler-tts.git
Parler-TTS foi treinado para gerar fala com recursos que podem ser controlados com um simples prompt de texto, por exemplo:
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 )
Para garantir a consistência dos falantes entre gerações, este ponto de verificação também foi treinado em 34 falantes, caracterizados pelo nome. A lista completa de palestrantes disponíveis inclui: Laura, Gary, Jon, Lea, Karen, Rick, Brenda, David, Eileen, Jordan, Mike, Yann, Joy, James, Eric, Lauren, Rose, Will, Jason, Aaron, Naomie, Alisa, Patrick, Jerry, Tina, Jenna, Bill, Tom, Carol, Barbara, Rebecca, Anna, Bruce, Emily.
Para tirar vantagem disso, basta adaptar a descrição do seu texto para especificar qual alto-falante usar: Jon's voice is monotone yet slightly fast in delivery, with a very close recording that almost has no background noise.
Você pode substituir “Jon” por qualquer um dos nomes da lista acima para utilizar diferentes características do alto-falante. Cada alto-falante possui qualidades vocais únicas que podem ser aproveitadas para atender às suas necessidades específicas. Para obter informações mais detalhadas sobre o desempenho do alto-falante com consistência de voz, consulte o guia de inferência.
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 )
Pontas :
Criamos um guia de inferência para tornar a geração mais rápida. Pense em SDPA, torch.compile e streaming!
A pasta de treinamento contém todas as informações para treinar ou ajustar seu próprio modelo Parler-TTS. Consiste em:
Importante
DR: Após seguir as etapas de instalação, você pode reproduzir a receita de treinamento Parler-TTS Mini v1 com a seguinte linha de comando:
accelerate launch ./training/run_parler_tts_training.py ./helpers/training_configs/starting_point_v1.json
Importante
Você também pode seguir este guia de ajuste fino em um exemplo de conjunto de dados de alto-falante mono.
Esta biblioteca se baseia em vários gigantes do código aberto, aos quais gostaríamos de estender nossos mais calorosos agradecimentos por fornecer essas ferramentas!
Agradecimentos especiais a:
Se você achou este repositório útil, considere citar este trabalho e também o artigo original do 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}
}
Contribuições são bem-vindas, pois o projeto oferece muitas possibilidades de melhoria e exploração.
Ou seja, estamos procurando maneiras de melhorar a qualidade e a velocidade: