Qwen2.5-Omni:统一多模态大模型的架构、时序对齐与流式语音生成

Qwen2.5-Omni 是一个“统一”的多模态模型:它能够同时感知 文本 / 音频 / 图像 / 视频(含音轨),并在交互时以 流式(streaming) 方式同步生成 文本自然语音。与“视觉模型 + ASR + LLM + TTS”的级联式系统不同,它将多模态理解与语音生成作为一个整体端到端协同,使得系统在实时性、跨模态对齐以及误差传递方面具有明显优势。

下文围绕四个核心创新展开:统一架构、TMRoPE 时序编码、Thinker–Talker 双模块、以及多模态性能,并在关键处用具体案例说明它为何能更好地“边听边看边说”。


1. 核心创新一:统一架构与“边输入边输出”的流式交互

1.1 统一输入:text / audio / video 的共同语义空间

统一架构的关键不是“把不同模态都喂进 Transformer”,而是让模型能在同一上下文中:

  • 同时利用文本的离散语义、音频的连续时序、视觉的空间结构
  • 在同一个注意力机制里建立跨模态依赖(例如:某段语音指代视频里正在发生的动作)
  • 支持 实时输入(音频/视频持续到来)与 实时输出(文本和语音持续产出)

这使得模型可以执行更自然的人机交互:用户边说、视频边播,模型边理解边回应,不需要等“输入完全结束”再开始生成。

1.2 统一输出:文本与自然语音的同步流式生成

与许多系统“先出完整文本再做 TTS”不同,Qwen2.5-Omni 的目标是:

  • 文本 token语音 token 可以同步流式生成
  • 语音输出可以在文本输出尚未完全结束时提前开始(降低首包延迟)
  • 语音语调、停顿、情绪等不仅依赖字面文本,也可利用多模态上下文(画面、语气、环境声)

2. 核心创新二:TMRoPE 时序编码——让音视频在 Transformer 里“对齐到同一时间轴”

多模态 Transformer 最难的点之一是:不同模态的 token 不是同一“坐标系”

  • 文本 token 有天然的 1D 顺序位置
  • 图像 token 是 2D 空间位置(height/width)
  • 视频 token 既有 2D 空间位置,也有 1D 时间位置
  • 音频 token 是高密度时间序列(且采样频率往往远高于视频帧率)

如果仍用传统 RoPE(Rotary Position Embedding)那种“只有 1D 序号”的位置编码,多模态注意力就很难稳定学习“这一帧画面对应这一段声音”。

2.1 TMRoPE:将 RoPE 显式解耦为三维坐标

TMRoPE 的思想可以概括为:为每个 token 分配一个三元组位置坐标:

  • Temporal:时间位置(绝对时间)
  • Height:垂直空间位置
  • Width:水平空间位置

也就是说,每个 token 不再只有一个“序号”,而是拥有“时间 + 空间”坐标。这样注意力在计算相关性时,能够显式感知“是否同一时间片、是否相邻空间区域”。

直观理解:文本像一条线;图像像一张网格;视频像“时间堆叠的网格”;音频像高采样率时间线。TMRoPE 的目标是把它们统一到“同一时间轴 + 对应空间”的坐标体系中。

2.2 不同模态的 ID 规则:让每类 token 拥有合适的“坐标定义”

一种可理解的规则表(概念层面)如下:

输入类型 Temporal ID 规则 空间 ID 规则
文本 所有 token 共享同一 Temporal 设定(等价于 1D) 等价于 1D-RoPE
音频 按固定时间片递增(例如每 40ms 一个 ID) 不适用
图像 Temporal 固定(或统一) 按像素/patch 的 height/width 分配
视频(含音频) video 帧按真实时间戳映射到 Temporal;音频按固定间隔递增 同图像:每帧内按 height/width 分配

这样做的结果是:音频与视频帧能够映射到同一 Temporal 网格上,模型可以通过注意力学习跨模态对齐。

2.3 跨模态位置初始化:拼接输入时保持“坐标连续性”

多模态输入往往被拼接为一个序列送入 Transformer。为了避免不同模态位置冲突,常见做法是让后续模态的位置 ID 从前序模态的最大 ID 继续递增。这样整体位置在数值上是连续的,模型更容易学习“先看到画面,再听到声音,再读到文本”。


3. 核心创新三:Thinker–Talker 双模块——把“理解”和“发声”解耦但又保持实时同步

Qwen2.5-Omni 的架构可抽象为两个协同模块:

  • Thinker:负责理解与推理,输出高层语义表征与文本
  • Talker:负责语音流式生成,输出离散语音 token 并最终解码为波形

这是一种“类人”的分工:大脑负责理解与组织语言,发声器官负责把语言转换为声音。但关键是:它不是松耦合的级联,而是共享上下文状态、保持实时同步。

