腾讯优图最新开源Freeze-Omini:冻结LLM引入语音处理能力

科技   2024-12-14 00:01   北京  

作者:yearn
原文:https://zhuanlan.zhihu.com/p/8242564370


近年来大语言模型(LLM)的快速发展为智能应用带来了巨大机会,而语音作为自然的人机交互形式,其与LLM的结合可以显著提升用户体验。然而,传统的语音交互方式通过ASR + LLM + TTS的级联方式实现,存在高工程复杂性和较大交互延迟的问题。此外,多模态LLM的现有研究在语音与文本模态的对齐过程中,多多少少需要对LLM参数进行微调,而这可能导致灾难性遗忘问题,进而影响模型的智能性。因此,Freeze-Omni模型应运而生,旨在解决以上问题,通过冻结LLM参数,在保持智能性的同时,实现低延迟的语音对语音对话能力。

本文对Freeze-Omini进行详细的介绍,一些语音侧的相关知识在paper中并未详细介绍,为了方便读者阅读放在文章末尾。

主要贡献

1.冻结LLM参数

在整个训练过程中完全冻结LLM的参数,避免了因数据量不足或计算资源有限导致的灾难性遗忘问题,同时保留了低延迟语音对语音对话的能力。

2.低数据需求与低资源消耗

训练过程中仅需要语音-文本配对数据(如ASR和TTS训练数据)以及少量文本模态的问答数据(约60,000条),显著降低了数据规模与计算资源需求。

3.支持任意文本模态LLM

Freeze-Omni可以支持任何具备文本模态的(多模态)LLM,并保留LLM的提示词跟随与角色扮演能力。如果需要更改LLM的响应风格,只需用对应风格的文本数据对其进行微调。

4.创新的双工对话设计 通过多任务训练实现了用户自然插话的双工对话能力,使得Freeze-Omni的对话风格更加自然。

5.语音输入与输出的创新建模

通过设计分阶段的训练策略和前缀kv-cache微调策略,Freeze-Omni在冻结LLM的同时实现了语音输入到文本输出以及文本输入到语音输出的能力。

技术细节

模型概览

Freeze-Omni是一种语音对语音对话模型,其架构基于冻结的LLM,,避免了因语音模态集成导致的遗忘问题。模型包含:
  • 1.支持流式语音输入的语音编码器。
  • 2.生成流式输出语音的语音解码器。
  • 3.冻结的LLM骨干模型,通过语音编码器和解码器实现语音对语音的对话能力。

在训练过程中,模型依次完成语音输入到文本输出、文本输入到语音输出的能力对齐,最终通过组件连接实现端到端语音对语音交互。

语音输入建模

流式语音编码器

  • 模型利用分块式流式语音编码器,将语音特征转化为高维表征,随后通过适配器映射到LLM的嵌入空间。
  • 编码器由若干下采样卷积层和Transformer块组成,适配器仅包含下采样卷积层。下采样的目的是降低语音特征帧率,提高LLM的预填充阶段速度,并减少延迟。

三阶段训练策略

第一阶段

  • 输入为语音特征,标签为语音对应的文本转录。
  • 使用CTC损失函数完成常规语音识别模型的训练。 第二阶段
  • 以第一阶段训练好的语音编码器作为初始化参数,通过适配器连接到冻结的LLM。
  • 输出仍为语音对应的文本转录,输入部分加入可训练的特殊token以引导训练过程。 第三阶段
  • 构建多轮问答数据集,利用LLM生成对应的多轮答案数据。
  • 使用多个说话者的TTS系统生成语音模态数据,训练中在每个问题前加入可训练的提示词嵌入,引导模型完成语音输入到文本输出的能力。

语音输出建模

架构设计

  • 受VALL-E启发,Freeze-Omni的语音解码器采用基于token的解码结构,包含非自回归(NAR)预填充阶段和自回归(AR)生成阶段。
  • 解码器由NAR解码器、AR解码器和codec模型解码器组成:
    • NAR解码器建模LLM的语义特征。
    • AR解码器基于NAR输出生成语音token。
    • codec模型解码器将语音token转换为语音流。

1. 单码本(Single-Codebook)Codec模型

单码本Codec模型是一种用于语音压缩和生成的技术,主要作用是将语音信号映射为离散的语音token(类似于语音的特征编码),并通过解码器将这些语音token还原为语音信号。

  • 单码本的作用
    • 将语音信号进行压缩,以便模型以低维度的离散token表示语音。
    • 简化了解码过程,减少系统复杂性和计算延迟。
  • 为什么使用单码本
    • 单码本的设计仅需一个特征字典(codebook)即可完成语音的编码和解码,相比多码本方法复杂度更低且效率更高。
    • 在有限数量的说话人场景中,单码本能提供足够的语音质量。

2. 基于Token的解码结构

Freeze-Omni的语音生成通过基于token的解码结构完成,核心思路是将语音信号离散化为语音token,逐步生成语音流。

解码流程:

