本文是《多模态:从视觉编码器到扩散模型》系列的第 4 篇(共七篇)。上一篇:VLM 的训练:数据、阶段与评测;下一篇:扩散模型:DDPM、score matching 与 flow matching

声音进入 LLM 的路与图片相似又不同。相似的是范式——一个编码器把音频变成向量序列,一个 connector 对齐到 LLM,然后像文本一样处理;Whisper 的 encoder 之于语音,就像 CLIP ViT 之于图片。不同的是语音要双向:VLM 几乎只做理解(看图说话),语音模型从一开始就要既听又说——语音助手要用语音回答。生成侧要求把 LLM 的输出变回波形,而波形是每秒 16000–48000 个采样点的连续信号,不能像文本一样逐 token 生成。

这就是语音比图片更需要离散 token 的原因:神经 codec 把一秒音频压成几十到几百个离散 token,让 LLM 可以用生成文本的方式生成语音。有了离散 token,理解与生成可以统一在一个自回归模型里;没有它,生成要靠一个独立的 TTS。2024–2025 年的全模态模型(GPT-4o、Qwen2.5-Omni、Moshi)都建立在这个基础上,并进一步要求实时——边听边说的全双工,时延几百毫秒。

这一篇也是理解线到生成线的过渡:离散 token 与自回归生成,正是第七篇自回归图像生成的思路。

本篇要回答的核心问题是:

语音为什么比图片更需要离散 token?全双工的时延由什么决定?

一、总览:两条路、三个层次

1. 声音进入 LLM 的两条路

表示 理解 生成 代表
连续特征 音频编码器(Whisper encoder 一类)的隐状态,经 connector 进 LLM 好——保留全部声学细节 不能直接生成;需外接 TTS Qwen-Audio / Qwen2-Audio、SALMONN、LLaMA-Omni(理解侧)
离散 token 神经 codec(EnCodec 一类)的量化码,或语义 token(HuBERT 聚类) 可以,但有信息损失 可以——LLM 自回归生成 token,codec 解码成波形 AudioLM、VALL-E、SpeechGPT、Moshi、GPT-4o(推测)
混合 理解用连续特征,生成用离散 token Qwen2.5-Omni、Mini-Omni、GLM-4-Voice

VLM 几乎全在第一行(理解用连续特征),因为它们不生成图片。语音模型要生成,所以必须有离散 token(第二、三行)——这是核心问题前半的答案,第三章展开。

2. 三个层次的 token

音频 token 分三个层次,对应压缩的三个粒度:

层次 来源 每秒 token 数 保留什么 丢什么
声学 token(acoustic) codec 的 RVQ 码(EnCodec:75 帧/秒 × 8 码本) 几百 音色、韵律、噪声——可以高保真重建 无(有损压缩)
语义 token(semantic) 自监督模型(HuBERT / w2v-BERT)的隐状态聚类 25–50 音素级内容、部分韵律 音色、细节——不能重建高保真波形
文本 token ASR 2–4(词) 内容 一切非语言信息

一段一分钟的语音:声学 token 约 3.6 万(EnCodec 8 码本)、语义 token 约 1500–3000、文本 200 词。语音 LLM 要在这三层之间选择或组合:AudioLM 的做法是先生成语义 token 再生成声学 token(内容与声音分开);Moshi 的做法是把语义与声学 token 一起以多流的方式生成。

3. 先说答案

全双工的时延由四段相加决定:(1)音频分帧的粒度——codec 帧 80 ms(Moshi 12.5 Hz)或 Whisper 的 20–40 ms,模型至少要等一帧到齐;(2)编码器与 LLM 的首 token 延迟——听到的音频要过编码器、进 LLM、生成第一个语音 token;(3)codec 解码的延迟——语音 token 变波形,流式 codec 可以逐帧解码;(4)语义决策的延迟——模型判断”该说了”需要的上下文——这一项不是计算,是模型的能力。Moshi 报告的理论时延 160 ms(两帧 80 ms)、实测约 200 ms;GPT-4o 报告平均 320 ms;人类对话的换手间隔约 200 ms。达到这个数字要求模型持续地同时处理输入流与输出流——不是”听完再说”,而是每一帧都在决定要不要说、说什么——这是 Moshi 的多流结构与 Qwen2.5-Omni 的 Thinker-Talker 分离要解决的问题。第六章展开。

