《把世界喂给模型》结尾,离散与连续之争停在一个均衡解上:理解用连续,生成用离散,必要时混合或解耦;外加一句伏笔——等连续这条路的短板补齐,格局也许还会再变一次。

这篇要拆的 FireRedAudio,就是「再变一次」阵营交上来的新样本。它来自小红书 FireRed 团队(技术报告 arXiv:2608.24168,2026 年 8 月;代码已开源):一个共享 9B 参数 LLM 的通用音频语言模型,ASR、音频理解、零样本 TTS、指令 TTS、语音编辑、一小时长录音的结构化整理,一个模型全包。它的立场相当彻底:音频不论进出,一律连续——输入侧不用音频 token,输出侧也不预测音频 token,生成靠流匹配 DiT 直接吐连续 latent。

那理解与生成的任务冲突怎么办?论文的回答就是本文的主线:连续不连续不是关键,关键是给理解和生成各配一条独立的连续输入通路。用论文自己的话说(照例带着「据我们所知」的免责),这是首个公开披露的、在单个可训练自回归 LLM 内为理解与生成分别提供连续输入表征的统一音频语言模型。

一颗脑袋,两副耳朵。下面从那个老矛盾讲起。

一、老矛盾:一份表征伺候不了两位主子

理解和生成都要「听」音频,但要的东西根本不同:

  • 理解端要压。一小时的播客也得装进上下文窗口做推理,所以表征要紧凑、要把任务相关的线索组织好——帧率越低越省,抽象越高越好用;
  • 生成端要全。合成的前提是能解码回波形,音色、韵律、音高、停顿这些细节一个都不能丢——保真越高越好。

这不是工程借口,而是有实证的结构性矛盾。论文引 F3-tokenizer 的观察:为波形重建优化的连续自编码器 latent 偏重声学细节,往往缺少高层理解所需的结构;反过来,为识别分析设计的自监督表征,又普遍没有直接解码回高保真波形的接口。想让一份表征两头讨好,就得两头折衷。

理解端:要「压」· 一小时录音也要装下· 只留任务相关线索· 帧率越低越省· 抽象、有结构生成端:要「全」· 解码要还原成波形· 音色、韵律、停顿都在· 毫秒级细节不能丢· 保真、可重建同一份音频表征两头折衷,两头受气拉向压缩拉向保真FireRedAudio:不折衷,拆开理解、生成各配一条连续输入通路,只共享 LLM 这颗脑袋
同一份音频表征被两端拉扯:理解端要求紧凑、抽象、装得下长音频,生成端要求保真、可重建、细节齐全。FireRedAudio 的回答是不再折衷:拆成两条独立的连续输入通路,只共享 LLM 这颗脑袋

于是近年的统一音频模型都在「分工」上做文章,只是分工的位置各不相同。粗看一圈地图:LongCat-Next 输入输出全离散;UALM 和 Audex 连续进、离散出;Kimi-Audio 把连续 Whisper 特征和离散语义 token 的嵌入逐元素相加;Qwen3-Omni 和 Qwen3.5-Omni 走 Thinker–Talker 拆分——Thinker 吃连续表征管理解,Talker 吐离散语音 token 管生成。更有意思的是两份「分工有益」的直接证据:UniAudio 2.0 把音频拆成偏语义的推理 token 和保声学的重建 token,消融显示只用重建 token 会拖垮理解;DualSpeechLM 语义进、声学出,比进出同一种 token 的基线更平衡。给不同角色分派不同表征,是行业共识了。但这一族仍把量化 token 当生成目标:量化有信息损失,多码本、高帧率的编排又平添建模开销(这本账在语音 tokenizer 那篇算过)。

另一条线干脆绕开量化:LatentLM 提出 next-token diffusion,DiTAR、VibeVoice 证明自回归连续 latent 做语音合成走得通;Ming-Flash-Omni、Audio-Omni、UAT 各有取径。和 FireRedAudio 血缘最近的 Ming-UniAudio 让理解与生成共享同一条根植于 VAE latent 的表征通路——但它自己的消融给出了警示:早期联训时共享的语义模块不冻结,理解生成双双掉点。连续接口本身并不自动化解任务冲突。

所以真正的问题是:一个共享模型,怎么替理解和生成各自组织「合适的」连续输入?FireRedAudio 的答案朴素得近乎直白——各配一条通路,互不掺和。

二、全景:两副耳朵、一颗脑袋、一张嘴

