芥末
发布于 2025-09-19 / 0 阅读
0
0

FireRedTTS-2:面向多说话人对话的 TTS 架构解析

FireRedTTS-2 是一个面向对话语音生成的 TTS(Text-to-Speech,文本语音合成)模型。它要解决的不是普通的“给一段文字生成一段语音”,而是更复杂的多说话人对话合成:同一段音频里有多个角色轮流说话,每个角色要保持自己的音色,句子之间要有自然停顿和衔接,长对话里还不能频繁出现读错字、换错人、韵律断裂等问题。

典型应用包括 AI 播客、多人有声内容、虚拟主播对话、语音助手多轮交互,以及给语音识别、对话理解等下游任务批量生成训练数据。FireRedTTS-2 的核心设计可以概括为两点:

  1. 用低帧率、语义信息更强的离散语音编码器,把语音压缩成更适合大模型处理的 token 序列;
  2. 用文本-语音混排的生成格式,让模型既能利用历史上下文,又能支持逐句生成和流式起播。

多说话人对话合成难在哪里

普通 TTS 只需要关注一件事:一段文字对应一段语音。多说话人对话合成要同时处理四类问题。

问题具体表现对系统的要求
发音正确性中文读错字、英文读错词、跨语言发音不稳文本到语音 token 的映射要稳定
说话人一致性A 说着说着变成 B 的声音,或者角色切换边界混乱说话人标签和音色条件要可靠
对话韵律每句话单独听还行,连起来像拼接音频模型要理解上下文里的停顿、重音、情绪
生成灵活性整段一次性生成后不好改,交互式场景无法边生成边播放需要逐句生成、低首包延迟和流式解码

早期做法通常把对话按说话人和句子切开,每句话独立合成,再把音频拼起来。这个方案实现简单,但有明显缺陷:模型看不到完整对话上下文,句子之间的停顿和情绪衔接很容易断掉。另一类方案会一次性输入完整对话文本,然后输出整段多说话人音频。它能建模全局上下文,但不适合编辑,也不适合实时交互,因为必须等整段生成完才能处理后续音频。

FireRedTTS-2 选择的是中间路线:输入格式里保留历史文本和历史语音,让模型理解上下文;生成方式上支持逐句输出,让系统可以一边生成一边播放,也方便修改某一句话。

flowchart LR
    A[对话文本与说话人标签] --> B[文本-语音混排序列]
    C[说话人参考音频] --> D[离散语音编码器]
    D --> E[说话人语音 token / 条件信息]
    B --> F[文本语音合成模型]
    E --> F
    F --> G[生成离散语音 token]
    G --> H[语音编码器的流式解码器]
    H --> I[连续音频流]

这条链路里,TTS 模型并不直接预测波形,而是预测离散语音 token。真正把 token 还原成音频的工作由语音编码器的解码端完成。

总体架构:语音编码器 + 文本语音合成模型

FireRedTTS-2 的系统结构由两个核心模块组成:离散语音编码器和文本语音合成模型。

FireRedTTS-2 系统架构

结构图里可以看到两条主线:训练阶段先把真实语音压缩成离散 token,供 TTS 模型学习;推理阶段由 TTS 模型生成语音 token,再通过语音解码器把 token 还原成连续音频。这个设计的关键是把复杂的波形建模问题,转成更适合 Transformer 处理的离散序列建模问题。

离散语音编码器:把语音压缩到 12.5Hz

离散语音编码器(Speech Tokenizer)的作用,是把连续语音信号转换成离散标签序列。可以把它理解成语音领域的 tokenizer:文本大模型处理的是文字 token,语音生成模型处理的则是语音 token。

FireRedTTS-2 的语音编码器输出帧率是 12.5Hz,也就是 1 秒语音大约只对应 12.5 个离散标签。低帧率带来两个直接好处:

设计作用
12.5Hz 低帧率缩短语音 token 序列,降低长对话建模成本
语义监督让离散标签包含更强的语义信息,而不是只记录声学细节
流式解码生成一部分 token 后即可开始还原音频,降低起播等待时间
多阶段训练先保证泛化,再用高质量语音优化重建音质

为什么低帧率重要?假设一个语音 tokenizer 每秒输出 50 个 token,10 分钟对话就有 30000 个 token;如果降到 12.5Hz,同样时长只有 7500 个 token。序列越短,Transformer 的建模压力越小,长对话里的上下文利用也更现实。

不过,帧率低并不等于可以丢掉关键信息。FireRedTTS-2 在训练编码器时引入预训练语音模型提取的语义特征,并对离散标签做语义监督,使 token 不只是保存音高、能量、频谱等声学信息,也能携带更接近“说了什么”的语义信息。这样 TTS 模型从文本预测语音 token 时,学习目标会更清晰。

训练策略分成两步:

  1. 在约 50 万小时多样化语音数据上训练,提升对不同说话人、语种、录音条件的泛化能力;
  2. 在约 6 万小时高质量语音上继续训练,重点优化重建音质。

