VoxCPM2 深度拆解:Tokenizer-Free TTS 为什么是语音合成的新方向

阅读时长:14分钟

VoxCPM2 发布后,GitHub 一天涨了上千 star,社区讨论异常热烈。不是因为它是又一个 TTS 模型——市面上开源 TTS 已经不少,CosyVoice、SparkTTS、FishAudio S2 哪一个拉出来都能说话。真正让人好奇的是它的路线选择:Tokenizer-Free。

传统 TTS 的逻辑是这样的:先把文本转成音素序列或离散 Token,再用一个 vocoder 或者自回归模型把 Token 变成波形。这套路线从 Tacotron 时代延续至今,几乎所有主流方案——VALL-E、CosyVoice、FishAudio、XTTS——都是这个套路。

VoxCPM2 说:我不用 Tokenizer。

它直接在文本和连续语音表征之间建立端到端映射,借用扩散模型接管了"从离散到连续"这个步骤。这篇文不打算复述一遍 README,而是站在开发者角度,聊清楚三个问题:

  1. 为什么要去掉 Tokenizer?
  2. 它用什么东西替代了 Tokenizer?
  3. 少了 Tokenizer 之后,效果是更好还是更差?

Tokenizer-Free 到底解放了什么?

理解 Tokenizer-Free 的价值,得先知道传统 TTS 的 Tokenizer 在干什么。

一个典型的 TTS 管线是这样的:

文本 → 前端(G2P / 音素转换) → 音素/Token 序列 → 声学模型 → 波形

每一步都是损失点:

1. 信息损失。 “你吃饭了吗"这个句子,经过 G2P 转成音素时,语气、节奏、情感全部丢失。模型拿到的是一串"ni3 chi1 fan4 le ma5”(或与之等价的一维 ID 序列),要从这样一个降采样过的输入还原出有情感的声音,本质上是"猜"——大语言模型猜文本的下一个 token 好歹还有上下文,TTS 猜情感近乎盲猜。

2. 语言扩展成本。 每加一种新语言,就要为该语言准备完整的音素集(Phone Set)和发音词典。中文拼音大约 400+ 个音节,英语音素有 44 个,日语假名…韩语谚文…阿拉伯语辅音…如果你要支持 30 种语言,音素集的管理和维护就是一个巨型工程。VoxCPM2 宣称支持 30 种语言 + 9 种中文方言,靠传统方法光音素集规划就要半年。

3. 端到端训练被 Tokenizer 割裂。 文本到语音这个任务本质上是连续的。但 Tokenizer 硬生生在中间插了一个离散化过程,把"理解文本"和"生成声音"拆成了两件事。模型的前半段学语言结构,后半段学声学特征,两部分的信息流被 Tokenizer 切断了。

VoxCPM2 的回答很直接:不要 Tokenizer,让模型直接在文本和连续语音之间学习映射。

怎么不用 Tokenizer?四阶段架构拆开看

没有 Tokenizer,VoxCPM2 靠的是四个阶段的串行处理,底层基于 MiniCPM-4 架构。

第一阶段:LocEnc(Location Encoder)—— 位置编码

输入文本通过一个双向编码器(Bi-Encoder)生成语义表示。这一步和普通 LLM 的 embedding 层类似,但输出不是 token-level 的离散 ID,而是连续向量。关键区别在这里:传统 TTS 的 embedding 查表输出固定维度向量,VoxCPM 的 LocEnc 输出的是位置敏感的上下文表示——比如"我好开心"里的"我"和"开心",编码器已经根据位置关系建立了"主语-情绪"的联系。

第二阶段:TSLM(Text Semantic Language Model)—— 文本语义语言模型

这是整个架构的"大脑"。TSLM 是一个自回归语言模型,输入语义表示,输出初步的语音特征。但它输出的不是 Token,而是连续潜变量序列。训练目标是最大化在给定语义下连续特征的对数似然。这一步替代了传统 TTS 中"声学模型 + vocoder"组合。

第三阶段:RALM(Refinement Autoregressive Language Model)—— 精炼自回归语言模型

RALM 吃 TSLM 的输出,做精细化的时序矫正。为什么要多这一层?因为 TSLM 输出的潜变量在局部时间尺度上可能有抖动——比如"一个单词"的时长会忽快忽慢。RALM 用自回归的方式在时间轴上做平滑,保证每个音节的时长和节奏符合自然语音习惯。

第四阶段:LocDiT(Location Diffusion Transformer)—— 扩散 Transformer