1.NAR解码器

  • 非自回归(Non-Autoregressive, NAR)解码器并行处理文本token,建模LLM输出的语义特征。
  • 主要功能是从LLM的语义信息中生成初步的语音token分布。
  • 优点是并行化生成语音token,提高解码速度。

2.AR解码器

  • 自回归(Autoregressive, AR)解码器基于NAR生成的语音token,逐步生成更高质量的语音token序列。
  • 自回归的特点是每次生成一个token,利用之前生成的token优化当前输出,因此生成效果更自然但速度稍慢。

3.Codec模型解码器

  • 将最终生成的语音token序列解码为连续的语音信号流(waveform)。
  • 作用类似于将离散编码转回到音频波形,完成语音生成。

3. 语音流生成

  • 过程概述
    • AR解码器生成语音token序列。
    • Codec模型根据固定大小的语音token块,将token逐步解码为流式的语音信号。
  • 为什么是流式生成
  • 为了减少生成延迟,Freeze-Omni使用分块方式生成语音流。
  • 每一块语音token生成后即可解码为语音信号,用户可以实时听到部分生成的语音。

总结

Freeze-Omni通过单码本Codec模型压缩语音表示,结合NAR和AR解码器生成高质量语音token,最终通过Codec解码器将token转为语音流。这种基于token的解码结构能够在效率与质量之间取得平衡。

三阶段训练策略

第一阶段

  • 使用单码本(single-codebook)codec模型,仅通过语音数据训练。
  • 单码本减少系统复杂性和延迟。

第二阶段

  • 构建大规模文本-语音配对数据,将文本通过LLM的tokenizer转为文本token。
  • NAR 和 AR 解码器共享相同的参数,以简化模型设计
  • 文本token经嵌入层转为语义特征,输入到NAR解码器,AR解码器使用teacher-force方式预测语音token(Teacher-Force 是一种在Sequence-to-Sequence模型训练中常用的技巧,主要用于生成任务中。其核心思想是:在模型训练时,不使用模型先前生成的输出作为下一步的输入,而是直接使用Ground Truth作为下一步的输入。),标签为第一阶段codec模型提取的语音token。

这一阶段通过文本 Token 到语音 Token 的映射,建立从文本模态到语音模态的生成能力。

第三阶段: 模型架构

1.NAR前缀语音解码器(NAR Prefix Speech Decoder) (是唯一可训练的模块,用于适配LLM隐藏状态):

  • 新增的解码器,用于建模LLM输出的隐藏状态。
  • 它的输出 kv-cache 将作为输入传递给第二阶段训练好的 NAR 语音解码器。

2.NAR语音解码器

  • 在第二阶段已完成训练,用于解码文本 token。
  • 利用 NAR 前缀解码器的 kv-cache 作为额外输入,提升对隐藏状态的理解。

3.AR语音解码器

  • 用于生成最终的语音 token。
  • 标签为:
    • 使用 TTS 系统将 LLM 输出文本转为语音数据。
    • 再通过第一阶段训练好的 codec 模型,将语音数据转为语音 token。

总的来看,需要通过第三阶段训练 NAR 前缀解码器,将语音解码器与 LLM 输出紧密耦合。

双工对话设计详解

1. 分块状态预测方法

  • 触发机制
    • 使用声学VAD模块检测语音流的起始点。
    • 当VAD模块被触发时,语音流会以“分块(chunk)”形式输入到 Freeze-Omni。

VAD(Voice Activity Detection,语音活动检测) 是一种用于判断音频中是否存在语音活动的技术。它的主要 作用是从音频信号中区分语音和非语音部分,比如背景噪声或静音区域。

  • 状态分类器
    • 状态 0:当前 LLM 能继续接收语音输入。
    • 状态 1:当前语音分块是结束语音的最后一块,并表示用户将打断对话,LLM 会开始一个新的生成阶段。
    • 状态 2:当前语音分块是结束语音的最后一块,但不需要打断对话。
    • 在LLM的最后一层隐藏状态后添加一个分类层,用于预测每个语音分块的状态。
    • 定义三种状态:
  • 分块处理

当状态为 1 或 2 时,系统会停止将语音流发送给 Freeze-Omni,并重置 VAD 模块以准备接收新的语音输入。

  • 训练策略

语音输入的第三阶段中完成,使用多任务优化方法,联合训练状态分类层和 LLM。 状态标签仅在每个语音分块的最后一帧有效。

2. “模型即服务”策略

  • 多模型并发运行
    • 同时启动多个 Freeze-Omni 实例,将其作为一个服务器。
    • 当用户的 VAD 被触发时,语音流以分块形式发送到服务器。
    • 服务器调度空闲模型来处理当前语音分块。
  • 缓存管理
    • 推理过程中,语音编码器和 LLM 的 kv-cache 与 CNN 缓存独立存储。
    • 服务器仅需为每个用户保存其推理缓存,无需绑定某个具体模型。
  • 灵活响应
    • 任何服务器上的模型都可以响应任意用户的语音分块,无需指定固定的“监控模型”或“生成模型”。

