摘要
语言模型的最近取得了重大进展。GPT-4o 作为一个新的里程碑,实现了与人类的实时对话,表现出接近人类的自然流利程度。这种人机交互需要模型能够直接使用音频模态进行推理并以流式方式生成输出。然而,这仍然超出了当前学术模型的能力范围,因为它们通常依赖于额外的 TTS 系统进行语音合成,从而导致不良的延迟。本文介绍了一种基于音频的端到端对话模型 Mini-Omni,它能够进行实时语音交互。为了实现这种能力,我们提出了一种文本指导的语音生成方法,以及推理过程中的批量并行策略,以进一步提高性能。我们的方法还有助于在最小程度上保留原始模型的语言能力,使其他工作能够建立实时交互能力。我们将这种训练方法称为“Any Model Can Talk”。我们还引入了 VoiceAssistant-400K 数据集来微调针对语音输出优化的模型。据我们所知,Mini-Omni 是第一个完全端到端的开源实时语音交互模型,为未来的研究提供了宝贵的潜力。
1.Introduction
大语言模型近年来发展迅速,模型功能越来越强大,比如现成的 Llama 3.1、Mixtral、Qwen-2,以及大名鼎鼎的 GPT-4。作为能力的延伸,语言模型开始掌握对其他模态的理解,例如 LLaVA、Qwen2-Audio 和 Video-llama。尽管大语言模型在特定任务上表现出色,但仍存在一个重大缺陷,阻碍了它们进一步融入日常应用:实时语音交互能力。OpenAI 推出的 GPT-4o 是第一个具有实时多模态语音交互功能的模型。它可以理解和参与视觉、音频和文本,同时实现实时语音对话,尽管它仍然是闭源的。其他模型通常采用两种方法来整合语音功能。第一种是级联方法,其中语言模型生成文本,然后由文本转语音 (TTS) 模型进行音频合成。这种方法由于文本生成需要时间而引入了显著的延迟,严重影响了用户体验。第二种是像 SpeechGPT 这样的端到端方法,先生成语音token,然后再继续生成音频。然而,这仍然需要等待token生成。大型语言模型需要真正的端到端语音输出能力来提供实时反馈。
增强模型的语音输出能力是一项艰巨的任务,主要归因于四个因素:(1)音频推理的复杂性:我们的实验表明,直接训练音频模态推理极具挑战性,通常会导致模型输出不连贯。(2)模型复杂性:加入用于语音输入和输出的额外模块会增加整体复杂性。(3)模态对齐困难:为文本开发的推理能力很难迁移到音频领域。(4)资源需求:将模型的文本能力调整到语音模态需要将所有数据标签转换为音频并重新训练,这会大大增加资源消耗。
在本文中,我们提出了 Mini-Omni,这是第一个具有实时对话功能的开源多模态大语言模型,具有完全端到端的语音输入和输出功能。它还包括各种其他音频到文本功能,例如自动语音识别 (ASR)。我们采用目前可用的现成方法来离散化语音token,并采用最简单的模型架构,使我们的模型和方法易于被其他研究人员采用。直接音频推理带来了重大挑战;然而,我们的方法仅使用 0.5B 模型和有限量的合成音频数据就成功解决了这个问题。重要的是,我们的训练框架无需过度依赖广泛的模型功能或大量数据即可实现这一目标。
为了充分利用和保留语言模型原有的能力,我们提出了一种并行生成范式,其中 Transformer 同时生成音频和文本 token。随后,我们观察到音频模态对文本能力的影响微乎其微,并进一步引入基于批处理的并行生成,这显著增强了模型在流式音频输出期间的推理能力。作为一个要点,我们选择不牺牲音频质量来使用更简单、比特率更低的音频编码器,以降低模型中音频推理的复杂性。然而,为了确保音频质量,我们选择了 SNAC,这是一个音乐级编码器,具有 8 层码本,每秒处理数百个 token。我们创新性地应用了文本指令的延迟并行生成来解决 SNAC 码本序列长的问题。实验表明,音频输出质量与常见的 TTS 系统相当。
我们还提出了一种只需要对原始模型进行最少训练和修改的方法,使其他工作能够快速开发自己的语音功能。我们将这种方法称为“Any Model Can Talk”,旨在使用有限的额外数据实现语音输出。该方法通过额外的适配器和预训练模型扩展语音功能,并使用少量合成数据进行微调。这与前面提到的并行建模方法相结合,可以在新模式下实现流式输出,同时保留原始模型的推理能力。
为了评估 Mini-Omni 的功能,我们首先评估了它在传统文本转语音多模态任务上的表现,包括基于文本的问答 (textQA)、自动语音识别 (ASR)、文本转语音响应和基于语音的问答 (speechQA)。该模型在这些基本任务中表现出色。此外,我们进行了一系列实验,以调查对原始模型功能的影响,并评估我们的推理方法的有效性和变化。初步实验表明,批量并行推理保留了模型的原始功能。我们将进行进一步的实验并在适当的时候提供更多细节。
最后,我们发现大多数开源 QA 数据集包含混合代码或过长的文本,因此不适合语音模型。为了克服这一限制,我们引入了 VoiceAssistant-400K 数据集,其中包含 GPT-4o 专门为语音助手有监督微调 (SFT) 生成的 400,000 多条数据。
总而言之,我们做出以下贡献:
- 我们推出了 Mini-Omni,这是第一个具有音频输入和音频流式输出功能的开源端到端多模态大模型。我们提出了一种独特的文本指令并行生成方法,使语音推理输出与文本功能一致,并且只需极少的数据。我们通过延迟并行性进一步增强了这一点,从而加快了音频推理速度。
- 我们推出了“Any Model Can Talk”,这是一种创新方法,通过专注于训练和推理,在不改变大模型架构的情况下提高性能。我们的方法采用了语音转文本和文本转语音适配器的三阶段训练过程,包括退火和 SFT。我们的方法涉及对原始模型的最低限度的训练和修改,旨在为将交互功能纳入其他模型提供参考。
- 我们在训练音频助手时发现了现有开源 QA 数据集在语音模型的缺点,并提出了一个专用于语音模型输出的数据集,称为 VoiceAssistant-400K。这个使用 GPT-4o 合成的数据集可用于微调模型以开发语音助手的语调。
2.Related Work
Multimodal Understanding。最近,研究人员越来越关注推进跨模态理解的统一模型。这些方法通常采用经过良好预训练的神经网络作为相关模态的编码器,并使用轻量级适配器将编码器的输出与语言模型的文本输入对齐。LLaVA、Flamingo 和 BLIP 等经典工作用于视觉理解,而在音频领域,Whisper 和 Beats 等模型通常用作语义和声学特征的编码器。在 Llama 3.1 中,使用了 Whisper,而 SpeechVerse 利用了 WavLM;SALMONN 结合了 Whisper 和 Beats 来提取特征。这些工作通常仅限于在文本模态中产生输出。
Audio Language Modeling。最近,越来越多的研究采用音频tokenizer来弥合音频和文本之间的鸿沟。音频tokenzier将连续的音频信号转换为离散的音频token,使大语言模型能够进行推理甚至跨模态交互。因此,可以完成各种语音文本任务,例如 ASR、TTS、音乐理解和生成以及声音编辑。MegaTTS 使用音频编解码器进行语音合成,而 InstructTTS、SpearTTS 和 Voicebox 等工作则进一步探索了解码方法和调节技术的优化,使用 Diffusion 作为从token到音频的转换器。
Real-Time Human-Machine Interaction Models。自 GPT-4o 推出以来,实时对话模型取得了前所未有的成果,为用户输入提供了近乎即时的语音反馈,标志着下一代多模态大模型的重要里程碑。然而,技术实现仍是专有的。目前具备实时交互能力的模型很少。SpeechGPT 是一个早期的端到端语音交互模型;然而,它仍然受到音频-文本-文本-音频 (A-T-T-A) 过程的影响,与 Spectron 类似。LauraGPT 也采用了类似的方法,但不适用于语音对话场景。VITA 和 Qwen-audio2 是两个支持语音输入的模型,但它们输出文本并依赖外部 TTS 系统进行语音合成。Mini-Omni 是一个完全端到端的语音到语音对话模型。通过我们的探索,我们发现了推进这一领域的最大挑战:当只有音频模态时,推理中的逻辑不一致,我们将在下一章中解决这个问题。
3.Mini-Omni
我们的创新源于现有的方法,例如 SpeechGPT 和 Spectron 采用了 A-T-T-A 方法,该方法通过文本引导语音生成过程,从而减轻了直接音频学习的挑战。但是,对于实时对话场景来说,先生成文本然后生成音频并不是最理想的。为了解决这个问题,我们提出了一种同时生成文本和音频的新方法。这种方法假设文本输出具有更高的信息密度,从而可以用更少的token获得相同的响应。在生成音频token的过程中,该模型有效地以相应的文本token为条件,类似于在线 TTS 系统。在生成音频token之前,用 N 个token填充可确保首先生成相应的文本token,从而可以将其用作超参数调整。此外,该模型还可以以说话人和风格嵌入为条件,从而便于控制说话人特征和风格元素。在本节中,我们将详细介绍如何逐步实现我们的想法。
3.1 Audio Language Modeling
假设
Y
=
(
y
i
∈
V
t
x
t
∣
i
=
1
,
.
.
.
,
t
t
x
t
)
Y = (y_i ∈ \mathcal V_{txt} | i = 1, . . . , t_{txt})
Y=(yi∈Vtxt∣i=1,...,ttxt) 是来自长度为
t
t
x
t
t_{txt}
ttxt 的词表
V
t
x
t
\mathcal V_{txt}
Vtxt 的文本语句。
Y
Y
Y 的概率可以表示为
p
(
Y
)
=
∏
i
=
1
t
t
x
t
p
(
y
i
∣
y
1
,
.
.
.
,
y
i
−
1
)
p(Y) = \prod^{t_{txt}}_{i=1} p(y_i| y1, . . . , y_{i−1})
p(Y)=∏i=1ttxtp(yi∣y1,...,yi−1)。现在,在处理连续语音信号时,我们可以使用tokenizer将其转换为离散语音token (dst),表示为
D
=
(
d
i
∈
V
d
s
t
∣
i
=
1
,
⋅
⋅
⋅
,
t
d
s
t
)
D = (d_i ∈ \mathcal V_{dst}|i = 1, · · · , t_{dst})
D=(di∈Vdst∣i=1,⋅⋅⋅,tdst)。在这种情况下,
V
d
s
t
\mathcal V_{dst}
Vdst 是离散语音token的词表。这些离散语音token可以在
V
d
s
t
\mathcal V_{dst}
Vdst 中被视为口语,并以类似于文本的方式建模。我们将文本和语音结合到新的词汇表
V
v
o
x
t
\mathcal V_{voxt}
Vvoxt 中,即
V
v
o
x
t
=
V
t
x
t
∪
V
d
s
t
\mathcal V_{voxt} = \mathcal V_{txt}∪\mathcal V_{dst}
Vvoxt=Vtxt∪Vdst。因此,我们可以将语音和文本token的概率建模为
Z
Z
Z,其中
Z
=
(
z
i
∈
V
∣
i
=
1
,
⋅
⋅
⋅
,
t
)
Z = (z_i ∈\mathcal V|i = 1, · · · , t)
Z=(zi∈V∣i=1,⋅⋅⋅,t)。该概率表示为
p
(
Z
)
=
∏
i
=
1
t
p
(
z
i
∣
z
1
,
⋅
⋅
⋅
,
z
i
−
1
)
p(Z) = \prod^t_{i=1} p(z_i| z_1, · · · , z_{i−1})
p(Z)=∏i=1tp(zi∣z1,⋅⋅⋅,zi−1),
Z
Z
Z 表示离散语音token
D
(
V
=
V
d
s
t
)
D(\mathcal V = \mathcal V_{dst})
D(V=Vdst) 或文本token
Y
(
V
=
V
t
x
t
)
Y (\mathcal V = \mathcal V_{txt})
Y(V=Vtxt) 或
Y
Y
Y 和
D
D
D 的各种组合。对于同时生成的音频和文本token,负对数似然损失可以如公式 (1) 所示。
L
(
T
,
A
∣
C
)
=
∑
j
=
1
m
∑
i
=
1
n
j
l
o
g
P
(
T
i
,
j
,
A
i
,
j
∣
T
<
i
,
j
,
A
<
i
,
j
;
X
j
)
(1)
\mathcal L(T,A|C)=\sum^m_{j=1}\sum^{n_j}_{i=1}log~P(T_{i,j},A_{i,j}|T_{<i,j},A_{<i,j};X_j)\tag{1}
L(T,A∣C)=j=1∑mi=1∑njlog P(Ti,j,Ai,j∣T<i,j,A<i,j;Xj)(1)
其中,
T
,
A
T,A
T,A 是训练语料库
C
C
C 中的文本-音频输出对,
m
m
m 是训练数据的数量。
X
j
X_j
Xj 是第
j
j
j 个样例的输入条件,
n
j
n_j
nj 是样本
T
j
T_j
Tj 和
A
j
A_j
Aj 的最大token数,
T
i
,
j
T_{i,j}
Ti,j 和
A
i
,
j
A_{i,j}
Ai,j 分别表示第
j
j
j 个样本的第
i
i
i 个文本标记和音频token。
3.2 Decoding Strategies
Audio Generation with text instruction。语言模型已取得重大进展,在文本模态中展现出卓越的推理能力。为此,Mini-Omni 经过重组,通过文本-音频并行解码方法将这些推理能力转移到流式音频输出。此方法同时输出音频和文本token,音频通过文本到语音合成生成,确保实时交付,同时利用基于文本的推理优势。为了与大模型的输入保持对齐,在生成下一个token之前,将并行生成的所有序列相加,如图 1 所示。这种方法使模型能够在聊天场景中实现实时语音输出,并将第一个token输出延迟降至最低。
Text-delay Parallel Decoding。并行生成最初由 MusicGen 引入,用于加速音乐生成过程,我们将这种方法集成到文本模态中以增强推理能力。并行解码是可行的,因为语言模型训练中使用的音频token码本通常由多层组成;同时生成所有层可以显著提高模型速度。对于实时语音输出模型,并行解码更为关键,允许在标准设备上每秒生成数百个音频token。在本文中,我们使用 SNAC 作为音频编码器,它由具有互补关系的七个token层组成。因此,我们使用八个子语言模型头来一步生成八个token(包括文本),同时保持相邻层之间的一步延迟。由于音频token来自文本合成,因此首先输出文本token,然后输出从第一层到第七层的 SNAC token。我们提出的文本优先延迟并行解码过程如图 2(b) 所示。
Batch Parallel Decoding。虽然前面介绍的并行生成方法有效地将推理能力从文本模态转移到音频模态,但我们的实验表明,模型的推理性能在文本和音频任务之间仍然存在差异,音频响应趋于简单。我们假设这是由于模型容量限制或音频数据不足造成的。为了解决这个问题,并进一步增强模型在对话过程中的推理能力,最大限度地转移其基于文本的能力,我们实验性地采用了批处理方法。鉴于模型在文本模态中的性能更强,我们将单个输入的推理任务扩展为批处理大小为 2:一个样本需要文本和音频响应,如前所述,而另一个样本只需要文本响应,专注于基于文本的音频合成。但是,第一个样本的文本token输出被丢弃,第二个样本的文本输出嵌入到第一个样本的相应文本token位置中。同时,使用第二个样本的纯文本响应的内容对第一个样本的音频进行流式传输;我们将此过程称为批处理并行解码。通过这种方法,我们有效地将模型基于文本的功能几乎完全转移到音频模态,并且资源开销最小,从而显著增强了其在新模态中的推理能力。批量并行解码的推理过程如图 2© 所示。我们认为批量并行解码代表了一项关键的算法创新,它使如此小的模型能够展现出强大的对话能力。
3.3 Any Model Can Talk
在本节中,我们将介绍我们的训练方法。我们的方法旨在尽可能地保留原始模型的功能。这首先是因为我们的基础模型性能强大,其次是因为我们的方法可以应用于其他在文本输出方面表现优异但缺乏强大语音交互能力的工作。
Audio Encoding。音频输入主要侧重于从输入音频中提取特征,选项包括 Hubert 或单独预训练的音频编码器。由于我们专注于语音输入,Whisper 和 Qwen2-audio 也展示了在一般音频任务中有效的性能。对于音频输出,使用多码本方法选择音频token可以更好地捕捉音频细节。我们尝试使用扁平化进行音频token建模,但它导致token过长,这对流式传输不利并导致不稳定的学习。相反,受 MusicGen 启发的并行解码采用了与文本条件相结合的延迟模式,如图 2 所示。
Three-Stage Training。我们的训练方法分为三个不同的阶段:(1)模态对齐。此阶段的目标是增强文本模型理解和生成语音的能力。Mini-Omni 的核心模型完全冻结,只允许在两个adapter使用梯度。在此阶段,我们使用来自语音识别和语音合成的数据来训练模型的语音识别和合成能力。(2)适应性训练。一旦新模态与文本模型的输入对齐,适配器就会被冻结。在此阶段,我们只专注于在给定音频输入时训练模型的文本能力,因为音频输出只是从文本合成的。使用来自语音识别、口语问答和文本响应任务的数据来训练模型。(3)多模态微调。在最后阶段,使用全部数据对整个模型进行微调。此时,所有模型权重都解冻并进行训练。由于主要模态对齐任务是在适配器训练期间处理的,因此原始模型的功能得到了最大程度的保留。
Model Input Ids。由于有八个并行的输出序列,输入也需要八个序列,因此复杂性显著增加。因此,我们在此简要概述模型输入的组织。模型可以接受文本或音频输入,这些输入被放置在相应的模态序列中。对于音频输入,输入token和 Whisper 特征通过适配器转换为相同维度的张量,然后连接起来。根据任务的不同,我们将 特殊标记放在不同的位置以指导模型的输出,从而实现多模态输出。图 4 说明了一些任务的组织。在输入到模型之前,所有序列都会被求和并取平均值以整合特征。
4.Experiments
本节介绍 Mini-Omni 的基础能力测试结果。我们首先描述训练数据集、数据处理方法和超参数。然后,我们评估模型在语音识别等核心任务上的表现,并提供几个用例示例。我们将尽快在下一版本中包含所有相关实验。
4.1 Datasets
为了建立基础语音能力,我们使用三个语音识别数据集(总计约 8,000 小时)训练模型,重点关注语音理解和合成。对于文本模态,我们从 Open-Orca [OpenOrca] 数据集中整合了 200 万个数据,并将它们与其他模态集成以保持文本准确性。Moss 的 SFT 数据集与零样本 TTS 一起使用,合成了 150 万个语音 QA 对。为了避免不合适的代码和符号输出,我们使用 GPT-4o 创建了 VoiceAssistant-400K 数据集。数据集详见表 1。第 1 阶段涉及用于训练语音适配器的 ASR 数据。第 2 阶段使用 TextQA 和 AudioQA 进行音频/文本输入和文本响应训练。第 3 阶段专注于使用 AudioQA 的音频模态进行多模态交互。最后阶段的训练包括使用语音 QA 进行退火和微调。