VoxCPM2 发布后,GitHub 一天涨了上千 star,社区讨论异常热烈。不是因为它是又一个 TTS 模型——市面上开源 TTS 已经不少,CosyVoice、SparkTTS、FishAudio S2 哪一个拉出来都能说话。真正让人好奇的是它的路线选择:Tokenizer-Free。
传统 TTS 的逻辑是这样的:先把文本转成音素序列或离散 Token,再用一个 vocoder 或者自回归模型把 Token 变成波形。这套路线从 Tacotron 时代延续至今,几乎所有主流方案——VALL-E、CosyVoice、FishAudio、XTTS——都是这个套路。
VoxCPM2 说:我不用 Tokenizer。
它直接在文本和连续语音表征之间建立端到端映射,借用扩散模型接管了"从离散到连续"这个步骤。这篇文不打算复述一遍 README,而是站在开发者角度,聊清楚三个问题:
- 为什么要去掉 Tokenizer?
- 它用什么东西替代了 Tokenizer?
- 少了 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/