❄ = 训练全程冻结转写 · 答案 · 结构化清单文本头逐 token 自回归合成语音 · 24 kHzRedAE Decoder仅推理加载 · iSTFT → 波形攒齐整段 latent 再渲染流匹配 DiT每步 4 帧 25 Hz latent(160 ms)每个 audio step 的隐状态共享 LLM(Qwen3.5-9B 底座)文本 token 与两类音频段按各自位置插入序列——两路不相加、不融合12.5 Hz 感知表征Audio Adapter降到 12.5 Hz · 投影进 LLM 空间Audio EncoderWhisper-large-v3 初始化 · ≤30 s 分窗要听懂的音频 · 16 kHz转写 / 分析 / 一小时长录音6.25 Hz RedAE-PatchPatch Encoder每 4 帧合成 1 个 patch25 Hz · 64 维 latentRedAE Encoder ❄确定性自编码器 · 因果结构作为生成条件的语音 · 24 kHz零样本 TTS 参考音 / 待编辑源音回填为下一步上下文声学内容全程连续:LLM 的离散输出只有文字,和 audio-start / step / end 三类节拍 token
FireRedAudio 总览(对论文图 1 的重绘):左通路是「速记耳朵」,Audio Encoder + Adapter 把待分析音频压成 12.5 Hz 感知表征;右通路是「录音耳朵」,RedAE Encoder 出 25 Hz 连续 latent,Patch Encoder 每 4 帧合 1 个 patch。两路各自插进共享 LLM 的序列位置。理解任务走文本头;生成任务由每个 audio step 的隐状态驱动流匹配 DiT 吐 4 帧 latent,经 Patch Encoder 回填上下文,最后由 RedAE Decoder 一次性渲染 24 kHz 波形

主模型六个部件:Audio Encoder、Audio Adapter、RedAE Encoder、Patch Encoder、共享 LLM(Qwen3.5-9B 底座)、流匹配 DiT。推理时另加一个只管渲染的 RedAE Decoder。

音频段走哪扇门,不看内容,看它在当前任务里的角色:

  • 要被转写、被分析的音频 → Audio Encoder + Adapter → 12.5 Hz 连续感知表征(速记耳朵);
  • 作为生成条件的语音——零样本 TTS 的参考音、待编辑的源音 → RedAE Encoder → 25 Hz 连续 latent → Patch Encoder 每 4 帧合 1 → 6.25 Hz 的 RedAE-Patch(录音耳朵)。

两路表征不相加、不融合,各自插进序列里自己的位置,与文本指令一起交给 LLM。理解任务,LLM 直接逐 token 吐文本。生成任务则以 audio step 为节拍——1 步 = 4 帧 RedAE latent = 160 ms 音频:LLM 每走到一个 audio step,就用当前隐状态驱动 DiT 生成 4 帧连续 latent;新帧经 Patch Encoder 变回 1 个 patch 回填进上下文,供下一步继续。等语言模型头吐出结束符,RedAE Decoder 把攒下的整条 latent 序列一次性渲染成 24 kHz 波形。

顺手算两笔账:理解侧 12.5 Hz,一小时录音 = 3600 × 12.5 = 45k 个 LLM 位置,200k 上下文装得下;生成侧 LLM 每秒只打 6.25 个节拍,比 Moshi、MOSS 系离散方案常见的 12.5 Hz 还低一半——因为每一拍 DiT 一口气吐 160 ms 的连续内容,帧率的压力从 LLM 转移给了 DiT。

三、速记的耳朵:理解通路

理解通路的配方是站在 Whisper 肩膀上的:Audio Encoder 连同卷积前端和 Transformer 一起从 Whisper-large-v3 的编码器初始化,白捡多语言语音表征和现成的「声学–语言」对齐先验。

数据流:16 kHz 单声道波形 → 100 Hz log-Mel → 切成不超过 30 秒的不重叠窗口 → 窗口内卷积前端降到 50 Hz、Transformer 做局部编码 → 各窗口输出按原时序拼接 → Audio Adapter 再降到 12.5 Hz 并投影进 LLM 嵌入空间。

两处设计值得停一秒:

  1. 窗口化是长音频的成本阀门。注意力开销被锁死在 30 秒窗口内,窗口之间的长程交互甩给 LLM 去建模——反正它有 200k 上下文;
  2. 时间压缩和跨模态对齐都收进 Adapter。这层「接口」单独可训,于是可以先冻住两边、只教 Adapter 学会翻译,再放开 Encoder 深造——这是训练策略一节的伏笔。

四、录音的耳朵:RedAE 与 Patch Encoder

