Parler TTS 項目詳細介紹
項目概述
Parler-TTS 是一個輕量級文本轉語音 (TTS) 模型,能夠生成高品質、自然的語音,並且可以控制說話者的風格(性別、音調、說話方式等)。該項目是對 Stability AI 和愛丁堡大學研究論文《Natural language guidance of high-fidelity text-to-speech with synthetic annotations》的開源實現。
項目特點
- 完全開源: 與其他 TTS 模型不同,Parler-TTS 是完全開源的發布版本
- 數據集開放: 所有數據集、預處理、訓練代碼和權重都在寬鬆許可證下公開發布
- 自然語言控制: 可以通過簡單的文本提示控制語音特徵
- 多種模型規模: 提供不同參數規模的模型版本
可用模型版本
1. Parler-TTS Mini v1
- 參數量: 880M
- 訓練數據: 45K 小時有聲讀物數據
- 特點: 輕量級,適合快速推理
2. Parler-TTS Large v1
- 參數量: 2.2B 參數
- 訓練數據: 45K 小時音頻數據
- 特點: 更高品質的語音生成
3. Parler-TTS Mini Expresso
- 特色功能: 提供優越的情感控制(快樂、困惑、笑聲、悲傷)和一致的聲音(Jerry、Thomas、Elisabeth、Talia)
安裝方式
基本安裝
pip install git+https://github.com/huggingface/parler-tts.git
Apple Silicon 用戶
pip3 install --pre torch torchaudio --index-url https://download.pytorch.org/whl/nightly/cpu
使用方法
基礎使用示例
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, Alisa, Patrick, Jerry, Tina, Jenna, Bill, Tom, Carol, Barbara, Rebecca, Anna, Bruce, Emily。
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)
使用技巧
- 使用 "very clear audio" 生成最高品質的音頻
- 使用 "very noisy audio" 添加高級別的背景噪音
- 可以使用標點符號控制語音的韻律,例如使用逗號在語音中添加小停頓
- 其餘語音特徵(性別、語速、音調和混響)可以直接通過提示進行控制
訓練和微調
快速訓練
accelerate launch ./training/run_parler_tts_training.py ./helpers/training_configs/starting_point_v1.json
微調支持
項目提供了完整的訓練和微調指南,包括:
- 架構介紹
- 入門步驟
- 詳細訓練指南
- 單說話者數據集微調示例
技術優化
項目包含多種性能優化:
- SDPA 和 Flash Attention 2 兼容性
- 模型編譯能力
- 流式生成支持
- 靜態緩存優化
項目結構
- 推理代碼: 核心 TTS 推理功能
- 訓練代碼: 完整的訓練和微調流程
- Data-Speech 集成: 與數據集標註庫協同工作
- 優化工具: 多種推理速度優化選項
應用場景
- 有聲讀物製作
- 語音助手
- 教育內容製作
- 無障礙輔助技術
- 多媒體內容創作
開源協議和引用
項目採用寬鬆的開源許可證,鼓勵社區貢獻和商業使用。如果使用該項目,建議引用:
@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}}
}
社區貢獻
項目歡迎社區貢獻,特別是在以下方面:
- 數據集擴展和多樣性
- 訓練方法優化
- 多語言支持
- 性能優化
- 評估指標改進
Parler TTS 代表了開源 TTS 技術的重要進展,為研究者和開發者提供了強大而靈活的文本轉語音解決方案。