4. 本文的章节安排

主题 内容
音频的表示与编码器 波形、mel 谱;Whisper 的 encoder-decoder;CTC 与 attention;自监督(HuBERT、w2v-BERT)
神经 codec 与 RVQ SoundStream / EnCodec 的结构;RVQ 的推导;为什么几个码本能高保真;语义 token vs 声学 token
语音理解 编码器 + connector + LLM(Qwen2-Audio);离散 token 路线;音频的 token 数与成本
语音生成 TTS 的三条路:AR 声学 token(VALL-E)、AR + NAR、流匹配(F5-TTS、CosyVoice);LLM 直接说
全模态与全双工 Qwen2.5-Omni 的 Thinker-Talker 与 TMRoPE;Moshi 的多流与内心独白;时延的四段账
评测 ASR 的 WER、TTS 的 MOS / WER / 说话人相似度、语音对话的评测
成本 音频 token 的账;全双工的算力
动手(建议) EnCodec 的码本层数
本文小结  

二、音频的表示与编码器

1. 从波形到 mel 谱

语音波形是 16 kHz 采样的一维信号,一秒 16000 个数。直接在波形上建模太长;标准做法是短时傅里叶变换:25 ms 的窗(400 点)、10 ms 的步长,每帧做 FFT 得到频谱,取幅度、按 mel 刻度(模仿人耳的频率感知,低频密高频疏)合并成 80 或 128 个频带,取对数——得到 \(100 \times 80\) 每秒的 log-mel 谱图。一秒语音 = 100 帧 × 80 维。它是所有语音模型的输入(除了直接在波形上工作的 codec 编码器)。

2. Whisper

Whisper(Radford 等 2022)是语音的”CLIP”——一个在 68 万小时(v3 用 500 万小时含伪标签)多语言、多任务数据上训的 encoder-decoder Transformer,任务是转写与翻译。encoder 输入 30 秒的 log-mel(3000 帧 × 80),过两层步长 2 的卷积(→ 1500 帧,20 ms 一帧)加正弦位置编码,32 层 Transformer(large:1.55B);decoder 是标准的自回归文本 decoder,输出转写。

它的 encoder 输出(1500 × 1280)是语音理解任务最常用的特征——就像 CLIP ViT 的 patch 特征。04-08第七章算过它的成本:30 秒固定 1500 个位置(不足 30 秒 pad),是 VLM 里 576 个 patch 的 2.6 倍。Qwen2-Audio 用 Whisper-large-v3 的 encoder,再 pool 到 25 Hz(每秒 25 个特征,30 秒 750 个),进 LLM。

3. CTC 与 attention 解码

ASR 的两种解码:CTC(Connectionist Temporal Classification)让 encoder 的每一帧独立输出一个字符或”空白”,去重去空白得到转写——不需要 decoder、并行、流式友好,但假设帧间条件独立,语言模型能力弱;attention decoder(Whisper)自回归地生成文本,每步 attend 到全部 encoder 输出——准确但非流式(要等 encoder 看完一整段)。工业 ASR 常用 RNN-T(Transducer)作为两者的折中——流式且有隐式语言模型。语音 LLM 里 Whisper encoder 的 attention 特征被 LLM 消费,LLM 本身就是 decoder。

4. 自监督编码器:HuBERT 与 w2v-BERT

对应视觉的 DINOv2:不用标签,在海量无标注语音上学表示。wav2vec 2.0 用对比目标(预测被 mask 的帧的量化表示);HuBERT 用 k-means 聚类得到的伪标签做 masked prediction,迭代地用自己的隐状态重新聚类;w2v-BERT 结合两者。它们的隐状态(尤其中间层)编码音素级内容——对隐状态做 k-means(500–2000 类)得到的离散码就是语义 token,AudioLM、SpeechGPT 用它做内容表示。它们不编码音色(说话人信息在 k-means 中被丢掉)——这是”语义”的含义。

三、神经 codec 与 RVQ

1. 为什么需要 codec

要让 LLM 生成语音,需要一个离散的、序列不太长的、能重建波形的表示。mel 谱是连续的且每秒 100 帧;波形每秒 16000 个点;语义 token 离散但不能重建音色。神经 codec 填这个空:把波形压成每秒几十帧、每帧几个离散码,且能高保真解码回波形。

2. SoundStream / EnCodec 的结构