最后一步,RALM 的精炼特征进入 LocDiT——一个基于 AudioVAE V2 潜空间的扩散 Transformer。扩散模型负责把特征"渲染"成 48kHz 的连续波形,中间不需要任何固定长度的窗口压缩(这也是输出能到 48kHz 的原因之一)。

四阶段流水线可以理解为一个"理解 → 规划 → 精修 → 渲染"的经典工业级流程,只不过每个环节都是可学习的神经网络。

对比实战:VoxCPM2 和其他开源 TTS 差在哪

单看架构图可能不够直观,数据上的对比更清楚。以 Seed-TTS-eval 的英文零样本测试为例:

模型 参数规模 开源 CER/WER ↓ 语音相似度 SIM ↑
VoxCPM2 2B ✅ 1.84% 75.3%
CosyVoice3 (1.5B) 1.5B ❌ 2.22% 72.0%
Seed-TTS — ❌ 2.25% 76.2%
FishAudio S2 4B ✅ 0.99% —
FireRedTTS-2 1.5B ✅ 1.95% 66.5%
Qwen3-Omni 30B-A3B ✅ 1.39% —

VoxCPM2 的 WER(词错误率)1.84%,在开源方案里排名不差,但并非冠军。语音相似度 75.3% 则很亮眼——在开闭源混合榜上排第三,仅次于 Seed-TTS 的 76.2% 和 MegaTTS3 的 77.1%。注意这两个冠军都是闭源的。

CV3-eval 多语言测试更能反映真实差距:

语言 CosyVoice3-1.5B FishAudio S2 VoxCPM2
中文 CER% ↓ 3.91 2.65 3.65
英文 WER% ↓ 4.99 2.43 5.00
日文 CER% ↓ 7.57 3.96 5.96
韩文 CER% ↓ 5.69 2.76 5.69
德语 WER% ↓ 6.43 2.22 4.77
西班牙语 WER% ↓ 4.47 2.00 3.80
法语 WER% ↓ 11.8 6.26 9.85
意大利语 WER% ↓ 10.5 2.04 4.25
俄语 WER% ↓ 6.64 2.78 5.21

一句话总结:在多语言场景下 VoxCPM2 稳定把 CosyVoice3(一款同年代的闭源商业模型)压在身下,对 FishAudio S2(一款 4B 参数、纯开源的 SOTA 模型)在部分语言上有竞争力,但整体略逊一筹。

换到 MiniMax 多语言测试,看语音相似度:

语言 Minimax ElevenLabs VoxCPM2
阿拉伯语 73.6 70.6 79.1
粤语 77.8 67.0 83.5
中文 78.0 67.7 82.5
英语 75.6 61.3 85.4
日语 77.6 73.8 82.8
泰语 80.0 58.8 84.0

VoxCPM2 在 MiniMax 测试的 24 种语言中 22 种语音相似度最高。ElevenLabs 是商业 TTS 标杆,MiniMax 是国内顶尖闭源模型——在这项测试上,VoxCPM2 几乎是全面碾压。

这背后是 Tokenizer-Free 的优势:没有语言专用模块的自然泛化能力。传统方案每加一种语言就要训练新的音素到声学特征的映射,VoxCPM2 直接在文本语义空间中操作,对新语言的兼容性天然好。这也是为什么它在低资源语言(如泰语 84.0% vs ElevenLabs 58.8%)上表现格外突出。

三大新功能:不只是"说的更自然"

VoxCPM2 不是增量迭代——V1 到 V2 的跨越在于三项独家功能。

Voice Design:用自然语言"设计"声音

传统音色克隆需要参考音频。“给一段三秒钟的人声,模型模仿出来”。Voice Design 不需要参考音频。你用自然语言描述一个声音,模型直接生成:

from voxcpm import VoxCPM
model = VoxCPM.from_pretrained("openbmb/VoxCPM2", load_denoiser=False)

# 用文字描述声音风格
text = "(A calm, middle-aged male voice with a slight British accent, speaking slowly and clearly) Hello, welcome to the conference."
wav = model.tts(text)

描述可以细化到"音色、语速、口音、情绪、场景"等多个维度。实测下来,对"年轻女性、活泼"和"中年男性、低沉"这类区别明显的描述生成质量极好,对"略带沙哑"这类精细化描述有时会偏差——但这是所有 TTS 的共性问题,不是 VoxCPM 独有的。

Controllable Voice Cloning:隔离"克隆"和"控制"

传统的声音克隆让你克隆之后什么都改不了——你克隆了一个人的声音,就只能用他/她的音色说话。

VoxCPM2 把这两件事拆开了。你上传参考音频克隆音色,但可以通过控制指令独立调整语速、情感、语气:

