Home
Login

輕量級文本轉語音模型,可透過自然語言描述生成高品質、自然的語音

Apache-2.0Python 5.3khuggingfaceparler-tts Last Updated: 2024-12-10

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 技術的重要進展,為研究者和開發者提供了強大而靈活的文本轉語音解決方案。

Star History Chart