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

【语音识别】Zipformer

Zipformer 是kaldi 团队于2024研发的序列建模模型。相比较于 Conformer、Squeezeformer、E-Branchformer等主流 ASR 模型,Zipformer 具有效果更好、计算更快、更省内存等优点。并在 LibriSpeech、Aishell-1 和 WenetSpeech 等常用数据集上取得了当时最好的 ASR 结果。

目录

一.方法

1. Down sampled encoder structure

2. Zipformer block

3. BiasNorm

4. Swoosh 激活函数

5. ScaledAdam


论文地址:https://arxiv.org/pdf/2310.11230.pdf

项目地址:https://github.com/k2-fsa/icefall/tree/master/egs/librispeech/ASR/zipformer

一.方法

Zipformer的整体框架如下图所示。

不同于 Conformer 只处理固定帧率 25Hz ,Zipformer 采用了1个类似于 U-Net 的结构,在不同帧率上学习时域表征。

首先,Conv-Embed 将输入的 100Hz 的声学特征下采样为 50 Hz 的特征序列;然后,由 6 个连续的 encoder stack 分别在 50Hz、25Hz、12.5Hz、6.25Hz、12.5Hz 和 25Hz 的采样率下进行时域建模。除了第1个 stack 外,其他的 stack 都采用了降采样的结构。在 stack 与 stack 之间,特征序列的采样率保持在 50Hz。不同的 stack 的 embedding 维度不同,中间stack 的 embedding 维度更大。每个 stack 的输出通过截断或者补零的操作,来对齐下1个 stack 的维度。Zipformer 最终输出的维度,取决于 embedding 维度最大的stack。

1. Down sampled encoder structure

•Conv-Embed

使用3个2-D卷积层,其时间×频率步长分别为1×2、2×2和1×2,输出通道分别为8、32和128。随后,利用了一个类似于Nextformer的ConvNeXt层,该层由1个kernel大小为7×7的深度卷积、1个具有384个输出通道的点卷积、1个SwooshL激活函数和1个具有128个输出通道的点卷积组成。在ConvNeXt模块上应用了残差连接。最后,使用1个线性层,后面跟着1个BiasNorm,以调整特征维度,使其与第1个stack相匹配。

•Downsampled stacks

对于降采样的 encoder stack,成对出现的 Downsample 和 Upsample 模块负责将特征长度对称地缩放。当降采样率为 2 时,Downsample 学习2个标量权重用来将相邻的2帧加权求和;Upsample 将每1帧复制为2帧。最后,通过1个 Bypass 模块整合 stack 的输入和输出。

2. Zipformer block

Zipformer block的结构如下图左侧所示。

Zipformer block深度大约是 Conformer block 的2倍。具体地,block 输入先被送到 MHAW 模块计算注意力权重attention weights,attention weights作为NLA 模块和 SA 模块的输入。同时,block 输入也被送到 feed-forward 模块,后接 NLA 模块和2个连续的模块组(SA + convolution + feed-forward)。最后,由1个 BiasNorm 模块对block 输出进行 normalize操作。除了残差连接,每个 Zipformer block 使用2个 Bypass 模型,用于结合 block 输入和中间模块的输出,分别位于 block 的中间和尾部。

•Non-Linear Attention

上图右侧为Non-Linear Attention的结构。利用 MHAW 模块计算好的注意力权重,沿着时间轴汇聚不同帧的向量。 具体而言,使用3个 linear 将输入转换为 A、B、C,每个的维度为输入维度的 3/4 倍。模块的输出为 linear(A\odot attention(\tanh (B)\odot C)),⊙ 表示点乘,attention 表示利用1个注意力头的权重对不同帧汇聚, linear layer 负责恢复特征的维度。

•Bypass

Bypass 模块学习1个逐通道的权重 c,结合模块输入x 和模块输出y:(1-c)\odot x+c\odot y 。在训练早期通过约束   c的最小值让模块接近 “straight-through” 有助于稳定模型训练。

3. BiasNorm

提出 BiasNorm 模块来替换 LayerNorm:

其中, b是可学习的逐通道的 bias, RMS[x-b]是通道的均方根值,\gamma是1个可学习的标量。

4. Swoosh 激活函数

提出2个新的激活函数用于代替 Swish,分别称为 SwooshR 和 SwooshL。

在 SwooshR 函数中,偏移值 0.313261687 是为了让函数经过原点;在 SwooshL函数中,偏移量 0.035 是经过实验得到的。

如下图所示,SwooshL 近似于 SwooshR 向右偏移得到的。

