🚀 Parler-TTS Mini v1.1
Parler-TTS Mini v1.1 是一款輕量級的文本轉語音(TTS)模型,它基於 45000 小時的音頻數據進行訓練,能夠生成高質量、自然的語音。用戶可以通過簡單的文本提示(例如性別、背景噪音、語速、音高和混響)來控制語音的特徵。
🚨 Parler-TTS Mini v1.1 與 Mini v1 是完全相同的模型,它在相同的數據集上使用相同的訓練配置進行訓練。唯一的 變化 是使用了一個 更好的提示分詞器。這個分詞器具有更大的詞彙表,並且支持字節回退,這簡化了多語言訓練。它基於 unsloth/llama-2-7b 分詞器。感謝 AI4Bharat 團隊 提供的建議和幫助,以改進分詞。🚨
🚀 快速開始
📖 快速索引
✨ 主要特性
- 輕量級文本轉語音模型,基於 45000 小時音頻數據訓練。
- 可通過簡單文本提示控制語音特徵,生成高質量、自然的語音。
- 完全開源,數據集、預處理、訓練代碼和權重均公開。
📦 安裝指南
👨💻 安裝
使用 Parler-TTS 非常簡單,只需安裝一次庫:
pip install git+https://github.com/huggingface/parler-tts.git
💻 使用示例
🎲 隨機語音
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.1").to(device)
tokenizer = AutoTokenizer.from_pretrained("parler-tts/parler-tts-mini-v1.1")
description_tokenizer = AutoTokenizer.from_pretrained(model.config.text_encoder._name_or_path)
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 = description_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、Lea、Gary、Jenna、Mike、Laura)來識別。
要使用特定說話人,只需在文本描述中指定要使用的說話人: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.1").to(device)
tokenizer = AutoTokenizer.from_pretrained("parler-tts/parler-tts-mini-v1.1")
description_tokenizer = AutoTokenizer.from_pretrained(model.config.text_encoder._name_or_path)
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 = description_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、批處理和流式傳輸。
- 在提示中包含 "very clear audio" 可以生成最高質量的音頻,包含 "very noisy audio" 可以生成高背景噪音的音頻。
- 可以使用標點符號來控制生成語音的韻律,例如使用逗號在語音中添加小停頓。
- 其他語音特徵(性別、語速、音高和混響)可以直接通過提示進行控制。
📚 詳細文檔
動機
Parler-TTS 是對 Dan Lyth(來自 Stability AI)和 Simon King(來自愛丁堡大學)發表的論文 Natural language guidance of high-fidelity text-to-speech with synthetic annotations 工作的復現。
與其他 TTS 模型不同,Parler-TTS 是一個 完全開源 的版本。所有的數據集、預處理、訓練代碼和權重都在寬鬆的許可證下公開發布,這使得社區可以在我們的工作基礎上構建自己強大的 TTS 模型。
Parler-TTS 與以下資源一同發佈:
引用
如果你發現這個倉庫很有用,請考慮引用這項工作以及原始的 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}
}
📄 許可證
該模型在 Apache 2.0 許可證下發布。