# 克隆音色 + 控制风格
result = model.clone_with_control(
    reference_audio="speaker.wav",
    text="(Fast and excited) We just launched a new product!",
    speed=1.3,
    emotion="excited"
)

这意味着你可以拿一条平淡的参考录音,生成一个"快速且兴奋"的版本——音色还是那个人,但情感符合场景需求。这个功能在实际的内容生产场景中价值极高:比如有声书录制一条样本,直接用控制参数生成不同情绪段落,不需要每一句都重新录制参考音频。

Ultimate Cloning:极致级克隆

加上了参考音频的精确文本转录(ASR 结果),通过音频续接(continuation-based)策略实现"每一个音色细节都被复刻"的克隆效果。

这块的技术细节是 VoxCPM 从 V1 继承下来的——它的扩散模型对参考音频中的声纹细节(气声、齿音、喉音的微颗粒)极为敏感,加上文本对齐后,相似度可以做到接近"同一个人读同一句话"的级别。

部署不是拦路虎

2B 参数模型,单精度 FP16 加载约 8GB VRAM 就能跑。在 RTX 4090 上标准 PyTorch 推理 RTF 约 0.3(每秒生成 3.3 秒语音)。

如果想做线上服务,官方提供了两条部署路径:

Nano-vLLM:把 RTF 从 0.3 降到 0.13,并支持并发请求。

pip install nanovllm-voxcpm
nanovllm serve openbmb/VoxCPM2 --port 8080

vLLM-Omni:vLLM 官方多模态扩展,自带 PagedAttention 和连续批处理。兼容 OpenAI 的 /v1/audio/speech 接口:

from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="not-needed")
response = client.audio.speech.create(
    model="openbmb/VoxCPM2",
    voice="default",
    input="Hello, this is a test of VoxCPM2 running on vLLM-Omni."
)
# 流式播放
for chunk in response:
    audio_stream.write(chunk)

这对现有架构的侵入性很小——任何集成过 OpenAI TTS API 的服务,只需要换 base_url 就能切到 VoxCPM2。

不适合的场景(话说在前)

Tokenizer-Free 也不是万能药。

  • 实时对话场景。RTF 0.13 对批处理来说很快,但对延迟敏感的实时对话系统来说,0.13 的时间膨胀相当于每生成 10 秒语音有 1.3 秒的计算延迟。如果你需要亚毫秒级的语音响应,传统的 Tacotron2 + WaveGlow(RTF 能做到 0.01 以下)仍然是更合适的选择。
  • 中文方言。虽然官方宣称支持 9 种方言(四川话、粤语、吴语等),实测部分方言声调还原不够稳定。这是多语言模型的通病——参数预算有限,语言之间互相挤压。解决方向是 LoRA 微调,但需要额外数据。
  • 极端边缘设备。8GB VRAM 的门槛把很多推理场景挡在了门外。不过社区已经有了 VoxCPM.cpp(CPU + Vulkan 推理)和 VoxCPMANE(Apple Neural Engine 后端),覆盖了更多硬件。

“Token 语言"正在被"连续语言"取代

VoxCPM2 的 Tokenizer-Free 路线在 TTS 领域可能是一个转折点。它的意义不仅是"又一个效果不错的开源 TTS”,而是验证了一条新的技术路径——在语音生成领域,离散 Token 可能不是必需的。

传统 TTS 的研发逻辑是"先拆碎再拼装":文本拆成音素,语音拆成帧,中间件匹配两者。VoxCPM2 的逻辑是"端到端学习":让模型自己在连续空间里建立文本到语音的映射,不人为插入信息瓶颈。

效果不会骗人——MiniMax 测试 24 种语言 22 种相似度最高,开源 TTS 能做到这个水平的,截至目前只此一家。

如果你在做 TTS 相关项目或者在选型语音生成方案,VoxCPM2 值得花半天时间跑一跑。pip install 之后跑一轮 demo,听几个不同语言的生成效果,比看一百篇分析都有说服力。


项目地址:https://github.com/OpenBMB/VoxCPM 模型权重(HuggingFace):https://huggingface.co/openbmb/VoxCPM2 在线 Demo:https://huggingface.co/spaces/OpenBMB/VoxCPM-Demo 许可证:Apache 2.0 官方文档:https://voxcpm.readthedocs.io/en/latest/

© 2026 softon.top

本站已稳定运行 307 天 9 小时 · 147 篇文章

使用 Hugo 构建 主题 Stack 由 Jimmy 设计 由 softon 魔改

最近构建时间:2026-11-04 17:21:05 CST