- 设计一个共享词表,容纳文本、图像、语音和音乐 token 而不发生冲突。
- 在压缩率与重建效果的权衡上,比较 SEED-Tokenizer(图像)与 SpeechTokenizer 的 residual-VQ(语音)。
- 解释构建任意到任意生成的四阶段课程。
- 说出三种开放的任意到任意方案及其主要权衡:MIO、AnyGPT、Unified-IO 2。
问题
统一多模态模型说起来容易,规模化做起来难。直到 2024 年,大多数「任意到任意」系统都是 pipeline 式的:视觉模型 → 文本表示 → 语音模型 → 音频。每一跳都丢失信息、增加延迟、让训练更复杂。GPT-4o 的演示视频展示了单模型方案能做到亚秒级响应;开放系统落后了数月。
工程挑战在于:
- 每种模态都需要 tokenizer,压缩要足够无损以支持重建,产出的 token 速率还要是 Transformer 能消化的。
- 单一词表要为文本(32k+)、图像(16k+)、语音(4k+)、音乐(8k+)分配空间。至少四万多个条目。
- 训练数据必须覆盖每一个输入-输出组合(文本→图像、图像→语音、语音→图像等),否则模型必须靠组合能力泛化。
- 推理时输出 token 的流式速度必须满足对话级延迟(首个音频字节时间 <500ms)。
概念
四种模态,四个 tokenizer
MIO 的 tokenizer 栈:
- 文本:标准 BPE,词表约 32000。
- 图像:SEED-Tokenizer(2023)——带离散码本的量化 VAE,4096 个条目,每张图 32x32 个 token。
- 语音:SpeechTokenizer residual-VQ(2023)——把 16kHz 波形编码到 8 个分层码本;第一层是粗粒度内容,后续层补充韵律和说话人身份。
- 音乐:类似的 residual-VQ(Meta 的 MusicGen / Encodec 家族),4-8 个码本。
每种模态产出整数 token。这些 token 在共享词表中获得互不重叠的 ID 区间:
text: 0..31999
image: 32000..36095 (4096 image tokens)
speech: 36096..40191 (4096 speech base tokens, plus residual layers)
music: 40192..48383 (8192 music tokens)
sep: 48384..48390 (<image>, <speech>, <music>, </...>, etc.)总计:约 48k 词表。输入 embedding 和输出投影覆盖整个词表。
流式解码
语音生成使用 residual-VQ。Transformer 预测基础层(第 0 层)的语音 token;一个并行解码的残差量化器预测后续层。每个第 0 层 token 在 16kHz 下大约对应 50ms 音频。
流式模式:
- 用户对着麦克风说话;实时音频 tokenizer 每 50ms 产出语音 token。
- MIO 在 token 到达时即时消费(prompt 预填充 + 增量前向)。
- 输出 token 随生成流出;并行语音解码器把它们转成音频采样,延迟约 50-150ms。
- 首个音频字节时间:MIO 论文中约 300-500ms,接近 GPT-4o 的约 250ms。
Mini-Omni(arXiv:2408.16725)、GLM-4-Voice(arXiv:2412.02612)和 Moshi(arXiv:2410.00037)是互补的流式语音 LLM 设计。Moshi 尤其能在单张 GPU 上做到 160ms 往返。
四阶段课程
MIO 的训练课程:
- 第一阶段——对齐。大规模模态配对语料:文本-图像、文本-语音、文本-音乐。每一对使用各自的 token 词表片段。训练共享词表。
- 第二阶段——交错。多模态交错的文档(带图片和视频的博客、带文字稿的播客等)。训练跨模态上下文。
- 第三阶段——语音增强。加入额外音频数据提升语音质量,同时不损失文本能力。
- 第四阶段——SFT。跨模态的指令微调:VQA、图像描述、叙述、语音到语音对话。
缺少任何阶段都会削弱特定能力:跳过第二阶段,模型会丢失跨模态上下文;跳过第三阶段,语音质量会很差。
视觉思维链
MIO 引入了 chain-of-visual-thought(视觉思维链):模型生成中间图像 token,作为一步推理。对于「猫在爬树吗?」这个问题,模型会:
- 输出
<image>token,把场景渲染出来(基于输入图像或草图)。 - 输出分析这张草图的文本。
- 输出最终答案。
渲染出的中间图像充当草稿纸。空间推理类任务的基准成绩因此提升。这个思路与文本推理中的思维链(CoT)一脉相承。
任意到任意的竞争者
- AnyGPT(arXiv:2402.12226):4 种模态(文本、图像、语音、音乐),设计相近。
- Unified-IO 2(arXiv:2312.17172):增加了视觉动作输出、深度、法线。任务更丰富,规模更小。
- NExT-GPT(arXiv:2309.05519):LLM + 各模态专属的扩散解码器。不是单模型方案。
- CoDi(arXiv:2305.11846):可组合扩散;通过共享 latent 实现任意到任意。
MIO 最接近纯 token 的任意到任意。AnyGPT 是它的概念前身。
延迟预算
对于对话产品,每个组件的延迟都很关键:
- 麦克风到音频 token:约 50ms。
- 预填充(音频 token + 历史):8B 模型上约 100ms。
- 首个输出 token:约 50ms。
- 并行 residual-VQ + 语音解码器:约 100-150ms。
首个音频字节时间合计:最低约 300ms。GPT-4o 声称约 250ms。Moshi 声称 160ms。根据公开基准,MIO/AnyGPT 在 400-600ms 区间。
为什么任意到任意依然困难
即使到了 2026 年,开放的任意到任意模型在两个维度上仍落后于闭源模型:
- 语音质量。residual-VQ tokenizer 是有损的;与 ElevenLabs 级别的音色相比,对话语音听起来机械。
- 跨模态推理。让模型「把你看到的东西唱出来」,失败率仍高于纯视觉任务。
这些都是开放的研究问题。Qwen3-Omni(第 12.20 课)是 2025 年最先进的开放尝试。
使用它
code/main.py:
- 定义并打印四模态的词表分配。
- 把一组多模态输入(文本、图像、音频片段、音乐)路由通过 tokenizer 路由器。
- 模拟一次文本转语音响应的流式解码,并统计延迟。
- 根据编码器、预填充和解码器延迟,计算预期的首个音频字节时间。
交付它
本课产出 outputs/skill-any-to-any-pipeline-auditor.md。给定一份对话产品规格(输入模态、输出模态、延迟目标),它审计 MIO 家族的设计选择并计算延迟预算。
练习
- 你的产品接受语音输入、返回语音输出。端到端延迟预算目标是多少?列出消耗时间的组件。
- SpeechTokenizer 的 residual-VQ 使用 8 个码本。论证为什么必须并行解码各残差层(而非顺序解码),以及它带来多少延迟节省。
- 你的词表有 32k 文本 + 4k 图像 + 4k 语音。再加上 8k 音乐和约 10 个分隔符。在隐藏维度 4096 下,embedding 矩阵的参数开销是多少?
- 视觉思维链会生成一张中间图像。哪类问题能从中受益?哪类问题会因为多出的 token 而受损?
- 读 Moshi(arXiv:2410.00037)。描述它的「inner monologue」技术,并与 MIO 的视觉思维链比较。
关键术语
| 术语 | 常见说法 | 实际含义 |
|---|---|---|
| 任意到任意 | 「多模态输入/输出」 | 单个模型能以任意方向接收和输出文本、图像、语音和音乐 |
| Residual-VQ | 「语音 tokenizer 栈」 | 多码本 token 化,每层增加信息;基础层是内容,后续层是韵律 |
| SEED-Tokenizer | 「图像编码」 | MIO 使用的离散图像 tokenizer,码本有 4096 个条目 |
| 视觉思维链 | 「视觉草稿纸」 | 模型在给出最终答案前先生成一张中间图像作为推理步骤 |
| 首个音频字节时间 | 「TTFAB」 | 从用户发声到第一个音频输出的延迟;小于 500ms 才有对话感 |
| 四阶段课程 | 「训练配方」 | 对齐 -> 交错 -> 语音增强 -> SFT,按此顺序 |
延伸阅读
- Wang 等 — MIO (arXiv:2409.17692)
- Zhan 等 — AnyGPT (arXiv:2402.12226)
- Lu 等 — Unified-IO 2 (arXiv:2312.17172)
- Wu 等 — NExT-GPT (arXiv:2309.05519)
- Tang 等 — CoDi (arXiv:2305.11846)