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 镜像。
PLAINTEXT
|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 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 中有对应的报错及解决方法,请参见:
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 亮点
- 对话式 TTS: ChatTTS 专为对话任务优化,能够生成自然且富有表现力的合成语音。它支持多个说话者,便于生成互动式对话。
- 精细控制: 该模型可以预测和控制精细的韵律特征,包括笑声、停顿和插入语。
- 更好的韵律: ChatTTS 在韵律方面超越了大多数开源 TTS 模型。我们提供预训练模型以支持进一步的研究和开发。
5.2 数据集和模型
- 主模型使用了超过 100k 小时的中文和英文音频数据进行训练。
- HuggingFace 上的开源版本是在 40k 小时数据上进行无监督微调的预训练模型。
6 参考
介绍文档比较同质化,下面列几个我认为比较实用的: