image.png

Important

语音数据结构全景图

**star**
波形 [16000点/秒, 一维浮点数组]
STFT + Mel滤波
Mel频谱 [~50帧/秒 × 80频段, 二维矩阵]  ← Whisper 吃这个
  ↓ HuBERT + KMeans
语义token [~50个/秒, 1层]            ← 只有内容,没有音色
 
波形 [16000点/秒]
  ↓ 卷积编码器 + RVQ
声学token [~50个/秒, 8层]             ← 内容+音色+情感全有

各种”打法”的本质 = 让 LLM 处理哪种表示?语义 token?声学 token?还是连续向量?每种选择都有不同的 trade-off。

第 3 章|口语对话模型的表征

论文把语音表征分成了语义 token声学 token 两大类,然后分别从输入侧和输出侧讲了一堆模型。


打法 1:纯语义,声学靠后补

语音 → HuBERT → 语义token → LLM → 语义token → HiFi-GAN声码器 → 语音

代表: SpeechGPT, Spirit-LM

LLM 全程只碰语义 token,声学细节全靠声码器”脑补”。简单但音色可控性差。


打法 2:语义为主 + 额外声学/情感辅助

HuBERT(语义)    → adapter₁ → 4096维   ┐
Emotion2Vec(情感) → adapter₂ → 4096维 ├─ 序列维度拼接 → LLM → 语义token → 声码器
文本 embedding(4096维) ───────────────┘

注意:拼接是在序列维度(dim=0)上拼,不是特征维度(dim=-1),因为 LLM 的隐藏维度是固定的。每一路都需要各自的 adapter 把维度对齐到 LLM 的 hidden dim。

代表: E-Chat, ParalinGPT, Spoken-LLM

声学/情感特征只是帮 LLM 做更好的内容决策,输出仍然是语义 token。


打法 3:纯声学,一步到位

语音波形 → 卷积编码器(下采样) → 连续向量 → RVQ(多层量化) → 多层离散声学token → LLM → 多层离散声学token → 解码器(反卷积上采样) → 语音波形

下采样和离散化是分开的两步:卷积负责压缩波形为连续向量,RVQ 负责把连续向量变成离散 token。只不过端到端一起训练,看起来像一步。

代表: Moshi(用 Mimi)

LLM 直接生成多层声学 token,解码器直接还原。音质好,但 token 量大。


打法 4:RVQ 分层——第 1 层偏语义,后面偏声学

语音 → SpeechTokenizer → RVQ第1层(蒸馏自HuBERT,偏语义) + 第2~8(声学)
         LLM只处理第1层 → 流匹配模型补全后续层 → 解码器 → 语音

代表: SpeechGPT-Gen

打法 1 和 3 的折中。但蒸馏会导致 RVQ 各层互相拖累(第 1 层被拉向语义后,后面的层要同时补语义漏掉的部分和声学信息)。


打法 5:语义和声学彻底解耦(split-RVQ)

语音 → Mimi编码器 → 独立VQ(语义,蒸馏自WavLM) + 并行7层RVQ(声学) → 向量相加 → 解码器 → 语音
                     各自独立量化,互不干扰

代表: Mimi

和打法 4 的区别:两个分支都直接面对原始向量,不是一个吃另一个的”残差”。


技术备忘

  • RVQ(残差向量量化)

    一层量化不够精确就多量化几层,每层修正上一层的误差。8 个小码本的加法组合()代替一个天文数字大的码本()。RVQ 本身不是神经网络,就是查码本的算法。但包裹它的编解码器可以有卷积网络甚至 Transformer。

  • 蒸馏(Distillation)

    让学生模型模仿教师模型的输出。比如 SpeechTokenizer 用 HuBERT 当教师,让 RVQ 第 1 层的输出尽量接近 HuBERT 的输出(最大化余弦相似度),从而”灌入”语义信息。

  • Adapter

    本质是 MLP(1~2 层线性变换 + 激活函数),把一种维度投影到另一种维度。是不同模态之间的桥梁。

  • Whisper ≠ 词表扩展

    Whisper 输出的是连续向量,不是离散 token。走的是 adapter 投影到 LLM 空间的路线(连续向量投影),不是词表扩展。HuBERT + K-Means 才产生离散 token → 词表扩展。

  • 声码器 vs 解码器

    声码器(HiFi-GAN):输入只有语义 token,需要”脑补”声学细节,活重。

    解码器(EnCodec decoder):输入是多层声学 token,信息完整,只需”解压”还原。

    两者在对话系统中通常都是预训练后冻结的。


第 4 章|口语对话模型的训练范式

4.1 五类架构范式

Important

五类架构范式演进路线 — 越往下越端到端,延迟越低,但训练难度越大、文本能力保留越难

Important

仅文本输出语音 → 编码器 → Adapter → LLM → 文本 → TTS → 语音
LLM 只处理文本,语音由外部 TTS 生成。代表:Qwen-Audio, SALMONN, VITA

Important

模态链 (CoM)语音token → LLM → 先出全文本 → 再生成语音token → 解码器
串行生成,文本先行、语音跟随,延迟高。代表:SpeechGPT, Spectron

Important

文本+语音交错T+S 混合序列 → LLM 联合预训练 → T+S 混合输出
两种模态交替出现,不再强制先后顺序。代表:Spirit-LM, USDM

Important

并行生成语音 → LLM ⇒ 文本token + 语音token 同时输出
文本和语音同步解码,延迟低。代表:PSLM, Moshi, Mini-Omni, LLaMA-Omni

Important

