可能是目前最好的开源 text to speech 模型, 不同于以往机械生硬的 text to speech 模型, ChatTTS 专注于生成对话场景的语音, 生成的语音也会自然的出现停顿等模拟 conversation 的效果.
项目地址: https://github.com/2noise/ChatTTS
演示视频(强烈推荐): https://www.bilibili.com/video/BV1zn4y1o7iV
原理
ChatTTS 与最近很多新出现的 TTS 模型一样, 也是一个自回归模型了, 与 LLM 类似. 每个语音被以某种编码器转换成了 token, 整个模型可以端到端, 直接用语音数据和字幕数据训练, 保留了 speech 空间的更多可能性, 使得生成的语音非常的生动多变自然.
模型在处理时, 分为两个步骤:
RefineText : 为 text 加入 类似: oral_(0-9), laugh_(0-2), break_(0-7) 的模拟口头表达的控制词
InferCode: 生成 audio token
模型权重分为两个版本:
开源版本: 在 40000 小时语音上训练得来的预训练版本, 未经微调的
闭源版本: 计划是需要使用 API 访问
安全
这里之所以会出现闭源版本, 主要是出于安全(防滥用)考虑:
为了限制ChatTTS的使用,我们在训练这个40,000小时模型时,加入了一小部分高频噪音,并尽可能使用MP3格式压缩音频质量,以防止恶意行为者可能将其用于犯罪目的。同时,我们已经在内部训练了一个检测模型,并计划在未来开源。
目前 ChatTTS 的开源版本, 并不能选择音色, 而是以“抽卡”的形式进行的, 在 demo 代码里, 我们可以看到:
rand_spk = chat.sample_random_speaker()
这段代码的作用就是随机出一个 speaker embedding, 也就是一个人设声音的特征值. 记住这个特征值, 就可以在下一次的生成中, 使用该声音
限制
目前的模型稳定性一般, 就像 LLM 会有幻觉, ChatTTS 有时会自行理解 text 认为是有两个人在对话, 从而生成两个不同的人在对话的 Speech Audio, 想要理想效果, 也需要抽卡.
模型目前只支持 [laugh], [uv_break], and [lbreak] 三个 control token,
总结
目前 ChatTTS 无需 GPU, 可以使用 CPU 即可推理. 按照 Github 说明可以快速安装试用, 还不赶快试试抽一些可爱的音色出来陪你聊天吗?
-----------------------------------------------
最好在linux os或mac os下,使用该程序。因为在windows下,操作python终究是麻烦事。
No comments:
Post a Comment