生成这边的地基是 RedAE(Red Audio Autoencoder):一个确定性连续音频自编码器——没有变分后验,没有 KL 正则,波形直接映射成连续 latent。

编码器是因果结构:24 kHz 波形按每 480 采样一块切成 50 Hz 帧序列,过两级 Qwen3 Transformer 模块——第一级做上下文编码,第二级把相邻两帧聚合、经输出投影得到 25 Hz、64 维的 RedAE latent。解码器反着来:线性投影加通道转时间重排,因果 Qwen3 Transformer,最后 iSTFT 头(Vocos 一路的做法)出 24 kHz 波形。预训练数据配比也说明了野心不止语音:50% 干净语音、25% 带噪语音、10% 音效、15% 音乐。

只按重建训练有个著名隐患(还是 F3-tokenizer 那条观察):latent 空间会被低层声学变化主导——自回归模型难学,误差还容易滚雪球。RedAE 的应对是在预训练目标里加一味语义蒸馏:请一位在理解任务(语音、通用音频、音乐)上练成的冻结教师 Audio Encoder 提供高层特征,用 MSE 把 RedAE latent 往上对齐。整个目标是 X-Codec 框架的混合 GAN 配方:

L_G = λ_rec·L_rec + λ_adv·L_adv + λ_fm·L_fm + λ_distill·L_distill
       重建         对抗         判别器特征匹配   语义蒸馏(MSE 对齐冻结教师)

熟悉语音 tokenizer 那篇的读者会立刻认出来:这就是 X-Codec「把语义塞进码本」的连续版。妙处在部署形态——与 Ming-UniAudio 在重建 latent 之后外挂一个语义模块不同,RedAE 把老师内化进自编码器预训练,训完老师即弃,推理时零额外分支。

预训练完成后,主模型训练全程 RedAE Encoder 冻结(latent 空间不漂移,DiT 的靶子不动),Decoder 干脆不加载——只在推理渲染时出场。

最后一块拼图是 Patch Encoder。25 Hz 的原生 latent 逐帧直喂 LLM,序列太长、自回归成本太高;于是在 LLM 接口处放一个局部 Transformer,每 4 帧连续 latent 聚合成 1 个与 LLM 输入嵌入同维的 RedAE-Patch,LLM 侧音频帧率降到 6.25 Hz。分寸感在这里:降帧只发生在 LLM 接口处——波形重建和 DiT 生成仍在 25 Hz 原生 latent 空间进行,细节一点没少。

教师 Audio Encoder ❄在理解任务上练成 · 训完即弃语义蒸馏 L_distill(MSE 对齐)原始波形 24 kHz每 480 采样一块→ 50 Hz 帧序列RedAE EncoderQwen3 上下文编码+ 相邻两帧聚合25 Hz · 64 维连续 latentRedAE Decoder通道→时间重排 · 因果 Qwen3iSTFT 头重建波形L_rec + L_adv + L_fm:重建端把输出波形贴回原声(X-Codec 式混合 GAN 目标)预训练数据:50% 干净语音 · 25% 带噪语音 · 10% 音效 · 15% 音乐训完:教师丢弃;Encoder 在主模型训练中全程冻结;Decoder 只在推理渲染时出场
RedAE 的结构与预训练(对论文图 2 的重绘):24 kHz 波形切成 50 Hz 帧序列,编码为 25 Hz、64 维连续 latent,再解码回波形;重建端是 X-Codec 式混合 GAN 目标,latent 端由冻结的教师 Audio Encoder 做语义蒸馏。训完教师丢弃、Encoder 冻结,Decoder 只在推理时出场

五、嘴:LM 打节拍,DiT 出声

所有任务都被装进同一个 ChatML 对话格式:系统提示词区分任务,文本指令、条件音频、目标文本或语音各占预定义的消息角色;序列化之后,文本走 LLM 词表嵌入,每个音频段按角色走自己那条通路。

共享 LLM 支持两种输出模式:

  • 理解:老老实实逐 token 生成文本回答;
  • 生成:语言模型头先吐一个 audio-start,接着一串 audio-step,最后 audio-end。注意,这三类 token 只管结构与节拍——声学内容一个比特都不经过它们,全部由 DiT 在连续空间里生成。

同一套接口装下不同条件:零样本 TTS 把参考语音(走录音耳朵)当音频前缀;指令 TTS 从纯文本出发;语音编辑给源语音加编辑指令,然后整段重新合成目标波形——不是在源 latent 上做局部修补。