SoundStream(Zeghidour 等 2021)与 EnCodec(Défossez 等 2022)的结构相同:

  • 编码器:一维卷积网络,对波形逐级下采样(EnCodec 24 kHz:步长 2, 4, 5, 8 共 320 倍 → 75 帧/秒),每帧一个 128 维的连续向量。
  • 量化器:残差向量量化(RVQ,下一节),把每帧的 128 维向量变成 \(N_q\) 个离散码(\(N_q = 8\),每个码本 1024 项 = 10 bit)。
  • 解码器:卷积网络镜像上采样,从量化后的向量重建波形。
  • 训练:重建损失(波形 L1 + 多尺度 mel 谱损失)+ 对抗损失(多个判别器判断真假)+ 感知特征匹配 + RVQ 的 commitment 损失。

比特率:75 帧/秒 × 8 码本 × 10 bit = 6 kbps——比 MP3 的 128 kbps 低 20 倍,主观质量接近。

3. RVQ 的推导

向量量化(VQ):一个码本 \(\{e_1, \ldots, e_K\} \subset \mathbb{R}^d\),把向量 \(z\) 映射到最近的码字 \(\hat z = e_{k^*}\),\(k^* = \arg\min_k \lVert z - e_k \rVert\)。\(K = 1024\) 时每帧 10 bit,但一个 128 维的向量用 1024 个码字表示误差太大——要高保真需要 \(K\) 巨大(\(2^{80}\) 一类),不可能。

残差向量量化把量化分成多级:

\[r_0 = z, \quad k_i = \arg\min_k \lVert r_{i-1} - e^{(i)}_k \rVert, \quad r_i = r_{i-1} - e^{(i)}_{k_i}, \quad i = 1, \ldots, N_q\] \[\hat z = \sum_{i=1}^{N_q} e^{(i)}_{k_i}\]

第一个码本量化 \(z\) 本身,第二个码本量化第一级的残差,第三个量化第二级的残差……每级一个独立的码本(\(K = 1024\))。\(N_q = 8\) 级的总表示能力是 \(1024^8 = 2^{80}\) 个不同的 \(\hat z\)——用 8 个小码本得到一个巨大的等效码本,且每级的搜索只是 1024 次比较。

为什么它有效:每一级的残差 \(r_i\) 的范数递减(每级去掉了一部分),后面的码本在越来越小的尺度上精细化。这天然形成由粗到细的层次:第 1 个码本编码最主要的信息(内容与大致音色),后面的码本编码细节(高频、微弱的噪声)。只用前 \(n\) 个码本解码,得到的是一个低比特率、质量较差但内容完整的重建——EnCodec 用同一个模型支持 1.5 / 3 / 6 / 12 kbps(2 / 4 / 8 / 16 码本)就是靠训练时随机丢弃后面的码本(quantizer dropout)。

训练 RVQ 时的问题与 VQ-VAE 相同(第七篇详述):\(\arg\min\) 不可微,用 STE(L6 第四篇)把梯度直通到编码器;码本用 EMA 更新(而不是梯度);加 commitment 损失 \(\lVert z - \text{sg}(\hat z) \rVert^2\) 让编码器输出靠近码字;用 k-means 初始化码本并对长期未用的码字随机重置,防止码本坍缩(只有少数码字被用到)。

4. 声学 token 的层次结构对生成的意义

RVQ 的层次结构决定了语音生成的形态:第 1 个码本的 token 序列(75/秒)承载内容,可以由一个自回归模型精确地生成;后面 7 个码本是”细化”,彼此依赖弱、可以并行生成——这正是 VALL-E 的 AR + NAR 设计(第五章)。以及 AudioLM 的三阶段:语义 token → 粗声学 token(前几个码本)→ 细声学 token。

5. 语义 token 与声学 token 的分工

声学 token 保留一切但序列长(75 × 8 = 600/秒)且”内容”埋在细节里,LLM 直接在它上面建模语言内容效率低。语义 token 短(25–50/秒)、内容清晰,但不能重建。所以很多系统两者都用:LLM 在语义 token(或文本 + 语义 token)上做内容建模,再用一个较小的模型从语义 token 生成声学 token 并解码。近年的 codec(SpeechTokenizer、Mimi)试图把两者合一:让 RVQ 的第一个码本被蒸馏成语义 token(用 WavLM / HuBERT 的表示做目标),后面的码本承载声学细节——一个 codec 同时给出语义与声学,Moshi 用的 Mimi 就是这样(12.5 Hz、8 码本、1.1 kbps,第一码本语义蒸馏)。

