大模型之二十九-语音识别Whisper推理加速

在上一篇博客《大模型之二十八-语音识别Whisper进阶》中我们留了一个尾巴,就是在流式场景以及如何提升推理速度。

流式场景

流式场景分两种,一种是伪流式一种是真流式,伪流式就是bilibili或者YouTub,终端用户在观看视频的时候,是从服务器或者CDN节点下载视频,其会缓存一些数据,对于真流式场景就是抖音直播这些场景,但是双向视频通讯的会议场景对延迟要求更为苛刻。
在视频会议场景,所有传输都没法类似制作好的视频事先缓存,因网络拥塞、数据传输路径的长度、服务器处理时间会导致通讯延迟,延迟是指数据从视频会议的一端源头传到另一端所需的时间,通常以毫秒(ms)为单位。在实时通信中,尤其是在视频会议中,较低的延迟是保证流畅通信的重要因素。
延迟对通话体验的影响:

延迟影响
低于 150 ms良好的,用户通常不会感觉到明显的延迟,类似面对面的交流。
150 ms 到 400 ms大多数情况仍可接受,在快速互动的对话中轻微不自然
400 ms 到 500 ms对话流畅性可能受影响,表现为更频繁地进行确认,以确保信息传达
超过 500 ms较大影响,用户可能会感到沟通困难,需要等待对方回应,这会打断对话的连贯性。
超过 800 ms不可接受,严重影响沟通效率和用户满意度。在这种延迟下,进行流畅的对话几乎是不可能的

通话场景下延迟是最为苛刻的,比YouTub视频平台要求严苛的多,虽然YouTub在ASR以及字幕翻译的时候会采用用户首次触发的机制启动字幕(当上传时未配置字幕时,将启用ASR服务)以减少服务器和存储开销,并在之后会类似上传的字幕一样存储字幕,在该视频的后续字幕请求的时候,直接下发字幕而非再次启用ASR服务。

但是本质上识别的过程和视频会议类似,这里衍生出两个问题1.如何加速原始模型的的推理速度(原始模型的输入窗长是30s),2.如何在流式场景使用?

原始模型加速

模型推理加速的核心思想是更加高效的使用运算和存储资源,对于大规模部署应用场景,目前底层一般是c/c++,服务端上层是c++/java/go之类的,所以这里以c/c++为例,不论是Whisper.cpp还是faster-whisper底层的核心都是c/c++。
对一个13分钟的音频,faster-whisper加速情况如下:
在这里插入图片描述

faster-whisper是基于CTranslate2库的,如果是考虑代码复用和模型支持的种类可以考虑faster-whisper,因为比较类似,这里以更纯粹的Whisper.cpp说明。
Whisper.cpp的结构如下:

  • The core tensor operations are implemented in C (ggml.h / ggml.c)
  • The transformer model and the high-level C-style API are implemented in C++ (whisper.h / whisper.cpp)
  • Sample usage is demonstrated in main.cpp
  • Sample real-time audio transcription from the microphone is demonstrated in stream.cpp
  • Various other examples are available in the examples folder
    因为神经网络主要是矩阵运算,ggml是利用硬件高效实现矩阵运算的具体实现,其他的都是封装和使用。
    GGML特点如下:
    Written in C
    16-bit float support
    Integer quantization support (4-bit, 5-bit, 8-bit, etc.)
    Automatic differentiation
    ADAM and L-BFGS optimizers
    Optimized for Apple Silicon
    On x86 architectures utilizes AVX / AVX2 intrinsics
    On ppc64 architectures utilizes VSX intrinsics
    No third-party dependencies
    Zero memory allocations during runtime

还有一类的优化是从模型侧入手的,比如whisper-medusa,其在原有模型的基础上,增加了10个Medusa Head,以增加自回归模型的并行输出能力。
在这里插入图片描述

Steam流式

因为实时性要求,对于视频会议识别长度(输入长度)一般都在500ms左右,也就是1~3个字左右,但是如果仅仅输入500ms左右时长的音频,比如“办理登记”和“办理登机”非常接近,但是如果送入的仅仅就是500ms这么短的音频,就很可能导致识别错误,如果能够增加上下文,比如收入的是:“他到飞机场,办理…"这时,识别的准确性会高很多,这就是滑动窗口。

  1. 有效识别长度:如上面对于视频会议中选择的500ms,YouTub可以选择3~5秒这个长度可以根据实际需求和模型性能进行调整。
  2. 输入长度: 一般ASR系统输入长度为5至30秒的音频,对于Whisper可以选择30秒。

