语音助手念天气预报、有声书主播读小说、用 3 秒录音克隆自己的声音念任意文字——都是 TTS(文字转语音),但难点各不相同:助手要快(话音刚落就得出声),主播要稳(十分钟不跑调、不跳字),克隆要像(音色、语气都对上),而「用一句话描述就调出一个新音色」要的是可控。
这几个目标常常互相拉扯。Qwen3-TTS(2026 年 1 月,Apache 2.0 开源)的答卷是一套组合拳:双轨 LM 的主干,配两个各有取舍的语音 tokenizer,再加指令式的音色控制。这篇拆开讲清楚它怎么工作,以及在一众 TTS 里站在哪。
这也是本站多模态系列里「语音生成」的正式展开——之前 Thinker-Talker 讲过 Omni 模型怎么「边想边说」,离散 vs 连续 讲过声音要先变成离散 token 才能被 LM 生成。这篇把 TTS 本身讲透。
一、把文字变成声音,分两步
今天主流的 TTS 都不是一步到位,而是两段:
- 文字 → 语音 token:一个模型读文字,吐出一串离散的「语音 token」(可以理解成声音的拼音);
- 语音 token → 波形:一个解码器(声码器)把这些 token 还原成能播放的声波。
为什么中间要绕一道语音 token?因为直接生成十几 kHz 的原始波形,序列太长、模型扛不住;先压成每秒几十个离散 token,LM 才好建模。这正是 离散 vs 连续 那篇的主题在语音上的落地:声音先离散化,才能被自回归模型「一个接一个」地生成。
二、TTS 的两条大路:LM 派 vs 扩散派
「文字 → 语音 token」这一步,业界分成两大流派——
- 自回归 LM 派:把语音切成离散 token,像语言模型写字一样一个一个往外蹦。代表有 VALL-E、字节的 Seed-TTS、阿里的 CosyVoice,以及本文的 Qwen3-TTS。好处是自然、能「看几个例子就模仿」(in-context learning),坏处是慢(逐个吐)、偶尔不稳(长句跑偏)。
- 扩散 / flow-matching 派:不搞离散 token,直接并行「去噪」出连续的声学特征。代表有 F5-TTS、E2-TTS、Voicebox。好处是快(并行出声),坏处是容易跳字(尤其在噪声、跨语言时)。
眼熟吗?这就是 离散 vs 连续 里那条分野在 TTS 领域的翻版:LM 派走离散(能采样、能 in-context),扩散派走连续(并行快)。Qwen3-TTS 选了 LM 派——但它得正面 LM 派天生的「慢、首包延迟高」问题,第四节会看到它怎么用两个 tokenizer 破局。
三、双轨 LM:一个主干,边读字边吐声
Qwen3-TTS 的主干是一个双轨自回归 LM:文本 token 和声学 token 两条流沿「通道轴」拼在一起,喂给同一个 LM。文字一进来,模型立刻开始预测对应的声学 token——读一点、吐一点,天然流式。
这里有个和 Thinker-Talker 的精妙对比。Omni 模型里,「大脑」Thinker 和「嘴」Talker 是两个模块——因为 Omni 要先理解多模态输入(图像、视频、语音),那是 Thinker 的活,Talker 只管把想法念出来。而 Qwen3-TTS 是纯 TTS:输入就是文字,不需要那个理解多模态的大脑,于是一个主干双轨就够,更简洁。不是谁更好,是任务不同——要理解世界就得有 Thinker,只把文字念出来则单主干更省。
四、两个 tokenizer,两种取舍
这是 Qwen3-TTS 最有意思的设计:它不做一个「全能」语音 tokenizer,而是做了两个,各为一种场景。
- Qwen-TTS-Tokenizer-25Hz:单码本(码本大小 32768),每秒 25 帧,编码器站在 Qwen2-Audio 上、把语义和声学线索揉进同一串 token,波形重建用「分块 flow-matching + DiT」(扩散那套)。它需要一点前瞻上下文,首包约 140–150ms(0.6B / 1.7B)。强项是自然度和长文本稳定——念十分钟有声书不跑偏。
- Qwen-TTS-Tokenizer-12Hz:多码本(16 层 RVQ),每秒 12.5 帧,第一层码本管语义(由 WavLM 蒸馏引导),其余 15 层管声学细节,解码器是一个轻量因果 ConvNet(不用扩散)。它做到 97ms 首包(0.6B 模型)、超低延迟。强项是实时——语音助手、实时对话。
一张表看清取舍:
| 25Hz 单码本 | 12Hz 多码本 | |
|---|---|---|
| 码本 | 单码本 | 16 层 RVQ |
| 帧率 | 25 Hz | 12.5 Hz |
| 解码器 | 分块 flow-matching + DiT | 轻量因果 ConvNet |
| 首包延迟 | ~150ms(1.7B) | 97ms(0.6B) |
| 强项 | 自然度、长文本稳定 | 超低延迟、实时 |
| 典型场景 | 有声书、配音 | 语音助手、实时对话 |
两个细节值得停一下。12.5 Hz 正是 离散 vs 连续 里说的「语音 token 的共识心跳」——Mimi、GLM-4-Voice、Qwen3-Omni 的 AuT 都落在这附近。而 12Hz 那套「多码本第一层管语义、残差层管声学 + 轻量 ConvNet 解码」,和 Qwen3-Omni 的 Code2Wav 是同一门手艺。
为什么不只做一个「全能」tokenizer?因为没有免费午餐:低帧率、多码本、卷积解码换来了低延迟,但长文本的极致自然度还得靠 25Hz + 扩散解码。与其做一个处处妥协的,不如给两个场景各配一把趁手的刀。
五、怎么让它说出你要的声音
光会念还不够,Qwen3-TTS 在「控制音色」上给了两条路:
- 3 秒克隆:给一段 3 秒参考音频,两种用法——抽一个「说话人向量」做实时克隆(快),或把「文本+音频对」当上下文喂进去(in-context,更好地保住原音的韵律)。一个可学习的说话人编码器和主干一起训练,负责在整段输出里锁住音色不漂移。
- 一句话描述音色(Voice Design):把控制信号用自然语言写在输入前面(ChatML 格式),「把声音控制当成语言建模任务」。你写「一个低沉沙哑、语速偏慢的中年男声」,它就造一个给你——甚至能凭空造出训练集里没有的新音色。
这条「描述控制」的路子,本质上是把 LM 的老本行(in-context learning、指令跟随)搬到语音生成上——既然主干就是个 LM,那让它听懂「用什么声音说」和听懂「说什么」是一回事。
六、怎么训出来的
前面拆的都是「长什么样」,这节讲「怎么练成的」。Qwen3-TTS 的训练分三块,顺序也大致如此:先把两个 tokenizer 各自训好(学会把声音压成 token、再还原回波形),再训中间那个双轨 LM 主干(学会「看着文字吐 token」)。全程喂进去的语音数据有 5M+ 小时、横跨 10 种语言。
先训 tokenizer:学会压缩与还原
两个 tokenizer 的训法完全不同,正对应它们不同的取舍:
- 25Hz 站在 Qwen2-Audio 肩上,分两步:先在语音识别(ASR)任务上继续预训练,给编码器加一个重采样层和一个向量量化(VQ)层,让 token 先抓住语义;再接一个卷积 mel 解码器,拿「从 token 重建 mel 频谱」当目标微调整个模型,把声学细节补回 token。两步合起来,一个 token 里既有语义又有声学。流式出声的那个分块 DiT 解码器则用 flow-matching 单独训练,配一个改版 BigVGAN 声码器。
- 12Hz 走的是 GAN 那套:生成器直接在原始波形上提取并量化,一个判别器盯着输出、逼它更自然更保真。这里的关键是语义和声学解耦——拿 WavLM 当老师,蒸馏引导第 1 层码本去对齐语义,其余 15 层 RVQ 专管声学;再加一个多尺度 mel 重建损失保住时频一致。整条编解码全因果、不看未来,所以能逐帧流式。
再训主干:预训练三段 + 后训练三段
主干不是从零练的——它直接拿 Qwen3 LM 家族的权重(0.6B / 1.7B)当底子。这也解释了第五节那个「为什么它天生听得懂指令」:读文字、跟指令本来就是 Qwen3 的老本行,TTS 只是教它把「读到的」变成「说出的」。
先看预训练,分三步走,一步比一步精:
- 通用:5M+ 小时多语种语音先过一遍,建立「多语种文字 → 语音」的单调对齐——先学会照着字把音发对;
- 高质量:用一套质量分层流水线筛出干净数据,继续预训练(CPT)——把发音打磨得更自然;
- 长上下文:把最大长度从 8,192 拉到 32,768,并上采样长语音——这正是它念十分钟有声书不跑偏的底气(下一节的长文本 benchmark 会印证)。
再看后训练,也是三步,而这三步恰好是隔壁那篇强化学习博客的实战落地:
- DPO:基于人类反馈构造「哪条更好」的偏好对,做 Direct Preference Optimization 对齐——不训裁判,直接从成对偏好里学;
- 规则奖励 + GSPO:对能自动判定的东西(读错字、漏字之类)给规则化奖励,配 GSPO 把奖励单位对齐到整句,全面提升能力与稳定性;
- 说话人微调:在 base 模型上做一轮轻量说话人微调,让它能稳定发出指定音色(CustomVoice 那 9 个预置嗓音就是这么来的)。
这条 DPO → GSPO 的路线,正是 PPO、DPO、GRPO 与 GSPO 那篇讲的东西搬到语音上:先用 DPO 掀桌省掉裁判,再上 GSPO 把「一整句好不好」的分对齐到句子级。原来「教模型分辨哪个回答更好」这套,语音生成一样吃。
最后是指令控制怎么训进去:控制信号以自然语言指令的形式、按 ChatML 前置到输入序列,把「用什么声音说」和「说什么」写进同一段对话;训练时还以一定概率激活一个「先想再合成」的思考模式,专门啃复杂描述下的指令跟随。这样一来,音色控制就被当成一道语言建模题来学——这也正是它复用 Qwen3 文本理解能力的地方。
不过有一点技术报告没有展开:这些「描述 → 声音」的配对数据究竟怎么来的——人工标注、属性标签套模板、还是用模型自动生成描述——文中并未交代,只讲清了上面的训练机制;而评测用的 InstructTTSEval 也只是打分基准,不是训练数据来源。(读这类报告常有的留白:能力和机制说得清楚,数据配方往往一笔带过。)
另外,12Hz 那条线还额外挂了个 MTP(多 token 预测)模块——主干先吐第 0 层码本,MTP 一次性补出剩下的残差码本,这是它能逐帧即时出声的关键。
七、和别人比,站在哪
Qwen3-TTS 不是每项都第一,但整体很能打(数据来自技术报告):
- 零样本克隆(Seed-TTS 测试集,WER 越低越好):Qwen3-TTS-12Hz-1.7B 中文 0.77、英文 1.24;CosyVoice 3 中文 0.71(略胜)、英文 1.45;MiniMax-Speech 中文 0.83、英文 1.65。中文 CosyVoice 3 略优,英文 Qwen3-TTS 明显领先。
- 多语言音色相似度(10 种语言):10 种语言全部拿到最高分,稳定超过 MiniMax 和 ElevenLabs。
- 可控生成(InstructTTSEval,描述—语音一致性):Voice Design 中文 85.2%,逼近商业闭源的 Gemini-flash(88.2%),远超 GPT-4o-mini-tts(54.9%)。
- 跨语言(中文音色说韩语):错误率 4.82,比 CosyVoice 3 的 14.4 降了约 66%。
- 长文本稳定(10 分钟以上):25Hz-1.7B 中文 WER 1.517、英文 1.225,而有的模型在长文本上会退化到二十几。
一句话:中文单点克隆略输 CosyVoice 3,但在更难的维度上——多语言、可控、跨语言、长文本稳定——Qwen3-TTS 是当前开源里的第一梯队,可控性甚至逼近商业闭源。
八、写在最后
回头看,TTS 那几个互相拉扯的目标,Qwen3-TTS 是这么各个击破的:
- 快 → 12Hz 多码本 + ConvNet 解码,97ms 首包;
- 稳 → 25Hz + 扩散解码,长文本不跑偏;
- 像 → 3 秒克隆 + 说话人编码器锁音色;
- 可控 → LM 主干 + 自然语言描述,把「怎么说」也当语言建模。
这四样又都建在同一套训练之上:两个 tokenizer 各自练好,双轨主干从 Qwen3 权重起步,经「通用 → 高质量 → 长上下文」三段预训练打底,再用 DPO → GSPO 的后训练把「哪条更好」教给它——后训练这一段,正是 PPO、DPO、GRPO 与 GSPO 那篇的语音续集。
而它最值得记住的一课,还是那句老话——没有一种表示能同时满足所有目标,于是干脆给不同场景各配一个。两个 tokenizer 的分工,和 离散 vs 连续 里「理解用连续、生成用离散」、TMRoPE 里「不同任务给时间不同的坐标系」,是同一种工程品味的不同侧面。
至此,多模态系列的「语音」这条线就齐了:Thinker-Talker 讲它怎么决定「边想边说」,离散 vs 连续 讲声音怎么变成可生成的 token,这篇讲一个专门的 TTS 系统怎么把这些手艺打磨到又快又稳又像又可控。
参考
- Qwen3-TTS Technical Report(arXiv:2601.15621,双轨 LM、两个 tokenizer、三段预训练 + DPO/GSPO 后训练、指令控制与全部 benchmark 数据来源)
- Qwen3-TTS 代码与模型(GitHub)(发布的 6 个模型、用法与推理)
- Qwen3-TTS 模型与 tokenizer(Hugging Face)(0.6B / 1.7B,Apache 2.0)
- F5-TTS: A Fairytaler that Fakes Fluent and Faithful Speech with Flow Matching(arXiv:2410.06885,扩散 / flow-matching 派代表)
- VALL-E: Neural Codec Language Models are Zero-Shot TTS(arXiv:2301.02111,自回归 LM 派开山)