
链接: https://arxiv.org/pdf/2512.19090
作者单位:JD SpeechTeam
发表时间:2025年12月22日
Demo地址:https://jea-speech.github.io/JoyVoice

01
-
架构分裂 :主流的两阶段模型(先让AR模型预测离散语音token,再用扩散/流匹配模型转声学特征)是分开训练的,中间的量化会丢信息,而且AR模型只关心“预测对不对”,不管后续声学重建好不好,容易出问题;单阶段模型虽然联合训练,但感受野小(抓不住长上下文),如果输入语音有噪音,还会传到LLM里导致合成不稳定。 -
场景局限 :现在大多只能做2人“你一言我一语”的对话,没法处理3个以上说话人的复杂场景;而且都是按“单句话”分割处理,长对话的韵律连贯性会断。 -
效率和鲁棒性 :有些tokenizer的序列太长,推理慢还容易“幻觉”;另外,传统TTS依赖专门的文本前端(处理标点、多音字这些),一旦遇到生僻字就拉胯。
02

-
AR模型用Qwen大模型初始化,它的隐藏状态会直接传给FM模型当输入,这样梯度能双向传递——AR不仅要学好预测token,还得考虑“FM能不能用好这些信息重建声学特征”,从根源上解决了“信息瓶颈”和“优化不一致”的问题。 -
好处很实在:不用依赖离散token里的少量说话人信息,能自动学说话人特征和语义的关联,所以不用提前标“谁什么时候说话”,就能生成1-8个说话人的长对话;而且联合训练让语音的可懂度更高,实验里WER比两阶段模型低不少。

-
基于Whisper-large-v3改造,加了FSQ量化(一种离散化方法)和CNN下采样,能做到12.5Hz的低码率(比常见的25Hz少一半),推理效率高。 -
用“多任务训练”:不仅学ASR(语音转文字),还学SER(情感识别)、AED(音频事件检测)这些,损失是“语义损失+声学重建损失”——既保证能理解语音的意思,又能还原声学细节,所以12.5Hz的性能和25Hz差不多,不会因为压缩丢太多信息。
-
把整个对话做成“连续序列”,输入包含3部分:说话人标签+嵌入(比如“Speaker1”和它的特征)、所有文本token、所有语音token,不用显式标“哪句是谁说的”。 -
靠Transformer的注意力机制,模型会自动把说话人、文本内容、语音特征对应起来,能抓住跨轮的韵律(比如上个人说完,下个人的语气衔接),长对话的连贯性直接拉满。
-
动态块流匹配 :为了支持“边生成边播放”的流式场景,把LLM的输出分成小块,用“因果掩码”保证当前块只看前面的内容;训练时随机块大小,推理时想调大调小都可以,适应不同延迟需求(比如实时通话要小 block,录播可以大block)。 -
不用文本前端 :传统TTS要专门处理多音字、生僻字,JoyVoice靠大规模数据增强(比如故意加各种文本错误、生僻字样本),再用Qwen初始化,直接“硬抗”复杂文本,不用额外的预处理模块,鲁棒性强。 -
课程学习 :先训单说话人短音频(最多1分钟),打好基础;再训长音频(最多5分钟)和多说话人数据,循序渐进,避免模型一开始就“学懵”。 -
声学强化学习(APO):针对语音token级优化——生成多个候选语音序列,选那些“转文字完全没错”(CER=0)的当“好样本”,有错的当“差样本”,用DPO(直接偏好优化)的思路训模型,减少发音错误和不自然的输出。
03
-
训练数据 :多语言(中、英、日、韩,中英语占90%以上),分两类: -
短音频(BaseData):30秒内的单说话人片段,用来打基础; -
长音频(LongData):30秒到5分钟,包含1-8个说话人,图4就是长音频的说话人分布——1个说话人占46.73%,越多说话人占比越少,4个以上只有0.21%不到,这也解释了后面4说话人任务稍差的原因。 -
模型对比 :除了JoyVoice(端到端),还做了个两阶段的基线(JoyVoice-Cascade),都用Qwen2.5-0.5B初始化AR模型,FM模型用3亿参数的DiT;注意,Cascade只训了单说话人数据,不支持多说话人。 -
优化设置 :AdamW优化器,暖身10000步,峰值学习率1e-4,其他参数都是常规操作。
先明确几个关键指标:
-
CER/WER: 字符/词错误率,越低说明语音转文字越准(内容一致性好); -
SS: 说话人相似度,越高说明模仿得越像; -
cpWER: 结合了说话人分割的WER,专门测多说话人场景——不仅要看内容对不对,还要看“谁的话有没有分到别人头上”。


-
25Hz下,MM-Tokenizer的端到端版(E2E)比传统的S³-Tokenizer好太多,比如中文测试集(test-zh)的CER只有0.97,SS 0.836; -
就算降到12.5Hz,E2E版依然能打——英文测试集(test-en)的WER 1.63,难例集(test-hard)的CER 6.07,比两阶段的Cascade稳多了,证明低码率没丢关键信息。

-
JoyVoice比自己的两阶段基线(JoyVoice-Cascade)好:test-zh的CER从1.13降到0.97(相对提升14.2%),test-hard从6.07降到5.55(提升8.6%); -
加了RL的版本(JoyVoice-CascadeRL)更猛:test-zh的CER直接干到0.73,是所有模型里最低的; -
流式版(JoyVoice-Streaming)也没拉胯:和基础版性能差不多,还提升了test-hard的SS(说话人相似度),说明“边生成边播”也能保质量; -
加speaker embedding(说话人嵌入)会让CER稍高一点,但SS明显提升——比如JoyVoice+llm spk embed的test-zh SS 0.838,模仿得更像了。

-
JoyVoice在所有场景下都是第一:比如2说话人中文的CER 1.44、cpCER 1.88,比VibeVoice-7B(1.60⁄7.57)好太多;2说话人英文的WER 3.36、cpWER 3.61,也是最优; -
唯一小遗憾:4说话人的cpWER比2、3说话人差(比如中文4spk的cpCER 13.34),主要是训练数据里4+说话人的样本太少(图4里占比不到1%),后续补数据就能改善。

-
JoyVoice在几乎所有任务上错误率都最低,比如2spk-zh的CER 1.44,比VibeVoice-7B的1.60、Mooncast的7.57都低;
-
有些模型不支持某些任务(比如多说话人),错误率直接标100,而JoyVoice全支持,且表现稳定。
-
数据少(比如不到1小时)的时候,LoRA更好,不容易过拟合; -
数据够的话,全参数微调效果稍好,但LoRA更省资源,实际用的时候可以按需选。
04
-
支持8说话人、5分钟长对话,是目前少有的能处理复杂多说话人场景的模型; -
端到端架构、MM-Tokenizer、无文本前端这些设计,兼顾了质量、效率和鲁棒性; -
在SEED-TTS-Eval和多说话人基准上都是SOTA,不管是内容一致性、说话人相似度,还是长对话的韵律连贯性,都比现有模型好。
-
4个以上说话人合成质量会下降:主要是训练数据里这类样本太少,后续要补更多多说话人对话数据; -
RL还没完全做完:目前只优化了发音错误,后续要靠RL提升长对话的稳定性和情感表达(比如开心、生气的语气); -
不支持音乐和音频事件:现在只能生成纯语音,想支持音乐、环境音,还得搞通用的音频tokenizer和架构。

JoyVoice在几乎所有任务上错误率都最低,比如2spk-zh的CER 1.44,比VibeVoice-7B的1.60、Mooncast的7.57都低;