把 SwooshL 用在 “normally-off” 的模块(feed-forward 和 ConvNeXt)中,把 SwooshR 用在convolution 和 Conv-Embed 中其余的部分。

5. ScaledAdam

提出1个 Adam 优化器的 parameter-scale-invariant 版本,称为 ScaledAdam,可以加快模型收敛。

f(\theta )  为我们想要优化的 loss 函数,它对参数 \theta是可导的。在每个步骤t ,Adam 计算参数梯度 g(t)=\bigtriangledown _{\theta }f(\theta _{t-1}),并更新梯度的一阶动量m(t)=\beta _{1}m _{t-1} +(1-\beta _{1})g_{t}  和二阶动量v(t)=\beta _{2}v _{t-1} +(1-\beta _{2})g_{t}^{2} ,此处, \beta _{1}\beta _{2}表示控制动量更新的系数。Adam 在步骤 t 的参数更新量\Delta _{t}为:

 \alpha _{t}通常由外部的 LR schedule 控制, \frac{\sqrt{1-\beta _{2}^{t}}}{1-\beta _{1}^{t}}为偏置纠正项。

•Scaling update

为了确保不同 scale 的参数的相对变化量  \frac{\Delta _{t}}{r_{t-1}}一致,在参数更新量中引入参数的 scale,来放缩更新量\Delta _{t}

•Learning parameter scale

r _{t-1}更新到r _{t}对参数\theta带来的变化为\Delta _{t,r}^{'}=(r_{t}-r_{t-1})\odot \theta _{t-1}^{'}

其中,\eta是学习率\alpha _{t}的缩放参数,值为0.1时有助于稳定训练。

•Eden schedule

Eden schedule的公式如下:

其,t为 step,e为 epoch,\alpha _{step}\alpha _{epoch}分别控制学习率在哪个 step 和 epoch 开始快速下降,
linear(\alpha _{start},t _{warmup},t)表示1个线性 warmup,起点为\alpha _{start} ,经过 t _{warmup}个 step 变为 1。
\alpha _{base}表示当没有 warmup 的情况下学习率的最大值。

•Efficient implementation

为了加快 ScaledAdam 计算,我们将参数根据 shape 分组,按照 batch 进行参数更新。

相关文章:

【语音识别】Zipformer

Zipformer 是kaldi 团队于2024研发的序列建模模型。相比较于 Conformer、Squeezeformer、E-Branchformer等主流 ASR 模型,Zipformer 具有效果更好、计算更快、更省内存等优点。并在 LibriSpeech、Aishell-1 和 WenetSpeech 等常用数据集上取得了当时最好的 ASR 结果…...

vue+uniapp+echarts的使用(H5环境下echarts)

1.安装 npm install echarts4.9.0 --save // 带版本号 2.main.js中全局引用 // import echarts from echarts // 如果是5.0以上版本用这个 import * as echarts from echarts Vue.prototype.$echartsecharts 3.使用 <template><view id"box" style"w…...

【Python网络爬虫笔记】7-网络爬虫的搜索工具re模块

目录 一、网络爬虫中的正则表达式和re模块&#xff08;一&#xff09;数据提取的精确性&#xff08;二&#xff09;处理复杂的文本结构&#xff08;三&#xff09;提高数据处理效率 二、正则表达式的内涵&#xff08;一&#xff09;、常用元字符&#xff08;二&#xff09;、量…...

为什么选择 React Native 作为跨端方案

为什么选择 React Native 作为跨端方案 我深刻地知道&#xff0c;没有完美的跨端技术&#xff0c;只有适合的场景。脱离适用场景去谈跨端技术没有什么意义。 适用场景 1. 业务更新迭代较快的团队与出海团队 React Native 特别适合那些业务更新频繁、需要快速响应市场的团队…...

服务器与普通电脑有什么区别?

服务器和普通电脑&#xff08;通常指的是个人计算机&#xff0c;即PC&#xff09;有众多相似之处&#xff0c;主要构成包含&#xff1a;CPU&#xff0c;内存&#xff0c;芯片&#xff0c;I/O总线设备&#xff0c;电源&#xff0c;机箱及操作系统软件等&#xff0c;鉴于使用要求…...

Oracle 12c Data Guard 环境中的 GAP 修复方法

概述 上文中提到Oracle 12c 引入了多项新技术来简化 Data Guard 环境中的 GAP 修复过程&#xff0c;如&#xff08;RECOVER … FROM SERVICE&#xff09;。这些新特性不仅减少了操作步骤&#xff0c;还提高了效率和准确性。本文档将详细说明如何利用这些新特性进行 GAP 修复。…...

力扣 三角dp