DiT 的一步:显微镜下

训练时,每个 audio step 的 DiT 接三路条件:

  • 声学条件:前两个 step 的 8 帧真 latent,拼上当前 step 的 4 帧加噪 latent,共 12 帧声学输入;
  • LLM 条件:3 个隐状态——紧挨当前步 ground-truth patch 之前的那个,加上前两步的对应隐状态——按时间序各重复 4 次,与 12 帧逐位对齐。因为当前隐状态取自 LLM 消费当前 patch 之前,目标漏不进自己的条件;
  • 流匹配时刻 t:单独走时间嵌入。

前两路按特征维拼接送进 DiT;12 个位置的输出里只有最后 4 个进损失,前 8 个纯当上下文。历史不足就补零。训练时还会随机丢掉 LLM 条件(为推理时的 classifier-free guidance 留后手),声学条件则永不丢。流匹配损失很朴素:

L_flow = (1/|P|) · Σ_{j∈P} MSE( V̂_j , V*_j )
# P:批内全部有效 audio step;V̂_j / V*_j:第 j 步预测 / 目标速度场
# 每步的 MSE 在 4 帧 × 64 维上取平均
h(t−2)h(t−1)h(t)h(t) 取自读入当前 patch 之前→ 目标漏不进自己的条件LLM 条件行h(t−2) ×4h(t−1) ×4h(t) ×4两行逐位置按特征维拼接声学条件行前两步的 8 帧真 latent(声学历史)当前步 4 帧 · 加噪流匹配时刻 t独立时间嵌入流匹配 DiT预测速度场训练时随机丢 LLM 条件行(CFG 用)声学行永不丢 · 缺失历史补零DiT 输出前 8 位只当上下文,不进损失最后 4 位进 L_flow → 当前步 4 帧新 latent① 顶进声学历史缓冲(只留 2 步)② 经 Patch Encoder 回填 LLM
一个 audio step 的显微镜:上行是 LLM 条件(当前与前两步的隐状态各重复 4 次),下行是声学条件(前两步 8 帧真 latent + 当前步 4 帧加噪),逐位置按特征维拼接进 DiT;输出 12 位中只有最后 4 位进流匹配损失。训练时随机丢 LLM 条件行做 CFG,声学行永不丢

推理循环用伪代码最清楚(有简化):

history = init_buffer()   # 声学历史:零样本 TTS 用参考音最后 2 步初始化,其余任务全零
latents = []
llm.feed(system_prompt, instruction, text, cond_audio)  # 条件音频按角色走两条通路

tok = llm.next_token()                        # 预期先出 <audio_start>
while tok != AUDIO_END:                       # 每个 <audio_step> 触发一次 DiT
    hs = llm.recent_step_hiddens(3)           # 当前 + 前两步的隐状态
    frames = dit.integrate(noise, hs, history)  # 流匹配积分 → 4 帧 25 Hz latent
    history.push(frames)                      # 缓冲只留最近 2 步(8 帧)
    latents += frames
    llm.feed(patch_encoder(frames))           # 合成 1 个 patch 回填上下文
    tok = llm.next_token()

wave = redae_decoder(latents)                 # 攒齐后一次性渲染 24 kHz 波形

一个容易错过的细节:语音编辑的源音频只通过 LLM 条件影响 DiT,不进声学历史缓冲——缓冲里只装模型自己刚说出口的音。这条设计后面会在编辑成绩里显灵。

六、一本账:两个损失怎么配平

联合目标一行写完:

L = λ_text·L_text + λ_flow·L_flow ,   λ_text = λ_flow = 1

各自在自己的有效位置上归一化。等权不是偷懒:混合语料里带连续声学目标的样本本来就被采样得少,等权是为了不再削弱这路信号。

L_text 里还有个讲究的加权。audio-step token 在长语音序列里数量庞大,但它们只管节拍、不管内容——真让它们按普通 token 计权,海量的「打拍子」会淹掉文字学习信号。于是给它们 0.01 的权重,而且分子分母一起加权(不是整体缩放):

L_text = ( Σ_{i∈T} ℓ_i + w_a·Σ_{i∈A} ℓ_i ) / ( |T| + w_a·|A| ) ,  w_a = 0.01
# T:普通文本与 audio-start/end 位置;A:audio-step 位置;ℓ_i 为逐位置交叉熵
# 分母跨数据并行 worker 聚合,得到全局加权 token 平均

这套联合目标更新 LLM、Audio Encoder、Audio Adapter、Patch Encoder、DiT 五件套;RedAE Encoder 始终冻结。

