KE-Omni-语音会话大模型

贝壳团队最新的语音大模型工作:面对语音交互对话数据稀缺的行业现状,尝试通过多阶段生成的方式来Scale训练数据;构建了超60000+小时、包含40000+说话人的高质量交互对话数据集Ke-SpeechChat;通过这些方式,表现基本能达到SOTA;

个人理解

  • 1、具体做法是先生成文本token,基于文本token在自回归生成语音token,最后基于语音token合成音频,没办法做到打断和全双工对话。另外,只使用hubert的音频token来合成语音可能效果不好,缺乏声学信息,合成的音频可能不会有太多的情感波动以及音色可能不稳定,看作者demo和论文, HiFi-GAN 声码器针对代理发音人(agent speakers)预先训练,针对中英文男/女 各选了一个音色进行HiFiGAN的训练,如果只在单一音色上训练的HiFiGAN可能音色比较稳定。个人理解应该是每一个音色训练一个HiFiGAN模型,听demo确实语音没有情感波动另外这种方法跟LLama-omni做法基本一致。
  • 2、论文中给出了如何在没有开源的大规模语音交互数据集情况下进行语音对话数据集的制作。比较有借鉴意义。首先对文本数据使用LLM进行重写指令、筛选重写后的指令以及口语化后处理。然后使用TTS技术合成多说话人,多样化的语音。另外在附录中给出了 文本重写指令的prompt以及不同的大小的Qwen2 LLM重写的结果分析。【具体提示词见附录】

论文:通过使用超过 60,000 小时的合成语音对话数据扩展监督微调来推进语音语言模型Advancing Speech Language Models by Scaling Supervised Fine-Tuning with Over 60,000 Hours of Synthetic Speech Dialogue Data

KE-Omni是一个基于 Ke-SpeechChat 构建的无缝大型语音语言模型,这是一个大规模的高质量合成语音交互数据集,由 700 万中英文对话组成,有 42,002 名说话人,总计超过 60,000 小时,这为该领域的研究和开发进步做出了重大贡献。

KE-Omni 模型架构

KE-Omni 由三个主要组件组成:语音编码器、大型语言模型(LLM)和语音解码器针对用户的语音指令,KE-Omni 被设计为无缝生成高质量的文本和语音响应。

语音编码器

采用了 Whisper-large-v3的编码器作为语音编码器。Whisper 是一种广泛使用的多语言语音识别模型,以其在多种语言上的强大性能而著称,非常适合我们的应用场景。一个轻量级的语音适配器被用于语音-文本模态对齐,将语音编码器与 LLM 连接起来。

语音编码器将每秒的音频处理为 50 帧特征。随后,语音适配器进一步压缩语音特征序列的长度,使其与 LLM 的模态对齐。我们在语音适配器中采用了 5 倍的压缩比,这意味着每秒的语音最终被转换为 10 帧特征。这种方法提高了处理速度并降低了 LLM 的延迟,同时保证了质量不受影响。

在整个训练过程中,语音编码器的参数保持冻结状态,仅语音适配器的参数会更新。这种方法保留了编码器强大的语音表示能力,同时使适配器能够学习必要的转换,以实现与 LLM 的高效语音-文本模态对齐。

语言模型

采用了最先进的开源模型 LLaMA作为大型语言模型(LLM)。该模型在多语言推理能力方面表现出色,涵盖中文和英文等多种语言。在 KE-Omni 中,LLM 将提示文本嵌入和语音编码器生成的语音表示拼接后作为输入。这种集成方式使得 LLM 能够利用来自文本和语音模态的上下文信息。然后,LLM 根据用户的语音指令自回归地生成文本响应。为了在性能和效率之间取得平衡,我们选择了 LLaMA-3.1-8B-Instruct 作为我们的 LLM 变体。

语音解码器

语音解码器负责将 LLM 的文本响应映射为对应的语音信号,是实现语音交互的重要组件。解码器包括以下三个关键部分:

  1. 时长预测器来自 Unit-based HiFi-GAN Vocoder with Duration Prediction
  2. 语音单元生成器
  3. 基于单元的声码器(vocoder)

语音特征表示

类似于 (Zhang et al., 2023) 和 (Fang et al., 2024) 的方法,我们采用预训练的 HuBERT 模型(Hsu 等人,2021)来提取连续的语音表示,并使用 K-means 模型将这些连续表示转化为离散的聚类索引。

生成语音响应的步骤

  1. 时长预测
    在生成语音响应之前,时长预测器首先预测每个文本标记(token)的时长。
    • 根据预测的时长信息,文本token序列会被上采样以匹配目标音频帧序列的长度。
    • 时长预测器在 KE-Omni 的训练过程中保持冻结状态。
  2. 语音单元生成
    基于 Transformer 的语音单元生成器以自回归方式生成离散语音单元序列。为了提高预测速度,我们采用基于块的自回归方法,分块预测语音单元。
    • 给定块大小 C 和目标语音单元序列长度 T,第 i 个文本token和第 j 个语音单元的嵌入向量进行拼接【concatenated】作为输入,其中 j=i−C,且 i∈[C,T]。
    • 在第一个块中,语音单元使用零嵌入初始化。
    • 为了确保语音单元生成的质量,我们在扩展的文本token序列和语音单元序列之间引入了 N 步延迟。
  3. 波形合成
    最终,通过基于单元的声码器(vocoder)将语音单元合成波形。我们选择了 HiFi-GAN 作为声码器。Unit-based HiFi-GAN Vocoder with Duration Prediction HiFi-GAN 声码器针对代理发音人(agent speakers)预先训练,并在 KE-Omni 的训练过程中保持冻结状态。

Ke-SpeechChat 数据集构建

目前尚未见到开源的大规模语音交互数据集,这极大地阻碍了语音对话研究的发展。这种稀缺性主要归因于以下两个因素:一是构建语音数据的高成本,二是涉及的隐私风险。

为了有效构建大规模且高质量的语音交互数据集,我们通过利用先进的 LLM 和 TTS 工具包,探索高效的合成数据方法。为避免隐私风险,我们构建了一个虚拟语音库用于语音生成,其中的声音在现实世界中并不存在。此外,我们在数据中嵌入了水印,以表明这些数据是由 AI 生成的,从而防止其被滥用。

在对话数据的构建过程中,我们首先专注于创建能准确反映口语特征的文本对话数据,然后从这些文本对话中合成语音。随后,我们对合成语音进行质量保证和筛选。

文本预处理:

选择的文本对话问答数据集:

https://huggingface.co/datasets/BelleGroup/train_1M_CN
https://huggingface.co/datasets/BelleGroup/train_2M_CN
https://huggingface.co/datasets/BelleGroup/train_3.5M_CN
https://huggingface.co/datasets/fnlp/SpeechInstruct
https://huggingface.co/datasets/fnlp/AnyInstruct

文本数据集存在的问题:

任务不适合语音交互
许多数据集中的指令涉及的任务不适用于语音交互,例如生成图像、撰写长篇文章或创建结构化文本。这些任务难以自然地融入语音对话。

形式过于正式,与口语化不符
数据集中指令的表达通常过于正式和详尽,与日常口语表达存在显著差距。例如,一个数据集中的指令可能是:“如何安装和设置一款软件或设备(例如打印机)”,而在日常对话中,用户通常会简单地问:“怎么用打印机?”

内容过长且包含不可发音的符号
数据集中指令和响应往往过于冗长,并包含不可发音的特殊字符,例如 Markdown 符号、下划线和换行符。这些特性使得文本数据无法很好地适应语音交互的细腻和动态需求。

为了解决上述问题,我们实施了以下三个关键步骤:重写指令筛选重写后的指令以及口语化后处理。这三个阶段均借助大型语言模型(LLMs)完成具体的提示词(prompts)详见附录 A.1。

重写指令

重写指令的主要目标是将指令任务转化为更适合口头交互的形式。我们的方法是为大型语言模型(LLM)设计特定的提示,要求其将原始指令数据转换为人类可能会以口语形式提出的问题。

我们发现,当将完整的原始指令提供给 LLM 时,其输出通常只对任务的原始格式进行轻微改写,导致结果仍然不适合对话场景。为了解决这个问题,我们针对特定类型的任务(例如分类、摘要和其他指令性任务)实施了特定策略。我们移除了这些任务中的指令性句子,仅保留关键信息片段。随后,我们告知 LLM 这些片段是不完整的,要求其以此为灵感,创造性地生成新的问题。

这种方法有效降低了 LLM 过于依赖原始指令的倾向,并鼓励生成更加自然的对话式问题。因此,我们能够将正式且结构化的指令文本有效地转化为更适合语音场景的查询。

筛选重写后的指令

在指令重写阶段之后,我们会对重写后的指令进行筛选,以确保其适用于口语交互。筛选过程涉及以下三个关键考量:

  1. 适合口头交流:评估重写后的指令是否适合口头交流,排除需要生成长篇或结构化内容(如文章、歌词或电子邮件)的任务。
  2. 清晰度与完整性:评估每条指令的清晰度和完整性,确保其包含足够的背景信息。对于过于模糊或缺乏必要背景的指令(例如“这篇文章的主要内容是什么?”),会被筛除。
  3. 安全性:使用我们内部的系统和 Qwen2-72B-Instruct 模型对指令进行安全性评估。

通过这一筛选过程,数据集主要由清晰、上下文完整且安全的指令组成,从而提升其在对话交互场景中的适用性。

语音风格后处理

在最后阶段,我们使用大型语言模型(LLM)进一步修改筛选后的指令,以提升其对话质量,并以类似自然口语风格生成相应的回答。具体步骤如下:

  1. 对话语气:要求 LLM 采用自然的对话语气,避免生成无法发音的内容,并将数字和公式符号转换为其口头表达形式。
  2. 简洁回答:将回答限制在 100 字以内,确保单次回复不包含过多信息。

通过遵循这些指导原则,数据集被进一步优化,更加适合用于训练支持自然且高效语音交互的模型。

使用的模型版本
本节使用 Qwen2.5-72B-Instruct,而 重写指令筛选重写指令 节使用的是 Qwen2.5-14B-Instruct。值得注意的是,与较小版本(如 Qwen2.5-32B-Instruct 或 Qwen2.5-14B-Instruct)相比,Qwen2.5-72B-Instruct 生成的指令相似,但回答质量显著提升。示例可在附录中查看。

合成音频对话数据

使用 CosyVoice模型,它支持自定义语音特征,将文本对话转换为语音对话。为确保说话人多样性,我们构建了一个包含大量虚拟说话人的语音库这些说话人均来自开源语音数据。为保持合成语音对话的质量,我们对合成音频进行转录并计算字符错误率(CER),根据 CER 进行数据筛选,从而确保数据集的高质量。

语音库

数据来源 WenetSpeech4TTS 数据集源自 WenetSpeech(Zhang et al., 2022),该数据集包含从互联网收集的长音频录音,时长从几分钟到数小时不等。WenetSpeech4TTS 通过语音活动检测(VAD)对这些长录音进行分段,将其分割为较短的音频片段,同时计算每段的 DNSMOS 分数(Reddy et al., 2022)。这些短片段根据说话人的余弦相似性进行合并,以确保每个短片段均由同一说话人发出。然而,WenetSpeech4TTS 未检测同一长录音中不同短片段之间的相似性,而这对我们的工作至关重要,因为我们需要识别由同一人发出的多个片段,以生成稳定的语音特征嵌入。

实际说话人

我们首先从 WenetSpeech4TTS 的优质短片段中(DNSMOS ≥ 4.0)提取音频,并根据其来源的长录音进行分类。我们筛选出包含至少 10 个优质短片段的长录音,记为 Ai​={ai1​,ai2​,…,ain​},其中 i 是长录音的索引,n≥10表示短片段的数量。
接着,我们使用 WavLM(Chen et al., 2022)为这些短片段提取 X-向量,并计算 Ai​ 中每对优质短片段之间的说话人相似性。如果某长录音中至少有 floor⌊2n​⌋ 对短片段的相似性得分超过 0.97,则这些短片段被认为由同一人发出。通过这种方法,我们识别出了 5000 多名说话人,且性别均衡。

虚拟说话人

对于每个识别出的语音特征,我们计算平均发音速度(即每个字符的平均发音时间,取整至最近的 10 毫秒)。然后,根据发音速度将这些特征进行分类。我们随机选择一个语音特征,并与同性别、发音速度相同的另一语音特征配对,通过加权平均生成合成语音特征,以保护隐私并生成不存在的、虚拟的合成语音。这一过程可以用来生成无限数量的虚拟语音。
通过这些步骤,我们的语音库包含高质量、多样化、性别均衡的虚拟语音,适用于语音合成的多种应用,同时不会对应任何真实个人。

语音合成

CosyVoice 进行语音合成。对于每段对话,我们随机选择一位用户语音和一位代理语音进行合成。为了防止数据滥用,所有合成语音均使用 AudioSeal(San Roman et al., 2024)进行水印保护。

质量保证

为确保合成对话的质量,我们对中文部分使用 Belle-whisper-large-v3-turbo-zh 进行转录,对英文部分使用 Whisper-large-v3-turbo 进行转录。
分别计算中文的字符错误率(CER)和英文的单词错误率(WER)。若某条对话的中文 CER 超过 5% 或英文 WER 超过 10%,则该对话被剔除,以确保数据的高质量。

Ke-SpeechChat 数据集细节

所有元数据存储在单个 JSON 文件中,每条对话都包含以下信息:对话 ID、说话人、性别、文本内容和音频路径。示例详见附录 C。

详细统计信息如表 1 所示,其中中文和英文对话的数据分别列出。

  • 中文对话:数量超过 510 万条,总时长达 40,884 小时。
  • 英文对话:数量超过 170 万条,总时长达 19,484 小时。

数据集中的说话人性别均衡,包含 40,000 名用户和 2 名代理【输出语音】(用户和代理的分布均适用于中文和英文)。大量的对话和说话人确保了数据集的多样性。

训练数据被随机划分为五个不同大小的子集:XSSMLXL

  • 每个较大的子集都包含所有较小子集的数据。
  • 所有子集均完整覆盖 42,002 名说话人。

质量评估
为评估 Ke-SpeechChat 的质量,我们使用以下客观指标:

  1. DNSMOS(P.835 OVRL)和 UTMOS 评分:分别衡量音频质量和语音自然度。
  2. ASR 和 TTS 任务:进一步评估数据集性能。

附录

A:PROMPTS提示

指令重写:

指令过滤:

语音风格后处理 [根据指令获得响应]:

B:Qwen不同版本的能力 比较

