论文信息

  • 标题: Mini-Omni: Language Models Can Hear, Talk While Thinking in Streaming

  • 作者: Zhifei Xie, Changqiao Wu

  • arXiv: 2408.16725v3

  • 代码与模型: GitHub


Motivation

现状+问题:

  • GPT-4o 展示了实时对话能力,达到近乎人类的自然流畅度,树立了新的里程碑

  • 但学术界模型仍依赖额外的 TTS 系统做语音合成,带来不可接受的延迟

  • 现有模型无法直接在音频模态上进行推理并**流式生成(streaming)**输出

目标:

  • 构建一个 audio-based end-to-end conversational model,支持实时语音交互

  • 在推理时能够 “hear, talk while thinking” — 边思考边说话


Contribution

image.png

  1. 首个完全端到端、开源的实时语音交互模型(Mini-Omni)

  2. 提出 text-instructed speech generation 方法 — 用文本指导语音生成

  3. 提出 batch-parallel 推理策略 — 进一步提升推理性能

  4. 提出 “Any Model Can Talk” 训练方法 — 以最小的语言能力损失赋予任意模型语音交互能力

  5. 发布 VoiceAssistant-400K 数据集 — 用于 fine-tune 语音输出优化模型


Method

3.1 音频语言建模(Audio Language Modeling)

核心思路:把语音信号离散化后,和文本共享同一个词表,统一建模。

  • 连续语音信号经过 SNAC tokenizer 转为离散语音 token(dst),来自词表

  • 将文本词表和语音词表合并:

  • 合并后的序列 可以是纯文本、纯语音、或二者混合,统一用自回归方式建模:

  • 训练时,文本和音频 token 同时生成,loss 是所有 head 的负对数似然之和

3.2 解码策略(Decoding Strategies)

Audio Generation with text instruction

关键问题:LLM 的推理能力都在文本模态上,怎么把这个能力迁移到音频输出?

做法: 文本和音频 token 并行生成,但文本走在前面。

架构:模型有 8 个并行输出头:1 个 text head + 7 个 audio head(对应 SNAC 的 7 层 codebook)

数据流

image 1.png

  • 8 个 head 共享同一个 Transformer backbone 的隐状态 ,各自做线性投影 → softmax → 采样

  • 同一时间步内,不同模态的 embedding 求和后作为下一步的输入

  • 跨时间步之间做标准的 causal self-attention

Important

一句话:空间上求和融合,时间上 attention 建模。 整个架构就是一个标准 Transformer + 多输出头,没有额外的复杂结构。


Text-delay Parallel Decoding(延迟模式)

受 MusicGen 启发,各层 audio head 之间保持一步延迟

  • Text head 先输出 → Audio L1 延迟 1 步 → Audio L2 延迟 2 步 → … → Audio L7 延迟 7 步

ps:delay 不是额外模块,只是 target 序列的排列方式,训练时数据按这个错位排好即可


Batch Parallel Decoding(批次并行解码)

解决的问题:纯并行生成时,音频回复质量不如文本(推理能力没完全迁移过来)。

做法: 推理时 batch size = 2:

  • 样本 1:同时生成文本 + 音频(但文本质量可能较弱)

  • 样本 2:只生成文本(专注推理,质量高)

  • 关键操作:丢弃样本 1 的文本输出,用样本 2 的高质量文本替换进去,音频基于这个好文本来合成

Important

我的理解: Batch = 音频的嘴 + 文本的脑。用极小的额外开销(多跑一路纯文本),就把文本推理能力几乎完整地迁移到了音频模态。从 case study 看效果非常明显——Omni-BATCH 的回复丰富度和纯文本模式几乎一致。

3.3 Any Model Can Talk(让任何模型都能说话)

训练目标:赋予 LLM 语音交互能力的同时,最大限度保留原始文本能力

输入输出设计

  • 输入端:Whisper 编码器提取连续特征 → Adapter 映射到模型维度(不用 SNAC 离散 token)

  • 输出端:8 个 LM head 并行输出 1 个 text token + 7 层 SNAC 离散 audio token

  • 输入端和输出端用的是两套完全不同的音频表示,各取所长

三阶段训练

image 2.png

  1. 模态对齐(Modality Alignment)

    • 冻结核心模型,只训练两个 Adapter(输入端 + 输出端 TTS Adapter)

    • 数据:语音识别 + 语音合成

    • 目的:让模型”听得懂”语音、“说得出”语音

  2. 适应训练(Adaption Training)

    • 冻结 Adapter,训练核心模型

    • 数据:语音识别、口语问答、文本回复

    • 目的:让模型”听懂后能给出好的文本回复”(音频输出此时仅从文本合成,不需要单独优化)

  3. 多模态微调(Multi-modal Finetuning)

    • 全部解冻,综合数据联合微调

    • 目的:端到端打磨,文本 + 音频能力协同提升

Important

设计哲学: 先对齐模态(adapter 当翻译官),再训练理解(核心模型学新技能),最后联合打磨。渐进式训练保证了原始 LLM 能力不被破坏。


数据集(Datasets)

模型训练总共用了约 8000 小时语音识别数据 + 200 万条文本 QA + 150 万条合成语音 QA + 自建的 VoiceAssistant-400K

模态记号说明:T = 文本,A = 音频,下标 1 = 输入,2 = 输出。

Stage 1:模态对齐

仅用 ASR 数据训练 Adapter:

  • Libritts(586h)、VCTK(44h)、Multilingual LibriSpeech(8000h)

  • 模态:A1|T1(语音输入 → 文本输出)

Stage 2:适应训练

加入文本 QA 和音频 QA:

  • ASR 数据(同 Stage 1)

  • Open-Orca(2000K 条文本 QA,T1|T2)—— 用于保持文本推理能力

Stage 3:多模态微调

加入音频模态的多模态交互数据:

  • Moss-002-sft-data(1500K,A1|T1|A2|T2)—— 用 zero-shot TTS 合成的语音 QA 对

  • ASR + Open-Orca 继续使用

Final:退火 + 微调

使用自建的 VoiceAssistant-400K 数据集:

  • 构建方式:用 GPT-4o 生成文本对话,再用 TTS 合成语音,过滤掉不适合的代码/符号输出

  • 数据源:Alpaca-GPT4(55K)、Identity finetune(2K)、QAassistant(27K)、RLHF(367K)、Trivia-singlechoice(17K)、Trivia-Multichoice(20K)、OpenAssistant(2K)

  • 模态:A1|T1|A2|T2(语音问 → 文本+语音答)

Important

为什么要自建 VoiceAssistant-400K? 现有数据集要么是纯 ASR(只有转录),要么是纯 TTS(单向合成),缺少“语音问 → 语音答”的完整对话数据。所以作者用 GPT-4o + TTS 合成了这批数据,专门用于最后阶段的语音对话微调。


Experiment

image 3.png