深度研究|dots.tts:2B 全连续自回归 TTS,把”离散 token”踢出流水线

深度研究|dots.tts:2B 全连续自回归 TTS,把"离散 token"踢出流水线 :root { --...

深度研究|dots.tts:2B 全连续自回归 TTS,把”离散 token”踢出流水线 :root { –text:#1a1a2e; –bg:#fafafa; –accent:#2563eb; –code-bg:#f1f5f9; –border:#e2e8f0; –muted:#64748b; –width:880px; –warn:#b45309; –good:#047857; } * { box-sizing:border-box; margin:0; padding:0; } body { font-family:-apple-system,BlinkMacSystemFont,’Segoe UI’,’Noto Sans SC’,sans-serif; line-height:1.85; color:var(–text); background:var(–bg); padding:2rem 1rem; } article { max-width:var(–width); margin:0 auto; } h1 { font-size:2rem; margin:1.5rem 0 1rem; border-bottom:3px solid var(–accent); padding-bottom:0.6rem; line-height:1.35; } h2 { font-size:1.45rem; margin:2.2rem 0 0.75rem; color:#1e3a8a; } h3 { font-size:1.12rem; margin:1.25rem 0 0.5rem; color:var(–accent); } p { margin:0.7rem 0; } a { color:var(–accent); text-decoration:none; } code { background:var(–code-bg); padding:0.15em 0.4em; border-radius:4px; font-size:0.88em; font-family:’SFMono-Regular’,Consolas,monospace; } pre { background:#1e1e1e; color:#d4d4d4; padding:1rem; border-radius:8px; overflow-x:auto; margin:1rem 0; font-size:0.86rem; } pre code { background:none; padding:0; } table { width:100%; border-collapse:collapse; margin:1.1rem 0; font-size:0.86rem; } th,td { padding:0.5rem 0.6rem; border:1px solid var(–border); text-align:left; vertical-align:top; } th { background:var(–code-bg); font-weight:600; } tr:nth-child(even) { background:#f7fafc; } blockquote { border-left:4px solid var(–accent); margin:1rem 0; padding:0.6rem 1rem; background:var(–code-bg); color:#334155; border-radius:0 4px 4px 0; } ul,ol { margin:0.5rem 0 0.5rem 1.5rem; } li { margin:0.25rem 0; } hr { border:none; border-top:1px solid var(–border); margin:1.6rem 0; } .callout { background:#eff6ff; border:1px solid #bfdbfe; border-radius:8px; padding:0.8rem 1rem; margin:1rem 0; } .warn { background:#fffbeb; border:1px solid #fde68a; border-radius:8px; padding:0.8rem 1rem; margin:1rem 0; color:#78350f; } .meta { font-size:0.85rem; color:var(–muted); } .tag { display:inline-block; background:var(–accent); color:#fff; border-radius:999px; padding:0.1rem 0.7rem; font-size:0.78rem; margin-right:0.3rem; } .stat { display:flex; flex-wrap:wrap; gap:0.8rem; margin:1rem 0; } .stat div { flex:1; min-width:120px; background:#fff; border:1px solid var(–border); border-radius:8px; padding:0.7rem 0.9rem; text-align:center; } .stat b { display:block; font-size:1.5rem; color:var(–accent); } .stat span { font-size:0.78rem; color:var(–muted); } footer { margin-top:2.5rem; padding-top:1rem; border-top:1px solid var(–border); font-size:0.82rem; color:var(–muted); }

深度研究|dots.tts:2B 全连续自回归 TTS,把”离散 token”踢出流水线

研究日期:2026-08-25 | 来源:github.com/studio-dots-ai/dots.tts | 团队:studio-dots-ai(Kai Yu 等 9 人)
论文:dots.tts Technical Report (arXiv 2606.07080)dots.tts.edit (arXiv 2608.02673)
写法:依「去 AI 味」之诀——长短句交错、口语落地、不堆套话,间以文白。数据均引自仓库 README 与两篇技术报告,数字逐字核对。

2B参数量
1267GitHub Stars
130Forks
Apache-2.0代码+权重许可
7已释检查点

一句话定性

dots.tts 是 studio-dots-ai 开源的 2B 参数「全连续、端到端自回归」语音合成模型——整条链路从音频编码到声学生成,全程连续潜变量,没有一个离散 token。它目前在 Seed-TTS-Eval、MiniMax 24 语言、CV3-Eval、EmergentTTS-Eval 多个基准上拿开源 SOTA,且把训练、推理、微调、蒸馏代码和权重一股脑 Apache-2.0 放出。

说白了:别人做 TTS 多半把声音”剁成”离散 token(乐高积木),用 LLM 一块块拼;dots.tts 让声音像水流一样连续生成,从源头上绕开了量化丢信息、码本坍塌那一套老毛病。


来路考:六月开源,实则厚积

  • 仓库生日:2026-06-04 创建,30 commits,27 个 open issues,体积 786 KB(Python 为主)。
  • 两篇技术报告:dots.tts Technical Report(arXiv 2606.07080,22 页,v1 2026-06-05 / v2 2026-08-10 修订);dots.tts.edit(arXiv 2608.02673,v1 2026-08-02 / v2 2026-08-11)。
  • 作者班底:Shi Lian、Changtao Li、Bohan Li、Hankun Wang、Da Zheng、Junfeng Tian、Yufeng Ma、Colin Zhang、Kai Yu 等 9 人——典型的语音研究实验室配置。
  • 基座借力:LLM 部分直接初始化自 Qwen2.5-1.5B-Base,站在大模型肩膀上。
行情速记:开源仅两月余,星标破千、fork 过百,在「开源 TTS 军备竞赛」里属第一梯队新锐。权重放开但训练语料未公开,复现门槛在数据与算力,不在代码。

它到底在解决什么:离散 token 的”断点”之痛

传统神经 TTS(VALL-E、CosyVoice、F5-TTS 等)的通用套路:把语音用声码器离散化成 token(如 EnCodec / SSC 码本),用 LLM 预测 token 序列,再解码回波形。这条路的硬伤有三:

  • 量化必有损——码本有限,语音细节在”剁碎”那一刻就丢了;
  • 码本坍塌——训练不充分时大量码字闲置,表达力打折;
  • 解耦式不稳定——LLM 预测 token 与最终声学细节被切开,长句易漂移、跑调。

dots.tts 的答案是全连续:把音频编码成 48 kHz 的连续潜变量,LLM 直接逐 patch(帧块)预测这个连续潜变量,再由 flow-matching 头去噪还原。整条流水线里,token 这个角色被彻底删去。


架构一览:三根柱子 + 一个声纹锚

冻结的 AudioVAE 把 48 kHz 单声道波形编码为连续潜变量,再用 BigVGAN 式因果解码器还原。自回归骨干逐 patch 预测该潜变量,由三件套构成:

组件角色要点
Semantic encoder语义编码器把刚生成的 VAE patch 再编码成紧凑 embedding 喂给 LLM,剥掉高方差声学细节,让 LLM 专注语义。
LLM主干语言模型Qwen2.5-1.5B-Base 初始化,直接吃 BPE 文本(无音素),每音频步吐一个隐状态。
AR flow-matching head声学去噪头一个 DiT,条件于 LLM 隐状态 + AR 前缀,去噪下一 VAE patch;冻结的 CAM++ 说话人 x-vector 作旁输入(声纹锚)。

两种序列布局:plain mode(文本作前缀,标准 TTS)与 double-streaming interleaved mode(调用方边推 BPE token 边在线出声,适配 LLM 增量输出)。

三大技术创新(论文自述)

  1. 多目标训练的 AudioVAE——构建一个”语义结构化、利于预测”的连续语音空间,而非单纯重建误差最小化。
  2. flow-matching 头用 full-history conditioning——保留长程一致性、抑制生成漂移(长句不跑偏的关键)。
  3. reward-free self-corrective post-training——无奖励模型的自纠错后训练,进一步提升鲁棒性与音质,且成本低、可复现。

检查点家族:七张脸,各司其职

七个检查点共用同一骨干,按任务与入口分用:

检查点(HF)入口用途关键设置
dots.tts-basedots.tts / DotsTtsRuntime预训练基线;微调底座NFE 10–32(默认 10);CFG 1.2
dots.tts-soardots.tts / DotsTtsRuntime最高说话人相似度;高质量克隆;微调NFE 10–32(默认 10);CFG 1.2
dots.tts-mfdots.tts / DotsTtsRuntime延迟/并发敏感场景NFE 4 推荐;CFG 已融合
dots.tts-mf-2stepsdots.tts / DotsTtsRuntime低延迟 TTS固定 NFE 2 sCM
dots.tts-mf-1stepdots.tts / DotsTtsRuntime极低延迟 TTS固定 NFE 1
dots.tts-mf-2steps-sttsDotsTtsRuntimeDoubleStreamingLLM 交互 / 双工对话双流固定两步 sCM
dots.tts.editdots.tts.edit / DotsTtsEditRuntime指令控制语音编辑NFE 10–32(默认 10);CFG 1.2
简记:base 打底、soar 求像、mf 系列求快、stts 求对话、edit 求改。固定步数(1/2-step)产物会拒绝不兼容的采样覆盖,保证训练—推理严格对齐。

性能战报:开源 SOTA 四连

① Seed-TTS-Eval(头条,零样本 ~3s 参考)

模型参数en WER↓/SIM↑zh WER↓/SIM↑zh-hard WER↓/SIM↑Avg WER↓/SIM↑
CosyVoice 31.5B2.22/72.01.12/78.15.83/75.83.06/75.3
F5-TTS0.3B2.00/67.01.53/76.08.67/71.34.10/71.4
Qwen3-TTS1.7B1.23/71.71.22/77.06.76/74.83.07/74.5
Seed-TTS2.25/76.21.12/79.67.59/77.63.65/77.8
VoxCPM 22B1.84/75.30.97/79.58.13/75.33.65/76.7
dots.tts (Pretrain)2B1.34/76.80.96/80.56.46/79.22.92/78.8
dots.tts (SOAR)2B1.30/77.10.94/81.06.60/79.52.95/79.2
dots.tts (MF, NFE=4)2B1.29/76.20.94/80.06.60/78.52.94/78.2
看点:SOAR 平均 SIM 79.2 居全表之首;中文 WER 0.94 与 VoxCPM2(0.97)同列最低一档。论文称其取得 Seed-TTS-Eval「平均最佳表现」。

② MiniMax 24 语言多语基准

100 句 × 2 参考说话人 / 语言。dots.tts (SOAR) 平均 SIM 83.9 为全场最高,且在 24 语言中有 19 项单项 SIM 夺魁、2 项打平。高资源/西欧语种内容保真与最强系统持平;长尾低资源语种 SIM 仍守住,但 WER 偏高(如阿拉伯语 WER 36+)。

③ CV3-Eval(硬核中英 + 跨语言克隆)

SOAR 拿下 hard-en 全场最优(MF₄ 4.37),并在两项跨语言 SIM 子集领先(SOAR 75.0 / 72.8)。

④ EmergentTTS-Eval(表现力,对打 gpt-4o-mini-tts)

由 Gemini-2.5-Pro 六场景盲评:SOAR 句法复杂度 65.7% 超过所有闭源系统;Pretrain 情感得分 72.7% 居开源之首。表现力维度是它的差异化强项。


效率与部署:能打也能扛

开启 --optimize(torch.compile)后的流式稳态表现(单 H800,bf16,SOAR num_steps=10 / MF num_steps=4):

配置音频均值(s)首包 p50/p90(ms)RTF 均值/p50/p90峰值显存(GB)
SOAR / voice_cloning7.57225/4040.21/0.20/0.267.86
SOAR / text_only7.7869/790.18/0.18/0.207.85
MF / voice_cloning7.46204/3810.16/0.15/0.215.74
MF / text_only7.6568/780.13/0.13/0.155.73
  • 论文报告首包延迟 85/54 ms(输出流式 / 双流模式,technical report 口径)。
  • SGLang Omni 高并发(1×H100):并发 16 → 4.76 req/s、19.86 audio_s/s、RTF 0.81;并发 32 → 4.99 req/s,零失败请求,WER≈1.3%。提供 OpenAI 兼容 /v1/audio/speech
  • 冷启动代价--optimize 首次编译约 3 分钟(H800),之后请求均跑稳态 RTF。

两个杀手锏:双流推理 & 语音编辑

双流推理(double-streaming)

DotsTtsRuntimeDoubleStreaming + push_text_token() 专为 LLM 增量出字、双工对话设计(对应 dots.tts-mf-2steps-stts)。类比:LLM 边想边说,不再等整句想完才出声——对话体 TTS 的刚需。

指令控制语音编辑(dots.tts.edit)

XML 式结构化指令精确圈定”改什么、改哪段”:

<del> 删除  <ins> 插入  <sub> 替换  <emo> 情感
四大控制轴:文本 / 情感 / 韵律(音高·语速)/ 停顿
无需时间戳对齐——语义时间线可审计、可组合

配套 doteBench 双语评测,衡量”指令遵循、局部保留、音质”三件事。跨 Seed-TTS-Eval 三个分片,编辑后模型与基座在零样本 WER/SIM 上差异可忽略——编辑不伤底子。


生态与社区

  • 社区端口:audio.cpp(C++)、dots-tts-mlx / mlx-swift-dots-tts(Apple Silicon)、Dots-TTS-ComfyUI(节点化)。
  • 服务化:SGLang Omni 提供 OpenAI 兼容接口;自带 Gradio Web Demo 与 Edit Playground(React 前端 + 测试覆盖)。
  • 在线体验:HF Spaces Playground、Edit Playground;Demo 页 studio-dots-ai.github.io/dots.tts-demo
  • 致谢基座:Qwen2.5、DiTAR、ARDiT、HoliTok、BigVGAN、CAM++。

风险与局限

  • 长尾语言短板:MiniMax 表可见阿拉伯、越南等低资源语种 WER 高、SIM 靠后, multilingual 长尾仍弱。
  • 克隆依赖参考音频:零样本克隆需 ~10s 参考且文本需对齐,参考不佳则克隆走样。
  • 声纹滥用风险:高保真克隆天然带 deepfake / 声纹伪造隐患,README 单列 Risks and Limitations。
  • 硬集仍有空间:中文硬集 WER 仍 6.6%(SOAR),长难句识别/生成待补。
  • 部署门槛:建议 PyTorch 2.8 + CUDA 12.8、SGLang Omni 等,2B 推理需 H 卡;--optimize 冷启动 3 分钟。

竞品定位:一图速览(以 Seed-TTS-Eval 平均 SIM 为轴)

模型参数路线Avg SIM↑备注
dots.tts SOAR2B全连续 AR79.2开源 SOTA 之 SIM 冠
dots.tts Pretrain2B全连续 AR78.8微调底座
Seed-TTS(闭源参考)77.8行业金线
VoxCPM 22B连续76.7同参数量级对手
Qwen3-TTS1.7B74.5大厂出品
CosyVoice 31.5B离散 token75.3主流 token 路线代表
F5-TTS0.3BFlow 非 AR71.4轻量代表

研判与建议(给步子哥的产品/面试视角)

dots.tts 的”全连续 + flow-matching + 无奖励自纠错后训练”组合,有几个值得记取的工程卖点:

  • full-history conditioning 抗漂移——长文本不跑调,是落地可靠性的关键;
  • reward-free 自纠错降后训练成本——不必养奖励模型,复现门槛低一截;
  • 双流适配对话——把 TTS 塞进 LLM 双工链路的水龙头已经拧开,对话 Agent 语音化直接受益;
  • 编辑能力结构化——<del>/<ins>/<sub>/<emo> 把”改声音”变成可审计的语义契约,比自然语言指令稳;
  • 高并发已验证——SGLang Omni 单卡 5 req/s、零失败,工程部署链路是通的。

需清醒:权重放开≠可白嫖复现,训练语料与算力仍是大山;2B 模型推理依赖 H 卡,端侧落地要靠 mf-1step / mlx 端口续命。总体而言,它是当前开源 TTS 里”连续路线”最完整、性能最硬、部署最像样的选手之一。

资料来源:GitHub 仓库 README(2026-08-17)、dots.tts Technical Report (arXiv:2606.07080 v2)、dots.tts.edit (arXiv:2608.02673 v2)、SGLang Omni Cookbook。性能数字均引自官方基准表,未作二次加工。| 本报告由 WorkBuddy 依「深度研究」场景生成,仅供研判参考。

一条评论

  1. SOAR —— 质量/相似度之王
    – 它是叠在 dots.tts-base 之上的后训练检查点(论文所谓「reward-free self-corrective post-training」,无奖励模型的自纠错后训练)。
    – 核心卖点:说话人相似度最高(Seed-TTS-Eval 平均 SIM 79.2 全场居首)、克隆音质最佳,故作高质量克隆与微调底座。
    – 取名 SOAR,仓库与论文皆未逐字拆解其字母含义,当作品牌代号即可;理解成「base 再精修一版」最贴切。

    MF —— 意思是 MeanFlow(均值流)
    – 它是从 SOAR 经 CFG-aware MeanFlow 蒸馏得到的低延迟学生模型(student)。
    – 蒸馏把多步去噪压成少步:衍生出 mf(NFE=4 推荐)、mf-2steps(固定 2 步 sCM)、mf-1step(固定 1 步)、mf-2steps-stts(双流对话版)。
    – 代价是 SIM 略逊 SOAR,但 RTF 骤降——流式 RTF p50 仅 0.13–0.15,首包延迟压到 68ms 级,专为高并发/对话场景而生。

    一句话对比轴

    | 维度 | SOAR | MF |
    |—|—|—|
    | 全称 | 后训练精修检查点(未解字母) | MeanFlow 蒸馏 |
    | 强项 | 音质、说话人相似度 | 低延迟、高吞吐 |
    | 用法 | 追求「像」 | 追求「快」 |
    | 典型 RTF(p50) | 0.18–0.20 | 0.13–0.15 |

    故文中但凡说「SOAR 居首」「MF 求快」,便是这条 质量 vs 速度 的取舍脉络。

发表回复

人生梦想 - 关注前沿的计算机技术 acejoy.com 🐾 步子哥の博客 🐾 背多分论坛 🐾 借一步网 🐾 智柴网 沪ICP备2024052574号-1