本附录介绍了使用不同版本的Qwen2.5模型对口语风格后处理的影响,如下表所示

C: Dialogue Format

Synchronous LLMs as Full-Duplex Dialogue Agents


同步 LLMs 作为全双工对话代理

https://syncllm.cs.washington.edu/

尽管对语音对话代理进行建模有着广泛的兴趣,但大多数方法本质上都是 “半双工” 的 —— 仅限于回合制交互,响应需要用户明确提示或隐式跟踪中断或静音事件。相比之下,人类对话是“全双工”的,允许以快速和动态的轮流、重叠语音和反向通道的形式实现丰富的同步性。从技术上讲,使用 LLMs在于将同步建模为预训练的 LLMs 没有“时间”感。为了弥合这一差距,我们提出了用于全双工口语对话建模的同步 LLMs。我们设计了一种新颖的机制,将时间信息集成到 Llama3-8b 中,以便它们与现实世界的时钟同步运行。我们还介绍了一个训练方法,该方法使用从文本对话数据生成的 212k 小时的合成口语对话数据来创建一个模型,该模型仅使用 2k 小时的真实口语对话数据即可生成有意义且自然的口语对话。同步 LLMs 在保持自然性的同时,在对话意义方面优于最先进的。最后,我们通过模拟在不同数据集上训练的两个代理之间的交互,同时考虑高达 240 毫秒的 Internet 规模延迟,展示了该模型参与全双工对话的能力。

Latency tolerant interaction

SyncLLM 是一种仅限自回归解码器的 transformer 模型,可以用作全双工对话代理。在下图中,在当前时间步(图中的 chunk N),SyncLLM 的上下文包含 LLM 的语音到当前 chunk 的交错块,以及对应于除当前 chunk 之外的所有 chunk 的用户语音。为了与用户同步,LLM 必须在当前 chunk 结束之前生成其下一个 chunk (chunk N+1)。因此,SyncLLM 首先生成估计用户的 chunk,该 chunk 又附加到上下文并用于预测其下一个 chunk。

SyncLLM 经过训练,可以预测对应于对话两侧的语音单元的交错块,如图 2 所示。1. 在每个时间步长中,模型预测与对话一侧的固定持续时间(称为模型的块大小)相对应的语音单位,然后是与对话的用户一侧相对应的语音单位。通过这种方法,该模型能够生成与真实时钟同步的两个语音流。这允许我们的方法对所有对话线索进行建模,例如反向通道、重叠、中断等。

Training

SyncLLM 使用简单的 next-token 预测目标进行训练,其中全双工口语对话的格式如下。(顶行)我们将语音对话表示为 HuBERT 令牌的交错块,其中块大小决定了同步令牌 [S0] 的频率。(中间行)我们训练 SyncLLM 生成去重 HuBERT 令牌的交错块以及定期同步令牌。(底行)我们在每个块中插入去重的标记,以获得原始格式的语音对话序列。

如果我们可以将两个令牌流中的一个替换为与真实用户相对应的令牌流,那么经过训练的模型可以用于全双工语音交互。在图 .1,紫色框对应于每个时间块中 LLM 侧对话的标记序列,绿色框对应于对话的用户侧。我们通过丢弃 LLM 用户语音交互。

HuBERT 令牌 :使用 HuBERT  来表示语音。我们使用 Nguyen 等 人的分词化参数,分词采样率为 25 Hz,每 40 毫秒音频产生一个分词,词汇量为 501。为了模拟两个说话人 0 和 1 之间的对话,我们定义了两个特殊的标记 [S0] 和 [S1],称为说话人标签,分别指定每个说话人的标记序列的开始。我们将对话表示为两个并行的语音流,每个说话人一个,交错,如上图 的顶行所示。对于每个流,我们嵌入一个周期性的 speaker 标签,其时间段等于模型的块大小。

重复数据删除。HuBERT 令牌的固定时间段对于在全双工对话中对时间进行建模很有用。然而,原始 HuBERT 序列由大量重复的标记组成,主要是由话语内和话语之间的沉默引起的。每个唯一标记的重复次数表示标记所表示的声学单元的持续时间。然而,语义内容可以通过在删除重复标记序列时仅考虑唯一标记来建模。重复的标记序列会对最终口语对话模型的语义能力产生不利影响 ,因为如上图 所示,与去重序列相比,它们每个标记的语义内容比去重后的序列低约50%。

插值。虽然去重的标记序列有利于自回归建模,但要生成适合语音合成的标记序列,我们需要原始格式的周期性 HuBERT 标记。由于 speaker 标签 [S0] 维护了计时信息,因此我们知道每个块中去重后删除的令牌数量。我们使用它来插入已删除重复数据的令牌,以匹配每个块中的预期令牌数量。例如,在 Fig.2,则说话人 0 的流在去重后只有一个 Token。但是由于在这种情况下,块大小为 160 毫秒,因此每个块将包含 160/40 = 4 个令牌。所以如图 3 日的第三行所示。2 中,我们重复 deed token 三次以重建 chunk。如果一个块有多个去重的令牌,如图 2 中的第二个 token。2,我们以相等的数量重复每个 Token。我们注意到这种方法可能会导致错误,因为原始 chunk 可能不遵循这种启发式方法。我们观察到,即使数据块大小为 240 毫秒,其影响也是难以察觉的,这可能是因为每个标记的预测持续时间的误差受到数据块大小的上限。此外,在具有更多新词元的 chunk 中,误差会更小。

采用三阶段训练,训练数据:

第 1 阶段:具有合成语音数据的回合制口语对话模型。 鉴于口语对话数据有限,我们从大规模文本对话数据集中生成合成语音数据。 我们使用监督式微调 (SFT) 数据集作为我们的源文本对话数据集。我们使用 Bark TTS AI (2023) 模型生成文本对话数据集的口语版本,其中包含 10 个说话人预设。

第 2 阶段:假设没有重叠的全双工对话。回合制语音对话是无重叠的全双工对话的特例。基于这一观察结果,我们可以将合成的语音对话数据视为全双工语音对话数据,其中轮到一个说话人时,另一个说话人完全沉默。在这个阶段,我们从文本对话数据创建合成的口语对话数据,与上一阶段类似,但有一个主要区别:从对话的每个回合中,我们生成一个对应于一个说话者的语音话语和对应于另一个说话者的等长沉默。然后,我们以图 2 第二行所示的格式对并行语音对话数据进行标记。2. 这样,我们可以进一步利用文本对话数据来帮助我们的模型学习图 1 中的标记序列格式。2. 此微调阶段对话语中的计时进行建模。该模型还无法学习轮流提示,例如反向信道或两个说话人之间的重叠。

第 3 阶段:使用真实世界的口语对话数据进行建模。最后,我们对模型进行微调,从现实世界的口语对话数据中学习轮流线索。我们使用 Fisher Cieri et al. (2004) 的数据集,其中包含 2000 小时的口语对话,其中对话中每个说话者的语音都被分成独立的音频通道。我们将数据集分别以 98:1:1 的比例分为 train、val 和 test split。对话中的每个音频声道都单独标记化,并以上一阶段使用的全双工对话格式交错。在此阶段,除了学习话语中的计时外,该模型还学习有效的轮流对话线索,例如在轮流和反向通道之间准确分配停顿。

SimVQ:使用一个线性层解决矢量量化模型中的表示坍缩问题

摘自:https://spaces.ac.cn/archives/10519

音频表征工作

SimVQ: Addressing Representation Collapse in Vector Quantized Models with One Linear Layer

Github: https://github.com/youngsheen/SimVQ

论文提出只在 VQ 的编码表多加一个线性变换[W],无需其他改动,就能达到加速收敛、提升编码利用率、降低重构损失等效果,相当简单有效。

普通AE和VQ-VAE的数学形式:

VQ-VAE不是VAE,它只是一个加上了VQ的AE,没有VAE的生成能力。而VQ则是将任意向量映射为编码表中与它最邻近的向量的操作,这个操作本身具有不可导的特性,所以通过STE来为encoder设计了梯度,并且新增了β,γ这两项损失,来为编码表提供梯度,同时也起到规整encoder表征的作用。

改动

论文将自己所提方法称为SimVQ,但没有解释Sim是什么含义,猜测Sim是Simple的缩写,因为SimVQ的改动确实太Simple了:

在编码表多乘了一个矩阵W,其他原封不动。

如果原本就是用式(2)训练VQ的,那么SimVQ可以直接简单上;如果原本是用EMA来更新编码表的(即β=0,然后用另外的滑动平均过程来更新编码表,这是VQ-VAE-2及后续一些模型的做法,在数学上等价于用SGD来优化编码表损失,而其他损失则可以用Adam等非SGD优化器),那么则需要取消这个操作,重新引入β项来端到端优化。

可能马上有读者质疑:这不就是将编码表的参数化从E改为EW吗?EW可以合并成一个矩阵,等价于一个新的E,按道理不改变模型的理论能力?是的,SimVQ对模型能力来说是不变的,但对SGD、Adam来说却是变的,它会改变优化器的学习过程,从而影响学习结果的好坏。

实验

根据论文的描述,SimVQ的代码就是在第一行VQGAN的代码上改的,改动就只有往VQ层插入了个线性变换,然后提升就非常显著了,不仅在相同编码表大小下达到了最优的重构质量,还能通过增加编码表大小进一步提高重构质量,这足以体现SimVQ的魅力——简单且有效。

笔者也在自己之前写的VQ-VAE代码上做了尝试,实测显示这个线性变换的加入,明显加速了VQ-VAE的收敛速度,并且最终的重构损失也有所降低。笔者还实验了W取对角阵的变体,这时候就相当于每个编码向量都element-wise地与一个参数向量(全一初始化)相乘,结果显示这样的变体也能起到相近的效果,介乎VQ与SimVQ之间。

分析:

直观来想,VQ对编码表的更新是比较“孤立”的,比如某个样本z被VQ为q,那么这个样本的梯度就只会影响q,不会影响编码表里的其他向量;但SimVQ不同,它不单会更新q,还会更新W,从几何意义上看,W就相当于编码表的基底,一旦更新W,那么整个编码表就会更新了。所以说,SimVQ使得整个编码表的“联动”更为密切,从而更有机会找到更优的解,而不是陷入“各自为政”的局部最优。

那为什么SimVQ能提高编码表的利用率呢?这个其实也不难理解。再次根据W是编码表基底的解释,如果编码表利用率过低,那么W就会出现“各向异性”,即基底偏向于那些被利用起来的编码,可是一旦基底发生这种变化,那么它的线性组合应该也是偏向于被利用起来的编码,从而利用率不会太低。说白了,可学习的基底会自动让自己的利用率变高,从而让整个编码表的利用率都提高起来。

然而,物极必反,如果全体编码都使劲往高利用率方向走,那么反而可能会导致编码表坍缩(codebook collapse),因此SimVQ默认采用了一个很保守的策略:只更新W,所有的q在随机初始化后就不更新了,这样一来就几乎杜绝了编码表坍缩的可能性。好消息是,在适当的编码维度下,实验显示q,W都更新和只更新W的表现都差不多,所以读者可以按照自己的偏好选择具体的形式。

延伸:

抛开VQ的背景,像SimVQ这种引入额外的参数但又在数学上等价,即不改变模型的理论拟合能力,只改变优化过程的动力学的做法,我们称为“过参数化(Overparameterization)”。

过参数化在神经网络中并不鲜见,比如现在模型的主流架构是Pre Norm即x+f(RMSNorm(x)),RMSNorm最后所乘的γ向量通常都是过参数化的,因为f的第一层通常就是线性变换,比如Attention是线性变换投影到Q、K、V,FFN是线性变换来升维,等等,这些模型在推理阶段γ向量完全可以合并到f的线性变换中,但鲜有看到在训练阶段就把γ去掉的做法。

这是因为不少人认为,深度学习模型之所以“好训”,过参数化有不可忽视的作用,因此贸然去掉已经充分验证的模型的过参数化风险很大。这里的“好训”,主要是指梯度下降这种理论上容易陷入局部最优的方法居然经常可以找到一个实际表现很好的解,这本身就是一件很不可思议的事情。还有《On the Optimization of Deep Networks: Implicit Acceleration by Overparameterization》等工作,表明过参数化隐式地加速了训练,作用类似于SGD中的动量。

最后,VQ本质上可以理解为一种稀疏训练方案,所以SimVQ所带来的启发和改动,也许还能用于其他稀疏训练模型,比如MoE(Mixture of Experts)。当前的MoE训练方案中,Expert之间的更新也是比较独立的,只有被Router选中的Expert才会更新参数,那么是不是有可能像SimVQ一样,所有的Expert后都接一个共享参数的线性变换,用来提高Expert的利用效率?当然MoE本身跟VQ也有很多不同之处,这还只是个猜测。

FunCodec:音频编解码开源工具包,用于音频量化和文本到语音合成、音乐生成等

一个基础的、可重复的和可集成的用于神经语音编解码器的开源工具包

特点:

  • FunCodec 再现了最先进的模型,包括 SoundStream、Encodec 等。
  • FunCodec 可以很容易地扩展到 下游任务,例如 ASR 和 TTS。
  • FunCodec 可以在分布式 GPU 上训练模型, 和批处理模式下的推理。
  • FunCodec 原生支持频域、 更适合语音信号。
  • FunCode 模型可以通过语义标记进行增强, 例如音素和 Hubert 嵌入。

Available models

audio_codec-freqcodec_模型特点:频域模型,充分利用语音信号的短时结构,模型参数极少 (0.52M),计算复杂度极低 (0.34G flops),使用结构化 dropout 进行训练,使用单个模型在推理过程中启用各种带宽,将原始语音波形量化为离散标记序列

audio_codec-encodec_模型特点:使用大规模内部数据集进行训练,对许多场景都具有鲁棒性,在低频带宽度下实现更高的编解码器质量,使用结构化 dropout 进行训练,使用单个模型在推理过程中启用各种带宽,将原始语音波形量化为离散标记序列

与 EnCodec 和 SoundStream 相比, 使用以下改进的技术来训练模型,从而提高编解码器质量和 相同带宽下的 ViSQOL 分数:

  • 幅值频谱loss用于增强中高频信号
  • 结构化 dropout 用于平滑代码空间,并在单个模型中启用各种带宽
  • 码字由 k-means 集群而不是随机值初始化
  • 码本采用指数移动平均和死码消除机制进行维护,因此码本的利用率很高。