3.1 Thinker:多模态理解与文本生成的主干

Thinker 可以理解为一个基于 Transformer decoder 的多模态大模型主干:

  • 接收文本 token(离散)
  • 接收音频 encoder 输出的序列特征(时序)
  • 接收 vision encoder 输出的视觉 token(空间/时空)

Thinker 的输出包括两类信息:

  1. 高层语义表征(high-level representations):浓缩多模态语义、包含推理结果、以及潜在的语气/情绪线索
  2. 文本 token:按常规自回归语言模型方式生成

3.2 Talker:双轨自回归的流式语音 token 生成器

Talker 的核心目标是:在不等待完整文本的情况下,尽早产出语音 token,形成自然的实时对话体验。

它以流式方式接收 Thinker 的两类输入:

  • 高层语义表征(包含语义 + 韵律暗示)
  • 已生成文本 token 的 embedding(提供明确的离散语义锚点)
为什么需要“双输入”?

如果只用高层语义表征:

  • 表征空间可能把同义词、近义句压得很近
  • 语音生成可能在同音词、同义异音词上产生歧义(尤其在多语言/专名场景)

如果只用文本 token:

  • 语音韵律与情绪可能不自然
  • 对多模态上下文(画面情绪、语气、环境声)的利用不足

因此 Talker 同时吃两者:既保持“语义确定性”,又保留“说话风格与预判能力”。


4. 输入模态处理:文本、音频、视觉、视频如何进入同一个模型

4.1 文本:byte-level BPE tokenizer 与序列表征

文本输入通过 Qwen tokenizer 编码(byte-level BPE),得到 token 序列,再映射为 hidden representations 送入 Thinker。

4.2 音频:从波形到时序特征(40ms 级别对齐)

典型流程可概括为:

  1. 重采样到 16kHz
  2. 25ms 窗口、10ms 步长提取 128 维 mel-spectrogram
  3. 通过 audio encoder 得到时序特征序列
  4. 将音频帧表征聚合到一个更粗的时间粒度(例如每个表征对应 40ms)

这里“40ms/帧”很关键:它为后续的 Temporal ID 提供稳定单位,使音频能够与视频帧时间戳对齐(至少在一个可学习的粒度上)。

4.3 视觉:ViT 风格 vision encoder 与图像/视频统一处理

视觉信号(图像/视频)由 vision encoder 提取为视觉 token。对于视频,除了每帧的空间 token,还需要额外的时间组织方式,使其能与音频一起被 Thinker 融合。

4.4 视频:动态帧率采样与“图像视作两帧”的统一策略

为了让视频 token 的时间分辨率更贴合音频,视频可采用动态帧率采样,使帧时间戳映射到 Temporal ID 时更加稳定。

“单张图像视为两帧相同画面”是一种工程上很实用的统一技巧:

  • 让图像也能套用“视频输入接口”
  • 保持架构一致性,减少分支逻辑
  • 让模型在训练时更容易复用视频相关能力

5. 音视频交织策略:把多模态 token 排成“可对齐的单序列”

即便有了 TMRoPE,如果把音频 token 全放在序列末尾、视频 token 全放在序列开头,模型仍然需要跨越很长距离才能建立对齐关系,注意力成本与学习难度都会增大。

因此一种有效策略是:按时间分块,把同一时间段的视觉 token 与音频 token 放到更近的位置

5.1 时间分块:以 2 秒为一个处理单元

可以把输入按真实时间分成多个块,每块对应 2 秒左右的音视频:

  • 块前端放该时间段的视频视觉 token
  • 块后端放该时间段的音频 token

形成一种“同一时间段相邻排列”的序列结构。

5.2 Temporal ID 的动态计算:让不同采样率映射到同一时间轴