四、语音理解

1. 编码器 + connector + LLM

Qwen2-Audio(2024)的结构就是 VLM 的翻版:Whisper-large-v3 encoder → 平均池化到 25 Hz → 线性投影 → Qwen-7B。训练三阶段(预训练对齐、多任务 SFT、DPO),数据覆盖语音识别、翻译、音频描述、声音事件、音乐、语音对话;能力包括 ASR、翻译、音频问答、语音指令跟随(用户说话、模型文本回答)。SALMONN 用双编码器(Whisper 管语音 + BEATs 管一般音频)。这条路的优点与 VLM 相同:LLM 零改动、理解质量高(连续特征保留全部信息)。缺点:不能说——输出是文本,要说话需外接 TTS,时延叠加。

2. 离散 token 路线

把语音 token 化后当文本处理:SpeechGPT 用 HuBERT 语义 token 扩展 LLM 词表,语音与文本在同一个自回归模型里,能听能说(说的是语义 token,再用一个 vocoder 变波形——音色由 vocoder 决定,不可控)。这条路让理解与生成统一,但理解质量受 token 信息损失的限制(语义 token 丢了副语言信息——语气、情绪、说话人),且离散 token 序列长(一分钟 3000 个)。

3. 音频的 token 预算

对比图片:一张图 256–1000 个 token;一分钟语音在 Qwen2-Audio 里 25 Hz × 60 = 1500 个 token,在 Whisper 原生 50 Hz 下 3000,在 EnCodec 声学 token 下 3.6 万(8 码本)。语音的 token 数量级比图片大,且随时长线性增长——一小时的会议录音是 9 万个连续特征 token,超过多数 LLM 的上下文。这是语音模型比 VLM 更需要压缩(更低的帧率:Mimi 的 12.5 Hz、Qwen2.5-Omni 的 25 Hz→ 进一步合并)与流式处理(不把整段放进上下文)的原因。

五、语音生成

1. TTS 的三条路

路线 做法 代表 特点
AR 声学 token 文本 → 自回归生成 codec 第一码本 token → NAR 生成其余码本 → codec 解码 VALL-E(2023)、VALL-E 2 零样本音色克隆(3 秒 prompt);AR 的不稳定(重复、跳词)
语义 → 声学 两级 文本 → 语义 token(AR)→ 声学 token(NAR 或流匹配)→ 波形 CosyVoice、SpeechGPT-Gen、AudioLM 式 内容与音色解耦;语义 token 的 AR 更稳
非自回归 / 流匹配 文本 + 参考音频 → 直接用扩散 / flow matching 生成 mel 谱或 codec latent → vocoder F5-TTS、E2 TTS、Voicebox、NaturalSpeech 3 快(几十步并行)、稳;需要文本—音频对齐(或 filler token 技巧)

VALL-E 的设计直接来自 RVQ 的层次:第一个码本的 token 用自回归 Transformer 生成(以文本音素与 3 秒 prompt 的声学 token 为条件),这一步决定内容与大致韵律;其余 7 个码本用一个非自回归 Transformer 一次性生成(每个码本一层,以前面所有码本为条件)——细节的并行填充。它把 TTS 变成了”语言建模”,用 6 万小时数据训出的零样本克隆能力震动了领域。它的问题也是语言模型的问题:AR 采样的不稳定(重复、丢字、幻觉式的多说),VALL-E 2 用重复感知采样与分组建模缓解。

流匹配 TTS(F5-TTS 2024)走第六篇要讲的扩散 / 流路线:把文本(字符序列 pad 到目标长度)与参考音频的 mel 拼起来,用 DiT 在噪声与目标 mel 之间学一个速度场,32 步 ODE 采样得到 mel,再用 vocoder(Vocos)变波形。不需要音素、不需要对齐器、不需要时长模型;非自回归所以没有 AR 的不稳定;速度快(RTF 0.15)。2024–2025 年开源 TTS 的主流转向这条路或两级路(CosyVoice 2 用 AR 语义 token + 流匹配声学)。

2. LLM 直接说