模型组成:

  • FunCodec 模型由五个模块组成:域转换模块、编码器、RVQ 模块、解码器和域反转模块。
  • 域变换:将信号转换为时域、短时频域、幅度-角度域或幅度-相位域。
  • 编码器:将信号编码为具有堆叠卷积层和 LSTM 层的紧凑表示。
  • 语义token(可选):使用语义标记增强编码器输出以增强内容信息,此模型中未使用。
  • RVQ:使用级联向量量化器将表示量化为离散标记的并行序列。
  • Decoder:将量化的 embedding 解码到与 inputs 相同的不同信号域中。
  • Domain Inversion:重新合成来自不同域的可感知波形。

Results

相比其他开源的音频编解码训练框架:

1. Comparison of academic models in terms of ViSQOL scores on LibriTTS dataset. † means the model is causal.

2. Comparison between FunCodec and other toolkits under (a) lower and (b) higher token rate. LS denotes Librispeech test sets. While Librispeech and gigaspeech are English corpora, aishell and Wenet are Mandarin corpora.

3. Comparison of FreqCodec and other time domain models in terms of ViSQOL score on LibriTTS. Mag denotes magnitude spectrogram. C_in represents the channel number of inputs.

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


Mini-Omni:语言模型可以在流中听、说和思考

Github:https://github.com/gpt-omni/mini-omni

Paper:arxiv.org/abs/2408.16725

对话训练数据集开源:VoiceAssistant-400K is uploaded to Hugging Face.基于cosyvoice合成的

  • Qwen2 as the LLM backbone.
  • litGPT for training and inference.
  • whisper for audio encoding.【用于模型音频表征编码】
  • snac for audio decoding.【RVQ架构用于模型音频解码】
  • CosyVoice for generating synthetic speech.【用于合成训练数据】
  • OpenOrca and MOSS for alignment.
  • Mini-Omni的基本思想是通过文本来指导音频的生成,这种方法基于假设:text token有更高的信息密度,可以使用更少的token表示相同的信息。
  • 生成音频token时以对应文本token为条件,类似在线语音合成系统,且生成音频前用 N 个pad token填充,确保先产生文本token。
  • 模型可依据说话者和风格的embedding,控制说话者特征和风格元素。

Introduction  

Mini-Omni,这是一种基于音频的端到端对话模型,能够进行实时语音交互。为了实现这种能力,提出了一种文本指导的语音生成方法,以及推理过程中的批处理并行策略,以进一步提高性能。该方法还有助于以最小的退化保留原始模型的语言能力,使其他工作能够建立实时交互能力。我们将这种训练方法称为 “Any Model Can Talk”。我们还引入了 VoiceAssistant-400K 数据集以微调针对语音输出优化的模型。据我们所知,Mini-Omni 是第一个用于实时语音交互的完全端到端的开源模型,为未来的研究提供了宝贵的潜力。

Figure 1:The Mini-Omni model architecture.

 Mini-Omni,这是第一个具有实时对话功能的开源多模型大型语言模型,具有完全端到端的语音输入和输出功能。它还包括各种其他音频转文本功能,例如自动语音识别 (ASR)。我们采用了目前可用的现成方法来离散语音标记,并采用了最简单的模型架构,使我们的模型和方法很容易被其他研究人员采用。直接音频推理带来了重大挑战;然而,我们的方法仅使用 0.5B 模型和有限数量的合成音频数据就成功地解决了这个问题

重要的是,我们的训练框架可以在不严重依赖广泛的模型功能或大量数据的情况下实现这一目标。

为了利用和保留语言模型的原始功能,我们提出了一种并行生成范式,其中 transformer 同时生成音频和文本标记。随后,我们观察到音频模态对文本能力的影响很小,并进一步引入了基于批处理的并行生成,这显着增强了模型在流式音频输出过程中的推理能力。作为一个 重要决策,我们选择不牺牲音频质量来换取更简单、比特率更低的音频编码器,以降低模型中音频推理的复杂性。但是,为了确保音频质量,我们选择了 SNAC ,这是一款音乐级编码器,具有 8 层码本,每秒处理数百个令牌。创新地,我们应用了文本指导的延迟并行生成解决长 SNAC 码本序列的问题。实验表明,音频输出质量与常见的 TTS 系统相当。

我们还提出了一种方法,该方法只要对原始模型进行最少的训练和修改,使其他工作能够快速发展自己的语音能力。我们将这种方法称为 “Any Model Can Talk”,旨在使用有限数量的附加数据实现语音输出。该方法通过额外的适配器和预先训练的模型来扩展语音功能,并使用少量合成数据进行微调。这与上述并行建模方法相结合,可以在新模态中启用流式输出,同时保留原始模型的推理能力。

最后,观察到大多数开源 QA 数据集都包含混合代码或过长的文本,这使得它们不适合语音模型。为了克服这一限制,我们引入了 VoiceAssistant-400K 数据集,其中包含超过 400,000 个由 GPT-4o 专门生成的条目,用于语音助理监督微调 (SFT)。

方法

提出了一种同时生成文本和音频的新方法。这种方法假设文本输出具有更高的信息密度,因此可以通过更少的标记实现相同的响应。在生成音频标记的过程中,模型能够高效地基于对应的文本标记进行条件生成,类似于在线 TTS 系统。为确保在生成音频标记之前先生成对应的文本标记,我们在模型中引入了以 N 个标记进行填充的机制,该值可作为超参数进行调整。此外,模型还能够基于说话人嵌入风格嵌入进行条件生成,从而实现对说话人特征和风格元素的控制。

将audio token和text token合并成新的词表,生成时同时预测audio token和text token,Loss如下:

其中 T ,A 是训练语料 C 中的文本-音频输出对,m 是训练样本的数量。 Xj 是第 j 个示例的输入条件,nj 是 的最大个数样本 Tj 和 AjTi,j 和 Ai,j 表示第 j 个样本的第 i 个文本标记和音频标记。

解码策略

Mini-Omni 对响应进行了重组,通过文本-音频并行解码方法将这些推理能力转移到流式音频输出。这种方法同时输出音频和文本令牌,并通过文本到语音合成生成音频,确保实时交付,同时利用基于文本的推理优势。为了与大型模型的输入保持一致,在生成下一个标记之前,将并行生成的所有序列相加,如图 1 所示。这种方法使模型能够在聊天场景中实现实时语音输出,同时将第一个标记延迟降至最低。

文本延迟并行解码。并行生成最早是由 MusicGen引入的,以加速音乐生成过程,我们已将这种方法集成到文本模态中以增强推理能力。并行解码是可行的,因为语言模型训练中使用的音频标记码本通常由多个层组成;同时生成所有层可以显著提高模型速度。对于实时语音输出模型,并行解码更为重要,它允许在标准设备上每秒生成数百个音频令牌。在本文中,我们采用 SNAC 作为音频编码器,它由 7 个具有互补关系的标记层组成。因此,我们采用 8 个子语言模型头(sub-Language Model heads),一步生成 8 个标记,包括文本,同时在相邻层之间保持一步延迟。由于音频令牌是从文本合成派生的,因此首先输出文本令牌,然后输出从第一层到第七层的 SNAC 令牌。我们提出的文本优先延迟并行解码的过程如图 2(b) 所示。

批量并行解码。尽管前面介绍的并行生成方法有效地将推理能力从文本模态转移到音频模态,但我们的实验表明,模型的推理性能在文本和音频任务之间仍然存在差异,音频响应往往更简单。我们假设这是由于模型容量的限制或音频数据不足造成的。为了解决这个问题并进一步增强模型在对话过程中的推理能力,最大限度地转移其基于文本的能力,我们实验性地采用了 Batch 方法。鉴于该模型在文本模态中的性能更强,我们将单个输入的推理任务扩展到批量大小 2:如前所述,一个样本需要文本和音频响应,而另一个样本只需要文本响应,专注于基于文本的音频合成。但是,第一个样本的文本标记输出将被丢弃,第二个样本的文本输出将嵌入到第一个样本的相应文本标记位置。同时,使用第二个样本的纯文本响应中的内容对第一个样本中的音频进行流式处理;我们将此过程称为 Batch 并行解码。通过这种方法,我们以最小的资源开销,有效地、几乎完全地将模型的基于文本的能力转移到音频模态中,从而显着增强了它在新模态中的推理能力。批量并行解码的推理过程如图 2(c) 所示。我们相信批量并行解码代表了一项关键的算法创新,它使如此小的模型能够表现出强大的对话能力。

训练方法:Any Model Can Talk

该方法旨在尽可能保留原始模型的功能。这首先是由于我们的基础模型的强大性能,其次是因为该方法可以应用于其他在文本输出方面表现出色但缺乏强大的语音交互能力的工作。

Audio Encoding:音频输入主要侧重于从输入音频中提取特征,选项包括 Hubert 或单独预训练的音频编码器。鉴于我们专注于语音输入,Whisper  和 Qwen2-audio也展示了在一般音频任务中的有效性能。对于音频输出,使用多码本方法选择音频令牌可以更好地捕获音频细节。尝试了用于音频令牌建模的扁平化,但结果导致令牌过长,这对流式有害,并导致学习不稳定。相反,受 MusicGen 启发的并行解码采用了延迟模式与文本条件相结合。

三阶段训练。 我们的训练方法分为三个不同的阶段:(1) 模态对齐。此阶段的目标是增强文本模型理解和生成语音的能力。Mini-Omni 的核心模型完全冻结,只允许在两个适配器中使用gradients 。在此阶段,我们使用来自语音识别和语音合成的数据来训练模型的语音识别和合成能力。(2) 适应训练。一旦新模态与文本模型的输入对齐,适配器就会被冻结。在这个阶段,我们只专注于在给定音频输入时训练模型的文本功能,因为音频输出只是从文本合成的。该模型使用来自语音识别、语音问答和其他文本响应的任务【 TextQA 和 AudioQA 】的数据进行训练。(3) 多模态微调。在最后阶段,使用综合数据对整个模型进行微调。此时,所有模型权重都已解冻并训练。由于主要模态对齐任务是在适配器训练期间处理的,因此最大限度地保留了原始模型的功能。

模型输入 ID。给定 8 个并行输出序列,输入也需要 8 个序列,这导致了极大的复杂性。因此,我们在这里简要概述了模型输入的组织。该模型可以接受文本或音频输入,这些输入被放置在相应的模态序列中。对于音频输入,输入token和 Whisper 特征通过适配器转换为相同维度的张量,然后连接起来。根据任务的不同,我们将特殊 token 放置在不同的位置,引导模型的输出,实现多模态输出。一些任务的组织如图 4 所示。在输入模型之前,所有序列都会相加并求平均值以集成特征。

实验

数据:

为了建立基础语音功能,我们使用三个语音识别数据集训练了模型,总计约 8,000 小时,专注于语音理解和合成。对于文本模态,我们整合了来自 Open-Orca (OpenOrca,) 数据集的 200 万个数据点,并将它们与其他模态集成以保持文本准确性。Moss 的 SFT 数据集 (Sun et al., 2024) 与零样本 TTS 一起使用,合成了 150 万个语音 QA 对。为避免不合适的代码和符号输出,我们使用 GPT-4o 创建了 VoiceAssistant-400K 数据集。表 1 中详细介绍了数据集。阶段 1 涉及用于训练语音适配器的 ASR 数据。阶段 2 使用 TextQA 和 AudioQA 进行音频/文本输入和文本响应训练。第 3 阶段侧重于使用 AudioQA 的音频模态进行多模态交互。最后阶段的培训包括退火和语音 QA 微调。

数据集及其用于训练 Mini-Omni 的用途如下:在模态表示法中,T 和 A 表示文本和音频模态,下标 1 和 2 表示输入或输出。

训练参数:

模型在 8 个 A100 GPU 上进行训练,使用余弦退火学习率调度器,最小学习率为 4e-6,最大学习率为 4e-4。每个训练 epoch 由 40000 个步骤组成,每个步骤的批次大小为 192。基本语言模型采用 Qwen2-0.5B ,这是一种具有 24 个块且内部维度为 896 的 transformer 架构。语音编码器使用 Whisper-small 编码器,ASR 适配器通过两层 MLP 连接,TTS 适配器通过添加 6 个额外的transformer 块来扩展原始模型。在微调过程中,我们使用从 4e-6 到 5e-5 的学习率。

实验结果:

首先评估了该模型在 ASR 任务上的性能,以评估其语音理解能力。使用 LibriSpeech 的四个测试集。

Case Study 

我们展示了几个案例来演示 Mini-Omni 在语音理解和推理方面的能力。这些示例表明,与基于文本的推理相比,基于语音的推理要弱一些,这凸显了批量生成的必要性。更多令人印象深刻的例子,请参考 https://github.com/gpt-omni/mini-omni。

总结 

Mini-Omni,这是第一个具有直接语音转语音功能的多模态模型。在以前使用文本引导语音生成的方法的基础上,我们提出了一种并行文本和音频生成方法,该方法利用最少的额外数据和模块将语言模型的文本功能快速传输到音频模态,支持具有高模型和数据效率的流式输出交互。我们探索了文本指令流式并行生成和批量并行生成,进一步增强了模型的推理能力和效率。我们的方法使用只有 5 亿个参数的模型成功地解决了具有挑战性的实时对话任务。我们开发了基于前适配器和后适配器设计的 Any Model Can Talk 方法,以最少的额外训练促进其他模型的快速语音适应。此外,我们还发布了 VoiceAssistant-400K 数据集,用于微调语音输出,旨在最大限度地减少代码符号的生成,并以类似语音助手的方式帮助人类。我们所有的数据、推理和训练代码都将在 https://github.com/gpt-omni/mini-omni 逐步开源。

Mini-Omni2:多模态交互实时对话模型

🤗 Hugging Face | 📖 Github | 📑 Technical report

Mini-Omni2: Towards Open-source GPT-4o with Vision, Speech and Duplex Capabilities

Mini-Omni2 是一种全能互动模型。它可以理解图像、音频和文本输入,并与用户进行端到端的语音对话。具有实时语音输出全方位的多模态理解说话时与中断机制的灵活交互能力。

✅ 多模态交互:具有理解图像、语音和文本的能力,就像 GPT-4o 一样。

✅ 实时语音转语音对话功能。不需要额外的 ASR 或 TTS 模型,就像 Mini-Omni 一样。

1、为什么不使用 token-in-token-out 范式

为了有限数据量的高效训练由于与理解能力相关的挑战,作者选择来自预训练编码器的特征和文本嵌入被连接起来以形成模型的输入。token-in不足以可靠地传达语音输入的内容,训练损失很高。

2、如何实现实时响应:

对文本和音频采用延迟并行输出方法,可以立即响应音频 。

3、如何做到打断对话:

