Mini-Omni 语言模型在流式传输中边思考边听说应用

news2024/11/17 21:30:51

引入简介

Mini-Omni 是一个开源的多模态大语言模型,能够在思考的同时进行听觉和语言交流。它具有实时端到端语音输入和流媒体音频输出的对话能力。

语言模型的最新进展取得了显著突破。GPT-4o 作为一个新的里程碑,实现了与人类的实时对话,展示了接近人类的自然流畅度。为了实现这种人机交互,模型需要直接通过音频模态进行推理,并在流式传输中生成输出。然而,目前的学术模型通常依赖额外的文本转语音(TTS)系统进行语音合成,从而引入了不必要的延迟。本文介绍了 Mini-Omni,一种基于音频的端到端对话模型,能够实现实时语音交互。为实现这一目标,我们提出了一种文本指导的语音生成方法,并在推理过程中采用了批处理并行策略,以进一步提升性能。我们的方法不仅有助于在最小化退化的同时保留原始模型的语言能力,还使得其他工作能够建立实时交互能力。我们将这种训练方法称为“Any Model Can Talk”。此外,我们引入了 VoiceAssistant-400K 数据集,用于微调针对语音输出优化的模型。Mini-Omni 是第一个完全端到端的开源实时语音交互模型,为未来的研究提供了宝贵的潜力。

图1:Mini-Omni模型架构。

随着大型语言模型的快速发展,模型的能力不断增强,例子包括 Llama 3.1 [Meta, 2024]、Mix [Mix, 2024]、Qwen-2 [Yang et al., 2024a] 以及著名的 GPT-4。这些模型不仅在文本处理上表现出色,还开始掌握对其他模态的理解,如 LLaVA [Liu et al., 2024]、Qwen2-Audio [Chu et al., 2024] 和视频美洲驼 [Zhang et al., 2023b]。尽管如此,一个关键挑战仍然阻碍了它们在日常应用中的广泛集成,那就是实时语音交互能力。

GPT-4o [OpenAI, 2024] 是第一个具备实时多模态语音交互功能的模型,它能够处理视觉、音频和文本信息,并实现实时语音对话,尽管它仍为闭源代码。其他模型通常采用两种方法来实现语音能力:一种是级联方法,其中语言模型生成文本,随后由文本到语音(TTS)模型进行音频合成。

  1. 介绍了 Mini-Omni,这是第一个具备音频输入和流输出功能的开源端到端多模态大型模型。
  2.  提出了独特的文本指示并行生成方法,使语音推理输出与文本功能对齐,实现了最小数据需求。
  3.  增强了延迟并行性,加速了音频推理速度。
  4.  引入了“任何模型都可以说话”的创新方法,通过训练和推理提升性能,无需改变大型模型架构。5) 采用了包括退火和SFT在内的三阶段训练过程,对语音到文本和文本到语音适配器进行优化。
  5. 发现了现有开源QA数据集的不足,提出了用于语音模型输出的专用数据集——语音助手-400k,以支持音频助手的微调。

二、音频语言建模

1、原文这样子介绍的:

2、解码策略

解码策略音频生成与文本指令。语言模型经历了实质性的进步,在文本模式中展示了特殊的推理能力。作为回应,Mini-Omni进行了重组,通过文本-音频并行解码方法将这些推理能力转移到流音频输出。该方法同时输出音频和文本令牌,以及通过文本到语音合成生成的音频,确保实时交付,同时利用基于文本的推理优势。为了与大型模型的输入对齐,在生成下一个标记之前,将对并行生成的所有序列进行求和,如图1所示。这种方法使模型能够在聊天场景中以最小的第一令牌延迟实现实时语音输出。文本延迟并行解码。并行生成首先由MusicGen [Copet等人,2024]引入,以加速音乐生成过程,我们已经将这种方法集成到文本模式中,以增强推理能力。并行译码是可行的,因为音频标记码本是在语言模型训练中使用的典型方法。

图2: Mini-Omni在批处理并行生成技术中还结合了文本指导机制。

批处理并行解码。虽然之前引入的并行生成方法有效地将推理能力从文本模态转移到音频模态,但我们的实验表明,该模型的推理性能在文本和音频任务之间仍然存在差异,音频响应倾向于更简单。我们假设这是由于模型容量的限制或音频数据的不足。为了解决这个问题,并进一步增强模型在对话过程中的推理能力,最大限度地转移其基于文本的能力,我们实验性地采用了一种批处理方法。考虑到模型在文本模态中的较强性能,我们将单个输入的推理任务扩展为2:一个样本同时需要文本和音频响应,如前所述,而另一个样本只需要文本响应,专注于基于文本的音频合成。但是,第一个样本输出的文本标记被丢弃,第二个样本输出的文本被嵌入到第一个样本对应的相应文本标记位置中。