语音 LLM 的”说”有两种实现:(a)LLM 生成文本,外接 TTS——简单,但时延 = LLM 首 token + TTS 首帧,且 TTS 拿不到 LLM 的”语气意图”;(b)LLM 直接生成语音 token(声学或语义)——Moshi、GLM-4-Voice、Mini-Omni 的做法——时延低、语气可控,但 LLM 要同时学两种输出,且语音 token 序列长导致文本推理能力下降(模态间的能力竞争:Moshi 报告纯语音训练的模型在文本知识任务上明显弱于其文本底座,靠”内心独白”——先生成文本 token 再生成对应的语音 token——缓解)。

Qwen2.5-Omni 的 Thinker-Talker 是 (a) 与 (b) 的折中:Thinker 是一个完整的多模态 LLM(听、看、想、输出文本),Talker 是一个较小的双轨自回归模型,接收 Thinker 的隐状态与文本 token流式地生成语音 codec token;两者端到端联合训练。Talker 拿到的不只是文本还有 Thinker 的隐状态(语气与语义意图),且流式(Thinker 每出几个 token Talker 就开始说),而 Thinker 的文本能力不受语音 token 的干扰。

六、全模态与全双工

1. 全模态:一个模型听、看、说

Qwen2.5-Omni(2025):输入文本、图片、音频、视频(带音轨),输出文本与语音。结构上是 Qwen2.5-VL 的视觉路径 + Qwen2-Audio 的音频路径 + Thinker-Talker 的语音输出。一个新问题是音视频的时间对齐:视频帧的 token 与音频的 token 要按真实时间交错,模型才知道”这句话是在这一帧说的”。TMRoPE(Time-aligned Multimodal RoPE)扩展 M-RoPE:时间轴的位置 id 以 40 ms 为单位与绝对时间对齐,音频帧与视频帧按时间戳插入同一序列(每 2 秒一块,块内先视频后音频),三个模态共享时间轴。

GPT-4o(2024)是这条线的先行者——一个端到端模型处理文本、音频、图像的输入与输出,平均语音时延 320 ms——但没有公开结构;从行为推测它在音频上用了离散 token 与端到端的生成。

2. 全双工:边听边说

半双工(走对讲机):用户说完 → 模型听完 → 模型回答 → 用户等回答完再说。全双工(打电话):双方随时可以说,模型能被打断、能插话(”嗯”“对”)、能在用户停顿时接话。

Moshi(Kyutai 2024)是第一个开源的全双工语音模型,它的结构回答了”怎么同时听与说”:

  • 多流:模型的每一步同时处理三条流——用户的音频 token(Mimi 8 码本)、模型自己的音频 token(8 码本)、模型的文本 token(内心独白)。每个时间步(80 ms)三条流各前进一帧。用户说话时模型的输出流是”静音”token,模型说话时用户流是背景噪声或静音——但两条流始终都在,模型每一帧都在决定自己这一帧输出什么。
  • RQ-Transformer:时间维用一个大的 Transformer(7B,Helium)建模帧序列;每帧内的 8 + 8 + 1 个 token 用一个小的 depth Transformer 自回归生成——把”每帧 17 个 token”的深度维从主模型里拆出来,主模型每 80 ms 只跑一步。
  • 内心独白:在生成音频 token 之前先生成对应的文本 token(时间对齐、略微提前),文本作为语音内容的”脚本”,让语音的语言质量接近文本模型;反过来延后文本也可以做流式 ASR。
  • 时延:帧 80 ms,理论最小时延两帧 160 ms(一帧输入到齐 + 一帧输出),实测约 200 ms。

3. 时延的四段账

回到核心问题后半。一次”用户说完 → 模型开始出声”的时延:

内容 量级 由什么决定
分帧 等待当前帧的音频到齐 codec 帧长:Mimi 80 ms、EnCodec 13 ms、Whisper 特征 20 ms(但 Whisper 要 30 s 窗——非流式) codec 的帧率;流式编码器的窗
首 token 编码器 + LLM 前向 → 第一个输出 token LLM 一步 decode 20–50 ms(7B);Thinker-Talker 里 Thinker 出几个文本 token 后 Talker 才开始 模型大小、硬件、结构
解码 语音 token → 波形 流式 codec 解码器逐帧几 ms;非流式 vocoder 要等一段 codec 解码器是否因果 / 流式
语义决策 模型判断”用户说完了 / 该我说了” 人类约 200 ms;模型依赖对停顿与语义完成度的判断 训练数据里的对话节奏;这不是计算延迟