以1秒有效识别长度,15秒输入长度为例,针对视频会议是先攒段时间,如3秒钟(太短了就算识别也是没有意义的),其中一段是:20秒-35秒,识别的包括了第35秒的音频,然后下一段是21秒~36秒,识别的结果包括了36秒,这被称为滑动窗口的重叠(这里重叠长度是14秒),这意味着他们最终输出的文本绝大多数是重复的。

输出长度和去重策略

由于滑动窗口的重叠,相邻的窗口可能会生成重复的字幕内容。因此,需要一种机制来识别和合并重复的输出,以提供清晰连贯的字幕。

  1. 去重逻辑
    • 时间戳对比:每个字幕片段都应该与时间戳关联。通过比较当前字幕片段的时间戳与前一片段的时间戳,可以判断是否存在重复。
    • 文本对比:对于时间戳相近的字幕片段,可以进行文本内容的对比,确定是否有重复或部分重复。部分重复的片段可以通过字符串操作进行合并处理。
  2. 输出更新
    • 每次生成新的字幕片段后,都应该对现有的输出进行更新,这可能涉及添加新片段、删除旧片段或合并重复片段。
    • 更新策略应确保字幕的流畅性和准确性,避免因重复或过时的信息造成观众的困扰。

stream

./stream -m ./models/ggml-base.en.bin -t 8 --step 500 --length 5000

比如这里的选择的有效识别长度是500ms,而识别的输入长度是5秒钟,当然,也可以使用VAD方法减少网络传输的复杂,节省服务端资源。

至此,基本上我们将ASR的开源最强多语言Whisper模型fine-tune,服务端加速、实时/伪实时场景都涵盖,另外一些针对问题规模,诸如数据量和模型size选择,服务端并发、业务场景参数调优等等这些和解决问题息息相关,需要实践的积累。

欢迎关注、点赞、收藏,以及时收到推送,接下来,我将分享和语音(音乐在后面)生成的,TTS(Text to speech)以及VC(voice clone),这个应用场景包括解说配音(影视解说就那几个比较有名的配音)、有声书、对话机器人、机器情感伴侣、俱身机器人等场景应用非常广泛。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能再次进化 善用AI提升营运效率

人工智能无疑为我们的生活带来不少便利,也为商界和社会发展作出了重大贡献。事实上,它的起源最早可以追溯到70年前,只可惜过往的 AI 技术尚未如现时般成熟,可以做到的事也远比现在少;直至近期的 AI 技术取得了重大突破…

人工智能领域正经历模型规模变革,小型语言模型(SLM)崛起,挑战“规模至上”观念。

在人工智能领域,一场关于模型规模的深刻变革正在悄然发生。长久以来,科技巨头们热衷于庞大语言模型(LLM)的开发竞赛,但如今,小型语言模型(SLM)正以其独特的优势逐步崭露头角&#xf…

【qt】qss使用

1.按钮设置颜色 ui->pushButton->setStyleSheet("QPushButton { color : red;}");也可以通过rgb来设置 ff表示红色拉满,gb为0当然是红色 这只是针对pushbutton对象的控件设置的,如果我想设置所有的按钮空间都是一个颜色 这是通过设置界…

dubbo:dubbo服务负载均衡、集群容错、服务降级、服务直连配置详解(五)

文章目录 0. 引言1. dubbo负载均衡1.1 负载均衡算法1.2. dubbo负载均衡使用1.3 自定义负载均衡策略 2. dubbo服务容错2.1 8种服务容错策略2.2 自定义容错策略 3. dubbo服务降级(mock)4. dubbo服务直连5. 总结 0. 引言 之前我们讲解了dubbo的基本使用&am…

使用 AI进行绘画初体验

大家好啊,我是董董灿。 AI 绘画的效果是真的不错,最近在查找AI相关技术文章时,总是会时不时的发现一些好玩的 AI 应用,而且大多数都是免费的。 今天就给大家介绍如何使用 MidJourney 来完成 AI 绘画的网站。 MidJourney 本身是…

6种有效的时间序列数据特征工程技术(使用Python)

在商业分析中,"时间"是一个核心概念。我们基于时间组件来分析销售数据、收入、利润、增长,甚至进行预测。然而,对于初学者来说,这可能是一个复杂的主题。在处理时间敏感的数据集时,需要考虑时间序列数据的多…

Unet改进12:添加PCONV||减少冗余计算和同时存储访问