3、任何模型都可以说话

三阶段培训。我们的训练方法分为三个不同的阶段:

(1)模态对齐。这一阶段的目标是增强文本模型理解和生成语音的能力。Mini-Omni的核心模型完全冻结,只能使用两个适配器。在这一阶段,我们使用来自语音识别和语音合成的数据来训练模型的5个。

(2)适应能力的培训。一旦新的模态与文本模型的输入对齐,适配器就会被冻结。在这一阶段,我们只关注于在给定的音频输入时训练模型的文本能力,因为音频输出是简单地从文本合成的。该模型使用来自语音识别、语音问题回答和文本回答任务的数据进行训练。

(3)多模态的微调。在最后一个阶段,使用综合数据对整个模型进行了微调。此时,所有的模型权值都被解冻和训练。因为主要的模态对齐任务是在适配器传输期间处理的模型输入ID。给定8个并行输出序列,输入还需要8个序列,这导致了显著的复杂性。因此,我们在这里简要地概述了模型输入的组织。该模型可以接受文本或音频输入,它们被放置在相应的模态序列中。对于音频输入,输入令牌和耳语特征通过适配器转换为相同维度的张量,然后连接。根据任务的不同,我们将<回答>特殊标记放置在不同的位置来指导模型的输出,实现多模态输出。一些任务的组织方式如图4所示。在被输入模型之前,所有的序列都被求和并平均以整合特征。

在本节中,我们将介绍我们的培训方法。我们的方法旨在尽可能多地保留原始模型的功能。这首先是因为我们的基础模型的强大性能,其次是因为我们的方法可以应用于其他擅长文本输出但缺乏健壮的语音交互能力的工作。音频编码:音频输入主要集中于从输入的音频中提取特征,与选项包括休伯特或一个单独的预先训练的音频编码器。鉴于我们对语音输入的关注,低语[雷德福等人,2023]和qwen2-音频[Chu等人,2024]也证明了对一般音频任务的有效性能。对于音频输出,使用多码本方法选择音频令牌可以更好地捕获音频细节。我们尝试了音频标记的扁平化建模,但它导致了过长的标记,这不利于流媒体,并导致不稳定的学习。相反,受MusicGen启发[Copet et al.,2024]的并行解码,采用了与文本条件相结合的延迟模式,如图2所示。

4、数据集

为了建立基本的语音能力,我们使用三个语音识别数据集对模型进行训练,总计约8000小时,重点是语音理解和合成。对于文本模式,我们整合了来自开放-Orca[OpenOrca]数据集的200万个数据点,并将它们与其他模式集成,以保持文本的准确性。Moss的SFT数据集[Sun等人,2024]利用零镜头TTS合成了150万对语音QA对。为了避免不合适的代码和符号输出,我们使用GPT-4o创建了Voice助手-400k数据集。数据集的详细信息见表1。阶段1涉及到训练语音适配器的ASR数据。阶段2使用TextQA和AudioQA用于音频/文本输入和文本响应训练。第三阶段侧重于使用AudioQA的音频模态的多模态交互。最后阶段的培训包括退火和使用语音QA的微调。

4.2训练参数我们的模型是在8A100gpu上进行训练的,使用一个余弦退火学习速率调度器,最小学习速率为4e-6,最大学习速率为4e-4。每个训练阶段由40,000步组成,每步的批大小为192。基本语言模型采用了Qwen2-0.5B [Yang等人,2024a],一个具有24个块、内部维度为896的变压器架构。语音编码器使用耳语小编码器,ASR适配器通过两层MLP连接,而TTS适配器通过添加6个额外的变压器块,扩展了原始模型。在微调期间,我们使用从4e-6到5e-5的学习率。

4.3实验结果我们首先评估了该模型在ASR任务上的表现,以评估其语音理解能力。语音识别能力的基本实验是使用了列表语言[Panayotov等人,2015]的四个测试集进行的:测试清洁、测试其他、开发清洁和开发其他。结果如表2所示,我们比较了我们采用的语音识别系统wavv2vec2[Baevski等人,2020]和低语,以及VITA [Fu等人,2024]的准确性。

4.4在这里,我们提出了几个案例来证明Mini-Omni在语音理解和推理方面的能力。这些例子表明,与基于文本的推理相比,基于语音的推理稍弱,突出了批生成的必要性。

