没有分词器也能说话?OpenBMB 开源 VoxCPM,无 tokenizer 的多语种 TTS 做到 48kHz 录音棚级
开头:你的 TTS 为什么不「像人」?
你有没有过这种体验:把一段中文丢进主流 TTS 服务,出来的声音字正腔圆,但总缺那么一口气 —— 读到「他轻轻地叹了口气」时,机器没有叹气;读到「这事儿,真让人头疼」时,机器也没有那种「啧」的无奈。一句话,技术上「对」,情感上「空」。
这背后有个长期被忽视的工程问题:传统 TTS 几乎都要先做「分词(tokenization)」—— 把连续的语音波形切成离散的语音 token,然后让语言模型去预测这些 token,再用声码器(vocoder)把 token 还原成波形。这个过程叫「离散化」。它方便模型训练,但代价是:语音里最细腻的那些东西 —— 气息、颤抖、笑场、犹豫 —— 被一刀刀切碎了。
所以当 OpenBMB(面壁智能)前几天在 GitHub 放出 VoxCPM 的 2.0 大版本(VoxCPM2),并且当天就冲上了 GitHub Trending Python 榜时,整个语音社区都愣了一下 —— 它直接把分词器干掉了。
项目背景:解决「分词丢掉情感」的问题
VoxCPM(GitHub stars 29.8k+,今日新增 400+)是面壁智能在 MiniCPM-4 系列上推出的 tokenizer-free(无分词器)TTS 系统。它用一个端到端的 扩散 - 自回归混合架构,直接在连续的语音潜在空间(latent space)里生成声音,跳过离散化这一步。
VoxCPM2 是最新主版本:
- 2B 参数主干,训练数据 超 200 万小时多语种语音
- 支持 30 种语言 + 9 种中文方言(粤语、四川话、东北话、吴语、河南话、陕西话、山东话、天津话、闽南话)
- 输出 48kHz 录音棚级音频
- Apache-2.0 协议,可商用
和上一代(VoxCPM-0.5B、VoxCPM1.5)相比,2.0 的核心升级是 Voice Design(声音设计) 和 Controllable Cloning(可控克隆)—— 前者用自然语言描述就能造一个全新的声音,后者能在克隆音色基础上精细调控情感、语速、风格。
技术报告:arXiv:2606.06928。模型权重已在 HuggingFace 和 ModelScope 开源。
核心功能亮点
1. 无分词器架构,语音不再被「切片」
传统 TTS 的 pipeline:文本 → 音素 → 离散语音 token → 声码器 → 波形。离散化这步最伤音质 —— 为了把波形压成有限词表,模型必须丢弃很多高频细节。
VoxCPM 的做法:直接在一个 AudioVAE V2 的连续潜在空间里做扩散 + 自回归,整套流程是 LocEnc → TSLM → RALM → LocDiT 四阶段,全程不切词。结果是:保留气息、颤音、口头禅这些「人味儿」细节。
2. 30 种语言 + 9 种中文方言,自动识别无需打标签
text="Bonjour, comment ça va?" 直接喂进去就行,模型自动判断语种,不用预先指定 lang="fr"。
中文方言支持尤其贴心 ——text="今朝天气老好额,侬讲对伐?"(吴语)也能用。给做有声书、播客、本地化配音的团队省了一大笔方言数据采集的钱。
3. Voice Design:用文字「造」一个新声音
不需要参考音频,直接在文本里加一段自然语言描述:
1 | text = "(A young woman, gentle and sweet voice)Hello, welcome to VoxCPM2!" |
年龄、性别、情绪、语速 —— 文字描述什么声音就给什么声音。这对游戏 NPC、AI 客服、有声书角色这种「需要 100 个不同声音但又不想录 100 个人的」场景是杀手级功能。
4. Controllable Cloning:可调控的音色克隆
这是 VoxCPM2 才有的能力。给定一段参考音频(几秒就够),模型克隆出音色,但允许你叠加一层风格控制:
1 | text = "(slightly faster, cheerful tone)This is a cloned voice with style control." |
意思是:声音是「我」的,但情绪可以是「明天的我」的。可控性拉满,避免克隆出「冷冰冰的本人」。
5. Ultimate Cloning:极致相似度
需要更保真?同时传参考音频 + 参考音频的字幕,模型做音频续接式克隆,能保留每一个语气词、每一次停顿。配合 reference_wav_path 同传还能进一步提分。
6. 实时流式 + 高吞吐服务
- 标准 PyTorch 推理:RTF ~0.30(4090)
- 用 Nano-vLLM-VoxCPM:RTF ~0.13,支持并发 + FastAPI
- 用 vLLM-Omni:多租户 + PagedAttention + OpenAI 兼容的
/v1/audio/speech接口
也就是说,直接拿现成 vLLM 部署栈就能上线,不用自己写推理服务。
实战示例:5 分钟跑起来
安装
1 | pip install voxcpm |
要求:Python ≥ 3.10(<3.13)、PyTorch ≥ 2.5、CUDA ≥ 12.0。Apple Silicon Mac 会自动用 MPS(--device auto)。
基础 TTS
1 | from voxcpm import VoxCPM |
输出默认就是 48kHz。
用声音设计造一个「年轻女声」
1 | wav = model.generate( |
括号里的描述词可以是:年龄、性别、情绪、语速、口音、特殊效果(whispering、excited、calm)…… 全靠 prompt 工程。
给克隆的音色加情绪
1 | wav = model.generate( |
流式输出(适合实时对话)
1 | import numpy as np |
CLI 一行启动
1 | voxcpm --text "今天天气真好" --output out.wav --device cuda |
Apple Silicon Mac 用户把 --device cuda 改成 --device mps 就行。
适用场景和限制
适合用 VoxCPM 的场景
- 有声书 / 播客:30 语种 + 9 种中文方言,本地化成本极低
- 游戏 NPC / 互动剧情:Voice Design 一天造 50 个不重样的声音
- AI 数字人 / 智能客服:可控克隆 + 流式输出,实时对话自然
- 短视频 / 营销内容批量生产:一个主播音色 + 多种情绪,1 个工作流搞定
- 企业内训 / 教学课件:克隆讲师音色,多语种版本同步输出
当前限制
- 显存门槛:2B 版本要~8GB 显存,老黄卡或没独显的笔记本要量力而行
- 极端情感还在追赶:悲伤到颤抖、愤怒到哽咽这种「情绪爆点」仍然不如真人播音员
- 多说话人 / 长对话还没原生支持,需要切片处理
- 某些小语种质量差异较大:训练数据 200 万小时是平均值,部分小语种可能只有几小时数据
和同类项目的差异
| 项目 | 核心特点 | 局限 |
|---|---|---|
| VoxCPM2 | 无分词器、30 语种、Voice Design、Apache-2.0 | 显存需求中等、社区较新 |
| CosyVoice 2 | 阿里达摩院、流式优秀 | 商用授权有限制 |
| ChatTTS | 轻量、对中文友好 | 多语种支持弱、情感控制粗糙 |
| GPT-SoVITS | 少样本克隆强、开源 | 音质天花板不高、需要微调 |
| ElevenLabs | 商业 SOTA、API 友好 | 闭源、贵、隐私风险 |
简单说:VoxCPM 想做的事,是「开源 + 可商用 + 接近商业 SOTA」这个交集。在 2026 年这个时间点,它确实摸到了。
总结
VoxCPM 给我的最大启发是:「分词」这个在 LLM 里看起来天经地义的步骤,在 TTS 领域可能是错的。LLM 处理文字时,token 是语言的基本单元;但语音的本质是连续波形,强行离散化就是「用象素画油画」。
OpenBMB 这套无分词器方案的意义不止 TTS 本身 —— 它给所有「连续信号 + 大模型」的交叉领域(语音、音频、音乐、视频)提供了一个范式参考:与其把连续的东西变离散,不如让模型直接学连续。
如果你正在做需要 30 语种 + 自然情感的语音产品,VoxCPM2 值得花一个下午跑跑 demo;如果你还在用商业 TTS API,可以拿它做个降本对比测试 ——Apache-2.0 + 本地部署 + 8GB 显存,这个组合在 2026 年的 TTS 开源生态里,已经是头部水准。
仓库地址:https://github.com/OpenBMB/VoxCPM
HuggingFace 体验:https://huggingface.co/spaces/OpenBMB/VoxCPM-Demo
戴老板,这是 2026-06-17 上午 10:00 的 GitHub Trending 选题。VoxCPM2 在当日 Python 趋势榜热度高、协议友好、技术差异化明显,写起来内容也扎实。如果觉得方向 OK 就这样发,要换主题告诉我,我明天再换。