本文内容:添加PCONV 目录 论文简介 1.步骤一 2.步骤二 3.步骤三 4.步骤四 论文简介 为了设计快速的神经网络,许多工作都集中在减少浮点运算(FLOPs)的数量上。然而,我们观察到FLOPs的这种减少并不一定会导致类似程度的延迟减少。这主要源于低效率的每秒浮点操作数(FLOP…

STM32——GPS模块(GY-NEO-6M)

1连接 1-1 使用 USB-TTL 工具,安装好驱动,可以在”设备管理器看到对应COM”按照如下链接测试模块: USB-TTL GPS 模块 3.3V--------------------------------->VCC GND------------------------------>GND RXD--------------------…

Linux安装Hadoop(单机版)详细教程

目录 一、JDK安装 1、下载JDK安装包 2、解压下载的JDK安装包 3、移动并重命名JDK包 4、配置Java环境变量 5、验证安装是否成功 二、Hadoop安装 1、下载Hadoop安装包 2、解压Hadoop安装包 3、配置Hadoop环境变量 4、修改配置文件 5、验证Hadoop是否安装成功 三&…

使用3D数字人做视频

用3D数字人做视频 漂亮精致 3D数字人定制4 动作流畅、音乐上的表现 thatgirl 支持私人定制模型 你愿意捐献所有的财产吗 想搭建这样的数字人的请和我们联系 使用3D数字人做视频https://www.jinshuangshi.com/forum.php?modviewthread&tid248 (出处: 金双石科技)

力扣经典题目之->二叉树的前序遍历(中序后序同理)

一:题目 解释: 1: 题目的要求就是我们return 一个数组,该数组里面的元素及其顺序就是 前序遍历二叉树 的元素及其顺序 比如:示例1的树,前序遍历的顺序应该是1 2 3,那么return 的数组里面的元素…

智慧高校迎新服务平台的设计与实现---附源码92489

摘要 随着高校规模的不断扩大和新生人数的增加,传统的手工登记和管理方式已经无法满足高效、准确的需求。为了提升高校新生报到迎新工作的效率和质量,本研究设计开发了一套基于SSM框架的智慧高校迎新服务平台的设计与实现。系统通过信息技术的应用&#…

12-使用gateway作为微服务网关

本文介绍spring gateway的使用,包括配置文件的使用和调试跟踪,让大家了解spring gateway的基本用法。如果不了解什么是微服务网关,就先查查资料,网关相对来说是比较重要的微服务组件。 0、环境 springboot 2.4.2springcloud gat…

Minkowski分形电路生成工具[程序附后]

此工具用于生成Minkowski分形电路,应用领域可参考分形电路的纪录片或CNKI论文。运行环境在Altium Designer中,可用于Altium Designer全系列的版本中。 程序界面如下图所示,可以支持外框和迭代次数的更改。 程序下载链接: Minkows…

图片拼图怎么做?4个方法打造具有高级感的拼图作品

被阿勒泰的日落治愈了,旅行中的每一刻都值得珍藏。 这次的阿勒泰之行,我不仅带回了一堆美好的回忆,还有手机里满满的精彩瞬间。从壮丽的山川到静谧的湖泊,从晨曦初现到夜幕降临,每一帧都是大自然的馈赠。但是&#xf…

三天速成数学建模国赛国奖全攻略

这里写目录标题 国赛考点🗒️🗒️01 国赛是如何评奖的?02 国赛历年题型和模型算法1)国赛赛题特点2)历年国赛赛题类型 建模手三天快速提升计划✨✨01 第一天:模型分类及国赛常见模型的用法了解1)…

图形化编程/Scratch/编程猫角色素材免费分享1-10期合集

今天给大家带来一些业余整理的scratch等图形化编程软件可以使用的角色素材图片分享,都是PNG格式的透明图片,scratch软件可直接上传角色使用(也支持编程猫等软件,因为素材是PNG格式,所有支持png格式的软件都可以使用&am…

【 OpenHarmony 系统应用源码解析 】-- Launcher 初体验

前言 最近因为业务需要,需要做一款 UI 定制的鸿蒙 Launcher,于是就开始了「找到代码」、「研究代码」、「魔改代码」的套路流程,仅以此文章作为知识备份和技术探讨所用,也希望能给其他小伙伴提供一些源码的解析思路,方…

uniapp小程序怎么判断滑动的方向

项目场景: 获取手机上手指滑动的距离超过一定距离 来操作一些逻辑 解决方案: 在uniapp中,可以通过监听触摸事件来判断滑动的方向。常用的触摸事件包括touchstart, touchmove, 和 touchend。通过这些事件的参数,可以计算出用户的滑…

【Android】最好用的网络库:Retrofit

最好用的网络库:Retrofit 文章目录 最好用的网络库:RetrofitRetrofit的基本用法Retrofit的使用逻辑Retrofit的基本操作处理复杂的接口地址类型进阶删除提交header中指定参数 Retrofit构建器的最佳写法Retrofit的使用封装 Retrofit的基本用法 Retrofit是一…