推理时,语音 token 不需要等整句全部生成完再解码。流式解码器可以逐步输出音频,因此 FireRedTTS-2 更容易接入实时语音交互、边播边生成的播客系统等场景。

文本-语音混排:逐句生成还能保留上下文

多说话人对话合成需要明确“谁在说哪句话”。FireRedTTS-2 使用文本-语音混排格式,把说话人标签、文本、历史语音 token 放在同一个序列里建模。

抽象后的输入格式类似这样:

[S1] 你今天想聊什么?
<AUDIO_TOKENS_OF_S1>

[S2] 我想聊聊最近的 AI 播客生成。
<AUDIO_TOKENS_OF_S2>

[S1] 那我们可以从多说话人语音合成讲起。
<AUDIO_TOKENS_TO_GENERATE>

其中 [S1][S2] 是说话人标签,后面的文本告诉模型当前要说什么,历史音频 token 提供上下文和角色信息。模型生成当前句子的语音 token 后,可以继续追加到上下文里,再生成下一句。

这种格式比“逐句独立合成”多了一份上下文记忆,也比“整段一次性生成”更灵活。某一句话要修改时,不需要重做整段;实时交互时,也不必等用户输入完整剧本。

sequenceDiagram
    participant U as 上层应用
    participant T as FireRedTTS-2
    participant D as 语音解码器
    participant P as 播放端

    U->>T: 输入 [S1] 当前句文本 + 历史上下文
    T-->>D: 逐步生成语音 token
    D-->>P: 流式输出音频片段
    U->>T: 输入 [S2] 下一句文本 + 更新后的上下文
    T-->>D: 逐步生成语音 token
    D-->>P: 继续播放

逐句生成的难点在于:模型不能只看当前句,否则对话会像拼起来的单句音频;也不能完全依赖历史音频,否则计算量和延迟都会上升。FireRedTTS-2 通过混排序列和双 Transformer 架构来平衡这两个目标。

双 Transformer:粗粒度语音 + 声学细节分开建模

FireRedTTS-2 的文本语音合成模型包含两个 Transformer:

模块参数规模主要职责
Backbone Transformer1.5B建模混排序列中的粗粒度语音信息,理解文本、说话人和上下文
Decoder Transformer0.2B补充声学细节,让输出语音更自然、更稳定

Backbone Transformer 负责决定“这句话应该怎么说”:包括文本内容、说话人身份、句子在对话中的位置、前后句衔接方式等。Decoder Transformer 更关注“具体声音细节”:比如音色细节、局部声学变化、语音自然度。

常见的 Delay Pattern 方法通常通过错位预测多个 codebook 来生成语音 token,但上下文里的文本与历史语音利用不够充分。FireRedTTS-2 的双 Transformer 设计把上下文建模和声学细节建模拆开,让模型既能保持对话连贯性,又能降低首包延迟。配合 12.5Hz tokenizer 的流式解码,系统可以更快输出第一段可播放音频。

训练同样分成两个阶段:

阶段数据规模目标
单句语音预训练约 110 万小时建立稳定的文本到语音能力
对话语音继续训练约 30 万小时学习 2 到 4 人对话中的说话人切换、上下文韵律和对话节奏

单句预训练让模型先学会“把文字说对”;对话继续训练让模型再学会“在多人对话里说得连贯”。这两个能力缺一不可。只做单句训练,多人对话容易断裂;只做对话训练,基础发音和覆盖面又不够稳。

音色克隆与随机音色生成

FireRedTTS-2 支持两类常见用法。

一种是音色克隆:给每个发音人提供一句参考语音,模型就可以在后续对话中模仿对应音色和说话习惯。抽象输入可以表示为:

# 伪代码:表示输入组织方式,不是具体 API
speaker_refs = {
    "S1": "speaker_1_reference.wav",
    "S2": "speaker_2_reference.wav",
}

dialogue = [
    ("S1", "欢迎来到今天的节目。"),
    ("S2", "今天我们聊聊多说话人语音合成。"),
    ("S1", "这个任务最难的是角色稳定和韵律连续。"),
]

另一种是随机音色生成:不指定真实说话人的参考音频,由模型生成不同风格的音色。这个能力适合批量生产训练数据,比如给语音识别、多轮对话、跨语言语音理解等任务构造多音色、多语种样本。

已覆盖的语种包括中文、英语、日语、韩语、法语等。跨语言合成对文本规范化要求更高,例如数字、缩写、人名、外来词都可能影响读法。在实际系统里,TTS 前通常还要接一层文本归一化和分句模块,避免模型直接面对格式混乱的输入。

评测指标:不只听自然度,还要看说话人是否稳定

对话合成不能只用“听起来像不像真人”来评价。FireRedTTS-2 和 MoonCast、ZipVoice-Dialogue、MOSS-TTSD 等系统在中英文对话测试集上做了对比,评测分为客观指标和主观偏好两类。

FireRedTTS-2 对话合成评测结果