认为当前的全双工训练仍然不够稳定,而基于输入语义信息的中断对于实现稳定和灵活的人机交互至关重要。探索了一种基于命令的中断方法,利用流式令牌作为输入并构建训练数据,使模型能够根据外部语义线索控制其音频输出流

GPT-4o 是一个包罗万象的模型,代表了大型多模态语言模型发展的一个里程碑。它可以理解视觉、听觉和文本模态,直接输出音频,并支持灵活的双工交互。来自开源社区的模型通常实现了 GPT-4o 的一些功能,例如视觉理解和语音聊天。然而,由于多模态数据的复杂性、复杂的模型架构和训练过程,训练包含所有模态的统一模型具有挑战性。 Mini-Omni2是一种视觉音频助手,能够为 visoin 和音频查询提供实时、端到端的语音响应。通过集成预先训练的视觉和听觉编码器,Mini-Omni2 可以在各个模态中保持性能。我们提出了一个三阶段的训练过程来调整模态,允许语言模型在有限的数据集上训练后处理多模态输入和输出。在交互方面,我们引入了基于命令的中断机制,使与用户的交互更加灵活。据我们所知,Mini-Omni2 是 GPT-4o 最接近的复制品之一,它们具有相似的功能形式,我们希望它能为后续研究提供有价值的见解。

Mini-Omni2 作为 Mini-Omni 的延续,采用单一模型端到端模拟 GPT-4o 的视觉、语音和文本功能,并通过独特的基于命令的中断机制进行增强。与 Mini-Omni 一致,我们保留 Qwen2作为基础模型,利用这种紧凑的架构实现跨三种模态的全面多模态理解和实时流式语音推理。此外,我们使模型能够实时接收外部音频输入,模拟其 “听觉” 感知并根据内容语义控制语音输出流。Mini-Omni2 的模型架构如图 1 所示。作为一个端到端模型,我们通过直接采用经典的预训练视觉编码器 CLIP和语音识别模型 Whisper 的编码器组件来提高数据利用效率并展示 Mini-Omni2 算法的泛化性作为视觉和音频输入的特征提取器。来自预训练编码器的特征和文本嵌入被连接起来以形成模型的输入。由于与理解能力相关的挑战,我们没有采用 token-in-token-out 范式。此外,该模型对文本和音频采用延迟并行输出方法,可以立即响应音频像GPT-4o一样。

在 Mini-Omni2 中,我们提出了一种基于有限数据量的高效训练方法,旨在使模型的训练方法能够辅助其他多模态模型进行模态扩展。因此,我们避免了盲目地以指数方式扩展数据集,而是寻求使用最少的新数据开发一种多模态扩展方法。我们采用了模态扩展、对齐和联合训练的三阶段训练过程。最初,Mini-Omni2 模型使用语音识别和图像标题数据集进行适配器训练,从而拓宽了多模态理解的范围。接下来,Mini-Omni2 接受了跨模态问答任务中的文本输出训练,使基于适配器的输出功能与文本嵌入保持一致,以实现有效的问答。在第三阶段,我们通过结合音频输出和听觉能力(如中断)训练,专注于多模态输出能力

关于模型的语音交互能力,Mini-Omni2 继续使用 SNAC 分词器来确保高质量的语音输出。然而,根据我们的观察,我们认为当前的全双工训练仍然不够稳定。因此,我们认为基于输入语义信息的中断对于实现稳定和灵活的人机交互至关重要。我们使模型能够使用 SNAC 对其接收到的“听觉”波形进行实时编码,生成允许它在每次生成期间控制自己的输出的令牌。作为演示,我们使用短语 “stop omni” 构建数据,使用帧级 irq 和 n-irq 特殊token来控制生成过程。

Mini-Omni2

模型

Mini-Omni2 的模型架构如图 1 所示。除了文本嵌入模块外,Mini-Omni2 还采用了 CLIP 和 Whisper-small 的视觉组件作为视觉和听觉模态的编码器,从而在训练期间实现高效的数据利用,并最大限度地减少了大量的预训练工作。此外,Mini-Omni2 具有实时双工功能,为模型交互提供了更大的灵活性。

视觉编码器 – 我们利用 CLIP 的视觉组件,特别是 ViT-B/32 模型,作为视觉编码器,它将输入的图像转换为长度为 49 的特征序列,用于图像补丁和全局语义特征。Mini-Omni2 将这些连接起来形成长度为 50 的原始特征序列,使用单层 LlamaMLP作为视觉适配器。

Audio Encoder – 在编码器部分,我们使用 Whisper-small 模型作为音频编码器来继续之前的工作。我们选择不对音频输入和输出采用 token-in-token-out 建模方法,原因有两个。(i) 语音识别的语义一致性很强。由 OpenAI 提出的 Whisper 模型经过数千小时的数据集训练,表现出卓越的稳健性。此外,我们出乎意料地发现,尽管没有在任何中国数据集上进行训练,但 Mini-Omni 表现出对中国数据的理解。我们认为,这是因为 Whisper 模型能够自动对齐来自不同语言、语气和噪声级别的音频,这些音频传达了相同的含义,从而使模型能够专注于用户的意图。 (ii) 不稳定的开源音频token。我们观察到一种现象,即 a) Mini-Omni2 的音频损失在训练期间仍然很高,并且 b)音频片段的token可能会根据两端的内容而发生显著变化。我们认为,token不足以可靠地传达语音输入的内容,与 Whisper 等语义特征相比,ASR 的性能不佳就证明了这一点。

Mini-Omni2 使用 Qwen2-0.5B 基础版本作为其基础语言模型。我们使用 LitPT训练框架移植了基于 Llama 的 Qwen2 模型,采用 0.5B 模型的配置作为基本语言模型。对于图 3 所示的多层码本的并行生成,我们通过添加 7 × 4160 个 sub-LM-head 来扩展 Qwen2 模型的词汇表,如图 4 所示,得出词汇量为 181,120 个。

损失:对于同时生成的音频和文本标记,负对数似然损失可以表示为公式 :

多模态标记 – 混合输入 – 图 3 说明了模型一些主要任务的输入和输出标记建模。由于该模型包含多个 LM 头,因此它以自回归方式生成多个序列。因此,该模型还将多个序列作为输入。输入序列可以包含从最少一种模态到最多三种模态的混合输入。

  •  视觉 – [音频|文本] 输入。实验表明,当自回归任务与语义信息相连接时,Transformer 架构更容易训练并产生更自然的反应。因此,如图 3 (a) 所示,我们首先放置视觉适配器处理的视觉特征,然后是音频适配器处理的 Whisper 特征。最后,在需要自回归生成响应的位置,我们为响应放置一个特殊的 token。总长度约为 50(CLIP 特征长度)+ L(Whisper 特征长度)。
  • 单模态输入 单模态输入可以由视觉、语音或文本输入组成。我们将视觉和音频模态的特征放在第 1 层到第 7 层。将复制这些特征,以便在所有图层要素之间进行平均时增强其突出性。值得注意的是,当仅输入单个模态的特征而不受特殊标记的控制时,默认任务是图像字幕、语音到文本的问答和文本到文本的问答。

文本-音频并联解码。在 Mini-Omni2 中,我们基本上保留了 Mini-Omni 的输出策略,采用 Text-Instruct Delay Parallel Decoding 算法来增强音频生成。这种方法利用文本-音频并行解码来同时生成音频和文本令牌,并利用文本到语音合成进行实时输出。我们继续 MusicGen  引入的并行生成方法,使用 SNAC 作为音频编码器,它由七个互补的令牌层组成。在一个步骤中,我们生成了 8 个标记,包括文本,同时在层之间保持一步延迟。此外,我们还采用了一种 Batch 方法,该方法涉及两个样本:一个需要文本和音频响应,另一个需要仅文本响应。通过丢弃第一个样本中的文本标记并将第二个样本的输出嵌入到第一个样本中,我们有效地将模型的基于文本的功能转移到音频任务中,从而以最小的资源开销显著提高推理能力。

训练策略

Mini-Omni2 的整个训练过程如图 5 所示。培训过程分为三个阶段,每个阶段采用多任务培训。在图中,除了阶段 1 之外,还合并了一个基础文本到文本任务,但未明确描述。我们将整个训练过程分为三个阶段:

  • 多模态编码器适应 在第一阶段,我们采用快速、小规模的训练,只关注连接语言模型和编码器的线性层的权重。阶段 1 的目标是确保模型接收的多模态特征与模型嵌入层中表示的文本标记的特征非常相似。我们认为这种方法有两个主要优点:1. 它允许模型在随后的训练中专注于特定模态问答中的逻辑推理。2. 它最大限度地减少了语言模型核心中的参数变化,否则这些变化会因适应其他模态而导致。
  • 模态对齐 在第 2 阶段,模型训练的主要任务是将基于文本输入的问答能力转移到基于图像和音频的问答能力。在此步骤中,在阶段 1 中训练的适配器被暂时冻结语言模型的权重参与训练。在此阶段,所有任务都不涉及音频响应。对于基于图像和基于音频的 QA 等任务,仅生成基于文本的响应来建立模型的基本逻辑功能。语音输出只是这种逻辑能力在不同模态中的延伸。
  • 训练后 在第 3 阶段,模型的任务是扩展输出模态以包括音频响应生成。如图 5 所示,该模型将针对第 1 阶段和第 2 阶段的所有任务进行训练,并为所有问答任务提供音频令牌输出。此外,该模型将学习中断机制

双工交互

实时对话模型需要具有双工功能,以实现更灵活的交互。但是,这种中断机制不应该是一个简单的基于 VAD(语音活动检测)的机制,而是一个可以确定用户是否打算中断模型的系统。此外,模型的能力应该非常健壮,能够处理各种外部情况(例如,噪音、其他对话和不相关的声音)。我们通过基于命令的任务来探索此功能,当用户说出 “Stop Omni” 时,模型将立即停止说话。此外,这种方法可以通过开发更符合上下文的中断数据集,自然地扩展为包含更复杂的语义中断机制。

背景噪声选择:(1) 我们随机使用了来自 Libri-tts 数据集的各种语音识别样本作为原始人类噪声数据样本。(2) 我们使用了来自 MUSAN数据集的样本,其中包括音乐、人声、白噪声和城市噪声。

语义中断构造:我们将 “Stop Omni” 与随机的语音音色合成,随后与噪声混合。具体的数据构造方法将在下一节中介绍。

结合上述数据,该模型将接收到包含各种噪音中的 “Stop Omni” 短语的长序列数据。该模型将实时生成两种类型的状态 token:irq 和 n-irq,分别代表用户打断和不打断的意图。在推理过程中,当模型输出 irq token 时,它会停止生成过程并开始监听新的 question。对于此任务,我们使用token作为输入来增强模型的实时处理能力。

训练:

Mini-Omni2 模型在 8 个 A100 GPU 上完成了所有训练步骤。在适配器训练阶段,学习率从 2e-5 到 1e-3 不等,而训练语言模型使用的学习率在 2e-6 和 2e-4 之间。最后的微调是在 2e-6 到 2e-5 的学习率范围内进行的。采用了余弦调度器,具有 1500 个预热步骤,全局批处理大小为 192。使用完整数据集对每个阶段进行一个 epoch 的训练。前面介绍了视觉和音频编码器的规模,使用的语言模型是 Qwen2-0.5B 基本模型。所有型号适配器均使用中间尺寸为 4,864 的 Llama-MLP。

数据集:

语音对话数据合成:

Spoken Dialogue Data:使用语音识别数据集作为随机语音音色库。为了确保训练的稳健性,从该数据集中随机选择一个样本作为输入所有口语对话数据的语音提示,并采用 CosyVoice进行零镜头语音合成。对于所有问答数据的输出,使用来自内部 TTS 系统的相同语音音色。

中断数据:首先,对噪声数据进行流式编码和解码,以模拟模型的实时流式输入。然后,提取噪声数据的随机段。在此段落的末尾,插入一个 “Stop Omni” 乐句,以与对话数据相同的方式使用随机语音音色生成。最后,在此段的末尾附加一个 0-10 秒的额外“尾巴”。在标注方面,尾部之前的所有数据都标记为 “n-irq”,而尾部段被标记为 “irq”,表示模型应该被打断。

结果:

改进空间:

以下几个方面值得探索和改进:

 1. 模型和数据大小的缩放。Mini-Omni2 的目标是用有限的资源训练小模型,我们相信更多的数据和计算可以大大增强其能力。 

2. 改进音频输出的风格控制和多样性(情感、自然度、音色、口音和歌唱)。

 3. 更丰富的语义中断机制。

SNAC: RVQ的扩展,多尺度神经音频编解码器

SNAC: Multi-Scale Neural Audio Codec

Githubhttps://github.com/hubertsiuzdak/snac

demo:https://hubertsiuzdak.github.io/snac/

语音对话大模型的应用Mini-Omni: Language Models Can Hear, Talk While Thinking in Streaming,使用了snac作为audio decoding

残差矢量量化(RVQ)已成为使用级联 VQ 代码本进行神经音频压缩的标准技术。 本文提出了一种多尺度神经音频编解码器,它是 RVQ 的简单扩展,其中量化器可以在不同的时间分辨率下运行。 通过在可变帧率下应用量化器层次结构,编解码器适应了跨多个时间尺度的音频结构。 正如广泛的客观和主观评估所证明的那样,这将带来更有效的压缩。

SNAC多尺度神经音频编解码器),是对当前音频残差量化方法的简单扩展,通过在不同的时间分辨率上引入量化来形成音频的多尺度离散表示。

比较传统的残差向量量化 (RVQ) 和我们提出的多尺度残差向量量化。 图表描绘了两种方法产生的离散符元。 在传统的 RVQ 方法中,多层的token都是以固定的时间分辨率生成的,而 SNAC 利用在多个时间分辨率上运行的分层量化器,使编解码器能够更有效地捕获粗略和精细的细节。
stride从4,2,1逐渐降低,时间分辨率逐渐增加,对应上图的由粗到细的时间分辨率量化,对应 不同速率的符元序列

方法:

模型建立在 RVQGAN的基础上,这是一个具有残差向量量化 (RVQ) 瓶颈的编码器-解码器网络。 它使用级联的 Nq 向量量化层,其中每一层将残差 𝐱∈ℝT×C 映射到形状为 T×D 的单热向量序列,其中 T 表示帧数,C 是编码器维度,D 是码字维度。

多尺度残差向量量化

我们的工作通过引入多尺度残差向量量化(如上图所示)扩展了 RVQGAN。 在每次迭代 中,将残差下采样 Wi 倍,执行码本查找,然后上采样 Wi 倍以匹配 𝐱 的原始时间分辨率 T。 在实践中,我们使用平均池化进行下采样,并使用最近邻插值进行上采样