七、五段式课程表:先搭桥,再放开,最后拉长

部件的「资历」差太多:Audio Encoder、LLM、RedAE 是预训练过的老将,Audio Adapter、Patch Encoder、DiT 是随机初始化的新兵。一上来全放开,新兵的噪声梯度会先冲垮老将的表征。FireRedAudio 的解法是五段递进,总计约 2.7T 多模态 token(文中 token 均指「文本 token 或一个进入 LLM 的连续音频表征」):

① 适配器对齐② 编码器适应③ 统一中训④ 多任务后训⑤ 长上下文扩展180B390B990B511B591BAudio AdapterAudio EncoderLLM 主干Patch Enc + DiTRedAE Encoder❄❄❄——❄❄❄❄❄序列长度理解音频上限LLM 峰值 LR音频模块峰值 LR8k8k8k8k≤5 分钟≤5 分钟≤5 分钟≤5 分钟❄❄3e-53e-51e-52e-42e-42e-41e-43e-5200k1 小时实心条 = 该阶段参与训练  虚线框 ❄ = 冻结  — = 尚未接入数据焦点:① ASR 搭桥 → ② 加音频理解 → ③ 全放开、零样本 TTS 与 DiT 上线 → ④ 指令 TTS / 编辑 + CoT → ⑤ 长音频到 1 小时
五阶段课程表:每列一个阶段(标注训练量),行是各模块的冻结/训练状态。Audio Adapter 最先单独训练,随后放开 Audio Encoder,第三阶段起 LLM、Patch Encoder、DiT 全体上阵;RedAE Encoder 全程冻结。底部是序列长度、理解音频上限与峰值学习率的演进
  1. 适配器对齐(180B):全体冻结,只训 Adapter。用中英 80B + 多语种 100B 的 ASR 数据——转写监督密集且定义清晰,最适合教接口层「怎么把声音翻译给 LLM 听」。
  2. 音频编码器适应(390B):放开 Encoder 与 Adapter 同训,LLM 仍冻。新加 150B 音频理解 token,把「只会转写的耳朵」养成「通用感知的耳朵」——副语言、说话人、环境音、音乐都得听。
  3. 统一中训(990B):第一次全体上阵。Patch Encoder 和 DiT 不做单独预训练,直接在完整的连续 latent 生成回路里随大部队联训。混料:160B 中英 ASR、200B 多语 ASR、250B 理解、200B 纯文本、120B 零样本 TTS、60B 音文交错(前段音频当上下文、只预测后续文本,专门强化音频–语言对齐)。共享底座动作要轻:LLM 峰值学习率 3e-5,只有音频模块(2e-4)的几十分之一。
  4. 多任务后训(511B):指令跟随专场。首次引入 22B 指令 TTS 和 12B 语音编辑,并给这两类数据与多步推理的理解题加显式 CoT 监督——先想清楚「该用什么声音、该改哪里、证据在哪」,再张嘴或作答。
  5. 长上下文扩展(591B):序列长度 8k → 200k,理解音频上限从 5 分钟拉到 1 小时;保留全套后训混料防遗忘,再加 80B 长音频理解数据,学习率整体再降一档。

配套一个防「大户霸榜」的两级采样:先抽任务族、再抽族内数据集,都做幂律平滑——

p(任务族 i)        ∝ W_i^0.5
p(数据集 j | 族 i) ∝ w_ij^0.7

指数越小拉得越平:任务级 0.5 平衡得更狠,数据集级 0.7 温和些,免得族内小数据集被彻底稀释掉特色。

长音频数据从哪来也交代了:把标注可靠的短片段拼接成长录音,片段内时间戳换算成整段时间戳,片段级说话人标签对齐成全局身份。时间戳换算直接监督「时间–内容对齐」,这正是下一节秒级定位能力的来源。

八、成绩单:六线作战

音频理解是最硬的一张牌,MMAU(万题规模的语音/环境音/音乐选择题)和 MMSU(5000 题、47 项细粒度英语语音任务)三个口径全部第一:

模型MMAU test-miniMMAU testMMSU
Gemini 3.1 Pro80.7*78.8*82.7*
Qwen3.5-Omni-Plus81.4*79.9*80.7*
FireRedAudio82.080.983.3

(* 为论文方自测;表中略去 Step-Audio-R1.1、Kimi-Audio 等更低分选手。)

