Orpheus TTS 是基于 Llama-3b 骨干网络的 SOTA 开源文本到语音系统。Orpheus 展示了使用 LLMs 进行语音合成的涌现能力。

项目链接:https://github.com/canopyai/Orpheus-TTS


能力

  • 类人语音:自然语调、情感和节奏,优于 SOTA 闭源模型;

  • 零样本语音克隆:无需预先微调即可克隆声音;

  • 指导情感和语调:通过简单的标签控制语音和情感特征;

  • 低延迟:实时应用中约为 200 毫秒的流延迟,通过输入流可降低至约 100 毫秒。



模型

我们提供 2 个英语模型,此外我们还提供数据处理脚本和样本数据集,以便您轻松创建自己的微调版本。

  1. 微调产品- 适用于日常 TTS 应用的微调模型;

  2. 预训练- 我们的基础模型在超过 10 万小时的英语语音数据上训练。

我们还提供了一组多语言模型的研究版:

  • 多语言系列- 7 对预训练和微调模型。


推理

在 colab 上的简单设置

我们提供跨语言的标准化提示格式,这些笔记本展示了如何用英语使用我们的模型。

  1. Colab For Tuned Model(非流式,见下文实时流式)- 适用于日常 TTS 应用的微调模型。

  2. Colab 预训练模型 - 此笔记本已设置用于条件生成,但可以扩展到一系列任务。

流式推理示例

克隆此仓库

git clone https://github.com/canopyai/Orpheus-TTS.git

导航并安装包

cd Orpheus-TTS && pip install orpheus-speech # uses vllm under the hood for fast inference
  1. vllm 于 3 月 18 日推送了一个略微有问题的版本,因此一些问题正在通过回滚到pip install vllm==0.7.3之后pip install orpheus-speech来解决;

  2. Run the example below:运行以下示例:

from orpheus_tts import OrpheusModel
import wave
import time
model = OrpheusModel(model_name ="canopylabs/orpheus-tts-0.1-finetune-prod")
prompt = '''Man, the way social media has, um, completely changed how we interact is just wild, right? Like, we're all connected 24/7 but somehow people feel more alone than ever. And don't even get me started on how it's messing with kids' self-esteem and mental health and whatnot.'''
start_time = time.monotonic()
syn_tokens = model.generate_speech(
   prompt=prompt,
   voice="tara",
   )
with wave.open("output.wav", "wb") as wf:
   wf.setnchannels(1)
   wf.setsampwidth(2)
   wf.setframerate(24000)
   total_frames = 0
   chunk_counter = 0
   for audio_chunk in syn_tokens: # output streaming
      chunk_counter += 1
      frame_count = len(audio_chunk) // (wf.getsampwidth() * wf.getnchannels())
      total_frames += frame_count
      wf.writeframes(audio_chunk)
   duration = total_frames / wf.getframerate()
   end_time = time.monotonic()
   print(f"It took {end_time - start_time} seconds to generate {duration:.2f} seconds of audio")


预训练模型

这是一个非常简单的过程,类似于使用 Trainer 和 Transformers 训练LLM。

提供的基模型训练了 10 万小时。我建议不要使用合成数据进行训练,因为当您尝试微调特定声音时,它会产生更差的结果,这可能是由于合成声音缺乏多样性,并且在分词时映射到相同的令牌集(即导致代码簿利用率低)。

我们在长度为 8192 的序列上训练 3b 模型,我们使用相同的数据集格式进行 TTS 微调的预训练。我们将输入_ids 序列连接起来以提高训练效率。所需的文本数据集格式如本问题#37 所述。

如果您要进行扩展训练此模型,即用于其他语言或风格,我们建议仅从微调开始(没有文本数据集)。文本数据集背后的主要思想在博客文章中有讨论。(总结;不要忘记太多语义/推理能力,这样它才能更好地理解如何发音/表达短语,然而大部分的遗忘会在训练初期发生,即<100000 行),除非您进行非常扩展的微调,否则可能不会有太大的影响。