噪声块(Noise Block)

为了引入随机性并增强解码器的表现力,我们在每个上采样层之后添加了一个噪声块。该块通过更新输入来向激活值添加噪声:
x←x+Linear(x)⊙ε
其中 ε∼N(0,1) 是高斯噪声,⊙ 表示逐元素乘法。这种机制允许模型注入与输入相关的噪声。实验发现,噪声块可以改善重建质量,并促进码书(codebook)的更好利用。

深度卷积(Depthwise Convolution)

深度可分离卷积最初被引入是为了在视觉应用中构建更轻量的模型。通过对每个输入通道应用单个滤波器,该方法显著减少了计算量和模型大小。建议在生成器中使用深度卷积,不仅可以减少参数数量,还能稳定训练过程。基于 GAN 的声码器(vocoders)以其训练的不稳定性而闻名,通常在早期训练阶段会出现梯度发散,导致训练不稳定甚至模型崩溃。

局部窗口注意力(Local Windowed Attention)

在我们的模型中,我们在编码器和解码器中最低时间分辨率处引入了单层局部窗口注意力。这样设计的动机是利用注意力机制根据不同输入自适应地关注相关特征。此外,这种机制可以与后续的平均池化互为补充,从而有助于捕获上下文表示。类似地,文献【13】中引入了 LSTM 层,以更有效地建模时间依赖性。

详细网络结构:

一般音频:

编码器和解码器都在最低时间分辨率处包含局部窗口化注意力层。 我们用深度卷积替换了大多数卷积,除了嵌入、输出投影和上采样层。 编码器使用下采样层级联,速率分别为 [2, 3, 8, 8],解码器中相应的上采样层速率为 [8, 8, 3, 2]。 在 RVQ 中,我们使用 [8, 4, 2, 1] 的降采样因子(步长),有效地将 44.1 kHz 的输入信号压缩为四种不同速率的符元序列,分别为 14、29、57 和 115 Hz。 每个码本包含 4096 个条目(12 位),总比特率为 2.6 kbps。 该模型由编码器中的 1600 万个参数和解码器中的 3830 万个参数组成,总共 5450 万个参数。 我们应用相同的架构在 32 kHz 音频上进行训练,导致符元速率分别为 10、21、42 和 83 Hz,总比特率为 1.9 kbps。

语音:

对于语音编解码器,通过调整编码器(以及相应的解码器)中的降采样因子来修改架构,调整后的因子为 [2, 4, 8, 8]。 在残差向量量化中,我们使用 [4, 2, 1] 的步长。 该模型在 24 kHz 音频上进行训练,导致符元速率分别为 12、23 和 47 Hz,有效比特率为每秒 984 比特。 此外,我们减少了卷积通道的数量,导致编码器中有 670 万个参数,解码器中有 1300 万个参数,总共 1980 万个参数。 我们省略了语音编解码器中的局部窗口化注意力层,使架构完全卷积化。

实验:

图 2: MUSHRA 听力研究结果,置信区间为 95%。 我们可视化了 SNAC 相比于先前最先进方法的性能。 我们发现 SNAC 在使用明显更低的比特率的情况下,性能优于现有的语音编解码器,并且在音乐重建质量方面与 DAC 相当,但比特率明显更低。

音乐

我们将第 4.1 节中介绍的针对通用音频的两种 SNAC 变体与 MusicGen [28] 中 Encodec [13] 的 32 kHz 检查点以及使用 3、6 或 9 个码本的官方 DAC [2] 检查点进行比较。 我们观察到,SNAC 明显优于其他编解码器,例如在可比较比特率下运行的 Encodec(32 kHz)和 DAC(使用 3 个码本)。 值得注意的是,SNAC 甚至与比特率是其两倍以上的编解码器相竞争。 此外,在 32 kHz 和 44 kHz 下的 SNAC 模型之间感知到的音频质量差异很小,这表明 32 kHz 模型足以完成大多数任务,并提供更低比特率的额外优势。

语音

对于语音,我们将 SNAC 语音模型与 EnCodec(24 kHz 检查点)和 DAC 进行比较,使用不同的码本数量。 在我们的评估中,SNAC 一直优于所有其他编解码器。 值得注意的是,即使在低于 1 kbit/s 的比特率下,SNAC 仍然保持着接近参考信号的音频质量。 这种效率使其在带宽受限的应用中特别有利,在这些应用中,保持语音的清晰度和可懂度至关重要

结论

我们介绍了多尺度神经音频编解码器 (SNAC),它是残差矢量量化的扩展,使用在多个时间分辨率下运行的量化器。 这种多尺度方法适应了音频信号的固有结构,从而实现更高效的压缩。 消融研究证实了我们设计选择的意义。 SNAC 在音乐和语音领域都优于现有的最先进的编解码器,在更低的比特率下提供更高的音频质量,正如广泛的客观和主观评估所证明的那样。 通过开源我们的代码和模型,我们旨在为神经音频压缩研究的进步做出贡献。

Awesome Speech LM-语音大模型系列汇总

GitHub:https://github.com/ga642381/speech-trident/tree/master

在这个代码库中,我们研究了以下三个关键领域:(1) 表征学习,(2) 神经编解码器,以及 (3) 语言模型,这些领域共同推动了语音/音频大语言模型的发展。

  1. 语音表征模型:这些模型专注于学习语音的结构化表征,随后将其量化为离散的语音标记,通常被称为语义tokens
  2. 语音神经编解码模型:这些模型旨在学习语音和音频的离散标记,通常被称为声学tokens,同时保持良好的重构能力和低比特率。
  3. 语音大语言模型这些模型基于语音和声学token,采用语言建模方法进行训练,在语音理解和语音生成任务中展现出较高的能力。

🔱 Speech/Audio Language Models

DateModel NamePaper TitleLink
2024-11Building a Taiwanese Mandarin Spoken Language Model: A First AttemptPaper
2024-11UltravoxUltravox: An open-weight alternative to GPT-4o RealtimeBlog
2024-11hertz-devblogGitHub
2024-11Freeze-OmniFreeze-Omni: A Smart and Low Latency Speech-to-speech Dialogue Model with Frozen LLMpaper
2024-11Align-SLMAlign-SLM: Textless Spoken Language Models with Reinforcement Learning from AI Feedbackpaper
2024-10IchigoIchigo: Mixed-Modal Early-Fusion Realtime Voice Assistantpapercode
2024-10OmniFlattenOmniFlatten: An End-to-end GPT Model for Seamless Voice Conversationpaper
2024-10GPT-4oGPT-4o System Cardpaper
2024-10Baichuan-OMNIBaichuan-Omni Technical Reportpaper
2024-10GLM-4-VoiceGLM-4-VoiceGitHub
2024-10Roadmap towards Superhuman Speech Understanding using Large Language Modelspaper
2024-10SALMONN-OMNISALMONN-OMNI: A SPEECH UNDERSTANDING AND GENERATION LLM IN A CODEC-FREE FULL-DUPLEX FRAMEWORKpaper
2024-10Mini-Omni 2Mini-Omni2: Towards Open-source GPT-4o with Vision, Speech and Duplex Capabilitiespaper
2024-10HALL-EHALL-E: Hierarchical Neural Codec Language Model for Minute-Long Zero-Shot Text-to-Speech Synthesispaper
2024-10SyllableLMSyllableLM: Learning Coarse Semantic Units for Speech Language Modelspaper
2024-09MoshiMoshi: a speech-text foundation model for real-time dialoguepaper
2024-09Takin AudioLLMTakin: A Cohort of Superior Quality Zero-shot Speech Generation Modelspaper
2024-09FireRedTTSFireRedTTS: A Foundation Text-To-Speech Framework for Industry-Level Generative Speech Applicationspaper
2024-09LLaMA-OmniLLaMA-Omni: Seamless Speech Interaction with Large Language Modelspaper
2024-09MaskGCTMaskGCT: Zero-Shot Text-to-Speech with Masked Generative Codec Transformerpaper
2024-09SSR-SpeechSSR-Speech: Towards Stable, Safe and Robust Zero-shot Text-based Speech Editing and Synthesispaper
2024-09MoWE-AudioMoWE-Audio: Multitask AudioLLMs with Mixture of Weak Encoderspaper
2024-08Mini-OmniMini-Omni: Language Models Can Hear, Talk While Thinking in Streamingpaper
2024-08Make-A-Voice 2Make-A-Voice: Revisiting Voice Large Language Models as Scalable Multilingual and Multitask Learnerpaper
2024-08LSLMLanguage Model Can Listen While Speakingpaper
2024-06SimpleSpeechSimpleSpeech: Towards Simple and Efficient Text-to-Speech with Scalar Latent Transformer Diffusion Modelspaper
2024-06UniAudio 1.5UniAudio 1.5: Large Language Model-driven Audio Codec is A Few-shot Audio Task Learnerpaper
2024-06VALL-E RVALL-E R: Robust and Efficient Zero-Shot Text-to-Speech Synthesis via Monotonic Alignmentpaper
2024-06VALL-E 2VALL-E 2: Neural Codec Language Models are Human Parity Zero-Shot Text to Speech Synthesizerspaper
2024-06GPSTGenerative Pre-trained Speech Language Model with Efficient Hierarchical Transformerpaper
2024-04CLaM-TTSCLaM-TTS: Improving Neural Codec Language Model for Zero-Shot Text-to-Speechpaper
2024-04RALL-ERALL-E: Robust Codec Language Modeling with Chain-of-Thought Prompting for Text-to-Speech Synthesispaper
2024-04WavLLMWavLLM: Towards Robust and Adaptive Speech Large Language Modelpaper
2024-02MobileSpeechMobileSpeech: A Fast and High-Fidelity Framework for Mobile Zero-Shot Text-to-Speechpaper
2024-02SLAM-ASRAn Embarrassingly Simple Approach for LLM with Strong ASR Capacitypaper
2024-02AnyGPTAnyGPT: Unified Multimodal LLM with Discrete Sequence Modelingpaper
2024-02SpiRit-LMSpiRit-LM: Interleaved Spoken and Written Language Modelpaper
2024-02USDMIntegrating Paralinguistics in Speech-Empowered Large Language Models for Natural Conversationpaper
2024-02BATBAT: Learning to Reason about Spatial Sounds with Large Language Modelspaper
2024-02Audio FlamingoAudio Flamingo: A Novel Audio Language Model with Few-Shot Learning and Dialogue Abilitiespaper
2024-02Text Description to speechNatural language guidance of high-fidelity text-to-speech with synthetic annotationspaper
2024-02GenTranslateGenTranslate: Large Language Models are Generative Multilingual Speech and Machine Translatorspaper
2024-02Base-TTSBASE TTS: Lessons from building a billion-parameter Text-to-Speech model on 100K hours of datapaper
2024-02It’s Never Too Late: Fusing Acoustic Information into Large Language Models for Automatic Speech Recognitionpaper
2024-01Large Language Models are Efficient Learners of Noise-Robust Speech Recognitionpaper
2024-01ELLA-VELLA-V: Stable Neural Codec Language Modeling with Alignment-guided Sequence Reorderingpaper
2023-12SeamlessSeamless: Multilingual Expressive and Streaming Speech Translationpaper
2023-11Qwen-AudioQwen-Audio: Advancing Universal Audio Understanding via Unified Large-Scale Audio-Language Modelspaper
2023-10LauraGPTLauraGPT: Listen, Attend, Understand, and Regenerate Audio with GPTpaper
2023-10SALMONNSALMONN: Towards Generic Hearing Abilities for Large Language Modelspaper
2023-10UniAudioUniAudio: An Audio Foundation Model Toward Universal Audio Generationpaper
2023-10Whispering LLaMAWhispering LLaMA: A Cross-Modal Generative Error Correction Framework for Speech Recognitionpaper
2023-09VoxtLMVoxtlm: unified decoder-only models for consolidating speech recognition/synthesis and speech/text continuation taskspaper
2023-09LTU-ASJoint Audio and Speech Understandingpaper
2023-09SLMSLM: Bridge the thin gap between speech and text foundation modelspaper
2023-09Generative Speech Recognition Error Correction with Large Language Models and Task-Activating Promptingpaper
2023-08SpeechGenSpeechGen: Unlocking the Generative Power of Speech Language Models with Promptspaper
2023-08SpeechXSpeechX: Neural Codec Language Model as a Versatile Speech Transformerpaper
2023-08LLaSMLarge Language and Speech Modelpaper
2023-08SeamlessM4TMassively Multilingual & Multimodal Machine Translationpaper
2023-07Speech-LLaMAOn decoder-only architecture for speech-to-text and large language model integrationpaper
2023-07LLM-ASR(temp.)Prompting Large Language Models with Speech Recognition Abilitiespaper
2023-06AudioPaLMAudioPaLM: A Large Language Model That Can Speak and Listenpaper
2023-05Make-A-VoiceMake-A-Voice: Unified Voice Synthesis With Discrete Representationpaper
2023-05SpectronSpoken Question Answering and Speech Continuation Using Spectrogram-Powered LLMpaper
2023-05TWISTTextually Pretrained Speech Language Modelspaper
2023-05PengiPengi: An Audio Language Model for Audio Taskspaper
2023-05SoundStormEfficient Parallel Audio Generationpaper
2023-05LTUJoint Audio and Speech Understandingpaper
2023-05SpeechGPTEmpowering Large Language Models with Intrinsic Cross-Modal Conversational Abilitiespaper
2023-05VioLAUnified Codec Language Models for Speech Recognition, Synthesis, and Translationpaper
2023-05X-LLMX-LLM: Bootstrapping Advanced Large Language Models by Treating Multi-Modalities as Foreign Languagespaper
2023-03Google USMGoogle USM: Scaling Automatic Speech Recognition Beyond 100 Languagespaper
2023-03VALL-E XSpeak Foreign Languages with Your Own Voice: Cross-Lingual Neural Codec Language Modelingpaper
2023-02SPEAR-TTSSpeak, Read and Prompt: High-Fidelity Text-to-Speech with Minimal Supervisionpaper
2023-01VALL-ENeural Codec Language Models are Zero-Shot Text to Speech Synthesizerspaper
2022-12WhisperRobust Speech Recognition via Large-Scale Weak Supervisionpaper
2022-10AudioGenAudioGen: Textually Guided Audio Generationpaper
2022-09AudioLMAudioLM: a Language Modeling Approach to Audio Generationpaper
2022-05Wav2SeqWav2Seq: Pre-training Speech-to-Text Encoder-Decoder Models Using Pseudo Languagespaper
2022-04Unit mBARTEnhanced Direct Speech-to-Speech Translation Using Self-supervised Pre-training and Data Augmentationpaper
2022-03d-GSLMGenerative Spoken Dialogue Language Modelingpaper
2021-10SLAMSLAM: A Unified Encoder for Speech and Language Modeling via Speech-Text Joint Pre-Trainingpaper
2021-09p-GSLMText-Free Prosody-Aware Generative Spoken Language Modelingpaper
2021-02GSLMGenerative Spoken Language Modeling from Raw Audiopaper