这些特性描述了一个先进的语音识别与合成系统,具备以下能力:

  1. 实时语音到语音的会话能力:该系统能够实时地将输入的语音转换为另一种语言的语音输出,而无需额外的自动语音识别(ASR)或文本到语音(TTS)模型。这意味着用户可以直接进行跨语言对话,系统能够即时理解和翻译,并以语音形式反馈,极大地促进了不同语言背景人群之间的即时交流。

  2. 边思考边说话的能力:系统具备同时生成文本和音频的能力。这意味着在处理用户输入的语音时,系统能够几乎同时地将其转换为文本(用于内部处理或显示)和语音(用于即时反馈或输出到其他系统)。这种特性对于需要快速响应的交互式应用场景尤为重要。

  3. 流式音频输出能力:系统支持流式音频输出,即能够连续不断地处理并输出音频流,而不是等待整个音频文件处理完成后再输出。这对于实时通信和流媒体应用至关重要,因为它能够确保音频传输的连续性和实时性。

  4. “音频到文本”和“音频到音频”批量推理功能:除了实时处理能力外,该系统还提供了批量处理模式,支持对大量音频数据进行“音频到文本”或“音频到音频”的转换。这种批量推理功能可以进一步提高处理效率,适用于需要对大量录音进行转录或翻译的场景。通过批量处理,用户可以在较短时间内获得大量数据的处理结果,从而加速工作流程并提高效率。

NOTE: need to unmute first.
 

主要代码:

import os
import lightning as L
import torch
import time
from snac import SNAC
from litgpt import Tokenizer
from litgpt.utils import (
    num_parameters,
)
from litgpt.generate.base import (
    generate_AA,
    generate_ASR,
    generate_TA,
    generate_TT,
    generate_AT,
    generate_TA_BATCH,
    next_token_batch
)
import soundfile as sf
from litgpt.model import GPT, Config
from lightning.fabric.utilities.load import _lazy_load as lazy_load
from utils.snac_utils import layershift, reconscruct_snac, reconstruct_tensors, ge

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2133282.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

69、Python番外篇:从编程范式看如何学习一门编程语言的精髓

引言 在之前的文章中&#xff0c;我们曾聊过如何学习一门编程语言&#xff0c;当时是从程序的构成的角度来分析、展开的&#xff0c;主要提及了数据的表达 数据的处理&#xff0c;也就是数据结构 算法的内容。这个角度对应到所有编程语言&#xff0c;基本都是适用的。但是&a…

认识泛型和包装类

认识泛型和包装类 包装类基本数据类型和对应的包装类装箱和拆箱自动装箱和自动拆箱 什么是泛型引出泛型语法 泛型类的使用语法示例类型推导 裸类型(Raw Type)说明 泛型如何编译的擦除机制 泛型的上界语法示例复杂示例 泛型方法定义方法示例使用类型推导和不用类型推导静态的泛型…

电脑安装OpenWRT系统

通过网盘分享的文件&#xff1a;OpenWRT 链接: https://pan.baidu.com/s/1nrRBeKgGviD31Omji480qA?pwd9900 提取码: 9900 下面开始教程&#xff1a; 1.先把普通U盘制作成一个PE启动盘&#xff0c;我用的是微PE工具箱&#xff0c;直接安装PE到U盘。 2.把写盘工具和openWRT系统…

项目中使用简单的立体3D柱状图,不用引入外部组件纯css也能实现

在一些项目需求中&#xff0c;可能会遇到下面这种场景&#xff0c;3d柱状图来展示百分比&#xff0c;但是又不想引入外部组件&#xff0c;下面就用纯css给大家封装了一个组件 先赞后看&#xff0c;养成习惯 <template><view class"lui-column-bg" :sty…

DApp开发入门指南:从概念到实践

随着区块链技术的不断发展&#xff0c;去中心化应用&#xff08;DApp&#xff09;逐渐成为科技领域的热门话题。DApp不仅打破了传统应用的中心化控制&#xff0c;还为开发者和用户提供了更高的安全性、透明度和自治性。本文将带你深入了解DApp的开发流程以及如何设计合理的DApp…

SIMCOM-A4767C-4G模块ARM开发板上网配置流程

进入linux系统命令行后。 配置4G网卡 1、打开串口&#xff0c;会进入编辑模式。 busybox microcom /dev/ttyUSB22、设置网络模式&#xff0c;回复OK表示设置成功。 ATDIALMODE03、设置ECM模式&#xff0c;回复OK表示设置成功。设置成功后4g会重启。 AT$MYCONFIG"USB…

Vue3:el-table实现日期的格式化

后端如果返回的是时间戳&#xff0c;需要我们进行日期格式化 例如&#xff1a;2024-09-11T14:19:14 定义一个日期解析的工具组件 export function formatDateAsYYYYMMDDHHMMSS(dateStr: any) {const date new Date(dateStr);const year date.getFullYear();const month S…

【已解决】请教 “Sa-Token 集成 xxl-job,报错:非 web 上下文无法获取 HttpServletRequest” 如何解决