动态规划基础题&#xff0c;当前所在元素来自上一行的两列的值。 题目 从图可以看出&#xff0c;每一行的第一个数与最后一个数都是1&#xff0c;然后中间的数是来自它左上方和右上方的数的和。当然并不是要打印这个三角形的形状&#xff0c;因此可以想到正常的打印方式应该是…...

SQL基础语法全解析(上篇)

一、基本概念 1. 数据库术语 数据库&#xff08;database&#xff09; - 保存有组织的数据的容器&#xff08;通常是一个文件或一组文件&#xff09;。数据表&#xff08;table&#xff09; - 某种特定类型数据的结构化清单。模式&#xff08;schema&#xff09; - 关于数据库…...

【笔记】Linux服务器端使用百度网盘

1、在python环境下&#xff0c;下载bypy pip install bypy 2、第一次连接需要认证 bypy info 认证通过后百度网盘会出现bypy文件夹&#xff0c;如下 3、查看当前文件夹下的文件 bypy list 若有很多文件夹&#xff0c;可在后面增加文件夹名称&#xff0c;列出对应位置下的文件&a…...

UEFI Spec 学习笔记---3 - Boot Manager(3)

3.2 Boot Manager Policy Protocol EFI_BOOT_MANAGER_POLICY_PROTOCOL----EFI应用程序使用该协议请求UEFI引导管理器使用平台策略连接设备。 typedef struct _EFI_BOOT_MANAGER_POLICY_PROTOCOL EFI_BOOT_MANAGER_POLICY_PROTOCOL; struct _EFI_BOOT_MANAGER_POLICY_PROTOCOL…...

ATTCK红队评估实战靶场(四)

靶机链接&#xff1a;http://vulnstack.qiyuanxuetang.net/vuln/detail/6/ 环境搭建 新建两张仅主机网卡&#xff0c;一张192.168.183.0网段&#xff08;内网网卡&#xff09;&#xff0c;一张192.168.157.0网段&#xff08;模拟外网网段&#xff09;&#xff0c;然后按照拓补…...

Android Studio 历史版本下载

Android Studio 历史版本下载 官方链接&#xff1a;https://developer.android.google.cn/studio/archive 通过gradle插件版本反查Android Studio历史版本 Android Studio Ladybug | 2024.2.1 October 1, 2024 【https://redirector.gvt1.com/edgedl/android/studio/ide-zip…...

微信小程序px和rpx单位互转方法