🔱 Speech/Audio Codec Models

DateModel NamePaper TitleLink
2024-11PyramidCodecPyramidCodec: Hierarchical Codec for Long-form Music Generation in Audio Domainpaper
2024-11UniCodecUniversal Speech Token Learning Via Low-Bitrate Neural Codec and Pretrained Representationspaper
2024-11SimVQAddressing Representation Collapse in Vector Quantized Models with One Linear Layerpaper
2024-11MDCTCodecMDCTCodec: A Lightweight MDCT-based Neural Audio Codec towards High Sampling Rate and Low Bitrate Scenariospaper
2024-10APCodec+APCodec+: A Spectrum-Coding-Based High-Fidelity and High-Compression-Rate Neural Audio Codec with Staged Training Paradigmpaper
2024-10A Closer Look at Neural Codec Resynthesis: Bridging the Gap between Codec and Waveform Generationpaper
2024-10SNACSNAC: Multi-Scale Neural Audio Codecpaper
2024-10LSCodecLSCodec: Low-Bitrate and Speaker-Decoupled Discrete Speech Codecpaper
2024-10Co-design for codec and codec-LMTOWARDS CODEC-LM CO-DESIGN FOR NEURAL CODEC LANGUAGE MODELSpaper
2024-10VChangeCodecVChangeCodec: A High-efficiency Neural Speech Codec with Built-in Voice Changer for Real-time Communicationpaper
2024-10DC-SpinDC-Spin: A Speaker-invariant Speech Tokenizer For Spoken Language Modelspaper
2024-10TAAEScaling Transformers for Low-Bitrate High-Quality Speech Codingpaper
2024-10DM-CodecDM-Codec: Distilling Multimodal Representations for Speech Tokenizationpaper
2024-09MimiMoshi: a speech-text foundation model for real-time dialoguepaper
2024-09NDVQNDVQ: Robust Neural Audio Codec with Normal Distribution-Based Vector Quantizationpaper
2024-09SoCodecSoCodec: A Semantic-Ordered Multi-Stream Speech Codec for Efficient Language Model Based Text-to-Speech Synthesispaper
2024-09BigCodecBigCodec: Pushing the Limits of Low-Bitrate Neural Speech Codecpaper
2024-08X-CodecCodec Does Matter: Exploring the Semantic Shortcoming of Codec for Audio Language Modelpaper
2024-08WavTokenizerWavTokenizer: an Efficient Acoustic Discrete Codec Tokenizer for Audio Language Modelingpaper
2024-07Super-CodecSuperCodec: A Neural Speech Codec with Selective Back-Projection Networkpaper
2024-07dMeldMel: Speech Tokenization made Simplepaper
2024-06CodecFakeCodecFake: Enhancing Anti-Spoofing Models Against Deepfake Audios from Codec-Based Speech Synthesis Systemspaper
2024-06Single-CodecSingle-Codec: Single-Codebook Speech Codec towards High-Performance Speech Generationpaper
2024-06SQ-CodecSimpleSpeech: Towards Simple and Efficient Text-to-Speech with Scalar Latent Transformer Diffusion Modelspaper
2024-06PQ-VAEAddressing Index Collapse of Large-Codebook Speech Tokenizer with Dual-Decoding Product-Quantized Variational Auto-Encoderpaper
2024-06LLM-CodecUniAudio 1.5: Large Language Model-driven Audio Codec is A Few-shot Audio Task Learnerpaper
2024-05HILCodecHILCodec: High Fidelity and Lightweight Neural Audio Codecpaper
2024-04SemantiCodecSemantiCodec: An Ultra Low Bitrate Semantic Audio Codec for General Soundpaper
2024-04PromptCodecPromptCodec: High-Fidelity Neural Speech Codec using Disentangled Representation Learning based Adaptive Feature-aware Prompt Encoderspaper
2024-04ESCESC: Efficient Speech Coding with Cross-Scale Residual Vector Quantized Transformerspaper
2024-03FACodecNaturalSpeech 3: Zero-Shot Speech Synthesis with Factorized Codec and Diffusion Modelspaper
2024-02AP-CodecAPCodec: A Neural Audio Codec with Parallel Amplitude and Phase Spectrum Encoding and Decodingpaper
2024-02Language-CodecLanguage-Codec: Reducing the Gaps Between Discrete Codec Representation and Speech Language Modelspaper
2024-01ScoreDecScoreDec: A Phase-preserving High-Fidelity Audio Codec with A Generalized Score-based Diffusion Post-filterpaper
2023-11HierSpeech++HierSpeech++: Bridging the Gap between Semantic and Acoustic Representation of Speech by Hierarchical Variational Inference for Zero-shot Speech Synthesispaper
2023-10TiCodecFEWER-TOKEN NEURAL SPEECH CODEC WITH TIME-INVARIANT CODESpaper
2023-09RepCodecRepCodec: A Speech Representation Codec for Speech Tokenizationpaper
2023-09FunCodecFunCodec: A Fundamental, Reproducible and Integrable Open-source Toolkit for Neural Speech Codecpaper
2023-08SpeechTokenizerSpeechtokenizer: Unified speech tokenizer for speech large language modelspaper
2023-06VOCOSVOCOS: CLOSING THE GAP BETWEEN TIME-DOMAIN AND FOURIER-BASED NEURAL VOCODERS FOR HIGH-QUALITY AUDIO SYNTHESISpaper
2023-06Descript-audio-codecHigh-Fidelity Audio Compression with Improved RVQGANpaper
2023-05AudioDecAudiodec: An open-source streaming highfidelity neural audio codecpaper
2023-05HiFi-CodecHifi-codec: Group-residual vector quantization for high fidelity audio codecpaper
2023-03LMCodecLMCodec: A Low Bitrate Speech Codec With Causal Transformer Modelspaper
2022-11Disen-TF-CodecDisentangled Feature Learning for Real-Time Neural Speech Codingpaper
2022-10EnCodecHigh fidelity neural audio compressionpaper
2022-07S-TFNetCross-Scale Vector Quantization for Scalable Neural Speech Codingpaper
2022-01TFNetEnd-to-End Neural Speech Coding for Real-Time Communicationspaper
2021-07SoundStreamSoundStream: An End-to-End Neural Audio Codecpaper

Speech/Audio Representation Models

DateModel NamePaper TitleLink
2024-09NEST-RQNEST-RQ: Next Token Prediction for Speech Self-Supervised Pre-Trainingpaper
2024-01EATSelf-Supervised Pre-Training with Efficient Audio Transformerpaper
2023-10MR-HuBERTMulti-resolution HuBERT: Multi-resolution Speech Self-Supervised Learning with Masked Unit Predictionpaper
2023-10SpeechFlowGenerative Pre-training for Speech with Flow Matchingpaper
2023-09WavLabLMJoint Prediction and Denoising for Large-scale Multilingual Self-supervised Learningpaper
2023-08W2v-BERT 2.0Massively Multilingual & Multimodal Machine Translationpaper
2023-07Whisper-ATNoise-Robust Automatic Speech Recognizers are Also Strong General Audio Event Taggerspaper
2023-06ATSTSelf-supervised Audio Teacher-Student Transformer for Both Clip-level and Frame-level Taskspaper
2023-05SPINSelf-supervised Fine-tuning for Improved Content Representations by Speaker-invariant Clusteringpaper
2023-05DinoSRSelf-Distillation and Online Clustering for Self-supervised Speech Representation Learningpaper
2023-05NFASelf-supervised neural factor analysis for disentangling utterance-level speech representationspaper
2022-12Data2vec 2.0Efficient Self-supervised Learning with Contextualized Target Representations for Vision, Speech and Languagepaper
2022-12BEATsAudio Pre-Training with Acoustic Tokenizerspaper
2022-11MT4SSLMT4SSL: Boosting Self-Supervised Speech Representation Learning by Integrating Multiple Targetspaper
2022-08DINONon-contrastive self-supervised learning of utterance-level speech representationspaper
2022-07Audio-MAEMasked Autoencoders that Listenpaper
2022-04MAESTROMatched Speech Text Representations through Modality Matchingpaper
2022-03MAE-ASTMasked Autoencoding Audio Spectrogram Transformerpaper
2022-03LightHuBERTLightweight and Configurable Speech Representation Learning with Once-for-All Hidden-Unit BERTpaper
2022-02Data2vecA General Framework for Self-supervised Learning in Speech, Vision and Languagepaper
2021-10WavLMWavLM: Large-Scale Self-Supervised Pre-Training for Full Stack Speech Processingpaper
2021-08W2v-BERTCombining Contrastive Learning and Masked Language Modeling for Self-Supervised Speech Pre-Trainingpaper
2021-07mHuBERTDirect speech-to-speech translation with discrete unitspaper
2021-06HuBERTSelf-Supervised Speech Representation Learning by Masked Prediction of Hidden Unitspaper
2021-03BYOL-ASelf-Supervised Learning for General-Purpose Audio Representationpaper
2020-12DeCoAR2.0DeCoAR 2.0: Deep Contextualized Acoustic Representations with Vector Quantizationpaper
2020-07TERATERA: Self-Supervised Learning of Transformer Encoder Representation for Speechpaper
2020-06Wav2vec2.0wav2vec 2.0: A Framework for Self-Supervised Learning of Speech Representationspaper
2019-10APCGenerative Pre-Training for Speech with Autoregressive Predictive Codingpaper
2018-07CPCRepresentation Learning with Contrastive Predictive Codingpaper

🔱 Related Repository

OmniFlatten |一种基于Qwen2-0.5B的端到端无缝对话大模型,解决对话中断、回话等问题

全双工口语对话系统在显著超越传统的单轮对话系统方面取得了重要进展,因为它们允许多向的同时通信, closely 地模拟了人际交流。然而,在全双工对话系统中实现低延迟和自然交互仍然是一个重大挑战,尤其是考虑到人类对话中的中断、回话以及重叠语音等动态因素。在本文中,作者提出了一种名为 Omni-Flatten 的新型端到端基于 GPT 的模型,用于全双工对话,该模型能够有效地建模自然对话中固有的复杂行为,并且具有较低的延迟。

为了实现全双工通信能力,作者提出了一种多阶段的后训练方案,逐步将基于文本的大语言模型(LLM) Qwen2-0.5B 主干调整为能够实时生成文本和语音的语音-文本对话 LLM,而无需修改主干 LLM 的架构。训练过程分为三个阶段:模态对齐半双工对话学习全双工对话学习。在整个训练阶段中,作者通过扁平化操作标准化数据,这使得作者可以统一不同模态和任务的训练方法和模型架构。

Omni-Flatten提供了一种简明的建模技术,并为开发高效且自然的端到端全双工口语对话系统指明了有前景的研究方向。可以在该网页上找到由 Omni-Flatten 生成的对话音频示例。

简介

传统的轮转式语音对话系统仅支持半双工通信,即用户和系统的通信是双向进行但不能同时进行。这类系统在许多实际应用中虽有效,但在处理中断、回声通道和重叠语音时往往显得不足,这反映了人类面对面交流的自发性。相比之下,全双工语音对话系统允许同时进行双向通信,更贴近人类面对面交流的动力学特征。全双工语音对话系统能够通过同时说话、听和思考促进更为自然和高效的交互。然而,在全双工系统中实现低延迟和自然交互仍然是一个重大挑战。

近年来,开发语音对话系统的工作受到了大语言模型(LLM)进展的驱动,并大致可以分为协作系统和端到端系统两类。协作系统通过对接基于LLM的对话模块与外部ASR或TTS模块来实现语音理解和语音生成。例如,Qwen-audio处理语音输入,输出文本并通过TTS将其转换为口头回应。相比之下,一些端到端系统直接基于语音-文本多模态模型建模语音到语音的对话,但这些模型大多是回合制对话模型,不支持全双工对话。最近在开发端到端全双工语音对话系统方面取得的进步包括SyncLM和开源的Moshi。

具体而言,Moshi并行模型了用户的多条语音输入流和系统的文本及语音输出流,简化了全双工对话的处理。然而,这种并行框架并不被基于GPT的模型天然支持,因此需要复杂的策略如声学延迟和内心独白等设计。类似Omni-Flatten,SyncLM也是训练来预测用户的语音单元和助手的交替片段以获得实时全双工语音对话能力。然而,他们引入了一种去重策略来减轻静默语音对模型语义能力的影响,而作者则是通过显式文本 Token 预测增强对话模型的语义能力。

为了应对全双工语音对话系统中实现自然交互和低延迟所面临的挑战,作者提出了一种基于GPT的新颖端到端模型Omni-Flatten,用于全双工语音对话。Omni-Flatten能够有效学习自然对话中固有的复杂行为,并通过低延迟促进类似人类的对话。作者提出了一种多阶段渐进式后训练方案,通过首先进行模态对齐,然后交替和展平对话中的多个语音和文本流,将基于文本的大语言模型(LLM) Qwen2-0.5B 骨架适应为一个健壮的语音-文本对话模型。值得注意的是,Omni-Flatten并未改变基于文本的 Backbone 架构,也未依赖于计算密集型的预训练。

多阶段后训练过程始于对文本大语言模型 Backbone 网络进行监督多任务微调,以实现语音-文本模态对齐,并获得一种跨模态大语言模型,使用自动语音识别(ASR)和文本到语音合成功能(TTS)。这一阶段对于确保系统能够准确地理解和生成语音及文本,从而形成人机交互的无缝界面至关重要。

在获得语音-文本大语言模型后,作者通过三个渐进阶段,使用交错和序列化的对话对其进行微调:

  1. 在第一个阶段,作者使用扁平化技术,将用户输入和系统输出的文本流和语音流均摊平为单一序列(即处理四流数据)。这一阶段作为初步步骤,旨在训练模型学习半双工对话能力。
  2. 在第二个阶段,作者进一步移除用户输入文本流,对剩余的三流进行细粒度切分和对齐,将这些切分部分扁平化,并继续使用扁平化的三流数据对模型进行训练。这一步骤的目标是训练模型学习实时多流预测能力,从而实现全双工通信
  3. 最后,作者构建仅包含输入和输出语音的两流数据,并继续对模型进行训练,以专注于语音到语音的生成任务,从而消除对中间文本的依赖,减少延迟,并使系统更接近实时交互。

