1 引言

5 月开源的 ChatTTS,最近文章十篇里有五篇以上都在讨论它。很多新的 TTS 模型也用它来做比较。感觉没用过 ChatTTS 都不敢评测其他的。

目前,ChatTTS 支持英文和中文。在 arxiv 上没找到相关论文,所以本文主要评测使用感受。

(下文仅代表个人观点)

2 主要资源

  • Github:  https://github.com/2noise/ChatTTS,目前 27.4K Star
  • HuggingFace: https://huggingface.co/2Noise/ChatTTS

3 使用方法

3.1 安装

为了避免影响现有环境,我在 Docker 镜像中进行安装,选择了 PyTorch 官方提供的镜像。由于软件依赖于 PyTorch 2.1.0,版本要求较高,所以我下载了重新的 Docker 镜像。

1
2
3
4
5
6
7
8
$ git clone https://github.com/2noise/ChatTTS.git
$ docker pull pytorch/pytorch:2.1.0-cuda11.8-cudnn8-runtime
$ nvidia-docker run --name chattts --network host --rm -v /exports:/exports -it pytorch/pytorch:2.1.0-cuda11.8-cudnn8-runtime bash
> apt-get update
> apt-get install gcc
> cd /exports/git/ChatTTS/
> pip install -r requirements.txt
> python examples/web/webui.py

在浏览器 8080 端口打开界面:http://ip:8080/

  • 制作完成的镜像大小为 9.77G。
  • 运行时下载约 860M 的 GPT 模型。
  • 在我的旧机器 (1080ti) 上,合成 60 个字需要 12 秒,速度约为 5 字/秒。
  • 使用 nvidia-smi 看资源占用,合成过程中 GPU 显存大约增加了 2G。
  • 虽然有时后台会出现错误信息,但前台仍能正常进行合成。

3.2 界面参数

  • refine_text:将文本转换成更口语化的形式。程序调用时,可以细化设置口语化程度、笑声频率和停顿次数。
  • top_P:控制模型在生成下一个词时考虑的词汇范围。如果设置为 0.7,模型将只考虑前 30% 的词汇。调大这个值有助于生成更多样化的文本。
  • top_K:限制生成词汇的数量,即模型在生成下一个词时只考虑概率最高的 K 个词汇。
  • Audio Temperature:控制生成文本时的随机性。设得过高,声音会严重变形。
  • Timbre:生成不同的 Seed 以选择音色。

3.3 运行过程

  • refine_text 转换文本
  • infer_code 生成语音编码
  • dvae/decoder 将语音编码转换成声学特征
  • vocos 将声学特征转换成音频

3.4 问题与解决

  • 太旧的 gpu 不能直接用,github issue 中有对应的报错及解决方法,请参见:
    • https://github.com/2noise/ChatTTS/issues/235

3.5 源码分析

  • 整体由 Python 实现,基于 Pytorch 模型,Python 代码约 3000 行左右。
  • 核心代码主要是:模型部分 gpt.py 和推理部分 core.py。
  • 我没有找到 train 和 fine-tune 部分的代码。
  • 更多原理解析请见参考部分。

3.6 使用示例

整个使用过程中,我个人觉得比较惊喜的是它对文本的理解能力、情感感受能力以及生成文本的自然度,示例如下:

  • 输入:笑不活了!美团这些神评价也太搞笑了,我要笑死在评论区!
  • refine 处理后文本:笑 不 活 了 。 然 后 [uv_break] 美 团 这 些 神 [uv_break] 评 价 也 太 [uv_break] 搞 笑 了 , 我 要 笑 死 在 评 论 区 [laugh] 。
  • 听起来最后一句都带着笑意,真的很传神。我个人认为这方面明显优于 GPT_SoVits。

4 用后感

4.1 优势

  • 将语义融入了声音生成
  • 提供多种声音选择,每种 seed 相对稳定,不需要 fine-tune,对非专业用户非常友好
  • 模型大小和生成速度都在可接受范围内
  • 界面和接口简单易用,学习成本低
  • 工具链设计完善,几乎是一键安装,不需要手动下载模型
  • README 内容恰到好处,满足多数用户的好奇心或直接使用需求

4.2 不足

  • 音色随机,虽然可以复用 seed,但需要逐个试验。不同 Seed 的声音效果参差不齐,可控性差。
  • 整体人声表现一般,多是普通话的平均水平,试了几个都不惊艳。
  • 初始版本不能生成超过 30 秒的音频。
  • 不能定制声音(后来的阿里模型在这方面更好一些)。

4.3 总结

  • ChatTTS 在情绪的可控性显著提升,但对说话人的控制相对较弱。

5 官方说明

官方说明引自 GitHub 项目的 README。为了确保知识的完整性,来看看官方是怎么说的。

5.1 亮点

  1. 对话式 TTS: ChatTTS 专为对话任务优化,能够生成自然且富有表现力的合成语音。它支持多个说话者,便于生成互动式对话。
  2. 精细控制: 该模型可以预测和控制精细的韵律特征,包括笑声、停顿和插入语。
  3. 更好的韵律: ChatTTS 在韵律方面超越了大多数开源 TTS 模型。我们提供预训练模型以支持进一步的研究和开发。

5.2 数据集和模型

  • 主模型使用了超过 100k 小时的中文和英文音频数据进行训练。
  • HuggingFace 上的开源版本是在 40k 小时数据上进行无监督微调的预训练模型。

6 不同音色打分

https://modelscope.cn/studios/ttwwwaa/ChatTTS_Speaker/summary

7 参考

介绍文档比较同质化,下面列几个我认为比较实用的: