
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 → 文本 → TTS Qwen-Audio, SALMONN, VITA 模态链(CoM) 先生成全文本,再生成语音 token SpeechGPT, 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) 的三个子概念:
轮次切换线索(Cues) — 声音、节奏、呼吸、停顿等信号,帮系统判断”用户是不是要开口了”
轮次结束检测/预测 — 检测 = 判断现在是否结束了;预测 = 猜未来什么时候会结束
重叠(Overlap) → 两种情况:
用户想抢话 → 打断(Interruption) → 系统应停下来让用户说
用户只是附和 → 回声反馈(Backchannel) 如 “嗯” “对” → 系统不该停
一个合格的交互系统至少要能做到:
-
检测用户打断 → 立即停止输出
-
用户说话时给 backchannel → “嗯” “我明白了”
-
用户说完后快速响应 → 别等太久
-
区分短暂停顿 vs 真的说完了 → 别抢话
-
必要时主动打断用户 → 纠正错误等
-
级联系统 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
一句话总结
流式 = 不等说完就开始干活(低延迟的基础)
双工 = 能同时听和说(自然交互的基础)
交互 = 听到了知道该怎么反应(智能对话的基础)
三者层层递进:流式是双工的前提,双工是交互的前提
训练资源与评估方法