Omni-Flatten提出了一种简单而创新的建模技术,为开发高效且自然的端到端全双工对话系统提供了有前景的研究方向。

本项工作的主要贡献可以总结如下:

  1. 作者提出了一种新颖的一次性基于GPT的模型Omni-Flatten,该模型能够有效建模自然人类对话中固有的复杂行为,同时具有低延迟。作者提出了一种多阶段的后训练方案,通过基于As Rand TT S的有监督多任务微调实现文本基础的大语言模型向稳健的语音-文本对话模型的成功适应,然后对对话中的语音和文本流进行细粒度分块,并将它们扁平化为单一序列,逐步训练模型以获得半双工和全双工通信能力。值得注意的是,Omni-Flatten 并未对该GPT模型进行任何结构上的修改,也不依赖于计算量大的预训练。
  2. 作者的实验验证了模态对齐阶段的有效性,因为最终模型在ASR和TTS方面的表现达到了可接受的水平。作者使用高性能的大语言模型作为评估器,评估由Omni-Flatten生成的对话质量,并评估了对话轮换性能,包括系统轮换和用户轮换,以及运行时效率。结果显示,Omni-Flatten生成的对话具有合理的质量,模态对齐和半双工学习阶段均提升了模型的全双工对话能力。相对于用户轮换,Omni-Flatten在处理系统轮换方面更为出色,系统轮换的平均响应时间为160毫秒,而用户轮换的平均响应时间则为805毫秒。

方法论

在本节中,作者介绍了作者的端到端全双工对话模型Omni-Flatten。如图1所示,作者使用音频分词器将对话中的每个输入和输出语音流离散化为一个离散的语音Token序列。

OmniFlatten:端到端全双工语音对话模型概述:该模型能够持续接收用户输入的语音,同时生成助手的语音和文本输出。语音分词器将用户的语音(包括静音段)转换为输入语音的分词序列(表示为红色方块序列:S0, S1, S2, S3, S4, …)。我们将一段输入语音分词(用实线框括起来的分词)输入到OmniFlatten中,以解码生成一段输出分词(用虚线框括起来的分词)。输出分词包括语音分词(蓝色方块序列:S0, S1, S2, S3, S4, …)和文本分词(绿色圆圈序列:T0, T1, T2, …)。我们将输出文本分词按照固定的文本块大小组织,并按照固定的语音块大小生成输出语音分词,从而利用预测的文本指导语音生成。用户的语音分词与预测生成的助手文本和语音分词根据说话人轮次交错排列,最终展平为一个单一序列。最后,输出的语音分词和文本分词分别输入到语音去分词器和文本去分词器中,以生成助手的输出语音和文本。

作者然后交替排列语音Token序列和文本Token序列,并将它们展平成一个单一序列。Omni-Flatten采用多阶段渐进式训练过程,将基于文本的大语言模型转化为具备模态对齐和对话学习能力的 robust 的端到端全双工口语对话模型。在接下来的子节中,作者将详细阐述作者方法的关键组成部分,包括音频Token化与反Token化、模态对齐以及对话学习。

音频标记化和去标记化

为了将连续的语音信号转换为离散的Token序列,作者采用了在CosyVoice中使用的语音Tokenizer。由于通过多语种ASR的监督,这种语音Tokenizer能够将语音转换为语义Token,从而有助于提升语音理解并保证生成语音的内容一致性。该Tokenizer利用了一个编码器和一个向量量化(VQ)层,将音频信号离散化为具有4096个Codebook代码的语音Token序列。

Cosyvoice模型架构

在将离散的语音Token重新转换回音频时,作者同样使用了与CosyVoice中相同的Optimal Transport Conditional Flow Matching模型(OTCFM)。OTCFM将语音Token序列转化为Mel频谱图,然后使用HifiGAN语音生成器生成最终的音频输出。先前的研究表明,相比于更简单的梯度扩散概率模型(DPM),OTCFM在训练更容易且生成更快方面表现更优。

为什么要使用HifiGAN将mel谱转换为音频:    
     理论上,梅尔语谱图(Mel-spectrogram)可以直接转换回音频波形,但这个过程通常并不像简单的逆变换那样直接和精确。原因在于,梅尔语谱图只是音频的一个低维表示,丢失了很多原始音频中的细节信息,尤其是相位信息。而语音合成中的高质量波形生成通常需要更复杂的模型来重建这些细节。HiFiGAN 和其他类似的模型提供了一个有效的框架来实现这种重建。

1. 梅尔谱图到波形的转换问题
梅尔语谱图是通过将音频信号转换到梅尔频率刻度后提取的特征。它是通过傅里叶变换将音频信号转换成频谱图后,再通过梅尔滤波器组对频谱进行压缩得到的。梅尔语谱图通常只保留了音频的频率信息,而没有包含关于时间和相位【波形】的细节。由于相位信息对音频波形的重建至关重要,直接将梅尔谱图转换回波形往往会导致失真或不自然的声音。

2. 为什么需要 HiFi-GAN 这样的模型?
HiFi-GAN 和类似的生成对抗网络(GAN)模型是为了应对梅尔谱图到波形转换的挑战而设计的。梅尔谱图提供了音频的频谱信息,但缺少细节,如相位信息、音质和时间结构等。而 HiFi-GAN 等模型通过以下方式弥补了这个缺失:

相位重建:HiFi-GAN 等模型不仅仅是简单的反变换,它们通过学习梅尔谱图与真实音频波形之间的复杂关系,能够通过生成模型有效地重建音频的相位信息,从而得到更高质量的波形。

生成对抗训练:HiFi-GAN 使用生成对抗网络(GAN),通过生成器和判别器的对抗训练,能够更好地捕捉到音频信号的自然性和细节。生成器从梅尔谱图出发生成波形,判别器则判断生成的波形是否与真实的音频波形相似。经过多次训练,生成器学会了如何产生高质量的波形。

高质量输出:直接从梅尔谱图到波形的传统方法(如 Griffin-Lim 算法)通常会产生较低质量的波形,尤其是在细节和自然性上有所欠缺。HiFi-GAN 可以生成非常高质量的波形,甚至接近人类语音的真实感。

模态对齐

作者从对预训练的文本大语言模型(Text-Based LLM Backbone)进行后训练开始,以获得适用于语音理解与生成的语音-文本大语言模型(Speech-Text LLM)。由于Qwen2-0.5B具有较小的规模,适合低计算资源要求,并且对于这种规模的模型而言表现力较强,因此作者选择它作为基模型。作者使用配对的语音-文本数据(ASR和TTS任务)进行监督微调(Supervised Fine-Tuning, SFT),这一过程使预训练的文本大语言模型适应了语音-文本多模态模型。

对于每个语音-文本对,作者构建如下训练样本:

TTS 样本:

其中,[ASR]和[TT S]分别表示ASR任务和TT S任务的ID;[SOS]、[EOS]、[SOT]、[EOT]是特殊的Token,分别表示语音句子或文本句子的开始和结束。作者使用这个对齐的语音-文本多模态模型进行后续的对话学习。这里的S_seq 是语音进行 CosyVoice Tokenizer 来获得的,T_seq是文本序列。 S_seq 经过 OTCFM 合成音频mel谱,在经过HifiGAN解码合成音频。

对话学习

在上述所述的语音-文本多模态模型的基础上,作者分三个阶段进行对话学习,包括使用轮流对话数据的语音和文本流进行半双工对话训练,然后基于语音和文本序列的精细分块和对齐进行全双工对话训练。

具体而言,在全双工对话训练期间,作者首先去除输入文本流,并使用剩余的三个流进行训练,然后进一步去除输出文本流,并使用剩余的两个流进行训练,以逐步消除对文本信息的依赖,专注于语音到语音的生成,并减少延迟。

在整个三个阶段中,作者将多流对话数据交错并压平成单一序列。【moshi做法是将多流并行建模】

半双工对话训练

半双工对话智能体是全双工对话智能体的特殊且简化案例,其中人类和助手交替发言,且不存在重叠说话的情况,即在发言人的发言期间,聆听者完全静默。

由于用于学习模态对齐的语音识别(ASR)和文本到语音(TTS)数据中不存在重叠说话的情况,因此半双工对话训练比需要模型处理轮流发言、副通道反馈以及重叠说话的全双工对话训练更符合已对齐的多模态模型。作者采用循序渐进的学习理念,在首先进行半双工对话训练之后再进行全双工对话训练。

四流训练:

基于四种流(语音和文本分词)的半双工对话训练如图所示,模型在根据对话中实际说话人轮次组织的数据上进行训练。我们将多轮对话中的语音和文本分词展平成一个单一序列,按照以下模式进行排列:

  • 第 N−1 轮中包含用户语音分词(红色方块表示)和用户文本分词(红色圆圈表示);
  • 第 N 轮中包含助手文本分词(蓝色圆圈表示)和助手语音分词(蓝色方块表示)。

通过这种展平方法,模型能够在训练过程中捕捉多轮对话的上下文信息,同时保持不同流数据的关联性。

在半双工对话训练过程中,作者训练模型主要执行用户语音片段的语音识别(ASR),以获取文本内容,接着基于用户文本内容生成助手的文本回应,然后通过基本上执行TTS任务来预测助手文本回应的语音片段。这种模式在一次对话的多个回合中得以扩展,如图2所示。

全双工对话训练

基于三流数据的训练为了开发出能够进行低延迟双工对话的人类 Level 的全双工会话智能体,作者需满足实时要求。为此,作者从四种数据流中移除了用户文本流,并使用剩余的三种数据流进行训练。为了处理重叠语音,作者在基于片段的基础上引入了分块和宽松语音-文本 Token 对齐的方式,这样一来,作者就无需在语音token和文本token之间实现严格的 Token 级对齐。

具体来说,在准备用于此阶段的训练数据时,作者首先按照固定大小将对话数据中的语音 Token 序列和文本 Token 序列分块,然后交错排列这三种数据流并展平成单一序列用于训练,遵循输入语音、输出文本、输出语音的顺序。值得注意的是,由于文本效率更高,文本片段的大小通常小于语音片段的大小。

三流训练:

在本研究中,作者将文本片段的大小设置为 2 个 Token ,将语音片段的大小设置为10个 Token 。这种方法确保了输出文本不会过度提前出现,从而在最小化与上述四流数据格式之间的差异的同时最大化保留TTS任务的目标。在文本内容结束后,作者使用特殊的静默终止 Token 填充文本流使用静默语音 Token 填充输出语音流中的静默区域。基于分块的三流数据的这种训练过程如图3所示。

基于三流全双工对话数据的全双工对话训练(移除用户文本流)如图所示,我们将输入和输出的多模态分词序列分割为短块,并将它们展平在一起。这样模型可以实时流式处理用户语音分词的输入,同时生成助手的文本和语音分词输出。

在第 N−1 块中,输入五个用户语音分词(红色方块,实线框中),模型输出七个助手分词(虚线框中),包括两个助手文本分词(蓝色圆圈)和五个助手语音分词(蓝色方块)。

模型遵循标准的自回归训练和解码过程。图中虚线箭头表示在一个块内,模型会重新输入预测的助手文本和语音分词,以完成自回归解码过程。这种方法保证了全双工对话流的连续性和实时性,同时简化了用户输入数据的处理。

双流训练:

基于两流全双工对话数据的全双工对话训练(进一步移除助手文本流)。如图所示,相较于三流实验,我们进一步移除了助手文本分词,仅保留用户和助手的语音分词作为输入。具体来说,我们将用户和助手的语音分词展平为一个单一序列输入到模型中。

在第 N−1 块中,输入 5 个用户语音分词(红色方块,实线框中),模型在第 N−1 块中输出 5 个助手语音分词(蓝色方块,虚线框中)。

这种方法简化了模型输入和输出的形式,仅依赖语音分词进行全双工对话的处理。这种训练方式突出语音信号在实时对话中的核心作用,同时进一步减少了对文本流的依赖。

训练基于双流数据为进一步降低延迟并消除对中间文本的依赖,从而专注于语音到语音的生成,作者进一步移除了输出文本流,仅保留输入和输出语音流。基于分块双流数据的这一训练过程如图4所示。

实验

数据

模态对齐数据集

模态对齐训练阶段的目标是帮助模型学习语音Token和文本Token之间的对应关系,并使模型获得自动语音识别(ASR)和文本到语音(TTS)两项关键能力。为了实现这一目标,作者结合了一组包含开源和专有数据的TTS和ASR数据集。开源数据集包括普通话和英语数据,如AISHELL-3、LibriTTS、TED-L1UM、VoxPopuli、LibriSpeech以及MLS。此外,还整合了几种专有ASR和TTS数据集。总体而言,用于语音-文本模态对齐的数据集约包含10万小时的音频数据,其中30%为开源数据,70%为专有数据。

模拟语音聊天数据集:为了构建对话学习的语音聊天数据,作者设计了一条数据合成与模拟Pipeline来生成对话数据。首先,作者收集了大量的高质量开源文本对话数据,用于后续的语音合成,包括Alpaca、Moss、BelleCN和ultraChat。然后,使用启发式规则筛选出不适合Text-to-Speech(TTS)的数据样本,例如包含较高比例非文本元素(如代码和数学表达式)的样本、长度超过200字(中英文皆可)的样本,以及包含罕见或不常见符号的样本。最后,作者保留了大约360,000个基于轮次的对话会话(半双工对话)。

其次,作者基于这些文本的多轮交互对话创建了伪全双工语音聊天。作者使用CosyVoice合成了每一轮的音频。具体来说,作者首先从LibriSpeech和3DSpeaker数据集中采样说话人嵌入,以获得多样化的音色。在合成每一轮的语音之后,作者采用模拟策略,在每个说话人通道中适当地安排每一轮的音频,使得这次对话能够模拟自然的交互过程,即每位说话人交替发言,偶尔有中断和停顿,并且上下文流畅。详细的流程如下:

作者将合成的对话音频组织为两个通道,第一个通道是用户通道,第二个通道是助手通道。请注意,文本对话始终以用户开头,然后用户和助手交替发言。在用户发言结束后,作者立即开始下一个助手的发言,以便助手能够及时回应用户。在助手发言结束后,作者从正态分布中采样从助手回合结束时间到下一个用户回合开始时间的暂停时长,从而创建出用户与助手交错对话所对应的音频。

第三部分,为了模拟用户音频通道中的真实场景,作者还从MUSAN噪声数据集中采样背景噪声,并将其添加到用户音频通道中。作者控制信噪比(SNR)在15 dB到25 dB之间。基于此数据合成与仿真Pipeline,作者生成了总计2000小时的多通道对话数据。基于该数据集,作者使用其中1%的数据作为验证集,另外1%的数据作为测试集,其余数据用于训练。