评测结果图汇总了不同系统在发音正确性、说话人保持、声学距离和主观偏好上的表现。几个指标分别对应不同问题:

指标全称 / 含义越高越好还是越低越好关注点
CERCharacter Error Rate,字符错误率越低越好中文发音和内容正确性
WERWord Error Rate,词错误率越低越好英文发音和内容正确性
SIMSpeaker Similarity,说话人相似度越高越好合成语音是否保持目标说话人身份
MCDMel-Cepstral Distortion,梅尔倒谱失真越低越好合成语音和真实语音的声学差异
CMOSComparative Mean Opinion Score,对比平均意见分越高越好人耳主观偏好和自然度

这些指标覆盖了多说话人对话合成的主要风险:CER/WER 高说明内容容易说错;SIM 低说明角色声音不稳定;MCD 高说明声学质量离真实录音更远;CMOS 低说明人耳不喜欢或者觉得不自然。

从对比结果看,FireRedTTS-2 在这些主客观指标上都处于更优位置,说明它不仅减少了读错内容的问题,也改善了说话人切换和对话韵律。

小数据微调:50 小时特定播客录音能带来什么

通用模型可以覆盖大量音色和语种,但如果目标是做固定角色的播客,通常还需要更贴近目标节目风格的音色定制。FireRedTTS-2 支持用少量特定说话人数据微调。

FireRedTTS-2 播客音色定制评测结果

在约 50 小时特定播客说话人录音上微调后,测试结果显示 CER 为 1.66%。主观听评里,28% 的样本被认为比真实播客录音更自然,另有 28% 的样本难以区分合成语音和真实录音。合并来看,56% 的样本在自然度上达到或超过真实录音。

这个结果说明,通用 TTS 模型加少量领域数据微调,可以把“能合成”推进到“接近目标节目听感”。不过,50 小时并不等于没有成本:录音质量、说话人稳定性、标注准确性、文本清洗都会影响微调效果。如果数据里有大量噪声、抢话、背景音乐或转写错误,模型会把这些问题一起学进去。

和其他对话合成路线的对比

FireRedTTS-2 的设计重点不只是音质,而是把可编辑性、上下文一致性和实时性放在同一套框架里处理。

路线做法优点主要问题
单句合成再拼接每句话独立 TTS,最后拼音频实现简单,易于替换某一句句间韵律断裂,说话人上下文弱
整段一次性生成输入完整对话,输出完整音频能建模全局上下文不利于编辑,实时交互困难
文本-语音混排逐句生成历史文本/语音与当前句一起建模兼顾上下文、编辑和流式播放需要设计稳定的说话人标签和上下文管理

FireRedTTS-2 适合的场景比较明确:

适合场景原因
AI 播客生成需要多人角色、长对话韵律、音色保持
语音助手多轮交互逐句生成和低首包延迟更重要
多语种语音数据合成随机音色和多语言覆盖能提高数据多样性
固定角色音色定制少量数据微调可以贴近目标说话人风格
有声内容生产方便按句修改、替换和重生成

不适合的场景也要提前识别:

不适合场景原因
未经授权的真人音色复制音色克隆需要明确授权和合规边界
需要精确控制每个音素时长的场景生成式模型的细粒度可控性有限
强背景音乐、音效混合生成可控音效插入并不是当前核心能力
无限说话人长对话说话人数量和上下文长度仍会受到模型上下文窗口限制

工程落地时容易踩的坑

1. 说话人标签必须稳定

同一个角色在整段对话里要始终使用同一个标签,例如 [S1] 不要中途改成 [SpeakerA]。标签混乱会直接增加说话人错位的概率。

2. 文本清洗会影响发音错误率

数字、日期、英文缩写、特殊符号、人名地名都要尽量规范化。比如“2026/06/07”应该根据语境转换成自然读法,而不是直接把符号交给模型猜。

3. 长对话要管理上下文长度

历史语音 token 能帮助模型保持对话连贯,但上下文无限增长会带来计算压力。实际系统可以保留最近几轮对话、关键说话人参考片段和必要文本摘要,而不是把所有历史都塞进去。

4. 流式播放要处理句尾边界

逐句生成不等于每句话之间机械拼接。播放端需要处理句尾停顿、缓冲长度和下一句起播时机,否则模型本身生成得自然,最终听感也可能被播放器破坏。

5. 音色克隆必须有权限控制

只要系统支持参考音频克隆,就需要加入授权校验、使用范围限制、水印或溯源机制。技术上能模仿一个声音,不代表业务上可以随意使用。

关键设计可以浓缩成三句话

FireRedTTS-2 用 12.5Hz 低帧率语音 tokenizer 缩短语音序列,并通过语义监督让 token 更适合文本到语音建模。文本语音合成模型采用混排格式和双 Transformer 架构,在逐句生成的同时利用历史上下文。评测结果显示,它在发音正确性、说话人保持、声学质量和主观自然度上都优于 MoonCast、ZipVoice-Dialogue、MOSS-TTSD 等对话合成系统。

相关技术资源:


评论