1. xxl-job 报错日志 2024-09-11 17:19:04 [com.xxl.job.core.thread.JobThread#run]-[133]-[xxl-job, JobThread-3-1726046344528] <br>----------- xxl-job job execute start -----------<br>----------- Param: 2024-09-11 17:19:04 [com.xxl.job.core.thread…

使用mingw64 编译 QT开发流程

1. 安装QT5 QT5.12.12 安装时选择mingw的开发包 2. 使用qtdesigner 进行ui设计 生成ui文件 3. 将ui文件转换为.h 文件 uic mywindow.ui -o ui_mywindow.h代码中指向生成的 UI 对象的地方 要改成这个Form 4. 编译 创建mainwindow.cpp #include "mainwindow.h"…

PROTOTYPICAL II - The Practice of FPGA Prototyping for SoC Design

The Art of the “Start” The semiconductor industry revolves around the “start.” Chip design starts lead to more EDA tool purchases, more wafer starts, and eventually to more product shipments. Product roadmaps develop to extend shipments by integrating…

Ton的编译过程(上)

系列文章目录 FunC编写初始准备 文章目录 系列文章目录预先准备第一个FunC合约深入compileFunc的内部compileFunc初探艾丽卡的疑惑package.json 初览index.js 预先准备 首先请大家跟着艾丽卡一步一步的完成FunC编写初始准备 这里面环境的搭建。 接下来&#xff0c;请做好下面…

博弈论中纳什均衡和囚徒困境的探索性分析

一. 纳什均衡求解 纳什均衡&#xff0c;又称为非合作博弈均衡&#xff0c;是博弈论中的一个核心概念。纳什均衡描述的是在非合作博弈中&#xff0c;每个参与者都选择了自己的最优策略&#xff0c;并且考虑到了其他参与者的策略选择。在这种状态下&#xff0c;没有任何一个参与…

HAL库学习梳理——SPI

笔者跟着B站铁头山羊视频学习 STM32-HAL库 开发教程。下面对HAL库有关 SPI 课程知识和应用做一个梳理。 无流可省 1、SPI 总线基本原理 SPI总线&#xff08;Series Peripheral Interface&#xff09;串行外设接口&#xff0c;适用于高速、双向数据传输场景。 MOSI MISO SCK …

提权——Linux

一、系统漏洞提权 #kali的nmap命令 nmap -O 目标ip 通过当前系统的内核版本搜索当前系统的漏洞&#xff0c;进行利用 搜索漏洞 对linux系统的漏洞进行利用&#xff08;脏牛、脏管道等&#xff09; 利用漏洞搜索工具&#xff0c;搜索当前系统是否存在一些漏洞 linux-exp…

单值二叉树--(C语言)

题目如下&#xff1a; 如果二叉树每个节点都具有相同的值&#xff0c;那么该二叉树就是单值二叉树。 只有给定的树是单值二叉树时&#xff0c;才返回 true&#xff1b;否则返回 false。 示例 1&#xff1a; 输入&#xff1a;[1,1,1,1,1,null,1] 输出&#xff1a;true示例 2&a…

Linux - 探秘/proc/sys/net/ipv4/ip_local_port_range

文章目录 Pre概述默认值及其意义评估需求如何调整临时修改永久修改测试和验证 修改的潜在影响 Pre Linux - 探秘 Linux 的 /proc/sys/vm 常见核心配置 计划&#xff1a; 简要解释 /proc/sys/net/ipv4/ip_local_port_range 文件的功能和作用。介绍该文件的默认值及其影响。说明…

Java设计模式—面向对象设计原则(三) -----> 依赖倒转原则DIP(完整详解,附有代码+案例)

文章目录 3.3 依赖倒转原则(DIP)3.3.1概述3.3.2 案例 3.3 依赖倒转原则(DIP) Dependency Inversion Principle&#xff0c;DIP 3.3.1概述 高层模块不应该依赖低层模块&#xff0c;两者都应该依赖其抽象&#xff1b;抽象不应该依赖细节&#xff0c;细节应该依赖抽象。简单的说…

C++——深部解析哈希

好久不见给大家分享一张图片吧 目录 前言 二、库文件 1、哈希冲突 2 哈希函数 3、闭散列 三 、闭散列的实现和底层逻辑 1、哈希表&#xff08;闭散列&#xff09;的定义 2、哈希表&#xff08;闭散列&#xff09;的插入 3、哈希表&#xff08;闭散列&#xff09;的查找 4.哈希表…

解决Linux服务器上下载pytorch速度过慢的问题

需要下载的是GPU版本的pytorch&#xff0c;版本torch1.13.1cu116 尝试方法1&#xff1a; pip install torch1.13.1cu116 torchvision0.14.1cu116 torchaudio0.13.1 --extra-index-url https://download.pytorch.org/whl/cu116 但是默认是从官网下载&#xff0c;龟速到200kb/s左…