Moshi 的 160–200 ms 里:80 ms 分帧 + 一步 7B decode(约 40 ms,帧内 depth Transformer 另加几 ms)+ Mimi 流式解码(几 ms)+ 决策(模型每帧都在决策,没有额外等待)。半双工系统(ASR → LLM → TTS 串联)的典型时延是 1–3 秒:ASR 要等静音检测(VAD)判断说完(300–700 ms)+ LLM 首 token(几百 ms,含 prefill)+ TTS 首帧(几百 ms)。全双工把三段串联变成一个模型的一步,且去掉了 VAD 的等待——这是 10 倍时延差的来源。

代价:全双工模型要持续运行——用户不说话时它也每 80 ms 跑一步(输出静音 token),一小时对话是 4.5 万步 decode;半双工只在有输入时算。且全双工的训练数据(真实的、有打断与重叠的双流对话)极少,Moshi 用合成对话(两个 TTS 声音按脚本对话)与真实数据混合。

七、评测

1. 理解侧

  • ASR:WER(词错误率)在 LibriSpeech(clean / other)、Common Voice、多语言的 FLEURS 上。Whisper-large-v3 在 LibriSpeech clean 约 2%。
  • 音频理解:AIR-Bench(音频指令跟随)、MMAU(音频多选推理)、声音事件分类(AudioSet)、音乐(MusicCaps)。
  • 语音对话:VoiceBench——把文本指令 benchmark(AlpacaEval、IFEval、常识问答)用 TTS 转成语音输入,评模型的文本或语音回答;它暴露了语音输入下的能力退化(同一模型语音输入比文本输入低 5–15 个点是常态)。

2. 生成侧

  • 可懂度:把生成的语音用 ASR 转写,与目标文本比 WER。
  • 自然度:MOS(人工 1–5 分);自动代理 UTMOS / DNSMOS。
  • 说话人相似度:用说话人验证模型(WavLM-TDNN)算生成音频与参考音频的 embedding 余弦相似度。
  • 韵律 / 情感:较难自动评,多靠 MOS 的细分。

3. 全双工

  • 时延:从用户结束到模型开始出声的分布(不是平均——尾部决定体验)。
  • 打断处理:用户插话时模型是否停下、多快停下。
  • 对话流畅度:合成的双流测试集上的换手成功率、重叠率、不当沉默。

标准化程度低,是 2025 年评测方法论的空白之一。

八、成本

1. 音频 token 的账

以 Qwen2-Audio 的 25 Hz 连续特征为例,一分钟音频 1500 个 token 进 7B LLM:prefill \(2 \times 7B \times 1500 = 21\) TFLOPs,KV 1500 × 128 KB(Llama-7B 结构)= 188 MB。一小时录音 9 万 token——超过多数上下文;实际系统按段处理(30 秒一段)或用更低帧率。

离散声学 token 的 LLM 建模:Moshi 每帧 17 个 token(8 + 8 + 1),主模型每 80 ms 一步(12.5 步/秒),一小时 4.5 万步——但每步是 7B 的一次 decode(约 40 ms),持续占一张卡的一部分。深度 Transformer 每帧 16 步(小模型,几 ms)。

2. 全双工的持续成本

半双工系统在无输入时空闲;全双工模型每 80 ms 跑一步不管有没有人说话。一路对话持续占用约 1/2 张 H100(7B 模型 40 ms/步 in 80 ms)——比半双工贵一个量级,且不能像文本服务那样靠 batch 摊薄(每路对话的节拍是实时的,batch 只能在多路之间做)。这是全双工产品定价高的算力基础。

九、动手(建议)

  • RVQ 的层次:用 encodec(或 transformers 的 EncodecModel)对一段 10 秒语音编码,分别用 2 / 4 / 8 个码本解码(对应 1.5 / 3 / 6 kbps),听三段重建,并用一个 ASR(Whisper-small)转写测 WER、用 UTMOS 打分。看第一个码本承载了多少内容、后面的码本改善了什么。
  • 语义 vs 声学:用 HuBERT-large 的第 9 层特征做 k-means(500 类)得到语义 token,用一个开源的 unit vocoder 解码,与 EnCodec 重建对比——语义 token 的重建应该内容对但音色变了。
  • 理解退化:用 VoiceBench 的一个子集(比如 IFEval 的 100 条),文本输入与 TTS 语音输入分别喂 Qwen2-Audio-7B-Instruct,比准确率。
  • 时延:本地跑 Moshi(开源,需要 24 GB 卡)测端到端时延分布;与一个 Whisper → LLM → F5-TTS 的串联管线比。