ASR 同样能打:LibriSpeech test-clean 0.67、FLEURS 英语 2.53、FLEURS-102 个语种宏平均 14.94,都是已报告系统里的最低错误率;AISHELL-1 0.71、KeSpeech 4.82、Opencpop 唱歌 1.63 进前三,WenetSpeech Test_Meeting 第二。理解通路没有为生成让路——这正是解耦想要的效果。

零样本 TTS(Seed-TTS-Eval):

模型ZH CER ↓EN WER ↓平均内容错误 ↓平均 SIM ↑
Seed-TTS(专门 TTS)1.122.251.690.78
Qwen3-Omni-30B-A3B-Instruct1.071.391.23–
Ming-UniAudio-16B-A3B0.951.851.400.64
FireRedAudio0.831.561.200.71

平均内容错误 1.20 全场最低;说话人相似度 0.71 是双语都报数的统一模型里最高,但仍低于最强专门 TTS——论文坦承这一差距,并点出原因:FireRedAudio 没有专门的说话人嵌入,克隆音色全靠参考音的 RedAE 表征硬扛。

指令 TTS(InstructTTSEval,6000 例,三级抽象:APS 结构化声学参数 → DSD 自由风格描述 → RP 只给角色场景;因原版判官 Gemini 2.5 Pro Preview 已下线,全部系统用 Gemini 2.5 Pro 重评):

模型ZH APS / DSD / RPEN APS / DSD / RP
Qwen3-TTS-VD83.7 / 81.7 / 65.876.4 / 81.4 / 64.2
FireRedAudio86.0 / 84.1 / 70.181.1 / 83.6 / 70.3

中英六项全胜,最大领先在英语 RP(+6.1 个点)——恰好是最抽象、要从场景自己推断该用什么嗓音的那道题。论文把这归功于后训阶段的显式 CoT:先推理说话风格,再驱动声学生成。

语音编辑(Ming-Freeform-Audio-Edit,不给编辑位置、不给对齐):对基准提出者 Ming-UniAudio-Edit,全部指标持平或反超,唯一例外是中文开放删除的 SIM 差 0.01。几个悬殊处:开放删除中文 WER 10.49 对 22.92;变速 WER 2.00|4.43 对 5.88|17.53;变调 WER 2.00|3.04 对 7.45|13.37。「整段重合成」的设计在 no-edit WER(未编辑区域的忠实度)上也占优——重说全文而不跑偏,靠的是源音频经 LLM 条件一路管到底。

长音频结构化是压轴戏。模型把最长一小时的录音整理成带时间区间的结构化条目,评测不设参考切分:音频判官(Qwen3.5-Omni-Plus)逐条检查「预测区间是否恰好装下该条目的说话内容」——strict@0 要求区间不含多余语音、首尾静音不超 0.3 秒;content@δ 把区间两端各放宽 δ 秒再查内容完整性:

判分口径FireRedAudioQwen3.5-Omni-Plus
strict@0 ↑73.656.6
content@0.5 ↑96.192.6
content@1.0 ↑96.796.5

strict@0 领先 17 个点说明区间放得更准更紧;1 秒容差下从 5 分钟到 50 分钟的录音全部稳在 93% 以上——秒级时间戳精度站住了。这份能力直接来自第七节那套长音频数据构造:时间戳换算就是时间–内容对齐的监督信号。

九、结语:三个收束

  1. 解耦挪到了输入侧,输出彻底连续化。 此前「表征该分工」的共识多落在输出 token 类型上(UniAudio 2.0 的双 token、DualSpeechLM 的语义进声学出),FireRedAudio 把分工挪进输入通路,输出则全程连续——声学内容不过量化器,离散只剩文字和三枚节拍 token。《把世界喂给模型》那张地图上,「理解连续、生成离散」的均衡解旁边,现在立着一个六线任务全面打平或领先的「全连续 + 输入解耦」样本。
  2. 把老师内化,把接口做薄。 RedAE 的语义蒸馏是 X-Codec「语义塞进码本」的连续版:监督全部发生在自编码器预训练里,运行时零外挂模块;主训练全程冻结 Encoder,让 DiT 的靶子纹丝不动。一串「本可以加模块解决」的问题,被一个预训练损失顶掉了——Ming-UniAudio 的消融恰好从反面证明了这条路线的分寸。
  3. 账本诚实,配方全开。 说话人相似度不敌专门 TTS,论文直说是不用说话人嵌入的代价;自测数字全部标星;9B 规模、五段课程、约 2.7T token 的训练量、每阶段学习率摊开在表里,代码开源。中等规模也能六线作战,这份账值得后来者照着核。

参考