3. 流程概述

  • 用户语音流通过 VAD 模块检测起始点,进入分块处理流程。
  • 每个分块通过 Freeze-Omni 的语音编码器和 LLM,并在最后一帧输出状态预测结果。

根据预测状态

  • 状态 0:继续接收语音流。
  • 状态 1 或 2:停止语音流,重置 VAD 模块。

利用“model as a server'”策略,同时部署多个模型,由空闲模型高效处理多用户请求。

4. 优势

  • 实时性:通过分块处理和状态预测,实现低延迟的语音交互。
  • 灵活性:服务器无需绑定特定模型,增强了系统的扩展性和资源利用率。
  • 自然对话:支持用户打断对话或自然结束语音流,使 Freeze-Omni 的对话风格更贴近真实场景。

实现配置

数据集

1.多轮问答数据

  • 从 moss-003-sft-data 数据集中随机选择 60,000 条多轮 Q&A 数据,并用 LLM 重新生成答案。
  • 使用零样本 TTS 系统将文本转换为语音。

2.语音输入建模

  • 阶段 1 和阶段 2:使用 110,000 小时中英双语语音-文本配对 ASR 数据。
  • 阶段 3:使用多轮 Q&A 数据中的语音输入与文本输出配对。

3.语音输出建模

  • 阶段 1 和阶段 2:使用 3,000 小时由零样本 TTS 系统生成的文本-语音配对数据。
  • 阶段 3:使用多轮 Q&A 数据中的文本输入与语音输出配对。

模型配置

1.LLM 后端

  • 使用 Qwen2-7B-Instruct 作为骨干模型,验证 Freeze-Omni 的方法。
  • Freeze-Omni 的训练过程中不对 LLM 参数进行更新,理论上支持任意 LLM。

2.语音编码器

  • 使用多层卷积(4 倍下采样)和 24 层 Transformer,隐藏层大小为 1024。
  • 适配器采用多卷积层(2 倍下采样)。
  • 总参数量约 350M,输出帧率为 12.5Hz。

3.语音解码器

  • 使用 TiCodec 作为 codec 模型,单码本大小为 1024,语音 token 的频率为 40Hz。
  • 解码器包含 4 层 Llama 解码层,隐藏层大小为 896。
  • 总参数量约 120M,输出采样率为 24000Hz。

实验结果解析

语音输入结果

  • 在阶段 2 验证 ASR 的准确性,结果见表 1:
    • 动态分块训练(chunk size 可变)增强了模型的鲁棒性。
    • Chunk=∞ 的情况下性能优于 Chunk=4
    • 未使用动态分块但固定 chunk size 训练,性能较好但限制了灵活性。

语音输出结果

  • 验证语音解码器的语音输出准确性,使用 CER(字符错误率)评价:
    • 引入 LLM 隐藏状态作为 NAR 前缀解码器的输入后,语音解码器性能显著提升。
    • 增加 top-k 值增强了语音生成的鲁棒性(见表 2)。

语音问答结果

  • 验证模型在多模态问答任务中的表现(见表 3):
    • Freeze-Omni 在三个数据集(Web Questions、LlaMA Questions 和 Trivia QA)上都展现出优秀的性能。
    • 与骨干 LLM 的准确率差距显著小于其他模型,表明 Freeze-Omni 能够在语音和文本模态中保持相同水平。

语音to文本相关知识

简单术语解析

1. ASR(自动语音识别)

ASR (Automatic Speech Recognition) 是一种将语音信号转换为对应文本的技术。在Freeze-Omni中,ASR的主要作用是处理语音输入并将其转换为模型可处理的文本内容,从而实现语音到文本的映射。

2. TTS(文本到语音转换)

TTS (Text-to-Speech) 是一种将文本信息转换为语音输出的技术。在Freeze-Omni中,TTS主要用于将LLM生成的文本答案转为语音输出,实现文本到语音的自然连接。

3. CTC损失函数

CTC (Connectionist Temporal Classification) 是一种广泛应用于语音识别任务(ASR)的损失函数,适用于输入和输出长度不匹配的情况。CTC的基本思路是:

  • 为每一帧输入生成一组可能的输出。
  • 允许输出中插入“空”标记(blank)来对齐时间步,解决语音输入与文本输出长度不一致的问题。
  • 通过动态规划计算所有可能路径的概率并最大化正确路径的概率。

CTC核心公式: 假设输入序列为 ,输出序列为 ,模型的输出概率为 (是对齐路径),CTC目标是最大化输出序列 的概率:

其中,表示所有可能对齐的路径集合。

总结

  • ASR提供语音转文本能力,是Freeze-Omni输入语音处理的第一步。
  • TTS提供文本转语音能力,用于生成自然语音输出。
  • CTC损失是Freeze-Omni训练语音编码器的关键技术,通过对不匹配长度的输入输出进行对齐,优化模型对语音的语义理解能力。

深度学习与NLP
专注深度学习、NLP相关技术、资讯,追求纯粹的技术,享受学习、分享的快乐。
 最新文章