摘要
我们介绍了Moshi,一个语音-文本基础模型和全双工语音对话框架。。当前的口语对话系统依赖于独立组件的管道,即语音活动检测、语音识别、文本对话和文本转语音。这样的框架无法模拟真实对话的体验。首先,它们的复杂性导致交互之间有几秒钟的延迟。其次,文本是对话的中间模态,包含额外信息的非语言信息(例如情感或非语音声音)在交互中丢失。最后,它们依赖于说话人对轮次的分割,这不考虑重叠的语音、打断和插话。Moshi 通过将口语对话转换为语音到语音的生成,完全解决了这些独立的问题。从文本语言模型主干开始,Moshi 从神经音频编解码器的残差矢量量化器生成语音作为token,同时将其自己的语音和用户的语音分别建模为并行流。这允许删除显式的说话人轮次,并建模任意对话动态。此外,我们还扩展了之前工作的分层语义到声学token生成,首先预测时间对齐的文本token作为音频token的前缀。这种“内心独白”方法不仅显著提高了生成语音的语言质量,而且我们还说明了它如何提供流式语音识别和文本到语音。我们得到的模型是第一个实时全双工口语大型语言模型,理论延迟为 160 毫秒,实际延迟为 200 毫秒,可在 github.com/kyutai-labs/moshi 上找到。
1.介绍
语音为早期的对话系统(从 Alexa 到 Siri 和 Google Assistant)提供了便捷的接口。在这种情况下,用户说出的“唤醒词”通常会触发自动语音识别 (ASR) 系统,该系统会转录后续用户的请求。然后,自然语言理解 (NLU) 管道将此query转换为结构化格式,用于通过自然语言生成 (NLG) 生成文本答案。最终,文本转语音 (TTS) 系统将答案告诉用户。虽然此过程可以处理短暂、受限的交互(例如触发操作或检索事实),但大型语言模型 (LLM) 的兴起要求将语音界面扩展到多轮、开放式对话。解决这一挑战的方法是使用 LLM 处理 NLU 和 NLG,而 ASR 和 TTS 分别在用户和系统轮到时提供语音接口。该框架支持当前一代的口语对话系统,例如 Gemini 或 ChatGPT。
然而,这些接口提供的体验与自然对话相去甚远。首先,延迟沿着这些管道的许多组件累积,导致典型的整体延迟为几秒钟。这与自然对话不同,自然对话的响应时间为几百毫秒。其次,由于语言理解和生成发生在文本域中,因此模型会忽略任何非书面信息。这包括副语言信息(例如情绪和口音)到非语音音频(例如周围的声音事件)。最后,这些模型仍然基本上是回合制的,假设对话是一系列定义明确的单说话人片段。虽然这种模式适合文本对话,但它在模拟口语对话的各个方面方面存在不足,例如中断、重叠语音(占口语时间的 10% 到 20%)和反向通道(即非中断的感叹词,例如“OK”或“我明白了”)。
在本研究中,我们引入了 Moshi,这是一种语音-文本基础模型和实时口语对话系统,旨在解决上述限制:延迟、文本信息瓶颈和基于轮次的建模。Moshi 用一个较小的音频语言模型增强了文本 LLM 主干,该模型可以提取和预测离散音频单元。这通过理解输入并直接在音频域中生成输出来消除文本的信息瓶颈,同时受益于底层文本 LLM 的知识和推理能力。我们扩展了之前关于音频语言模型的工作,并设计了一个流式分层架构,理论延迟为 160 毫秒——低于 10 种语言自然对话的平均延迟 230 毫秒。此外,我们还引入了第一个多流音频语言模型,即将输入和输出音频流明确处理为两个自回归token流的模型。这完全消除了说话人轮次的概念,从而允许在具有任意动态(包括重叠和中断)的自然对话上训练模型。我们最终的模型是第一个全双工实时对话 LLM,它始终在聆听并始终产生声音(无论是语音还是静音)。我们总结了我们的贡献如下:
- 我们介绍了 Helium,这是一个 7B 参数文本 LLM,我们在 2.1T 公共英语数据上对其进行了预训练。第 3.2 节描述了模型的架构和训练,而第 4.1 节详细介绍了预训练数据收集和过滤。
- 我们训练 Mimi,这是一种神经语音编解码器,它使用残差矢量量化 (RVQ) 将音频转换为 Moshi 预测的离散token然后再反向生成语音。音频语言模型通常将此类声学token与自监督语音模型中的语义token相结合,因为在没有文本条件的情况下,有必要产生可理解的语音。我们扩展了 Zhang et al. (2024b) 的方法,将语义信息提炼到第一级声学token中,并引入了改进的训练技巧。第 3.3 节描述了 Mimi 的架构和训练,而第 5.2 节详细介绍了消融研究。
- 我们提出了一种新的音频语言建模架构 Moshi,它将 Helium 与较小的 Transformer 模型相结合,以分层和流式方式预测音频token。我们展示了这种无条件音频语言模型生成可理解语音的难度,并提供了在以流式方式生成音频的同时,超越非流式模型的可理解性和音频质量的解决方案。此外,我们还扩展了此架构以并行建模多个音频流,从而可以在概念上和实践上简单地处理具有任意动态的全双工对话。第 3.4 节介绍了此架构。
- 在第 3.4.4 节中,我们介绍了 Inner Monologue,这是一种用于音频语言模型的新训练和推理设置,它通过在音频token之前预测时间对齐的文本token来显著提高生成语音的真实性和语言质量。Moshi 是一种语音到语音模型,因为它允许推理非语言信息,无论是来自用户音频还是来自 Moshi 的音频。然而,这与 Moshi 在其语音输出的同时生成文本并不矛盾。根据过去观察到的粗到细的生成(从语义到声学token)对于生成一致的语音至关重要,我们将此层次结构扩展为使用文本token作为语义token的每个时间步前缀。我们的实验表明,这不仅大大提高了生成语音的长度和质量,而且我们还展示了如何强制文本和音频标记之间的延迟可以从 Moshi 模型中派生流式 ASR 和流式 TTS。
- 我们从多个角度评估了 Moshi 的所有组件,包括文本理解、语音清晰度和一致性、音频质量和口语问答。我们的实验(第 5 节中报告)表明,我们的模型在现有的语音文本模型中处于领先地位,可用于语音建模和口头问答,同时兼容流媒体并能够建模几分钟的上下文(在我们的实验中为 5 分钟)。
我们鼓励读者使用我们的网页演示(https://moshi.chat/)与 Moshi 交谈。
2.Related Work
Audio Language Modeling。语音基础模型的早期发展已经改善了许多判别任务的语音理解,从自动语音识别 (ASR) 到说话人验证和语音分类。这一发展的一个关键因素是自监督学习,它允许学习通用的、判别性的语音表示。由于这些语音理解模型建立在之前对文本的MASK语言建模的工作之上,因此文本生成预训练同样启发了大量语音生成模型。特别是,Lakhotia et al. (2021) 提出量化上述自监督表示。由此产生的离散音频token将语音片段表示为分类变量序列,从而将语音生成视为语言建模任务。AudioLM 还将这些语义token与来自神经音频编解码器的声学token相结合,从而允许对任意语音、录音条件和非语音声音进行建模。这些音频语言模型重新定义了语音生成的最新技术,从文本到语音,以及语音到语音的翻译和语音增强。除了这些有监督任务之外,还有一项平行的研究探索了训练和扩展无监督的纯音频模型,这些模型经过了自回归语音生成训练。得益于语义和声学token的分层建模,这些模型的能力逐渐扩展,从用单个说话人的声音生成短句到在任意声音和条件下在数十秒内产生有意义且一致的语音连续。一个主要的挑战是音频需要对长达几分钟的长序列进行建模,才能产生有意义且可利用的输出。然而,音频的潜在表示通常不如文本的等效表示紧凑。因此,当进行自回归建模时,来自神经音频编解码器的离散表示需要对统一时刻进行多次预测。(Liu et al., 2023b) 和 (Evans et al., 2024) 使用潜在扩散模型进行通用音频和音乐建模,以减轻对分层离散token的需求。然而,这些方法不能以流式方式使用,而且目前还不清楚它们是否可以生成一致的语音。Copet et al. (2023) 则表明,通过在不同级别的 token 之间引入延迟并对它们执行并行预测,可以减少自回归步骤的数量。受到 Lee et al. (2022) 的 RQ-Transformer 方法和分层 MegaByte Transformer 模型的启发,Yang et al. (2023) 和 Zhu et al. (2024) 利用较小的嵌套Transformer 在一个时刻中对不同的 token 进行建模。在这项工作中,我们扩展了这些先前的工作,通过提出一种可扩展的音频 token 分层建模来突破自回归语音生成的极限,该模型可以在实时生成音频的同时处理几分钟的上下文。尽管如此,虽然纯语音模型可以从原始语音中学习语言结构(词汇、句法、语义),但它们通常表现出很少甚至不存在的事实知识和推理能力。这导致了语音文本模型的发展,旨在将文本模型的知识和推理能力与音频模型的生成能力相结合。
Speech-text Models。此类模型通常从预训练的文本语言模型开始,然后对其进行微调以预测音频,或提出语音文本微调任务:例如,AudioPALM 从预训练的 PALM 模型开始,并使用语义音频token扩展其文本词表。然后,该模型针对语音文本任务的混合进行训练,包括 TTS、ASR 和语音到语音翻译。VoxTLM 对 TTS 和 ASR 采用类似的方法。虽然这些模型以特定输入和输出序列的有监督方式进行训练,但 Spirit-LM 使用语音及其转录之间的时间对齐来执行序列内的模态切换(从语音token到文本token,或反之亦然)。这使得模型能够学习语言的一致内部表示,无论它是以文本还是语音表示,都可以通过常识评估来衡量。Spectron 和 PSLM 采用的另一种方法是以分层方式而不是可互换的表示形式结合语音和文本。与 AudioLM 将语音生成分解为预测语义token和声学token的方式类似,Spectron 和 PSLM 使用“模态链”,首先将话语生成为文本token,然后用作前缀来生成语音。在这项工作中,我们提出将内心独白作为主要的架构和训练组件,以结合对齐的文本和语音数据。内心独白将语音分解为文本、语义和声学token链,并以分层方式预测这个结构化序列。与 Spirit-LM 不同的是,这允许将所有话语表示为文本和语音,而不是在模态之间切换;此外,将声学token集成到同一个生成模型中可以生成任意声音和条件,而不仅仅是单个说话人。此外,与模态链不同,第 3.4.4 节中描述的这种分层建模允许分解生成任务,而不会增加 Transformer 输出的序列长度。此外,Inner Monologue 会逐帧分解语音,这意味着每个预测步骤都会输出一个语音帧。这与 Spectron 不同,后者需要在生成音频标记之前生成完整的文本序列,这使得 Moshi 与实时生成兼容。最后,我们在第 3.4.4 节中展示了 Inner Monologue 如何与token类型之间的延迟相结合,从而允许从 Moshi 派生流式 TTS 和 ASR 系统。
Spoken Dialogue Models。口语对话是语音生成中探索较少的任务之一,因为它需要解决几个挑战:1) 模型应实时运行并允许全双工长时间对话 - 模型始终在聆听并可以随时说话;2) 它应该是语音到语音的,以处理副语言交流;3) 它应该展示知识和推理能力,使其适合进行有益和愉快的对话。Spectron 受益于其底层文本 LLM(以口语问答衡量),但由于模态链,它与实时生成不兼容。PSLM 提出并行生成语音和文本token以减少这种延迟,但它会降低答案的质量,并且模型仍然依赖于 ASR,这会删除副语言信息。更重要的是,这些模型无法处理全双工通信,其中说话人轮次之间没有界限,因为对话的任何一方都可以随时处于活动状态。Wang et al. (2024) 提出了对这些动态进行建模的尝试,其中 ASR 系统与输入流式 TTS 的文本生成器并行运行。虽然这允许建模比以前的方法更复杂的场景,但它仍然依赖于级联管道,并将用户和系统的语音建模为单个token流,这在存在大量重叠的情况下具有挑战性。之前唯一的全双工对话系统是 dGSLM,它将用户和系统语音建模为单独的音频token流,并提出了一种 Siamese 架构来联合处理这两个流。虽然 dGSLM 是全双工的,但它仍然是一个概念验证:它不以在线方式运行,它不会从文本语言模型的知识中受益,并且它不会建模声学信息,因为它只建模语义token。Moshi 完全解决了这些限制:通过分层建模两个语义和声学token流,Moshi 是全双工的,可以在实时生成语音的同时利用来自用户的所有信息(语言和非语言)。得益于文本预训练和 Inner Monologue,Moshi 受益于其 Helium 主干的知识。最后,由于该模型除了文本和语义token外还生成声学token,因此它可以生成任意范围的情绪、声音和声学条件。据我们所知,Moshi 是第一个成功解决上述许多口头对话挑战的音频语言模型。
3.Model
3.1 Overview
Moshi 是一种多流语音到语音 Transformer 模型,借助图 1 中总结的创新架构,该模型允许与用户进行全双工口头对话。
Moshi 建立在 Helium 之上,Helium 是我们从头开始构建的文本 LLM(第 3.2 节),依靠高质量的文本数据为模型提供强大的推理能力。我们还提出了 Inner Monologue(第 3.4.4 节),这是一种训练和推理程序,我们在此程序中联合建模文本和音频token。这使模型能够充分利用从文本模态传授的知识,同时保持语音到语音系统。为了实现实时对话,我们还从一开始就将 Moshi 设计为多流架构(第 3.4.3 节):该模型能够同时与用户说话和倾听,并且不需要明确建模说话人轮次。此外,为了捕获输入的用户音频并以高质量和高效的方式输出 Moshi 的声音,我们提出了 Mimi(第 3.3 节),这是一种神经音频编解码器,通过使用残差矢量量化和知识蒸馏将语义和声学信息结合到单个tokenizer中。为了联合建模来自 Moshi 和用户的音频流以及 Moshi 的文本token,我们依赖于与流推理兼容的Depth Transformer(第 3.4.1、3.4.2 节)。
在本节中,我们将进一步详细介绍每个组件。然后,我们在第 4 节中描述了用于训练 Moshi 的训练数据集和不同的训练阶段。最后,在第 5 节中,我们报告了对 Moshi 语言和声学能力的全面评估结果,以及对其主要组件的消融实验,而第 6 节则提供了对我们系统安全性的分析。
3.2 The Helium Text Language Model
3.2.1 Architecture
Helium 是一种基于 Transformer 架构的自回归语言模型。根据该领域的先前研究,我们对原始架构进行了以下更改:首先,我们在模型的注意力模块、前馈模块和输出线性层的输入端使用 RMS 正则化。我们使用旋转位置嵌入、4,096 个token的上下文长度和 FlashAttention 进行高效训练。最后,我们更改前馈模块的架构并使用门控线性单元,以 SiLU 激活作为门控函数。我们的tokenizer基于 SentencePiece 的 unigram 模型,包含 32,000 个子词,主要针对英语。我们将所有数字拆分为单个数字,并使用byte-backoff来确保我们的tokenizer不会丢失信息。我们使用 AdamW 优化器训练模型,使用固定学习率,然后进行余弦学习率衰减。
3.2.2 Pre-training data filtering
训练数据是训练 LLM 的关键要素之一:我们现在描述获取大量高质量文本数据集的方法。我们从高质量数据源开始,例如 Wikipedia、Stack Exchange 和大量科学文章。由于这些来源的数据量太小,无法训练 LLM,我们还依赖网络爬取数据(特别是来自 CommonCrawl 的数据)来扩展我们的数据集。有关数据源的更多详细信息,请参阅第 4.1 节。网络数据需要大量处理才能获得高质量的训练集:我们执行重复数据删除、语言识别和质量过滤。下面,我们将更详细地描述每个操作。
Deduplication。我们从 WET 文件开始,该文件仅包含由 CommonCrawl 项目提取的网页文本内容。由于此格式包含页面的所有文本,因此它包含许多模版,例如导航菜单。因此,我们管道的第一步是在行级别对每个分片(每个爬取有 100 个分片)进行重复数据删除,以删除此模版。为此,我们计算每行的 FNV-1a6 哈希,并使用布隆过滤器删除重复项。我们还针对重复项和非重复项训练了 fastText 分类器,以执行模糊重复数据删除:在这里我们仅删除被归类为重复项的至少 3 个连续行的块。
Language identification。去重完成后,我们会应用基于 fastText 的语言标识符来仅保留英语数据。语言识别是在文档级别进行的,我们只保留高于特定阈值(0.85)的文档。
Quality filtering。最后一步是过滤剩余的数据,只保留高质量的网页。为了执行此步骤,我们在来自高质量数据源和随机 CommonCrawl 网页的行上训练一个 fastText 分类器。我们获得了一个具有 9 个类别的分类器,分别对应于我们不同的高质量来源(例如 Wikipedia 或 Wikibooks)以及 StackExchange 的子集(例如 STEM 或人文学科)。这样做的目的是更好地控制要保留哪些文档,不仅基于与高质量来源的相似性,还基于它们的领域。此分类器应用于行级别输入,并通过计算每行的平均分数(按其长度加权)来获得聚合分数。同样,我们保留与高于某个阈值的分数相对应的文档。
3.3 Audio Tokenization
为了将语音波形离散化为音频token,我们引入了 Mimi,这是一种神经音频编解码器,可用作具有离散瓶颈的自动编码器。在文献中,按照 Borsos et al. (2022) 定义的术语,这些token被称为声学token,因为它们可以模拟精细的音频细节并针对高质量重建进行了优化。虽然这些声学token为以文本为条件的音频生成模型(例如文本转语音或文本转音乐)提供了合适的目标,但无法以文本为条件的语音生成需要将这些声学token与从自监督语音模型中提取的语义token相结合。与声学token不同,语义token不能重建高质量音频,但与语言内容密切相关。这种与语言的相似性允许生成清晰且一致的语音,即使没有以文本为条件,也可以通过使用语义音频token作为预测声学token的前缀。然而,这种混合tokenizer方法与实时生成不兼容。语义token通常不具有因果关系,因此只能以离线方式计算。此外,使用单独的编码器生成声学和语义token会带来不可忽略的计算负担。因此,Mimi 受到之前 SpeechTokenizer 工作的启发,使用蒸馏目标损失将非因果的高级语义信息转移到因果模型生成的token中,从而实现语义声学token的流式编码和解码。
3.3.1 Architecture
我们的基线架构从 SoundStream 和 Encodec 中汲取灵感,由 SeaNet 自编码器和残差矢量量化器组成。编码器通过级联残差卷积块将单通道波形
x
∈
R
L
x ∈ \mathbb R^L
x∈RL 投影到潜在表示
e
n
c
(
x
)
∈
R
S
×
D
enc(x) ∈ \mathbb R^{S×D}
enc(x)∈RS×D,这些残差卷积块具有交替的扩张和步幅卷积以及 ELU 非线性激活和权重正则化。所有卷积都是因果的,因此该自编码器可以以流式方式运行。Mimi 的编码器有 4 个卷积块,各自的步幅因子为(4、5、6、8),以及步幅为 2 的最终 1D 卷积,可将 24kHz 波形投射到每秒 12.5 帧且维度
D
=
512
D = 512
D=512 的潜在表示。对称地,解码器采用类似的结构,但使用转置卷积而不是步幅卷积,将潜在表示投射回 24kHz 音频。我们使用残差矢量量化器对潜在空间进行离散化,该量化器迭代地将矢量量化 (VQ) 应用于前一个量化器的残差。使用
Q
Q
Q 个量化器(每个量化器都有一个
N
A
N_A
NA 质心码本),RVQ 将潜在空间离散化为
{
1
,
.
.
.
,
N
A
}
S
×
Q
\{1, . . . , N_A\}^{S×Q}
{1,...,NA}S×Q。作为基准,我们按照 Encodec 的设置,结合使用重构和对抗损失来训练此模型。下面我们详细介绍了 Mimi 相对于此默认配置的主要变化。
Transformer-based bottleneck。为了提高 Mimi 将语音编码为紧凑表示并重建高质量音频的能力,我们在bottleneck中添加了 Transformer 模块,一个在量化之前,一个在量化之后。这些 Transformer 有 8 层、8 个头、RoPE 位置编码、250 帧(20 秒)的有限上下文、GELU 激活、512 的模型维度和 2048 的 MLP 维度。为了稳定训练,我们使用 LayerScale,将对角线值初始化为 0.01。这两个 Transformer 都使用因果MASK,这保留了整个架构与流式推理的兼容性。这两个 Transformer 在感知音频质量方面都被证明是有用的,而编码器中的 Transformer 还改进了下面描述的语义信息的提炼(有关消融研究,请参见表 3)。
Causality and streaming。有了上述超参数,Mimi 就具有因果性,可以以流式方式用于编码和解码。其初始帧大小和总体步长都对应 80 毫秒,这意味着,给定第一个 80 毫秒的音频帧,Mimi 会输出第一个潜在时长,可将其解码为 80 毫秒的输出音频。
Optimization。与使用 Adam 的纯卷积编解码器不同,将 Transformers 引入架构需要使用 AdamW 优化器以及权重衰减进行额外的正则化。更准确地说,我们仅对 Transformers 的参数应用权重衰减,权重为
5
×
1
0
−
2
5\times 10^{−2}
5×10−2。我们使用
8
×
1
0
−
4
8\times 10^{−4}
8×10−4 的学习率、0.5 的动量衰减和 0.9 的平方梯度衰减以及 0.99 的权重指数移动平均值衰减。我们在 12 秒的随机窗口上使用 128 的batch-size进行训练,进行 4M 步长训练,而 Transformers 的上下文限制为 20 秒(编码器的最后一个下采样层之前为 250 帧,对于解码器也是对称的)。
Quantization rate。我们使用
Q
=
8
Q = 8
Q=8 个量化器,每个量化器的码本大小为
N
A
=
2048
N_A = 2048
NA=2048。在 12.5Hz 时,这代表 1.1kbps 的比特率。虽然潜在维度为 512,但我们在应用 RVQ 之前将嵌入投影到 256 维度,并在解码器之前投影回 512。与之前的工作一致,我们使用量化器 dropout 为编解码器提供比特率可扩展性。此外,我们遵循 Kumar et al. (2023) 的观察,即在训练期间以一定概率不应用量化可以提高音频质量。更准确地说,在训练期间,我们仅按每个序列应用 50% 的时间量化。与 Kumar et al. (2023) 不同,这意味着将未量化的嵌入传递给解码器,而不是传递使用所有量化器量化的嵌入。表 3 显示,这显著提高了客观质量指标,而人工评估尚无定论。在我们的实验中,我们做出了某种违反直觉的观察:当我们降低比特率时,这种增益会变得更加显著。
Adversarial-only training。作为基准,我们使用与 D´efossez et al. (2023) 相同的重构和对抗损失组合来训练 Mimi,即多尺度梅尔谱图重构损失以及多尺度 STFT 判别器。确切参数可以在 Audiocraft 库中找到。虽然以前的神经编解码器依赖于这种重构和对抗损失的组合,但我们尝试了纯对抗训练,其中我们只保留特征损失和判别器损失。我们注意到, Tagliasacchi et al. (2020) 和 Hauret et al. (2023) 之前在带宽扩展的背景下进行了实验。虽然消除重构损失会严重降低客观指标,但我们在开发过程中观察到,根据上述指标,生成的音频听起来比预期的要好得多。表 4 中报告的主观评估证实了这一观察结果,并表明仅使用对抗损失进行训练可以显着提高音频质量。
3.3.2 Learning semantic-acoustic tokens with a split RVQ
与 SpeechTokenizer 类似,我们将自监督模型(在我们的例子中为 WavLM)中的语义信息提炼到 RVQ 的第一级。WavLM 将 16kHz 波形投射到以 50Hz 采样的 1024 维嵌入中,而 Mimi 将 24kHz 波形投射到以 12.5Hz 采样的 512 维嵌入中。因此,在训练期间,我们通过将输入波形下采样到 16kHz 来生成蒸馏目标,然后计算 WavLM 嵌入,然后进行步长为 4、内核大小为 8 的平均池化,以达到 12.5 Hz。有趣的是,我们观察到,以非因果方式执行这种平均池化对于性能至关重要,这与流式推理兼容,因为这些嵌入仅在训练期间使用。我们将输出维度为 1024 的线性投影应用于第一级 RVQ 的输出,与进入解码器的实际嵌入并行。然后,我们计算第一个量化器的输出与转换后的 WavLM 嵌入之间的余弦距离,以执行蒸馏。表 3 显示,这种蒸馏损失与针对质量的重构和对抗损失相冲突。事实上,虽然蒸馏显著提高了第一个量化器的语音辨别能力(以 ABX 衡量),但也会对音频质量产生负面影响。我们假设这是由于将语义信息蒸馏到单个 RVQ 的第一级,并由于高阶量化器对第一个量化器的残差进行操作,后者需要以音频质量换取语音辨别能力。我们通过提出一个分裂 RVQ 来解决这个问题。我们不是使用具有 8 个级别的单个 RVQ,而是将语义信息蒸馏到普通 VQ 中,并并行应用具有 7 个级别的 RVQ。我们将它们的输出相加,这样虽然两者都可以用于重建,但我们消除了声学信息应保留在语义量化器的残差中的约束。图 2 说明了该架构,表 3 表明该解决方案总体上提供了更好的语义-声学权衡。
3.4 Generative Audio Modeling
现在,我们将介绍如何扩展基本 Helium 模型,以支持 Mimi 编解码器提供的音频token建模。为了实现逼真的口语对话交互,我们进一步展示了如何不仅是建模单个音频流,而是同时建模两个音频流,一个代表用户,一个代表系统。最后,我们详细介绍了一个新功能“内心独白”,它包括在系统端对文本和音频模态进行联合建模,以提高交互质量。
3.4.1 Hierarchical autoregressive modeling with RQ-Transformer
令
U
∈
{
1
,
.
.
.
,
N
}
S
U ∈ \{1, . . . , N\}^S
U∈{1,...,N}S 为离散随机序列,基数为
N
N
N,序列长度为
S
S
S。为方便起见,我们还将
U
0
=
0
U_0 = 0
U0=0 表示为确定性的初始token值。自回归建模包括通过估计所有步骤
1
≤
s
≤
S
1 ≤ s ≤ S
1≤s≤S 的条件分布
P
[
U
s
∣
U
0
,
.
.
.
U
s
−
1
]
\mathbb P[U_s|U_0, . . . U_{s−1}]
P[Us∣U0,...Us−1] 来估计联合分布
P
[
U
1
,
.
.
.
,
U
S
]
\mathbb P[U_1, . . . , U_S]
P[U1,...,US]。文本语言模型(例如 GPT 或 Helium)符合此范式。
在对口语进行建模时,依靠token后的文本可以产生比音频token更紧凑的表示:使用第 3.3 节中介绍的 Mimi 编解码器,
Q
=
8
Q = 8
Q=8 个码本,帧率为 12.5hz,需要每秒生成 100 个 token 的音频序列长度。要对 5 分钟的音频进行建模,这将相当于 30,000 个token,这代表着巨大的计算成本,并且每秒生成 100 个token与流式推理不兼容。作为比较,英语语音样本可以用每秒大约 3 到 4 个文本token来表示。
我们感兴趣的不仅仅是对单个序列(
U
s
U_s
Us)进行建模,还对多个子序列(例如不同的音频码本)以及可选的文本流进行建模。我们可以将这些子序列堆叠为
V
s
,
k
V_{s,k}
Vs,k,其中
1
≤
s
≤
S
1 ≤ s ≤ S
1≤s≤S 且
1
≤
k
≤
K
1 ≤ k ≤ K
1≤k≤K。类似地,我们定义
V
0
,
k
=
0
V_{0,k} = 0
V0,k=0,这是所有子序列的确定性初始token值。对于每个
1
≤
s
≤
S
1 ≤ s ≤ S
1≤s≤S 和
1
≤
k
≤
K
1 ≤ k ≤ K
1≤k≤K,有
V
s
,
k
∈
1
,
.
.
.
,
N
k
V_{s,k} ∈ {1, . . . , N_k}
Vs,k∈1,...,Nk,其中
N
k
N_k
Nk 是第
k
k
k 个子序列的基数。可以将
K
K
K 个序列展平为一个序列,从而增加
K
K
K 的预测数量。Lee et al. (2022) 建议在 K 维度上使用较小的自回归模型,并与时间维度上的较大模型相结合,形成 RQ-Transformer。后来,Yu et al. (2024) 提出了一种类似的方法进行字节级建模,而 Yang et al. (2023) 和 Zhu et al. (2024) 将其应用于音频token建模。
RQ-Transformer。形式上,RQ-Transformer 由两个 Transformer 模型组成,如图 3 所示。它由一个Temporal Transformer(例如,具有与第 3.2 节中为 Helium 描述的相同架构)和一个较小的Depth Transformer 组成。我们将
T
r
T
e
m
p
Tr_{Temp}
TrTemp 表示为Temporal Transformer 所表示的函数,将
T
r
D
e
p
t
h
Tr_{Depth}
TrDepth 表示为Depth Transformer 所表示的函数。为简单起见,对于所有步骤
s
≤
S
s ≤ S
s≤S,我们将
V
s
=
(
V
s
,
1
,
.
.
.
,
V
s
,
K
)
V_s = (V_{s,1}, . . . , V_{s,K})
Vs=(Vs,1,...,Vs,K) 表示为步骤
s
s
s 处所有子序列的联合值。对于给定序列步骤
1
≤
s
≤
S
1 ≤ s ≤ S
1≤s≤S,Temporal Transformer 将
(
V
0
,
.
.
.
,
V
s
−
1
)
(V_0, . . . , V_{s−1})
(V0,...,Vs−1) 映射到 temporal context 向量:
z
s
=
T
r
T
e
m
p
(
V
0
,
.
.
.
,
V
s
−
1
)
∈
R
d
.
(1)
z_s=Tr_{Temp}(V_0,...,V_{s-1})\in\mathbb R^d.\tag{1}
zs=TrTemp(V0,...,Vs−1)∈Rd.(1)
如果我们进一步取子序列索引
1
<
k
≤
K
1 < k ≤ K
1<k≤K,则 Depth Transformer 将
z
s
z_s
zs 和
(
V
s
,
1
,
.
.
.
,
V
s
,
k
−
1
)
(V_{s,1}, . . . , V_{s,k−1})
(Vs,1,...,Vs,k−1) 映射到 logits 估计值:
l
s
,
k
=
T
r
D
e
p
t
h
(
z
s
,
V
s
,
1
,
.
.
.
,
V
s
,
k
−
1
)
∈
R
N
k
.
(2)
l_{s,k}=Tr_{Depth}(z_s,V_{s,1},...,V_{s,k-1})\in\mathbb R^{N_k}.\tag{2}
ls,k=TrDepth(zs,Vs,1,...,Vs,k−1)∈RNk.(2)
我们进一步定义
l
s
,
1
=
L
i
n
(
z
s
)
∈
R
N
1
l_{s,1} = Lin(z_s) ∈ \mathbb R^{N_1}
ls,1=Lin(zs)∈RN1,其中
L
i
n
Lin
Lin 是专用的线性层。我们训练
T
T
e
m
p
T_{Temp}
TTemp、
T
r
D
e
p
t
h
Tr_{Depth}
TrDepth 和
L
i
n
Lin
Lin,以便
s
o
f
t
m
a
x
(
l
s
,
k
)
softmax(l_{s,k})
softmax(ls,k) 能够很好地近似
V
s
,
k
V_{s,k}
Vs,k 的分布,该分布基于前几步的所有子序列,以及当前步骤的先前子序列,例如:
{
s
o
f
t
m
a
x
(
l
s
,
1
)
≈
P
[
V
s
,
1
∣
V
0
,
.
.
.
,
V
s
−
1
]
s
o
f
t
m
a
x
(
l
s
,
k
)
≈
P
[
V
s
,
k
]
∣
V
0
,
.
.
.
,
V
s
−
1
,
V
s
,
1
,
.
.
.
,
V
s
,
k
−
1
]
i
f
k
>
1.
(3)
\begin{cases} softmax(l_{s,1})\approx\mathbb P[V_{s,1}|V_0,...,V_{s-1}]\\ softmax(l_{s,k})\approx\mathbb P[V_{s,k}]|V_0,...,V_{s-1},V_{s,1},...,V_{s,k-1}]\qquad if~k>1. \end{cases}\tag{3}
{softmax(ls,1)≈P[Vs,1∣V0,...,Vs−1]softmax(ls,k)≈P[Vs,k]∣V0,...,Vs−1,Vs,1,...,Vs,k−1]if k>1.(3)
重要的是,Temporal Transformer中的步数始终等于
S
S
S,而不是
K
⋅
S
K · S
K⋅S,而Depth Transformer中的步数最多为
K
K
K。实际上,Temporal Transformer 在每个步骤
s
s
s 接收表示最后
V
s
−
1
V_{s-1}
Vs−1 值的 K 个学习嵌入表的总和作为输入。给定
1
<
k
≤
K
1 < k ≤ K
1<k≤K,Depth Transformer 接收
z
s
z_s
zs 和表示
V
s
,
k
−
1
V_{s,k-1}
Vs,k−1 的学习嵌入的总和作为输入。
如表 1 所示,我们的 Depth Transformer 有 6 层,维度为 1024,有 16 个注意力头。与 Lee et al. (2022); Yang et al. (2023); Zhu et al. (2024) 不同,我们在 Depth Transformer 中对线性层、投影层和全连接层的每个索引
k
k
k 使用不同的参数。实际上,不同的子序列可能需要不同的Transformer。鉴于此 Transformer 的尺寸较小,这对训练和推理时间都没有影响,而表 6 表明这种深度参数化是有益的。
3.4.2 Audio modeling
第 3.3 节中描述的音频编解码器 Mimi 输出
Q
Q
Q 个子序列,每秒音频有 12.5 个步长。我们将这些序列表示为
A
t
,
q
∈
{
1
,
.
.
.
,
N
A
}
A_{t,q} ∈ \{1, . . . , N_A\}
At,q∈{1,...,NA},其中
1
≤
t
≤
T
1 ≤ t ≤ T
1≤t≤T,
T
=
12.5
⋅
d
u
r
a
t
i
o
n
T = 12.5 · duration
T=12.5⋅duration,
1
≤
q
≤
Q
,
Q
=
8
1 ≤ q ≤ Q,Q = 8
1≤q≤Q,Q=8。我们将音频子序列插入由 RQ-Transformer 建模的多序列
V
V
V 中。请记住,第一个码本
A
t
,
1
A_{t,1}
At,1 对应于语义信息,如第 3.3.2 节中所述,而其他码本对应于声学特征。
Acoustic delay。我们首先尝试在建模中简单地设置
V
=
A
V = A
V=A。然而,我们发现在语义和声学token之间引入轻微的延迟会导致更稳定的生成。Copet et al. (2023) 表明,这会导致给定时间步长的子序列之间的依赖性降低,并以过去为条件,从而允许使用较弱的模型来近似联合分布
P
[
V
s
,
k
∣
V
0
,
.
.
.
,
V
s
−
1
]
\mathbb P[V_{s,k}|V_0, . . . , V_{s−1}]
P[Vs,k∣V0,...,Vs−1](在他们的情况下,作为条件边际的乘积)。Lemercier et al. (2024) 进一步展示了给定步长的子序列之间的相互信息与生成质量之间的联系:自然,相互依赖性越复杂,估计它们的模型就越强大。
如第 5.3 节所示,在语义特征和声学特征之间引入 1 或 2 步延迟可大大提高生成质量。这允许时间更大的 Transformer 模拟语义特征和声学特征之间的相互依赖关系。形式上,给定延迟
τ
∈
N
τ ∈ N
τ∈N,对于所有步长
s
s
s,我们有:
{
V
s
,
1
=
A
s
,
1
V
s
,
q
=
A
s
−
τ
,
q
i
f
s
≥
τ
+
1
,
q
>
1
V
s
,
q
=
0
i
f
s
≤
τ
+
1
,
q
>
1.
(4)
\begin{cases} V_{s,1}=A_{s,1} \\ V_{s,q}=A_{s-τ},q\qquad if~s\ge τ+1,q>1\\ V_{s,q}=0\qquad if~s\le τ+1,q>1. \end{cases}\tag{4}
⎩
⎨
⎧Vs,1=As,1Vs,q=As−τ,qif s≥τ+1,q>1Vs,q=0if s≤τ+1,q>1.(4)
请注意,Yang et al. (2023) 和 Zhu et al. (2024) 已成功使用 RQ-Transformers 来建模音频。我们在此介绍了Depth Transformer中每个码本参数的使用以及声学延迟的使用。与首先生成所有语义token的 (Zhu et al., 2024) 相比,我们将它们与声学token联合生成,这首次允许对语义和声学token进行联合流式建模。
3.4.3 Multi-stream modeling
仅对单个音频流进行建模不足以完全模拟对话。我们的框架可以扩展到对两个说话人的对话进行建模:给定两个音频流 ( A t , q ) (A_{t,q}) (At,q) 和 ( A ′ t , q ) (A′_{t,q}) (A′t,q),我们只需对两者应用声学延迟,然后将它们连接到 V V V 中,从而扩展公式 4。实际上, A A A 将对应于 Moshi,而 A ′ A′ A′ 则模拟用户。
3.4.4 Inner Monologue
虽然纯粹在音频领域进行操作已经产生了令人信服的结果(见表 7),但我们观察到,让 Moshi 也对自己的语音的文本表示进行建模,提供了一个可以提高其生成语言质量的支架。正式地,我们定义一个文本流
W
∈
{
1
,
.
.
.
,
N
W
}
T
W ∈ \{1, . . . , N_W \}^T
W∈{1,...,NW}T,它源自通过将 SentencePiece tokenizer应用于使用 Whisper 转录与 Moshi 相对应的音频而获得的文本token序列,如下所述。我们将
W
W
W 作为
V
V
V 中的第一个子序列插入,这样它就充当语义token生成的前缀。这可以看作是 Borsos et al. (2022) 引入的分层语义到声学生成的扩展。请注意,我们不使用与用户流相对应的文本表示,因为实时转录此流具有挑战性,并且依赖外部 ASR 系统与我们的端到端语音到语音方法相矛盾。第 5.3 节中的消融研究表明,在为 Moshi 做出的设计选择中,内心独白对生成语音的质量具有最关键的影响之一。
Aligning text and audio tokens。为了将文本token与以 12.5Hz 的恒定帧速率运行的音频token集成在一起,我们需要将它们与此帧速率对齐。为此,我们利用 Whisper 提供的单词级时间戳。转录中的第
i
i
i 个单词被映射到
n
i
∈
N
∗
n_i ∈ \mathbb N^∗
ni∈N∗ 个文本token
w
i
,
j
,
j
≤
n
i
w_{i,j},j ≤ n_i
wi,j,j≤ni,以及起始索引
t
i
∈
{
1
,
.
.
.
T
}
t_i ∈ \{1, . . . T\}
ti∈{1,...T}被简单定义为其起始时间戳除以 12.5 Hz 的帧速率。我们定义了两个特殊token:PAD 和 EPAD,它们永远不会出现在任何单词token中。我们构建
W
W
W,使得当一个单词开始时,(
W
t
W_t
Wt)包含其文本token,然后是 PAD 直到下一个单词。EPAD 插入到下一个单词之前以指示填充的结束。虽然不是绝对必要的,但我们观察到这为模型提供了有用的指导,因为它将结束单词以及应该遵循哪个单词的决定分为两个步骤。
首先,用 PAD token初始化序列 (
W
t
W_t
Wt),例如
∀
t
,
W
t
←
P
A
D
∀t, W_t ← PAD
∀t,Wt←PAD。然后,我们按如下方式迭代修改它。对于每个单词
i
i
i 及其起始索引
t
i
t_i
ti,我们将
W
W
W 更新为:
{
W
t
i
−
1
←
E
P
A
D
W
t
i
+
j
←
w
i
,
j
∀
j
≤
n
i
.
(5)
\begin{cases} W_{t_i-1} ← EPAD\\ W_{t_i+j} ← w_{i,j}\qquad ∀j\le n_i. \end{cases}\tag{5}
{Wti−1←EPADWti+j←wi,j∀j≤ni.(5)
请注意,如果
t
i
=
1
t_i = 1
ti=1,我们将改为在索引 1 处插入 EPAD,并移动文本token。如果 EPAD token会覆盖前一个单词的文本token,则我们不会插入它。由于文本token比相应的音频token更紧凑,因此
W
t
W_t
Wt 中的单词之间通常没有重叠。在英语对话语音中,我们观察到填充token约占总token的 65%。
Deriving streaming ASR and TTS。还可以在文本序列 (
W
t
W_t
Wt) 和音频标记 (
A
t
,
q
A_{t,q}
At,q) 之间引入一些延迟。这控制语言模型将以何种方式决定生成的音频的内容。通过将音频设置在文本之前,文本的内容将由前面步骤中采样的音频决定。具体来说,通过仅采样文本token,同时使用golden音频token并丢弃模型对它们的预测,可以获得流式自动语音识别模型,该模型还提供精确的单词级对齐。另一方面,通过更改文本延迟以使文本位于音频token之前,音频的内容由文本内容决定。再一次,给定一个适当填充的文本token序列,可以获得流式文本转语音模型。我们在附录 C 中进一步描述了如何调整具有延迟文本的语言模型的推理以获得零样本适当填充的文本token序列。第 5.7 节中的实验展示了单个延迟超参数如何允许从 ASR 模型切换到 TTS 模型,而无需改变损失、架构或训练数据。
Joint sequence modeling for Moshi。将多流和内心独白结合在一起,我们得到最终的序列集
V
V
V,其定义为:
{
V
s
,
1
=
W
s
a
l
i
g
n
e
d
t
e
x
t
t
o
k
e
n
s
.
V
s
,
2
=
A
s
,
1
s
e
m
a
n
t
i
c
t
o
k
e
n
s
o
f
M
o
s
h
i
.
V
s
,
1
+
q
=
A
s
−
τ
,
q
i
f
s
≥
τ
+
1
,
1
<
q
≤
Q
d
e
l
a
y
e
d
a
c
o
u
s
t
i
c
t
o
k
.
o
f
M
o
s
h
i
.
V
s
,
1
+
Q
+
1
=
A
s
,
1
′
s
e
m
a
n
t
i
c
t
o
k
e
n
o
f
o
t
h
e
r
.
V
s
,
1
+
Q
+
q
=
A
s
−
τ
,
q
′
i
f
s
≥
τ
+
1
,
1
<
q
≤
Q
d
e
l
a
y
e
d
a
c
o
u
s
t
i
c
t
o
k
.
o
f
o
t
h
e
r
,
(6)
\begin{cases} V_{s,1} = W_s & & aligned~text~tokens.\\ V_{s,2} = A_{s,1} & & semantic~tokens~of~Moshi.\\ V_{s,1+q}=A_{s-τ,q} & if~s\ge τ+1,1<q\le Q & delayed~acoustic~tok.~of~Moshi.\\ V_{s,1+Q+1}=A'_{s,1} & & semantic~token~of~other.\\ V_{s,1+Q+q}=A'_{s-τ,q} & if~s\ge τ+1,1<q\le Q & delayed~acoustic~tok.~of~other, \end{cases}\tag{6}
⎩
⎨
⎧Vs,1=WsVs,2=As,1Vs,1+q=As−τ,qVs,1+Q+1=As,1′Vs,1+Q+q=As−τ,q′if s≥τ+1,1<q≤Qif s≥τ+1,1<q≤Qaligned text tokens.semantic tokens of Moshi.delayed acoustic tok. of Moshi.semantic token of other.delayed acoustic tok. of other,(6)
总计有
K
=
2
Q
+
1
K = 2Q + 1
K=2Q+1 个流,实验中
Q
=
8
Q = 8
Q=8。图 4 提供了摘要。
Inference of Moshi。等式 6 给出的联合序列是我们在训练时建模任务的目标:在任何时刻
s
s
s,模型输入
0
,
V
1
,
.
.
.
,
V
s
−
1
0, V_1, ..., V_{s−1}
0,V1,...,Vs−1,并输出估计的概率分布
V
^
s
(
0
,
V
1
,
.
.
.
,
V
s
−
1
)
\hat V_s(0, V_1, ..., V_{s−1})
V^s(0,V1,...,Vs−1)。在推理时,我们从
V
^
s
,
k
\hat V_{s,k}
V^s,k 中抽取与 Moshi 输出相对应的所有子序列索引:即,对于k = 1,是与 Moshi 的语音相对应的文本token,对于
k
∈
{
2
,
.
.
.
,
2
+
Q
}
k ∈ \{2,...,2+Q\}
k∈{2,...,2+Q},则是 Moshi 的音频token。在应用设置中,来自用户的音频预测(
k
>
2
+
Q
k > 2+Q
k>2+Q)实际上被忽略,因为使用的是实际用户音频。但是,将用户流建模为输出可以生成模拟对话,这对于离线评估是必需的,如第 5.6 节所述。有趣的是,用户和 Moshi 之间的轮次没有明确的界限:Moshi 可以随时说话和倾听,如果需要,还可以同时进行。具体来说,当用户说话而 Moshi 保持沉默时,Moshi 流的相应音频token会解码为“自然静音”,即近乎静音的波形,而不是具有固定的、定义明确的值;同时,Moshi 的文本流将充满 PAD token。因此,文本流可以提供控制 Moshi 的有趣方式,例如,强制采样 EPAD token将使 Moshi 立即开始说话。
4.Datasets and Training
4.1 Text Data
我们的训练数据集由高质量数据源和来自 CommonCrawl 的过滤网络数据混合而成。更具体地说,我们的数据集的 12.5% 来自以下精选来源:维基百科、维基教科书、维基文库、维基新闻、StackExchange 和科学文章集合 pes2o。我们没有对维基百科进行多次遍历,而是使用了 2017 年、2018 年、2019 年、2021 年和 2022 年的五个不同的库。我们数据集的其余 87.5% 来自 CommonCrawl,并使用第 3.2.2 节中描述的管道进行了过滤。我们使用了以下十个抓取版本:2018-30、2019-04、2019-30、2020-05、2020-34、2021-04、2021-31、2022-05、2022-33、2023-40。
4.2 Audio Data
我们使用 700 万小时的音频集合,我们将其称为无监督音频数据集,其中包含现成的音频内容,其中大部分包含英语语音。我们使用 Whisper 的 Large-v3 模型转录此集合。我们将此数据用于音频预训练阶段,在此阶段我们不使用第 3.4.3 节中描述的多流方法,而是使用一次表示所有说话人的单音频流。同样,第 3.4.4 节中描述的文本流表示来自所有说话人的单词。所有音频都重新采样为 24kHz 并混音为单声道。
为了实现多流,我们需要模型能够同时聆听和说话。为此,我们进一步利用 Fisher 数据集。它包含随机配对参与者之间的 2000 小时电话对话,主要讨论给定主题。Fisher 的一个特性是,对话的每一方都记录在单独的频道上,这允许向 Moshi 提供真实分离的流。原始音频以 8kHz 采样,我们使用 AudioSR 将其上采样到 24kHz。
最后,我们收集了多对参与者之间 170 小时的自然和脚本对话,每个说话人使用单独的频道进行录制,以便提供一个小型数据集,在此数据集上对模型进行微调,以提高质量,使其优于仅使用 Fisher 时获得的质量。我们将此数据集称为有监督多流数据集。我们不会直接在此数据集上训练 Moshi,而是使用它来训练真实的多流 TTS 模型,并根据第 4.3 和 4.4 节中的说明在真实对话转录上对 Helium 进行微调。
对于 Fisher 和最后一个数据集,我们随机抽取一个说话人作为主说话者(即 Moshi 说话),并将另一个说话人放在第二个音频流中。对于 Fisher,文本流仅包含主说话人的转录。为了获得可靠的时间戳,尽管每个流中都有长时间的静默,我们使用 whisper-timestamped 包获得的转录以及中等 Whisper 模型。
4.3 Speech-Text Instruct Data
早期使用基于文本的指令数据集(如 Open Hermes)的实验被证明不适合口语对话系统的指令微调。特别是,数据格式通常无法用 TTS 正确呈现(例如 URL),问题和答案的格式不符合自然的口语流程(例如项目符号、长枚举)。相反,我们利用 Helium(在 Open Hermes 和真实对话转录上进行了微调)来生成基于语音的 AI 模型和用户之间的真实交互。然后,我们将它们与附录 C 中描述的多流流式 TTS 进行合成,从而产生超过 20,000 小时的合成语音数据。为了让 Moshi 拥有自己一致的声音,我们还根据单个演员的声音对 TTS 引擎进行调节,该演员录制了涵盖 70 多种说话风格的独白,如表 19 所示。第 6.3 节中报告的关于声音一致性的实验表明,在指令微调期间,只需对 Moshi 使用一致的声音就足以几乎肯定地保证它不会使用其他声音,而无需在推理期间进行进一步控制。相比之下,第二个音频流(用户)的声音是针对每个示例随机采样的,从而对不同的说话条件和口音具有更高的鲁棒性。
为了生成转录,我们使用不同的提示,旨在捕捉用户和 Moshi 之间不同类型的互动。首先,我们从几个维基百科段落或 StackExchange 帖子(我们称之为上下文)开始,生成关于常识的对话。这确保了 Moshi 的对话涵盖广泛的主题,例如历史、烹饪建议或流行文化。更准确地说,使用给定的上下文,我们通过以下提示获得潜在讨论的摘要:
其中 {{context}} 指的是 Wikipedia 或 StackExchange 中的段落,而 {{title}} 是相应的标题。然后,我们使用提示生成完整的转录:
类似地,为了向 Moshi 提供有关其自身和 Kyutai 实验室的信息,我们生成了描述两者的段落并将它们用作附加背景信息。
其次,我们生成包含有关 Moshi 声音的指令的交互,例如另一个说话者要求 Moshi 用愤怒的声音或像海盗一样说话。我们的第一个策略是生成单轮交互,其中指示模型使用特定的声音讲述一个句子、一段独白或一首关于实体的诗歌,这些实体属于“运动”或“动物”等高级类别。另一个说话者请求的声音和实体是随机采样的,因此完全不相关。我们的第二个策略是生成角色扮演情境,对应不同的情绪或说话风格,提示如下:
语音形容词的例子包括“高兴”或“惊讶”,人物的例子包括“侦探”或“超级英雄”。然后我们使用提示生成交互:
为了让 Moshi 能够应对发音错误的单词,我们还生成了包含用户问题中的拼写错误的指令,然后 Moshi 要求用户重复自己的话或澄清问题。我们还会生成包含错误或误导性事实的问题(例如“Is the Eiffel Tower in Beijing?”),以训练模型回答“否”并纠正用户。否则,生成的绝大多数对话仅包含用户的问题,而 Moshi 应该给出肯定的回答。我们生成了基本的数学、语法或琐事单轮问答,因为我们注意到 Moshi 最初在加数字等简单的事实任务上表现不佳。最后,我们生成了安全对话,用户会问一些不道德或不适合工作场合的问题,而 Moshi 拒绝回答这些请求。
4.4 Training Stages and Hyper-parameters
Helium pre-training。表 1 概述了训练阶段和超参数。对于每个阶段,我们使用 AdamW,权重衰减为 0.1,动量衰减为 0.9,梯度平方平均值衰减为 0.95。所有模型均在 H100 GPU 上进行训练,使用 FSDP 和激活检查点。纯文本语言模型 Helium 经过 500k 步的训练,batch size为 4.2M 个token,使用从
3
⋅
1
0
−
4
3·10^{−4}
3⋅10−4 开始的余弦学习率schedule,并进行线性warm-up。
Moshi pre-training。然后,我们使用 Helium 初始化 Moshi 中的 Temporal Transformer,而第 3.4.1 节中描述的 Depth Transformer 则随机初始化。我们首先在第 4.2 节中介绍的无监督音频数据集上进行训练,使用单个音频流,batch size涵盖 16 小时的音频,每个batch由 5 min 序列组成。我们以 30% 的概率屏蔽相应的文本token。我们将文本和音频token之间的延迟随机化在 -0.6 到 +0.6 秒之间。为了防止灾难性遗忘,我们还将一半时间用于与 Helium 相同的数据集中的纯文本数据批次的训练。总共,我们进行了 100 万个训练步骤,Temporal Transformer的余弦学习率从
3
⋅
1
0
−
5
3 · 10^{−5}
3⋅10−5 开始,Depth Transformer 的余弦学习率从
2
⋅
1
0
−
4
2 · 10^{−4}
2⋅10−4 开始,同样采用线性warm-up。为了确保纯文本批次的更新与音频数据集的更新保持平衡,我们使用了两个独立的优化器状态。此外,在对音频批次的文本流进行操作时,我们将文本嵌入和文本线性层的学习率乘以 0.75。最后,由于PAD token在音频批次中占主导地位,我们在交叉熵损失中将其权重降低了 50%。
Moshi post-training。从上一阶段获得的模型开始,我们对其进行训练以获得其多流能力。首先,我们使用 PyAnnote 对无监督音频数据集中的音频进行二值化。我们随机抽取一个说话人作为主说话人,并在波形上得出一个二进制掩码,当基于二值化的说话人处于活动状态时,其值为 1,否则为 0。此掩码为我们提供了两个波形:一个带有说话人,一个带有残差(可能有几个说话人),它们被单独编码,然后用作第 3.4.3 节中描述的两个输入音频流。文本流仅包含来自所选主说话人的文本token,文本和音频token之间的延迟固定为 0。我们训练 100k 步,batch-size 大小为 8 小时的音频,Temporal Transformer 的固定学习率为
3
⋅
1
0
−
6
3 · 10^{−6}
3⋅10−6,Depth Transformer 的固定学习率为
5
⋅
1
0
−
5
5 ·10^{−5}
5⋅10−5。与预训练阶段类似,我们 10% 的时间对纯文本batch进行采样。
Moshi finetuning。前面描述的模拟多流提供了良好的预训练任务,但远不足以捕捉自然对话:例如,它不包含重叠,并且非活跃说话人的流完全无声。然后,我们使用 Fisher 数据集让模型学习真正的多流交互。我们从两个说话人中抽取一个作为第一个(也是主要的)说话人。我们训练 10k 个batch,batch-size为 40 分钟的音频,main/Depth Transformer的学习率为
2
⋅
1
0
−
6
/
4
⋅
1
0
−
6
2 · 10^{−6}/4 · 10^{−6}
2⋅10−6/4⋅10−6。我们不再抽样纯文本batch。
最后,我们将第一个说话人流的说话者身份设置为 Moshi(一个实用的对话助手),最后进行指令微调。我们使用第 4.3 节中描述的合成指令数据集,批处理大小为 2.7 小时音频,步长为 30k,两个 Transformer 的学习率均为
2
⋅
1
0
−
6
2 · 10^{−6}
2⋅10−6。
在此阶段,我们对用户流进行数据增强,使 Moshi 能够应对各种情况。也就是说,我们在 50% 的时间内对用户流应用 -24 dB 到 +15 dB 之间的随机增益。30% 的时间,我们进一步添加来自深度噪声抑制挑战的噪声提取,并将其连接起来以覆盖每个示例的整个持续时间。噪声被放大以达到相对于原始源的目标音量 -30 dB 到 +6 dB 之间。每次我们需要采样新的噪声时,我们都会交替使用一个静音部分,其随机持续时间最长为 30 秒,概率为 50%,这样模型就可以处理从嘈杂到安静的音频条件,反之亦然。我们通过将缩小版的 Moshi 流副本添加到用户流中来模拟 Moshi 回声到用户的麦克风中,按 [0, 0.2] 范围内均匀采样的因子缩放,并在 [100ms, 500ms] 之间均匀采样延迟。最后,我们将 Defossez 等人 (2020) 引入的类似混响的增强应用于可能通过回声增强的用户流。回声和混响一起应用的概率为 30%。
TTS Training。我们还使用第 3.4.4 节中描述的方法训练流式、多流文本转语音模型。音频预训练阶段与 Moshi 共享,而后训练则使用与文本相比 2 秒的音频流延迟完成。该模型在包含两个说话人之间交互的高质量转录的有监督多流数据集上进行了微调。它用于生成第 4.3 节中描述的合成微调指令数据集。请注意,Moshi 本身并未在监督多流数据集上进行训练。附录 C 中提供了更多详细信息。
Training loss。Moshi 经过训练可以对联合序列进行建模,如公式 6 所示。给定真实离散token
(
V
s
,
k
)
s
≤
S
,
k
≤
K
(V_{s,k})_{s≤S,k≤K}
(Vs,k)s≤S,k≤K,以及公式 2 中估计的对数
(
l
s
,
k
)
s
≤
S
,
k
≤
K
(l_{s,k})_{s≤S,k≤K}
(ls,k)s≤S,k≤K,我们使用以下损失,其中 CE 为交叉熵,