当前位置: 首页 > article >正文

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

读论文《Mini-Omni: Language Models Can Hear, Talk While Thinking in Streaming》

目前比较火的一篇论文,分享给大家

论文地址:2408.16725v2 (arxiv.org)

项目地址:https://github.com/gpt-omni/mini-omni

1. 引言

近年来,大型语言模型发展迅速,变得越来越强大。例如,Llama 3.1、Mixtral、Qwen-2和GPT-4等模型。这些模型开始掌握理解其他模态的能力,例如LLaVA、Qwen2-Audio和Video-llama等。尽管这些模型在特定任务上表现出色,但它们在实时语音交互能力上仍存在显著差距。GPT-4o是首个具有实时多模态语音交互能力的模型,但它是闭源的。其他模型通常采用两种方法来整合语音能力:级联方法(先文本生成再通过TTS模型合成音频)和端到端方法(如SpeechGPT)。然而,这些方法在实时反馈上仍有延迟。

为了解决这些问题,本文提出了Mini-Omni,这是一个端到端的、基于音频的对话模型,能够实现实时语音交互。通过提出文本指令的语音生成方法和批量并行策略,进一步提升了性能。此外,还引入了VoiceAssistant-400K数据集来微调模型,优化语音输出。

这种训练方法称为 “Any Model Can Talk”。感觉好厉害……

2. 相关工作

2.1 多模态理解

研究人员越来越关注于推进跨模态理解的统一模型。这些方法通常使用预训练的神经网络作为相关模态的编码器,并使用轻量级适配器将编码器的输出与语言模型的文本输入对齐。例如,LLaVA、Flamingo和BLIP用于视觉理解,而在音频领域,Whisper和Beats被用作编码器。

2.2 音频语言建模

最近,越来越多的研究使用音频标记化来弥合音频和文本之间的差距。音频标记化将连续的音频信号转换为离散的音频标记,使大型语言模型能够进行推理甚至跨模态交互。

2.3 实时人机交互模型

自从GPT-4o引入以来,实时对话模型取得了前所未有的成果,为用户输入提供近乎即时的语音反馈,标志着多模态大型模型的下一代重要里程碑。然而,这些模型的技术实现仍然是专有的。

3. Mini-Omni

Mini-Omni模型的核心创新在于提出了一种新的文本和音频同时生成的方法。这种方法假设文本输出具有更高的信息密度,允许使用较少的标记进行相同的响应。在生成音频标记时,模型有效地依赖于相应的文本标记,类似于在线TTS系统。

3.1 音频语言建模

论文提出了一种将连续语音信号转换为离散语音标记的方法,并使用这些标记进行建模。

Y =(y_i \in V_{txt}|i=1,...,t_{txt})表示来自文本词汇表V的文本华语,概率可以表示为

p(Y) = \prod _{i=1}^{t_{txt}} p(y_i | y_1,...,y_{i-1})

对于连续的语音信号,可以通过一个标记器(tokenizer)将其转换为离散的语音标记D =(d_i \in V_{dst}|i=1,...,t_{dst}) 其中的V是离散语音标记的词汇表。这些离散语音标记可以像文本一样在 V中被建模。

将文本和语音结合在一个新的词汇表V_{voxt} = V_{txt} \bigcup V_{dst},因此,可以对语音和文本标记的概率进行建模:

Z= (z_i \in V|i=1,....,t)

p(Z) = \prod _{i=1} ^t p(z_I|z_1,...,z_{i-1})

其中 ZZ 代表离散语音标记 D或文本标记 Y或 Y 和 D 的各种组合,。对于同时生成的音频和文本标记,负对数似然损失可以表示为:

L(T,A|C) = \sum _{j=1} ^m \sum_{i=1}^{n_j} log P(T_{i,j},A_{<i,j};X_j)

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

3.2 解码策略

  • 文本指令的音频生成:通过文本到语音合成同时输出音频和文本标记,确保实时交付,同时利用基于文本的推理能力。
  • 文本延迟并行解码:行解码首先由 MusicGen 提出,用于加速音乐生成过程。Mini-Omni 将这种方法整合到文本模态中,以增强推理能力。并行解码之所以可行,是因为语言模型训练中使用的音频标记码本通常由多层组成;同时生成所有层可以显著提高模型速度。对于实时语音输出模型,平行解码更加关键,允许在标准设备上每秒生成数百个音频标记。
  • 批量并行解码:尽管先前介绍的并行生成方法有效地将推理能力从文本模态转移到音频模态,但实验表明模型在文本和音频任务之间的推理性能仍然有所不同,音频响应往往更简单。为了解决这个问题并进一步增强模型在对话中的推理能力,最大化其基于文本的能力转移,论文实验性地采用了批处理方法。鉴于模型在文本模态中的更强性能,将单个输入的推理任务扩展到2的批处理大小:一个样本需要文本和音频响应,如前所述,而另一个样本仅需要文本响应,专注于基于文本的音频合成。然而,第一个样本的文本标记输出被丢弃,第二个样本的文本输出嵌入到第一个样本的相应文本标记位置中。同时,使用第二个样本的仅文本响应的内容流式传输第一个样本的音频;这个过程称为批处理并行解码。