关键在于把真实时间 ttt 映射到 Temporal ID。一个直观的映射方式是:

  • 设时间单位为 Δ\DeltaΔ(例如 Δ=40ms\Delta = 40\text{ms}Δ=40ms
  • 则时间 ttt 对应的 Temporal ID 为:

tid(t)=⌊tΔ⌋ \text{tid}(t) = \left\lfloor \frac{t}{\Delta} \right\rfloor tid(t)=Δt

  • 音频帧按固定 Δ\DeltaΔ 递增
  • 视频帧按真实时间戳 tft_ftf 映射到对应 tid(tf)\text{tid}(t_f)tid(tf)

这样即使视频帧率变化,只要时间戳正确,Temporal ID 就能保持与音频一致的“时间网格”。

5.3 一个直观案例:视频里“敲桌子”的声音与动作对齐

假设视频里有人在 3.2 秒处敲桌子,同时出现清晰敲击声。

  • 该帧时间戳 tf=3.2st_f = 3.2\text{s}tf=3.2s
  • Δ=0.04s\Delta = 0.04\text{s}Δ=0.04s,则

tid(3.2)=⌊3.20.04⌋=⌊80⌋=80 \text{tid}(3.2) = \left\lfloor \frac{3.2}{0.04} \right\rfloor = \left\lfloor 80 \right\rfloor = 80 tid(3.2)=0.043.2=80=80

敲击声对应的音频表征也会落在 tid 约为 80 的附近。
当视觉 token 与音频 token 在序列中按时间块交织排列时,注意力更容易学习到“tid 相近 = 同一事件”的对齐规律,从而提升诸如:

  • “声音来自哪个动作?”
  • “说话人是谁?是否正在出现在画面里?”
  • “刚刚那句话是在回应画面中的哪个物体?”

6. 输出模态处理:文本怎么生成、语音怎么生成

6.1 文本生成:Thinker 的自回归语言建模

Thinker 的文本生成遵循标准自回归:

  • 对词表分布采样生成下一个 token
  • 配合 top-p、repetition penalty 等常用采样策略控制多样性与重复

其本质是最大化条件概率:

P(y∣x)=∏t=1TP(yt∣x,y<t) P(y \mid x) = \prod_{t=1}^{T} P(y_t \mid x, y_{<t}) P(yx)=t=1TP(ytx,y<t)

其中 xxx 包含多模态输入(文本/音频/视觉/视频),yyy 是输出文本 token 序列。

6.2 语音生成:Talker 输出离散语音 token,再解码为波形

语音生成通常分两步:

  1. Talker 自回归生成离散语音 token 序列 z1:Kz_{1:K}z1:K
  2. 语音解码器把 z1:Kz_{1:K}z1:K 还原为连续波形 s^(t)\hat{s}(t)s^(t)

自回归形式可表示为:

P(z∣h,e)=∏k=1KP(zk∣h,e,z<k) P(z \mid h, e) = \prod_{k=1}^{K} P(z_k \mid h, e, z_{<k}) P(zh,e)=k=1KP(zkh,e,z<k)

  • hhh:Thinker 输出的高层语义表征
  • eee:文本 token 的 embedding(或其函数)
  • zzz:离散语音 token

这种离散 token 方案的好处是:

  • 不需要文本与语音的逐词时间戳对齐(弱化对齐数据要求)
  • 更利于流式生成(token 级别逐步产出)
  • 语音质量可由后端解码器持续优化

7. 流式交互优化:延迟从哪里来,如何降低

流式系统的体验很大程度取决于“首包延迟”和“持续输出的稳定性”。延迟可拆成四部分:

  1. 多模态预处理延迟(音频特征、视觉帧、tokenization)
  2. 首文本输入到首语音 token 输出的推理延迟
  3. 首语音 token 到音频波形的解码延迟
  4. 模型架构固有延迟(参数量、注意力窗口、并行效率)

7.1 chunked-prefill:让长输入也能“分块预填充”

在长音频/长视频场景,若一次性 prefill 全上下文,首包会非常慢。chunked-prefill 的目标是:把输入切成小块,边填充边生成。

为此可以做两类改造:

  • 音频编码器:把全局注意力改为按 2 秒分块的时序注意力
  • 视觉编码器:
    • 使用高效注意力实现加速
    • 合并相邻视觉 token(例如 2×22 \times 22×2 合并)降低序列长度
    • 固定 patch size 并支持多分辨率序列化

其核心收益是降低注意力计算的二次成本,因为注意力复杂度与序列长度 LLL 相关:

Costattn∝L2 \text{Cost}_\text{attn} \propto L^2 CostattnL2

当通过 token 合并或分块将有效 LLL 降低时,推理延迟与显存压力都会显著下降。

7.2 滑动窗口注意力:让生成时只看“必要上下文”

流式生成不可能无限制回看全部历史,否则计算会线性累积直至不可用。滑动窗口机制通常限制每一步只关注最近的若干块上下文。

可将上下文分为块(blocks),并限制注意力范围为:

  • lookback:回看历史块数量
  • lookahead:允许少量前瞻块(用于平滑)

若窗口包含 BBB 个块、每块长度近似为 mmm,则有效注意力长度约为 L≈BmL \approx BmLBm,计算保持可控。


8. 预训练与微调:三阶段渐进式训练如何让“统一模型”真正统一

统一多模态模型的难点在于:不同模态的数据规模、噪声水平、分布差异都非常大。如果一开始就全参数、全模态混合训练,往往出现不稳定或单模态能力退化。

因此采用分阶段策略更合理。

8.1 三阶段预训练策略

阶段 1:冻结 LLM,训练视觉/音频侧(或其适配器)
目标:先把视觉/音频信息“对齐到语言空间”,让 LLM 能读懂多模态。

阶段 2:解冻全部参数,进行更广泛的多模态训练
目标:让模型形成统一的跨模态表征与推理能力。

阶段 3:使用长序列数据扩展上下文能力(例如 32k)
目标:支持长音频、长视频、长对话历史。

序列长度扩展的意义在于:许多真实音视频任务需要跨越很长时间段做理解与对齐,例如:

  • 一段 10 分钟会议中定位“刚才那句提案对应哪张幻灯片”
  • 长视频中追踪人物身份与对话指代

8.2 初始化:让各模态从强基座起步

统一模型往往会选用成熟组件初始化:

  • LLM:用强文本模型参数初始化
  • vision encoder:用强视觉-语言模型的视觉侧初始化
  • audio encoder:用强语音模型初始化(例如 ASR/音频理解 backbone)

这种初始化降低了“从零学多模态”的数据与算力压力,使训练更像“统一与融合”,而不是“从头发明各模态能力”。


9. Talker 微调:从能说到说得稳、说得像、说得可控

Talker 的训练通常要解决三类问题:

  1. 能生成:语音连续、可懂、无明显断裂
  2. 生成稳定:少发音错误、少异常停顿、少乱码式音素
  3. 自然与可控:韵律、情绪、音色、口音等更符合交互预期

一种合理的训练路径是三段式:

  • 上下文延续训练:学会在给定上下文条件下持续生成语音 token
  • 偏好优化(例如 DPO 类):把“更自然/更准确”的语音偏好蒸入生成分布
  • 多说话人微调:增强音色与说话风格的可控性与自然度

在偏好优化中,常见形式是让模型提升对优质样本 ywy_wyw 的相对偏好、降低对劣质样本 yly_lyl 的偏好。用一个简化的偏好目标表示为:

max⁡  log⁡σ(β[log⁡Pθ(yw∣x)−log⁡Pθ(yl∣x)]) \max \; \log \sigma\left(\beta \left[\log P_\theta(y_w \mid x) - \log P_\theta(y_l \mid x)\right]\right) maxlogσ(β[logPθ(ywx)logPθ(ylx)])

  • xxx:输入上下文(多模态 + 历史)
  • PθP_\thetaPθ:当前模型分布
  • β\betaβ:温度/强度系数
  • σ(⋅)\sigma(\cdot)σ():sigmoid

直观理解:如果模型让好语音更可能、坏语音更不可能,则目标值增大。


10. 端到端系统为何优于级联:一个“实时视频指令跟随”的案例

考虑一个真实场景:用户打开一个做菜视频并口头提问:

“他刚刚加的是盐还是糖?你听一下他怎么说的,并看他拿的是什么罐子。”

在级联系统中,流程可能是:

  1. ASR 把语音转文字(可能受环境声影响出错)
  2. 视频理解模型识别物体(盐/糖罐子相似时易混)
  3. LLM 读两路结果再推理
  4. TTS 把最终文本读出来(无法充分利用“说话语气/犹豫”线索)

在 Qwen2.5-Omni 的统一系统里:

  • 音频与视频按时间块交织,TMRoPE 对齐时间轴
  • Thinker 可直接用跨模态注意力捕捉“说到 salt 时镜头对准盐罐”
  • Talker 还能把不确定性用语气表达出来,例如:
    • “我更倾向于是盐,因为……不过画面有点模糊”
    • 停顿与强调可以更自然,降低“机器播报感”

这类任务尤其依赖“音视频同步对齐”,因此统一架构与时序编码的收益会非常显著。


11. 多模态性能:为什么它在语音指令跟随上能接近纯文本精度

语音指令跟随往往比文本更难,原因包括:

  • ASR 错误引入不可逆噪声
  • 口音、语速、环境声导致语义缺失
  • 语音中的指代、停顿、重音携带额外信息,级联系统通常丢失

统一模型的优势在于:

  1. 不必强制先转文本再理解,可直接在语音特征上做语义建模
  2. Thinker 的语言能力与音频理解在同一模型内融合,减少中间表示损失
  3. Talker 可利用高层语义表征提前规划语音输出,使响应更自然、延迟更低

当这些因素叠加时,语音输入的“有效语义可达性”会更接近文本输入,从而使语音指令跟随精度更接近纯文本场景。


12. 总结:Qwen2.5-Omni 的整体方法论脉络

Qwen2.5-Omni 可以视为把三件事做成一个整体:

  • 统一多模态理解:文本 + 音频 + 视觉/视频进入同一 Transformer 上下文
  • 显式时序对齐:TMRoPE 把多模态 token 放到同一时间轴坐标系里
  • 流式语音生成:Thinker 负责理解与文本,Talker 负责实时发声,并共享上下文保持同步

更多推荐