js代码如下 Page({data: {width: 0,width2: 0},onLoad: function (options) {let px this.pxToRpx(380)let rpx this.rpxToPx(730.7692307692307) // 检查两个互转是否是相同即可,例如pxToRpx(380)转成730.7692307692307 则rpxToPx(730.7692307692307)如果是380则代表互转没…...

Vercel 部署与管理指南:简化前端应用的自动化部署流程

引言 在现代的前端开发中&#xff0c;部署和托管项目一直是开发者关注的重要环节。Vercel&#xff0c;作为一个专注于简化前端开发和部署的平台&#xff0c;凭借其强大的自动化功能、全球内容分发网络&#xff08;CDN&#xff09;以及对 Next.js 等框架的优越支持&#xff0c;…...

Java11使用JVM同一日志框架启用日志记录

你可以使用-Xlog选项配置或启用Java虚拟机同一日志框架的日志记录。 -Xlog:gc*trace:file/Users/xx/gc-%t.log:time,tags,level,pid,tid,hostname,path:filecount3,filesize10K -Xlog:gc*trace:stdout:time,tags,level,pid,tid,hostname:filecount3,filesize10K -Xlog:gc*trac…...

onlyoffice实现文档比对(Beta版)-纯文字比对(非OCR)

一、说明 文档比对光靠前端或者后端是无法实现的。 该文中的实现方案为&#xff1a;onlyofficejava。java进行文档差异化比较并输出对比结果&#xff0c;only进行得到结果处理渲染。 此方案目前为Beta版本&#xff0c;简单Word Demo实现了比对结果。css、关联动态效果登将在后期…...

JS querySelector方法的优点

1. 灵活性 支持所有 CSS 选择器 ID 选择器&#xff1a;#id 示例&#xff1a;document.querySelector(#myId)解释&#xff1a;选择 id 为 myId 的元素。类选择器&#xff1a;.class 示例&#xff1a;document.querySelector(.myClass)解释&#xff1a;选择具有 class 为 myCla…...

利用获取商品详情API:item_get可以获取到淘宝商品详情的哪些数据?

先来看下测试的返回数据吧 items: { total_results: 76, totalpage: 8, page_size: 10, page: "1", item: [ { rate_content: "和我家的鞋柜特别搭&#xff0c;加上这一条遮挡布&#xff0c;感觉整洁多了&#xff0c;布料不是硬邦邦的那种&#xff0c;很满意。…...

【大数据学习 | 面经】Spark 3.x 中的AQE(自适应查询执行)

Spark 3.x 中的自适应查询执行&#xff08;Adaptive Query Execution&#xff0c;简称 AQE&#xff09;通过多种方式提升性能&#xff0c;主要包括以下几个方面&#xff1a; 动态合并 Shuffle 分区&#xff08;Coalescing Post Shuffle Partitions&#xff09;&#xff1a; 当 …...

[Vue]Vue-router

路由 对前端路由的理解 在前端技术早期&#xff0c;一个 url 对应一个页面&#xff0c;如果要从 A 页面切换到 B 页面&#xff0c;那么必然伴随着页面的刷新。这个体验并不好&#xff0c;不过在最初也是无奈之举——用户只有在刷新页面的情况下&#xff0c;才可以重新去请求数…...

【HarmonyOS】鸿蒙应用使用lottie动画

【HarmonyOS】鸿蒙应用使用lottie动画 一、lottie动画是什么&#xff1f; https://airbnb.design/lottie Lottie是由Airbnb团队开发的一个适用于iOS、Android、React Native、Web和Windows的开源动画库&#xff0c;用于解析使用Bodymovin导出为JSON的Adobe After Effects动…...

1.使用docker 部署redis Cluster模式 集群3主3从

1.使用docker 部署redis Cluster模式 集群3主3从 1.1 先安装docker 启动docker服务&#xff0c;拉取redis镜像 3主3从我们要在docker启动6个容器docker run --name redis-node-1 --net host --privilegedtrue -v /data/redis/share/redis-node-1:/data redis:6.0.8 --cluster-…...

vue基础之8:computed对比watch

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…...

Luban数据插件的用法

配置后数据后&#xff0c;点击图1中的gen.bat文件启动生成配置数据和解析配置数据代码的程序&#xff0c;自动生成配置数据和解析用到的代码&#xff1b;因为我已经 指定了生成内容的输出路径为Unity项目的路径下面&#xff0c;所以&#xff0c;不用再搬运生成的内容到项目目录…...

指针(上)

目录 内存和地址 指针变量和地址 取地址&#xff08;&&#xff09; 解引用&#xff08;*&#xff09; 大小 类型 意义 const修饰 修饰变量 修饰指针 指针运算 指针- 整数 指针-指针 指针的关系运算 野指针 概念 成因 避免 assert断言 指针的使用 strl…...

张伟楠动手学强化学习笔记|第一讲(上)

张伟楠动手学强化学习笔记|第一讲&#xff08;上&#xff09; 人工智能的两种任务类型 预测型任务 有监督学习无监督学习 决策型任务 强化学习 序贯决策(Sequential Decision Making) 智能体序贯地做出一个个决策&#xff0c;并接续看到新的观测&#xff0c;知道最终任务结…...

python脚本:Word文档批量转PDF格式

读取指定文件夹中的所有 .doc 和 .docx 文件&#xff0c;并利用 Word 软件将它们转换为 PDF 格式&#xff0c;并保存在同一个文件夹中&#xff0c;以源文件命名。 请确保你已经安装了 Microsoft Word&#xff0c;并且在运行脚本时关闭了所有正在运行的 Word 实例。运行该程序时…...

性能测试常见面试问题和答案

一、有没有做过性能测试&#xff0c;具体怎么做的 性能测试是有做过的&#xff0c;不过我们那个项目的性能做得不多&#xff0c;公司要求也不严格。一般SE 给我们相关的性能需求&#xff0c;首先我们需要对性能需求进行场景分析与设计&#xff0c;这里&#xff0c;其实主要就是…...

uniapp进阶技巧:如何优雅地封装request实例

在uniapp开发过程中&#xff0c;合理封装网络请求是提高代码质量和开发效率的关键。本文将介绍一种更为优雅的封装方式&#xff0c;通过创建一个request实例来管理不同类型的HTTP请求。 一、准备工作 在开始封装之前&#xff0c;请确保你的项目中已经安装了uniapp开发环境&…...

实验五、流式视频服务程序mjpg-streamer移植实验

实验日期: 2024 年 10 月 22 日 报告退发 (订正 、 重做) 一、实验目的 1、掌握流式视频服务程序源代码mjpg-streamer的交叉编译方法; 2、掌握在tiny210开发板中运行mjpg-streamer方法; 二、实验内容 1、开启一台烧写了嵌入式Linux系统的…...