该看的:2 码本的 WER 是否已接近 8 码本(内容在第一码本)而 MOS 差很多;语义 token 重建的说话人相似度是否低;语音输入比文本输入掉几个点;串联管线的时延是否在秒级而 Moshi 在 200–300 ms。不引用任何未跑过的数字。

十、本文小结

规则 备注
表示 16 kHz 波形 → log-mel(100 帧/秒 × 80)→ 编码器 Whisper encoder 1500 位置 / 30 秒
两条路 连续特征(理解好、不能说);离散 token(能说、理解有损);混合 语音要双向 → 需要离散 token
三层 token 声学(几百/秒,可重建);语义(25–50/秒,内容);文本(2–4/秒) 一分钟:3.6 万 / 3000 / 200
RVQ \(r_i = r_{i-1} - e^{(i)}_{k_i}\),\(N_q\) 个 1024 码本 ≈ \(2^{10 N_q}\) 等效码本 由粗到细;quantizer dropout 支持多比特率;STE + EMA + 重置防坍缩
语义蒸馏 第一码本蒸馏 HuBERT / WavLM(SpeechTokenizer、Mimi) 一个 codec 同时给语义与声学
理解 Whisper encoder → pool 25 Hz → 投影 → LLM(Qwen2-Audio) 一分钟 1500 token;语音输入比文本掉 5–15 点
TTS AR 声学(VALL-E:AR 第一码本 + NAR 其余);语义→声学两级;流匹配(F5-TTS,32 步 DiT) 主流转向流匹配与两级
直接说 LLM 生成语音 token;模态竞争伤文本能力 → 内心独白 / Thinker-Talker Qwen2.5-Omni:Thinker 隐状态 + 文本流式给 Talker
全双工 Moshi:三流每帧 80 ms 同步、RQ-Transformer(时间 7B + 深度小模型)、内心独白 160 ms 理论 / 200 ms 实测;GPT-4o 320 ms;人类 200 ms
时延四段 分帧 + 首 token + 解码 + 语义决策 半双工串联 1–3 s(VAD + ASR + LLM + TTS);全双工一步
成本 全双工持续 decode,每路约半张 H100,不能 batch 摊薄 半双工空闲时零成本

核心问题的答案:语音比图片更需要离散 token,因为语音模型要生成——VLM 只需理解,连续特征进 LLM 就够;而把 LLM 的输出变回每秒上万个采样点的波形,唯一可行的方式是让 LLM 生成一个短的离散序列(codec token,每秒几十帧、每帧几个码),再用 codec 解码器还原波形。RVQ 用几个 1024 项的小码本得到 \(2^{80}\) 的等效表示能力,且自然分层(第一码本内容、后面细节),这个层次直接决定了 VALL-E 的 AR + NAR 结构与 Moshi 的多流建模。全双工的时延由四段相加:codec 帧长(Mimi 80 ms)、模型一步的首 token 时间(7B 约 40 ms)、流式 codec 解码(几 ms)、以及模型判断”该说了”的语义决策——后者不是计算而是能力,全双工模型每一帧都在决策所以没有额外等待。半双工把 VAD、ASR、LLM、TTS 串联起来是 1–3 秒,全双工把它们合成一个模型的一步是 200 ms,代价是模型要持续运行、每路对话占半张卡。下一篇进入生成线的数学核心:扩散模型。

下一篇

扩散模型:DDPM、score matching 与 flow matching

本文由 arganzheng 创作,采用 CC BY 4.0 许可协议。在保留原文作者、署名以及完整原文链接(https://arganzheng.life/speech-and-omni-models-audio-encoders-codecs-and-duplex.html)的前提下,欢迎各种形式的转载、翻译或商业引用。


COMMENTS

评论存放在 GitHub Discussions, 用 GitHub 账号登录即可发表,支持 Markdown。 想针对正文某句话说?选中那段文字,点浮出的「评论」即可划线评论;觉得哪里写错了,发表时勾上「同时提交 Issue」。 有人回复你时 GitHub 会按你的通知设置发邮件,不用守在这里。

×