CosyVoice:重新思考“语音 token”定义的模型
到 2024 年,包括 VALL-E 在内的大多数基于 LLM 的零样本 TTS 模型,都有一个共同的底层假设:将语音表示成以无监督方式学习到的 token,再让语言模型像预测文本一样预测这些 token。阿里巴巴 FunAudioLLM 团队审视了这一假设,并直接提出了挑战。CosyVoice 转而从多语言语音识别模型中构建其语音 token;由此带来的内容准确性和声音克隆保真度提升,让该模型受到关注,也奠定了后来 CosyVoice 2 和 3 所延续的架构基础。
什么是 CosyVoice?
CosyVoice 是由阿里巴巴语音 AI 研究团队 FunAudioLLM 开发的开源多语言零样本文本转语音模型。它以 3 亿参数规模发布,提出了一种可扩展、基于 LLM 的声音克隆方法:无需任何微调,就能从一段简短的参考片段复现说话人的声音——在其发布时,这种能力在开源 TTS 中仍相对新颖。
CosyVoice 支持五种语言——中文、英语、日语、粤语和韩语——并针对不同需求提供三个独立的 checkpoint:
- CosyVoice-300M——基础的零样本和跨语言模型,最适合从参考片段克隆任意声音。
- CosyVoice-300M-SFT——在一组固定的高质量声音上进行监督微调,以克隆灵活性换取已知声音库上更一致、可用于生产的输出。
- CosyVoice-300M-Instruct——通过自然语言指令增加对说话风格的控制,让你能借助描述性文本提示控制语速、情绪和方言,而不只依赖参考音频片段。
核心创新:受监督语义 token
这正是解释 CosyVoice 为何能呈现当前表现的关键细节,值得理解,而不是略过。
早期基于 LLM 的 TTS 系统使用以无监督方式提取的 token 表示语音——本质上,模型学习将音频压缩为离散单元,但不会被告知这些单元在语言学上代表什么。CosyVoice 的研究团队采取了另一种做法:他们从多语言语音识别模型的内部表示中导出语音 token,并在其编码器中插入向量量化步骤。由于源模型经过训练以理解语音内容,生成的 token 带有无监督 token 不具备的明确语义和文本对齐。
团队公开评估确认了这种做法带来的两项实际收益:与 VALL-E 等无监督 token 方法相比,内容一致性显著更好(生成语音能更可靠地说出文本实际写的内容),零样本克隆中的说话人相似度也更高。在与同期、规模相近的 ChatTTS 进行正面对比时,CosyVoice 的插入和删除错误也明显更少——尤其避免了“说话人泄漏”问题,即另一位说话人声音的片段会渗入生成输出。
从架构上看,生成分两步进行:自回归语言模型将文本转换为这些语义 token,条件流匹配模型再将 token 转换为 mel 频谱图,最后由声码器将其渲染为最终波形。
开始使用 CosyVoice
- 连同子模块一起克隆。 CosyVoice 将 Matcha-TTS 项目作为 git 子模块依赖,因此请使用
git clone --recursive https://github.com/FunAudioLLM/CosyVoice.git——普通 clone 会缺少所需组件。 - 配置环境并安装依赖。 创建专用 Python 环境(推荐 Conda),并运行
pip install -r requirements.txt;若在中国境内安装,使用阿里巴巴的 PyPI 镜像会明显更快。 - 为任务选择正确的 checkpoint。 零样本或跨语言克隆请选择
CosyVoice-300M;固定的高质量声音库已足够时选择CosyVoice-300M-SFT;需要自然语言风格控制时选择CosyVoice-300M-Instruct。 - 可选安装文本前端资源。
CosyVoice-ttsfrd包会改善文本规范化(数字、日期、缩写);如果输入文本尚未是干净的口语形式,值得添加。 - 集成前先启动 WebUI 测试。 运行
python3 webui.py --port 50000 --model_dir pretrained_models/CosyVoice-300M会打开一个 Gradio 界面,你可以上传参考片段并输入目标文本,直接测试声音克隆。
获得更好结果的技巧
- 让 checkpoint 匹配任务,而不是反过来。 强行让 SFT 模型做任意声音克隆,或让基础模型承担固定高质量旁白,都会违背各 checkpoint 实际调校的目标——应先根据使用场景选择 checkpoint。
- 当风格比某个特定克隆声音更重要时,使用 Instruct 模型。 如果优先目标是控制呈现方式——节奏、情绪、口音——而不是复现某一位具体人物的声音,
CosyVoice-300M-Instruct的自然语言风格提示会比试图从仅克隆模型中诱导风格更直接。 - 提供干净、录制良好的参考片段。 CosyVoice 的受监督 token 对真实语音内容很敏感,因此有噪声或低质量的参考音频会比纯声学 token 方法更明显地降低克隆准确度。
- 对数字和日期使用 ttsfrd 包预处理文本。 含有数字、缩写或日期的原始文本,适合先使用可选文本规范化前端处理,而不是直接原样传给模型。
- 将 CosyVoice 1.0 视为非流式基线。 如果项目特别需要低延迟流式生成,这项能力是在 CosyVoice 2 中引入的;原始版本更适合无需受整句延迟约束的离线生成。
CosyVoice 的定位
| CosyVoice(2024) | VALL-E 风格模型 | ChatTTS | |
|---|---|---|---|
| 语音 token 类型 | 受监督(来自 ASR 模型) | 无监督(如 Encodec) | 无监督 |
| 内容一致性 | 强,具有语义 token 优势 | 容易发生内容漂移 | CER 相当,但插入/删除错误更多 |
| 说话人泄漏 | 未观察到 | 可能发生 | 在评估中出现更频繁 |
| 参数量 | 3 亿 | 各不相同 | 规模相近 |
| 风格控制 | Instruct 变体(自然语言提示) | 有限 | 有限 |
| 流式 | 不支持(CosyVoice 2 引入) | 各不相同 | 并非重点 |
CosyVoice 的贡献不在于规模——即使按 2024 年的标准,3 亿参数也不算大——而在于证明了语音 token 的表示方式与模型大小同样重要。正是这一架构判断,构成了后续 CosyVoice 2 和 CosyVoice 3 继续构建的基础。
常见问题
CosyVoice 是谁开发的?
CosyVoice 由阿里巴巴集团内部的语音 AI 研究团队 FunAudioLLM 开发,并作为 GitHub 上的开源项目发布。
CosyVoice 的语音 token 与其他 TTS 模型有什么不同?
CosyVoice 从多语言语音识别模型中导出 token,而不是以无监督方式学习 token,从而让 token 与文本具有明确的语义对齐;与无监督 token 方法相比,这提高了内容准确度和说话人相似度。
我应该使用哪个 CosyVoice checkpoint?
零样本或跨语言声音克隆请选择基础模型 CosyVoice-300M;需要一组预调校的固定高质量声音时选择 CosyVoice-300M-SFT;如果需要使用自然语言控制说话风格,则选择 CosyVoice-300M-Instruct。
CosyVoice 支持流式生成吗?
不支持,至少原始版本不支持。CosyVoice 2 在这个模型 token 架构的基础上,通过面向分块的设计引入了流式合成,从而实现更低延迟的输出。
CosyVoice 可以免费商用吗?
可以。CosyVoice 的代码和模型权重已在 GitHub 和 Hugging Face 上公开,可用于本地部署和进一步开发。
体验类似的声音克隆功能
CosyVoice 可通过其开源实现和社区工具使用。如果你想在浏览器中体验声音克隆,可以试试声音克隆这一类似功能。它不是 CosyVoice,也不运行 CosyVoice 模型,但无需在本地配置模型,即可测试类似的声音克隆流程。
请只克隆你拥有或已获得明确授权的声音。