语音→语音直接生成语音token → LLM(无中间文本) → 语音token → 解码器
完全去掉文本中间步骤,最端到端。代表:SyncLLM, IntrinsicVoice, Align-SLM

Important

五类架构范式速览

范式核心思路代表模型
仅文本输出语音 → adapter → LLM → 文本 → TTSQwen-Audio, SALMONN, VITA
模态链(CoM)先生成全文本,再生成语音 tokenSpeechGPT, Spectron
文本+语音交错混合序列联合预训练Spirit-LM, USDM
并行生成文本与语音 token 同时输出PSLM, Moshi, Mini-Omni, LLaMA-Omni
语音到语音直接生成去除中间文本,直接输出语音SyncLLM, IntrinsicVoice, Align-SLM

第 5 章|流式、双工与交互

这三个概念分别回答不同的问题:

  • 流式 → 怎么做到”边听边处理边输出”?

  • 双工 → 用户和系统能不能同时说话?

  • 交互 → 遇到打断、backchannel、轮次切换怎么办?


概念 1:流式处理(Streaming)

流式 = 不等输入说完就开始处理和输出。分两个方向:

  • 流式理解:用户还在说,模型已经在处理了(不等说完)

  • 流式生成:模型还没全算完,已经开始往外吐结果了(不等算完)

实现流式的三个核心技术:

Important

因果卷积(Causal Convolution)

普通卷积:时刻 t 的输出会看 t-k/2 到 t+k/2(看到了未来)

因果卷积:左边补零,只看 t-k+1 到 t(只看过去和现在)

→ 保证每一帧输出不依赖未来输入 → 可以实时逐帧计算

加强版:空洞因果卷积 — 卷积核之间插零,不加延迟就能扩大感受野

Important

因果注意力(Causal Attention)

在注意力矩阵上盖一个下三角掩码,未来位置设为 −∞(softmax 后变 0)

→ 每个 token 只能 attend 到自己和之前的 token → 可增量式推理

和因果卷积的思想一样:不偷看未来

Important

队列管理(Queue Management)

音频流切帧 → 按顺序排队处理 → 保证实时性和有序性

是工程层面的保障,不是算法创新

  • 端到端模型的流式实现差异

    • Moshi:整个 codec + Transformer + 注意力全部因果化,从零训练流式 codec → 真·全流式

    • Mini-Omni / Llama-Omni:输入侧用非流式 Whisper(不算真流式输入),靠输出侧设计降延迟

    • OmniFlatten:分块处理 + 渐进式学习,减少轮次切换延迟

    • IntrinsicVoice:GroupFormer 压缩语音 token 长度,加速推理但作者自己也说不算完全流式


概念 2:双工(Duplex)

来自通信领域的术语,描述两端能不能同时收发:

Important

单工(Simplex) — 只能单向。广播电台:它说你听,你没法回嘴

半双工(Half-Duplex) — 双向但轮流。对讲机:你说完按钮松手,对方才能说

全双工(Full-Duplex) — 双向同时。电话:两个人可以同时说话、互相打断

映射到对话系统:

  • 半双工 = 传统语音助手(Siri):你说完 → 系统想 → 系统说 → 你再说。中间有明显停顿

  • 全双工 = GPT-4o 式交互:系统一边说一边听,你可以随时打断,系统也能给 “嗯” “对” 这种反馈

全双工的核心难点:模型在生成输出的同时,必须保留感知输入的能力(一边说一边听)


概念 3:交互建模(Interaction)

全双工解决了”能不能同时收发”的问题,交互建模解决的是”收到了该怎么反应”:

Important

轮次切换(Turn-taking) 的三个子概念:

  1. 轮次切换线索(Cues) — 声音、节奏、呼吸、停顿等信号,帮系统判断”用户是不是要开口了”

  2. 轮次结束检测/预测 — 检测 = 判断现在是否结束了;预测 = 猜未来什么时候会结束

  3. 重叠(Overlap) → 两种情况:

    • 用户想抢话 → 打断(Interruption) → 系统应停下来让用户说

    • 用户只是附和 → 回声反馈(Backchannel) 如 “嗯” “对” → 系统不该停

一个合格的交互系统至少要能做到:

  1. 检测用户打断 → 立即停止输出

  2. 用户说话时给 backchannel → “嗯” “我明白了”

  3. 用户说完后快速响应 → 别等太久

  4. 区分短暂停顿 vs 真的说完了 → 别抢话

  5. 必要时主动打断用户 → 纠正错误等

  • 级联系统 vs 端到端系统的交互实现

    级联系统(显式建模轮次):

    • 用 VAD + ASR + 语义分析判断用户状态

    • 用有限状态机(FSM)控制”说话/聆听”切换

    • 代表:Duplex Conversation(三模块:用户状态检测 + 响应信号选择 + 打断检测)、Full-duplex LLM(神经 FSM,200ms 时延)、VITA(双模型:生成模型 + 监控模型)

    端到端系统(从数据中隐式学习):

    • 不显式建模轮次,靠双通道音频训练直接学会交互

    • 代表:dGSLM(双塔 Transformer + 交叉注意力,开山之作)、Moshi(多流 + Inner Monologue,160ms 理论时延)、SyncLLM(分块交替预测双方 token)、Freeze-Omni(块级状态预测:0=继续听 / 1=快速反馈 / 2=开始回答)


Important

一句话总结

流式 = 不等说完就开始干活(低延迟的基础)

双工 = 能同时听和说(自然交互的基础)

交互 = 听到了知道该怎么反应(智能对话的基础)

三者层层递进:流式是双工的前提,双工是交互的前提

训练资源与评估方法

image 1.png