训练和推理设置

作者使用QWen2-0.5B作为基础模型。在模态对齐训练阶段,最大序列长度设置为1024个Token。在对话学习阶段,最大序列长度扩展到8192个Token。在整个训练阶段,作者都使用标准交叉熵损失作为训练目标。

此外,在对话学习阶段,作者对User通道应用了损失 Mask ,因为作者观察到这项操作增强了模型训练的稳定性,可能是因为User通道中含有噪声音频输入。作者采用AdamW优化器,权重衰减设置为0.1,设为0.9,设为0.95。最大学习率设为2e-05,并采用Warm Up和余弦衰减策略。作者用5个epochs进行训练,并基于验证集上的损失选择最佳模型。批量大小设为1亿个Token。作者的代码实现基于NanoGPT项目4。

推理过程中,为了从模型中获得Assistant文本响应的预测,作者使用测试集中固定的用户语音通道语音作为固定语音输入,并交替填充预测的Assistant语音和文本

评价

模态对齐后的ASR和TTS任务性能改善情况

在模态对齐训练阶段(第3.2节),目标是帮助模型学习语音Token和文本Token之间的对应关系,并获得ASR和TTS能力;因此,作者通过评估最终对齐的多模态模型的ASR和TTS性能来评价此训练阶段的有效性。对于ASR评估,作者使用该模型将输入语音对应的离散语音Token解码为文本输出。

对于TTS评估,作者基于输入文本生成语音Token,然后使用CosyVoice的随机英语女性声音合成为音频。合成的音频随后使用Whisper Large V3模型进行识别,ASR的输出则与输入文本进行对比评分。ASR和TTS评估均在公开可用的LibriSpeech和VoNet Speech数据集上进行,采用字符错误率(CER)作为评估指标。

值得注意的是,CER不仅能够衡量模型TTS能力的合成准确度和鲁棒性,还能在很大程度上反映出音频质量。此外,由于本工作的主要目标是研究全双工语音聊天中的对话动态,因此本文未采用传统的语音质量标准评估指标,如主观意见得分(MOS)。

对于ASR评估,作者对比了Modality Alignment训练阶段后的语音文本对齐多模态模型(称为OmniFlatten)与Whisper Large V3模型。对于TTS评估,使用GT Speech Tokens表示将 GT 波形分割成语音Token,并使用相同的英女性音将其反向转换为语音。如表1所示,OmniFlatten在ASR和TTS任务上均表现出显著的性能。这些结果表明,Modality Alignment训练阶段有效地将单一模态的文本基础大语言模型转变为具有合理语音理解和生成能力的语音-文本多模态模型,为进一步的对话学习奠定了基础。

全双工对话能力受模态对齐和半双工对话学习的影响分析

正如第3.3.2节所述,针对三流数据进行全双工对话学习的训练阶段有助于模型获得全双工对话能力,并且该模型能够生成语音和文本用于助手。前期研究表明,竞争性的文本基础大语言模型可以作为多种自然语言生成任务的可靠评估工具,因为由大语言模型评估者为生成文本分配的分数与人类评估高度相关。

因此,作者通过 Prompt 一个竞争性的文本大语言模型来评估OmniFlatten的全双工对话能力,让其评估对话的意义并为训练过程中生成的预测助手文本响应赋分。值得注意的是,在仅针对两流数据完成最终训练阶段后,OmniFlatten仅输出助手的语音,这给基于文本的大语言模型带来了评估上的挑战。

评分机制涉及设计特定的 Prompt 词,并利用竞争性的文本大语言模型Qwen-max模型6来对模型生成的回答进行1到10分的评分。作者用于大语言模型评分的具体 Prompt 词详见附录A。作者精心设计该 Prompt 词以评估预测Assistant文本响应的流畅性和连贯性。此外,作者还在测试集上报告了该模型的CE损失值。

为了分析模态对齐训练阶段(第3.2节)和半双工对话学习阶段(第3.3节)在基于三流数据训练后对Omni-Flatten全双工对话能力的影响,作者对比了以下模型预测的Assistant文本响应的大语言模型评分:

  • QWen2-0.5 模型直接在三流数据上训练(表示为 Omni-Flatten,具有跨模态对齐但不采用半双工训练)。
  • QWen2-0.5B 在三流数据( Token 为 Omni-Flatten 且不包含半双工训练)上进行了模态对齐和全双工对话训练。
  • QWen2-0.5B 在三流数据上进行了模态对齐、半双工对话训练和全双工对话训练( Token 为 Omni-Flatten)。
  • 测试集中的真实文本响应(用GT响应表示).

表2的结果显示,模态对齐和半双工训练阶段均提高了预测助手文本响应的大语言模型得分,这表明这两个阶段都促进了模型全双工对话性能的提升,并且多阶段训练策略有效地增强了模型端到端全双工语音对话的能力。

轮流对话性能和运行效率:为了评估全双工交互的自然性,作者评估Assistant在用户说完话后能否及时回应(即Assistant进行轮流对话),以及当用户试图打断时Assistant能否及时停止说话(即用户进行轮流对话)。作者定义了以下指标。

Assistant 轮换 Acc@K:此度量定义为:如果在用户发出具有语义意义的语音 token 结束后的第 k个 token 处,Assistant 正确预测了一个非静默 token,则表明 Assistant 已经接过了话筒并开始发言。

用户轮换Acc@K :此指标定义为,在辅助智能体正在说话时,当用户输入一个语义上有意义的语音Token之后,辅助智能体是否正确地输出了一个静默Token在第k个Token位置上。该指标表明辅助智能体成功响应了用户的轮换尝试,即停止自身说话并进入倾听状态。请注意,在作者模拟的伪全双工对话数据集中,由于未考虑返回通道,因此用户输入始终被视为用户获得了发言权。

表3展示了评估结果。作者做如下观察:

  1. 使用本文中使用的语音片段大小10时,当用户结束发言后,智能体能够迅速响应,智能体轮换准确率在第5个Token时达到了55.7%,在第10个Token时达到了71.3%。相比之下,用户的轮换准确率非常低,在第25个Token时仅为30%。这是因为作者的合成全双工数据基于轮换文本对话构建,未涵盖用户打断智能体发言并轮换的情况。在未来的工作中,作者计划细化数据合成Pipeline,更好地模拟现实世界全双工交互中的复杂交互模式,例如用户打断和轮换发言,以及反馈通道。
  2. 智能体轮换的平均响应时间为160毫秒,而用户的平均响应时间为805毫秒。这种差异的原因在于智能体的轮换发生在用户的发言结束时,此时大量语义信息已经可用,系统可以迅速作出响应;相比之下,用户开始发言时语义上下文尚未完全建立,因此系统需要更长的时间来做出决策,停止说话并让出发言权
  3. 作者观察到使用更大的语音片段大小可以提高用户的轮换准确率和较大的K值下的智能体轮换准确率。作者认为这是由于更大的语音片段可以提供更多全面的语义信息以供轮换预测。然而,较大的片段大小也需要更长的预测时间,从而增加智能体的轮换响应时间。不同语音片段大小对用户轮换响应时间的影响相对较小,因为正如前面所述,无论语音片段大小如何,用户的轮换速度始终较慢。

结论和未来的工作

在本文中,作者介绍了一种基于合成全双工语音对话数据并设计多阶段渐进训练范式来实现模态对齐和对话学习的端到端全双工语音对话模型Omni-Flatten。

Omni-Flatten提供了一种简单的全双工建模方案,无需改变基于文本的大语言模型的基本架构,也不依赖于计算密集型的预训练。实证评估表明,提出的方法对于开发处理全双工交互的端到端模型具有前景。

参考

[0]. Omni-Flatten: An End-to-end GPT Model for Seamless Voice Conversation.

CleanS2S-语音到语音 (S2S) 的原型智能体

https://github.com/opendilab/CleanS2S

CleanS2S 是一个语音到语音 (S2S) 的原型智能体,提供高质量的流式交互,并采用单文件实现。其设计简洁明了,旨在提供类似 GPT-4o 风格的中文交互原型智能体。该项目希望让用户直接体验语言用户界面 (LUI) 的强大功能,并帮助研究人员快速探索和验证 S2S pipeline 的潜力。

功能

📜 单文件实现

每个智能体管道的细节都放在一个独立的文件中。无需额外配置依赖项或理解项目文件结构。这对于那些想快速了解 S2S 管道并直接验证新想法的人来说,是一个很好的参考实现。所有管道实现都易于修改和扩展,用户可以快速更换喜欢的模型(例如 LLM)、添加新组件或自定义管道。

实时流式接口

整个 S2S 管道主要由 ASR(自动语音识别)、LLM(大型语言模型)和 TTS(文本转语音)组成,配合两个 WebSockets 组件接收器(包含 VAD)和发送器。管道设计为实时流模式,用户可以像人与人对话一样实时与智能体互动。所有音频和文本信息通过 WebSocket 流式发送和接收。为此,我们利用多线程和队列机制确保流过程顺畅,避免阻塞问题。所有组件都设计为异步和非阻塞,处理输入队列的数据并将结果输出到另一个队列。

🧫 全双工交互与打断机制

基于 WebSockets 提供的强大机制,管道支持全双工交互,这意味着用户可以同时与智能体对话和听取回复。此外,管道支持中断,用户可以在对话中随时通过新语音输入打断智能体。智能体将停止当前处理,开始处理新输入,并结合之前的对话和中断内容进行处理。此外,我们发现聊天机器人常用的“助理风格”和“轮流式”回应是人类对话的主要缺点之一。我们为智能体添加了更有趣的策略,以使对话更具互动性和吸引力。

🌍 网络搜索和 RAG

通过集成网络搜索功能和检索增强生成(RAG)模型,管道得到了进一步增强。这些功能使智能体不仅能实时处理和响应用户输入,还能从网络中获取和整合外部信息到响应中。这为回答用户提出的各种实际问题提供了扩展和灵活性。

  • WebSearchHelper 类负责根据用户查询进行在线搜索或收集与对话相关的附加信息。这使智能体能够参考最新或外部数据,增强响应的丰富性和准确性。
  • RAG 类实现了检索增强生成方法,首先从数据库中检索相关信息,然后使用这些信息生成响应。这一两步过程确保智能体的回复基于相关的事实数据,使互动更加知情和符合上下文。

快速上手

后端

安装

## clone the repository
git clone https://github.com/opendilab/CleanS2S.git
cd CleanS2S/backend
pip install -r requirements.txt
  • 根据此处的说明安装 funasr 以支持 paraformer-zh
  • 根据此处的说明安装 cosyvoice 以支持 CosyVoice-300M

下载模型

您需要下载以下四个必要的模型(3个 ASR 模型 + 1个 TTS 模型),可以通过以下链接下载,并放置在合适的目录中。

对于 LLM,我们默认使用 LLM API,您也可以按照下方的说明定制自己的本地 LLM(如 DeepSeek-V2.5、Qwen2.5 等)。

删除 --enable_llm_api 和 --lm_model_url 参数,修改 --lm_model_name 参数为您的本地 LLM 模型路径(例如 --lm_model_name /home/users/deepseek-v2.5)。

您还需要准备一个参考音频目录,其中包含用于韵律和音色转换的参考音频。我们在此仓库中准备了一个示例参考音频目录

如果您想使用自己的参考音频,需要保持与示例参考音频目录相同的格式。音频应为 10~20 秒长,发音清晰。

运行服务器

以下是使用默认设置运行服务器的示例:

export LLM_API_KEY=<your-deepseek-api-key>
python3 -u s2s_server_pipeline.py \
        --recv_host 0.0.0.0 \
        --send_host 0.0.0.0 \
        --stt_model_name <your-asr-path> \
        --enable_llm_api \
        --lm_model_name "deepseek-chat" \
        --lm_model_url "https://api.deepseek.com" \
        --tts_model_name <your-tts-path> \
        --ref_dir <ref-audio-path> \
        --enable_interruption

ℹ️ 支持自定义LLM:在这里,我们使用 deepseek-chat 作为默认 LLM API ,您也可以根据 OpenAI 接口更改为其他 LLM API。(修改--lm_model_name--lm_model_url,设置您自己的 API 密钥)

ℹ️ 支持其他自定义:您可以参考后端管道文件(例如s2s_server_pipeline.py)中由argparse库实现的参数列表,根据自己的需求进行自定义。所有参数在其帮助属性中都有详细文档,易于理解。

使用 Websearch+RAG 运行服务器

您首先需要安装 Websearch 和 RAG 所需的依赖。

pip install -r backend/requirements-rag.txt

其次,为 RAG 中嵌入 Websearch 结果选择一个嵌入模型,例如以下嵌入模型:

git lfs install
git clone https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2

然后,为 Websearch 和 RAG 模块提供令牌,在s2s_server_pipeline_rag.py中,我们使用Serper作为 Websearch 工具,使用Deepseek进行 RAG 。

export LLM_API_KEY=''
export SERPER_API_KEY=''

最后,在运行服务器的示例代码中,将s2s_server_pipeline.py替换为s2s_server_pipeline_rag.py,并添加参数--embedding_model_name

这是使用默认设置和 Websearch+RAG 运行服务器的示例:

python3 -u s2s_server_pipeline_rag.py \
        --recv_host 0.0.0.0 \
        --send_host 0.0.0.0 \
        --stt_model_name <your-asr-path> \
        --enable_llm_api \
        --lm_model_name "deepseek-chat" \
        --lm_model_url "https://api.deepseek.com" \
        --tts_model_name <your-tts-path> \
        --embedding_model_name <embedding-model-path> \
        --ref_dir <ref-audio-path> \
        --enable_interruption

前端

我们建议使用Docker镜像来安装和运行客户端。以下是具体步骤:

## 运行基本的Docker镜像
docker run -it -p 3001:3001 amazonlinux:2023.2.20231011.0 sh
## 安装必要的包
dnf install vim git nodejs -y
npm install -g pnpm
git clone https://github.com/opendilab/CleanS2S.git
cd CleanS2S/frontend_nextjs
pnpm install

frontend_nextjs目录中准备适当的.env.local文件,您可以参考.env.example文件以获取所需的环境变量。

## 运行客户端
pnpm dev --port 3001

然后您可以在浏览器中访问客户端,地址为http://localhost:3001(推荐使用 Chrome 浏览器)。

附注:如果您想在本地运行客户端,请首先安装 node.js 和 pnpm ,然后使用 pnpm 安装必要的包并运行客户端。