Mini-Omni 将 text-instruct 机制与 Batch 并行生成技术相结合。

 3.3 Any Model Can Talk

在论文的这一部分,作者提出了一个创新的训练方法,称为 "Any Model Can Talk"。这种方法旨在将现有的文本能力强的语言模型通过最小的修改和额外的训练,快速扩展到具有语音交互能力。以下是该方法的详细步骤和关键特点:

音频编码

音频输入主要关注从输入音频中提取特征,可以选择使用如Hubert或独立预训练的音频编码器。鉴于模型专注于语音输入,Whisper和Qwen2-audio等模型也展示了对一般音频任务的有效性能。对于音频输出,选择具有多码本方法的音频标记能更好地捕捉音频细节。实验表明,音频标记的平坦化处理会导致过长的标记,这对流式处理不利并导致学习不稳定。因此,采用了受MusicGen启发的并行解码,使用延迟模式结合文本条件。

三阶段训练

训练方法分为三个阶段:

Mini-Omni' 三个阶段的训练阶段:模态扩展、模态适应训练和整体微调。

  1. 模态对齐(Modality Alignment)
    • 这一阶段的目标是增强文本模型理解和生成语音的能力。
    • Mini-Omni的核心模型完全冻结,仅在两个适配器中允许梯度传递。
    • 使用语音识别和语音合成的数据来训练模型的语音识别和合成能力。
  2. 适配训练(Adaption Training)
    • 一旦新模态与文本模型的输入对齐,适配器被冻结。
    • 此阶段仅专注于训练模型在给定音频输入时的文本能力,因为音频输出仅从文本合成。
    • 使用语音识别、口语问答和文本响应任务的数据进行训练。
  3. 多模态微调(Multi-modal Finetuning)
    • 最后阶段,使用全面数据对整个模型进行微调。
    • 此时,所有模型权重都未冻结并进行训练。
    • 由于主要的模态对齐任务在适配器训练期间已经处理,因此最大程度地保留了原始模型的能力。

模型输入ID

由于存在八个并行输出序列,输入也需要八个序列,导致复杂性显著增加。模型可以接受文本或音频输入,这些输入被放置在相应的模态序列中。对于音频输入,输入标记和Whisper特征通过适配器转换为相同维度的张量,然后进行连接。根据任务的不同,将特殊标记 <answer> 放置在不同的位置以引导模型的输出,实现多模态输出。

4. 实验

论文描述了用于建立基础语音能力的训练数据集、数据处理方法和超参数。然后评估了模型在核心任务(如语音识别)上的性能,并提供了几个用例示例。

5. 结论

本文介绍了Mini-Omni,这是首个具有直接语音到语音能力的多模态模型。通过提出一种并行文本和音频生成方法,利用最小的额外数据和模块,快速将语言模型的文本能力转移到音频模态,支持高模型和数据效率的流式输出交互。探索了文本指令流式并行生成和批量并行生成,进一步增强了模型的推理能力和效率。通过仅使用0.5亿参数的模型成功解决了具有挑战性的实时对话任务。开发了Any Model Can Talk方法,基于前后适配器设计,以最小的额外训练促进其他模型的快速语音适应。此外,还发布了VoiceAssistant-400K数据集,用于微调语音输出,旨在最小化代码符号的生成,并以语音方式协助人类。所有数据、推理和训练代码将逐步在GitHub上开源。


http://www.kler.cn/news/310633.html

相关文章:

  • Docker本地部署Chatbot Ollama搭建AI聊天机器人并实现远程交互
  • Spring boot aop集成(面向切面的编程)
  • TMStarget学习——T1 Segmentation数据处理及解bug
  • js进阶-作用域是什么
  • idear导入他人项目如何快速运行
  • 【PostgreSQL】安装及使用(Navicat/Arcgis),连接(C#)
  • 环境搭建2(游戏逆向)
  • 深入解析:ECMAScript与JavaScript的区别与联系
  • 江科大笔记—OLED显示屏
  • golang的sync包浅析
  • ARM驱动学习之 IOremap实现GPIO 读
  • 安卓13去掉下拉菜单的Dump SysUI 堆的选项 android13删除Dump SysUI 堆
  • react hooks--概述
  • Linux从入门到开发实战(C/C++)Day12-ICMP协议
  • linux-软件包管理-编译与安装源码包
  • 人工智能-GPU版本机器学习、深度学习模型安装
  • swc 编译 es6为commonjs
  • 「数组」堆排序 / 大根堆优化(C++)
  • 双端队列double-ended queue
  • c/c++语言中extern的用法(VS编译)
  • 代码结构之结构体
  • 算法面经手撕系列(2)--手撕BatchNormlization
  • 【每日一诗】【诗词创作】【诗】《雨前秋夜》
  • 浅谈Linux中的环回设备
  • C++将32位深图片处理成灰度图
  • 构建自己的文生图工具:Python + Stable Diffusion + CUDA
  • 基于PHP+MySQL组合开发的在线客服源码系统 聊天记录实时保存 带完整的安装代码包以及搭建部署教程
  • JAVA-集合相关
  • 功能测试干了三年,快要废了。。。
  • 工号不够用了怎么办? - 华为OD统一考试(E卷)