上一篇语音 tokenizer 结尾的地图上,右下角有个显眼的名字:MOSS-Audio-Tokenizer——12.5Hz、32 层 RVQ、16 亿参数、纯 Transformer。当时只给了它一句话的定位:「低帧率 + 大模型换质量」。这篇把它单独拎出来讲透。
材料来自 OpenMOSS(MOSI.AI)2026 年 2 月的技术报告《MOSS-Audio-Tokenizer: Scaling Audio Tokenizers for Future Audio Foundation Models》(arXiv:2602.10934),以及官方开源的代码仓库和模型权重——论文正文没细说的结构超参,我们直接翻它发布的 config.json 补上。
一句话概括这篇论文的立场:别再给 tokenizer 打补丁了,把它当成大模型来训。 过去的音频 tokenizer 靠「巧」——外挂预训练编码器、请自监督模型当语义老师、精心设计 CNN 结构;MOSS 认为该靠「力」——同构的纯 Transformer 架构、从零开始、端到端联合优化、300 万小时数据,剩下的交给 scaling。
一、三条捷径,和它们共同的天花板
先复述一下问题。上一篇讲过,音频 tokenizer 有个根本矛盾:token 既要保真(听起来像,音色韵律都在),又要有语义(和文本对得齐,语言模型才好学)。要「既能听又能懂」,业界走出了三条捷径:
- 语义蒸馏:训练时让第一层码本去对齐 HuBERT/WavLM 这类自监督模型的特征——SpeechTokenizer、Mimi、Qwen3-TTS-Tokenizer 都是这一路;
- 预训练模型打底:干脆拿现成的 SSL 或 ASR 编码器当 tokenizer 的编码器,再往上插量化器——XCodec2.0、Higgs-Audio-Tokenizer、DualCodec 是代表;
- 音频-文本多任务监督:不请老师,用大规模「音频-转写」配对数据直接教 token 认字——Baichuan Audio Tokenizer、XY-Tokenizer、MiMo-Audio-Tokenizer 走的这条。
论文对前两条的批评很直接:外挂和蒸馏都会引入额外依赖与架构约束,让模型、数据、量化容量没法一起 scale——你的语义上限被老师锁死,你的编码器结构被别人的预训练决定。第三条方向对了(MOSS 自己就属于这一派),但论文认为它们还没做绝:架构仍是 CNN 与 Transformer 的混合体,训练也常常分阶段、非端到端。
论文第 1 张表把主流 tokenizer 摆在一起对照,每一家都至少缺一角(摘录自原文 Table 1):
| tokenizer | 帧率 | 架构(编 / 解) | 流式 | 语义 | 音效 / 音乐 | 免预训练编码器 | 端到端联合 |
|---|---|---|---|---|---|---|---|
| EnCodec | 75Hz | CNN / CNN | ✅ | ❌ | ✅ / ✅ | ✅ | ✅ |
| SpeechTokenizer | 50Hz | CNN / CNN | ❌ | ✅ | ❌ / ❌ | ❌ | ❌ |
| Mimi | 12.5Hz | 混合 / 混合 | ✅ | ✅ | ✅ / ❌ | ❌ | ❌ |
| XY-Tokenizer | 12.5Hz | 混合 / 混合 | ❌ | ✅ | ❌ / ❌ | ❌ | ❌ |
| MiMo-Audio-Tokenizer | 25Hz | 混合 / 混合 | ❌ | ✅ | ✅ / ✅ | ✅ | ❌ |
| Qwen3-TTS-Tokenizer | 12.5Hz | 混合 / 混合 | ✅ | ✅ | 未报告 | ❌ | ❌ |
| MOSS-Audio-Tokenizer | 12.5Hz | Transformer / Transformer | ✅ | ✅ | ✅ / ✅ | ✅ | ✅ |
规律很清楚:会听的不懂,懂的靠外援,靠外援的没法端到端。 论文由此提出四条设计原则——一个面向「音频基础模型」的 tokenizer 应该:
- 统一表示:一套 token 同时覆盖语音、音效、音乐,既存声学细节又带语义结构;
- 简单可扩展:架构同构、少特殊组件,参数和数据才能一起往上堆;
- 严格因果:每个 token 只看过去不看未来,和自回归生成天然对齐,也保证低延迟;
- 低帧率 + 码率鲁棒:帧率低让下游序列短,同一个模型还要在很宽的码率区间都能用。
这四条的出处,论文说得很坦白:从 LLM 的成功里抄作业——简单高效的架构加大规模数据,胜过精巧的先验设计。
二、CAT:一台纯 Transformer 的 codec
答卷叫 CAT(Causal Audio Tokenizer with Transformer,因果音频 Transformer 分词器)。它最扎眼的特征是 CNN-free:自 SoundStream 以来,神经 codec 的编码器几乎清一色是卷积或卷积混合结构,CAT 把这层「祖传先验」整个拆掉,编码器、解码器全部由因果 Transformer 块堆成,直接吃原始波形、直接吐原始波形,中间连 mel 谱都不过。
问题来了:24kHz 的波形每秒 24000 个采样点,Transformer 的注意力是平方复杂度,直接算不动。CAT 的办法是 patchify——和 ViT 把图像切成 16×16 的 patch 一模一样:把相邻的采样点打包成一个向量,当作一个「词」。而且不是一次打包到位,而是逐级下采样:在 Transformer 块之间插入 patchify 操作,每过一级,序列砍半、通道翻倍。
论文正文只说到这里,具体数字得翻官方 config.json。编码器一共四级:
| 级 | 输入帧率 | 该级 Transformer | 之后的 patchify |
|---|---|---|---|
| 0 | 24000 采样/秒 | —(先打包) | ×240 → 100Hz |
| 1 | 100Hz | 12 层,d=768 | ×2 → 50Hz |
| 2 | 50Hz | 12 层,d=768 | ×2 → 25Hz |
| 3 | 25Hz | 12 层,d=768 | ×2 → 12.5Hz |
| 4 | 12.5Hz | 32 层,d=1280 | → 量化器 |
总下采样率 240×2×2×2 = 1920,24000 ÷ 1920 = 12.5Hz,一帧正好 80 毫秒。注意算力的排布:帧率每砍一半,模型就加大一号——三级 12 层 d=768 的「小」栈在高帧率段做粗加工,压到 12.5Hz 之后才上 32 层、d=1280 的主力大栈。最贵的注意力花在最短的序列上,这是纯 Transformer 方案能算得动的关键。解码器完全镜像:先过同样的 32 层大栈,再逐级 ×2 上采样回 24000 点波形。全程因果注意力 + RoPE 位置编码,官方实现的注意力上下文为 10 秒,流式编解码的最小分块恰好是一帧(1920 个采样点,80ms)。
编码器出口接的是老朋友 RVQ(残差向量量化),规格拉满:32 层量化器,每层码本 1024 条目(10 比特),量化在 512 维的低维空间进行,查表更是压到 8 维——上一篇讲过的 DAC 因子化技巧,码本利用率高,还能直接用梯度学码本、不需要 EMA。训练时开 quantizer dropout(随机只保留前几层),于是一个模型天然支持可变码率。用上一篇的比特率公式一算就对上了:
比特率 = 帧率 × 码本数 × log₂(码本大小)
= 12.5 × N × 10 = 125N bps,N ∈ {1, …, 32}
→ 从 0.125kbps(1 层)到 4kbps(32 层),一层 125bps,随用随取
官方仓库里那行「只用前 8 层解码」的示例代码,就是这么来的——model.decode(enc.audio_codes[:8]),1kbps 的重建当场可取。
三、训练:六项损失一锅端
架构说完,重头戏是训练。CAT 的编码器、量化器、解码器、判别器、外加一个语义 LLM,全部部件在一条流水线里联合优化,没有预训练、没有蒸馏、没有分阶段。
语义从哪来?不蒸馏,用文本任务逼出来。 这是 CAT 训练配方里最有意思的一味药:在量化器输出上挂一个 0.5B 参数的 decoder-only LLM,把量化后的音频表示当前缀喂给它,让它自回归地预测文本——任务包括 ASR(语音转写)、多说话人 ASR 和音频字幕(audio captioning),每条样本用一个固定的任务标签 T 开头。损失就是标准交叉熵:
L_sem = − Σₜ log p_LLM( sₜ | T, q, s_<t )
s = 目标文本序列,q = 量化后的音频表示,T = 任务标签
梯度从 LLM 一路穿过量化器流回编码器:token 要是不带语义,LLM 就转写不出来,损失就下不去。语义不是从某个老师那里「蒸」来的,是被文本任务硬「逼」出来的——没有老师,也就没有老师的天花板,语义质量随数据和算力一起涨。
量化器的两条经典损失。 承诺损失把编码器往码本上拉,码本损失把码本往编码器上拉(sg 是 stop-gradient,上一篇讲 VQ 时展开过这对搭档):
L_cmt = Σ_c ‖ z_c − sg(q_c(z_c)) ‖² ← 管住编码器,别乱跑
L_code = Σ_c ‖ sg(z_c) − q_c(z_c) ‖² ← 更新码本,追上编码器
声学保真:多尺度 mel 损失。 重建波形和原始波形各算 7 个尺度的 mel 谱(STFT 窗口从 2⁵ 到 2¹¹,hop 为窗口的 1/4),逐尺度取 L1 距离求和——小窗口抓瞬态、大窗口抓音色,各个时间粒度都不放过:
L_rec = Σ (i=5…11) ‖ Sᵢ(x) − Sᵢ(x̂) ‖₁ Sᵢ = 窗口 2^i 的 mel 谱
对抗训练补最后一口气。 mel 损失管「数值像」,判别器管「听感真」:多个判别器对真假波形打分,配上对抗损失和特征匹配损失,架构与训练目标沿用 XY-Tokenizer 的方案。
最后全部加权求和,一锅端:
L_G = λ_sem·L_sem + λ_rec·L_rec + λ_cmt·L_cmt + λ_code·L_code + λ_adv·L_adv + λ_feat·L_feat
在这套配方上,MOSS-Audio-Tokenizer 用了 16 亿参数(编码器 + 解码器合计)、300 万小时混合语音/音效/音乐数据从零训练。为什么敢把所有东西放一锅里炖、而不是像前人那样分阶段各自为政?这个问题论文用实验回答了,放在第六节——那是全文真正的题眼。
四、重建:一个模型吃遍所有码率
先看作为 codec 的本职成绩。评测按码率分三档(低 750–1500、中 1500–2500、高 2500–6000 bps),语音在 LibriSpeech test-clean(英)和 AISHELL-2(中)上测 SIM(说话人相似度)、STOI(可懂度)、PESQ(感知质量),音效和音乐分别在 AudioSet 和 MUSDB 上测谱距离。摘录关键几行(完整表见原文 Table 2):
| 模型 | 码率 | 帧率 | 码本数 | SIM ↑(英/中) | PESQ-WB ↑(英/中) |
|---|---|---|---|---|---|
| XCodec2.0 | 800 | 50Hz | 1 | 0.82 / 0.74 | 2.43 / 1.96 |
| XY-Tokenizer | 1000 | 12.5Hz | 8 | 0.85 / 0.79 | 2.50 / 2.12 |
| Mimi | 1100 | 12.5Hz | 8 | 0.74 / 0.59 | 2.25 / 1.78 |
| MOSS(8 层) | 1000 | 12.5Hz | 8 | 0.88 / 0.81 | 2.87 / 2.43 |
| Qwen3-TTS-Tokenizer | 2200 | 12.5Hz | 16 | 0.95 / 0.88 | 3.19 / 2.62 |
| MiMo-Audio-Tokenizer | 2250 | 25Hz | 12 | 0.89 / 0.83 | 3.05 / 2.71 |
| MOSS(16 层) | 2000 | 12.5Hz | 16 | 0.95 / 0.89 | 3.41 / 2.96 |
| Mimi | 4400 | 12.5Hz | 32 | 0.94 / 0.83 | 3.43 / 2.78 |
| DAC | 6000 | 75Hz | 8 | 0.89 / 0.84 | 3.41 / 3.20 |
| MOSS(32 层) | 4000 | 12.5Hz | 32 | 0.97 / 0.93 | 3.69 / 3.30 |
注意读法:表里所有 MOSS 行是同一个模型,只是解码时用的 RVQ 层数不同;对手们则各是各的模型。同架构的 Mimi 全开 32 层(4.4kbps)的成绩,MOSS 用 16 层(2kbps)就全面超过;论文首页那张「SIM–码率」曲线图上,MOSS 的曲线在整个 0–4kbps 区间压着所有开源 codec 走。语音之外也得说句公道话:音效/音乐上 MOSS 是「有竞争力」而非全面第一——比如 DAC 在 6kbps 下的 Mel 距离(0.65)仍略优于 MOSS 4kbps(0.68),MiMo 在中档也有强项;论文自己的口径也是语音 SOTA、通用音频 competitive。
五、CAT-TTS:第一个打赢非自回归的纯自回归 TTS
tokenizer 好不好,最终要看下游。论文用 CAT 的 token 训了一个纯自回归 TTS,顺手拿下一个「第一次」:纯离散自回归系统首次超过此前的非自回归(NAR)与级联方案。
主干是上一篇讲过的「主干 + 深度小模型」方案(Moshi 同款):Temporal Transformer 沿时间轴走,从 Qwen3-1.7B 初始化;Depth Transformer 只有 4 层、随机初始化,在每个时间步内部沿「深度」方向把 32 层 RVQ token 逐层补全。每个 token 只依赖之前的时间步和本时间步更浅的层,严格因果。训练数据约 20 万小时(开源的 VoxBox 加内部数据),在 Seed-TTS-Eval 上评测。
真正的新东西是训练策略 Progressive Sequence Dropout(渐进序列丢弃):tokenizer 侧的 quantizer dropout 让解码器适应了「层数不满」的输入,但生成模型如果训练时永远看全 32 层、推理时却只给它生成 8 层的预算,训练和推理就对不上了。解法是让 TTS 在训练时也「见过世面」:
z ~ Bernoulli(p) # 这条样本要不要截断
K ~ Uniform{1, …, 31} # 截到第几层
K̂ = (1−z)·32 + z·K # 实际保留的层数(不触发就全保留)
ẽₜ = Σ (k=1…K̂) Emb_k(q_{t,k}) # 输入 embedding 只叠加前 K̂ 层
L = − Σₜ Σ (k=1…K̂) log p( q_{t,k} | 文本, q_{<t}, q_{t,<k} ) # loss 同样只算前 K̂ 层
不改一行架构、不加一个参数,只动训练时的数据形态。推理时想要什么码率,就让 Depth Transformer 只生成 K_infer 层,再交给 CAT 解码器还原——解码器早就被 quantizer dropout 练出了「层数不满照样还原」的本事,两边严丝合缝。消融实验很干脆:不开 dropout(p=0)的模型在低码率下相似度和错词率一起崩;开了之后(p=0.25/0.5/1.0)各档码率全稳,而且 p 取多少影响不大——于是干脆取 p=1.0,每条样本都截断,还能省不少训练显存。
Seed-TTS-Eval 上的成绩(摘录自原文 Table 3,WER/CER 为错词/错字率、越低越好,SIM 为说话人相似度、越高越好):
| 系统 | 范式 | 码率可控 | 英 WER ↓ | 英 SIM ↑ | 中 CER ↓ | 中 SIM ↑ |
|---|---|---|---|---|---|---|
| CosyVoice3-1.5B | 级联 | ❌ | 2.22 | 72.0 | 1.12 | 78.1 |
| GLM-TTS | 级联 | ❌ | 1.91 | 68.1 | 0.89 | 76.4 |
| F5-TTS | NAR | ❌ | 2.00 | 67.0 | 1.53 | 76.0 |
| VoxCPM | 连续 AR | ❌ | 1.85 | 72.9 | 0.93 | 77.2 |
| SparkTTS | 离散 AR | ❌ | 1.98 | 58.4 | 1.20 | 67.2 |
| HiggsAudio-v2 | 离散 AR | ❌ | 2.44 | 67.7 | 1.50 | 74.0 |
| CAT-TTS | 离散 AR | ✅ | 1.89 | 73.1 | 1.23 | 78.5 |
读这张表要分两条线:错词率这条线上,头部系统全都压在 2% 以下,CAT-TTS(1.89/1.23)在第一梯队但不是唯一——GLM-TTS 的中文 CER(0.89)就更低;真正拉开差距的是说话人相似度:中英双语 SIM 都是开源对比里最高,把此前离散 AR 阵营的老大难(SparkTTS 只有 58.4)直接抬到了超过级联和 NAR 的水平。这正是论文想证明的事:过去纯自回归 TTS 音色不像,怪的不是自回归,是 token 不行。 另外它也是表里唯一能在推理时指定合成码率的系统。
理解侧也顺手测了一笔:CAT 的 token 直接喂给 LLM 做 ASR,不用另配音频编码器,成绩与「专用编码器 + LLM」的方案持平或更好(细节在论文附录)。
六、三组 scaling 实验:论文真正想说的话
如果只看前五节,MOSS-Audio-Tokenizer 是「又一个更强的 codec」。第六节这三组实验才是论文的题眼——它想证明的不是某个技巧,而是一个命题:tokenizer 也服从 scaling law,但前提是你得把它做成能 scale 的样子。
实验一:端到端是 scaling 的入场券。 前人常用的「部分优化」协议——冻结编码器和量化器,只训解码器和判别器——和 CAT 的全端到端对照。结果:部分优化早早进入平台期,端到端则在所有指标上持续爬升、不见饱和。冻住的部件会锁死表示的上限,这正是「预训练打底」那条捷径 scale 不动的实验注脚。
实验二:参数和码率必须一起拧。 把模型从 319M 一路加到 1169M(隐层 256→768,量化器固定 32 层):参数越大整体越好,但有个反直觉的细节——低码率下,大模型可能打不过跑在高码率上的小模型。码率给的比特不够时,参数再多也没处使;反过来小模型在高码率下也吃不满预算。
论文的结论是一句值得记住的话:参数规模与量化深度从根本上是共生的(fundamentally co-dependent),单独 scale 任何一个都会撞上另一个的瓶颈。
实验三:算力直接换保真度。 固定训练步数,把全局 batch size 从基准的 1 倍加到 256 倍(2⁰→2⁸):任何一个训练时刻,batch 更大的曲线都严格更高,而且到 25 万步仍在上扬、没有饱和迹象。数据吞吐加多少,重建质量就涨多少——可预测,这正是当年 LLM scaling law 给人的那种底气。
三组实验合起来,就是标题里那句「Scaling Audio Tokenizers」的完整论证:端到端让 scale 成为可能(实验一),参数与量化容量要协同着 scale(实验二),scale 的回报稳定可预测(实验三)。
七、放回地图
回到上一篇那张地图,现在可以把 MOSS-Audio-Tokenizer 的完整答卷填上了。面对语音 tokenizer 的三大老问题,它的回答分别是:
- 语义 vs 声学? 不选边、不请老师——挂一个 LLM 用转写任务把语义「逼」进 token,声学交给多尺度 mel 和判别器,端到端一起炼;
- 多码本 vs 自回归 LM? 帧率压到 12.5Hz 把序列缩到文字级,32 层码本的「账」用 Depth Transformer 还,再用 Progressive Sequence Dropout 让一个生成模型通吃所有码率;
- 架构怎么选? 把神经 codec 祖传的 CNN 先验整个拆掉,换成可以无脑加大的因果 Transformer 金字塔——大算力压在低帧率的短序列上。
三个收束:
- 这篇论文的主角不是某个模型,是一条路线。 它论证的是 tokenizer 应该从「精巧的手工艺」变成「可 scale 的基础设施」:同构架构、端到端、数据算力堆上去,质量可预测地涨——tokenizer 界迟到的 GPT 时刻。
- 端到端不是洁癖,是前提。 部分优化早饱和、参数与码率互为瓶颈这两个实验说明:外挂预训练组件、分阶段训练这些「捷径」,恰恰是过去 tokenizer scale 不动的原因。
- token 好了,下游会自己证明。 纯自回归 TTS 的音色短板一直被归咎于「自回归不行」,CAT-TTS 用双语最高的说话人相似度给出了另一个答案:不是范式不行,是 token 不行。OpenMOSS 后续的 MOSS-TTS 全家桶、48kHz 立体声的 v2、20M 参数的 Nano,都建在这套 token 上。
从 Qwen3-TTS 的「给不同场景各配一把刀」,到这篇的「一把刀磨到能砍一切」,两条路线正面相遇——语音 token 这台造币厂接下来怎么造,值得接着看。
参考
- MOSS-Audio-Tokenizer: Scaling Audio Tokenizers for Future Audio Foundation Models(arXiv:2602.10934,本文主角)
- 官方代码仓库(OpenMOSS/MOSS-Audio-Tokenizer)(结构超参、流式接口与用法示例的出处)
- 官方模型权重(HuggingFace)(
config.json里有完整的金字塔与量化器配置) - 给声音造一张词表:深入浅出语音 tokenizer(本站前篇:VQ/RVQ、量化器 dropout、多码本与 LM 的恩怨,全是这篇的前置知识)
- Moshi(Temporal + Depth Transformer 的出处)(arXiv:2410.00037)
- High-Fidelity Audio Compression with Improved RVQGAN(DAC)(arXiv:2306.06546,因子化低维码本查表的来源)
- XY-Tokenizer(arXiv:2506.23325,CAT 判别器方案的直接来源,也是音文监督路线的近亲)
- Seed-TTS(arXiv:2406.02430,TTS 评测基准 Seed-TTS-Eval 的出处)