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

2022年新一代kaldi团队技术输出盘点

目录

1. 技术创新

1.1 Pruned RNN-T loss

1.2 RNN-T 的快速 GPU 解码

1.3 多码本量化索引的知识蒸馏

1.4 RNN-T 和 CTC 的低延时训练

1.5 Zipformer

1.6 Small tricks

2. 模型部署

2.1 Sherpa

2.1 Sherpa-ncnn

3. 更多的 recipe 和模型

参考资料


1. 技术创新

1.1 Pruned RNN-T loss

该项工作是新一代 Kaldi 针对 RNN-T 损失函数的创新性改进。原始的 RNN-T 损失函数在处理长文本或者长语音的时候显存占用较大,训练时间较长。对此,我们提出对 RNN-T 的 log-probability lattice 进行裁剪,能够在不损失训练精度的前提下大幅缩短 RNN-T 损失函数的计算时间。该工作[1]已经被Interspeech2022 收录,我们也撰写了多篇文章详细介绍其中的细节:

  • 初探 Pruned RNN-T:多快好省的 RNN-T 训练

  • 细聊 Pruned RNN-T: Pruned RNN-T 何以又快又好

1.2 RNN-T 的快速 GPU 解码

在该项工作中我们在 GPU 上实现了高效的 FSA 解码,为此我们对 RNN-T 做了一些改造,首先我们在 RNN-T 中使用了无状态的 decoder 网络,使用有限的 left context;另外,我们在解码时限制每一帧语音只能输出一个 symbol。在这两个前提下,我们基于 k2 中的 RaggedTensor 实现了帧同步的 beam search 解码。这可能是现今唯一既能使用  FSA 又能运行于 GPU 的解码方法,我们测试发现使用 80M 的模型在英伟达 V100 显卡上能并行跑 200 路以上的语音,LibriSpeech 数据集上的解码实时率低至 0.0025。该工作[2]已经提交至 ICASSP2023,icefall中的fast_beam_search实现了该种解码办法,欢迎大家尝试!

1.3 多码本量化索引的知识蒸馏

知识蒸馏是常见的提升模型表现的办法。针对传统知识蒸馏框架中的训练效率和教师标签存储成本的问题,新一代 Kaldi 团队创新性地提出了基于多码本量化索引的知识蒸馏。该办法能够在几乎不影响知识蒸馏的效果的前提下,实现对教师标签上百倍的压缩,有效的解决了传统知识蒸馏办法在大数据集下面临的困境。该工作[3]目前也已经提交至 ICASSP2023,我们也撰写了一篇详细的文章介绍标签压缩的算法:新一代 Kaldi 中基于量化的蒸馏实验(写得特别好,小编强烈推荐!)

1.4 RNN-T 和 CTC 的低延时训练

时延是流式ASR模型的一项重要指标。新一代 Kaldi 团队针对流式 RNN-T 模型的时延惩罚做了大量研究,最终探索出一条简单有效的时延惩罚策略。根据 lattice 中不同通路的产生的时延,对 RNN-T 的 log-probability lattice 进行简单的修正,让模型更倾向于学习时延更短的通路。通过控制时延惩罚的参数,我们可以精准的控制时延和模型准确率之间的 trade-off。该工作已经提交 ICASSP2023,论文的链接在这里[4],欢迎大家阅读!

在 CTC 模型中,我们也借鉴了该思路实现了一套时延惩罚策略。有兴趣的读者请移步Delay Penalty For RNN-T and CTC,我们对 RNN-T 和 CTC 中的时延惩罚策略都做了详细的介绍。

1.5 Zipformer

Zipformer 模型是新一代 Kaldi 团队提出的新型声学建模架构。针对传统Conformer 的诸多细节做了大幅度改动,包括

  • 优化器(ScaledAdam)

  • 时间维度 U-Net(通过降采样和升采样大幅降低计算量)

  • 注意力权重复用,减少计算量

  • 多个创新性的子模块

  • ...

目前 Zipformer 模型已经在诸多测试集上取得了出色的识别准确率,代码也已经合并在 icefall[5]的中,欢迎大家尝试。再告诉大家一个小秘密,Dan 哥现在正在对 Zipformer 的诸多子模块做进一步优化,预计在不远的将来会有新一版的 Zipformer 和大家见面,敬请期待!

1.6 Small tricks

除了上述的几项,我们还做了如下的一些工作:

  • 模型平均算法,简单有效的 ensemble 技巧。通过维护一个averaged_model变量,高效的实现更细粒度的模型平均;

  • 升点小技巧之—在icefall中巧用语言模型,让你的模型越来越好;

  • 训练小助手之新一代 Kaldi 中的 RandomCombiner,有效训练更深的模型;

  • 训练小助手之新一代 Kaldi 中的 LSTM GradientFilter,实时追踪并且剔除可能导致梯度爆炸的坏样本,让你的LSTM模型更加稳定;

  • 提速小助手之跳帧 Blank-skipping[7]。在解码 RNN-T 模型时,利用 CTC 的概率输出跳过输出 Blank 的帧,大幅提升解码的效率(详见原论文[8])。该方案我们在 icefall 中也有实现,欢迎大家尝试。

  • ...

读读读(小编有话说:简单有效,说不定哪天就能用在自己的模型上了呢!)

2. 模型部署

2.1 Sherpa

sherpa[9]是新一代 Kaldi 团队推出的服务端 ASR 模型部署方案。包含了特征提取,神经网络计算和解码三个部分,并且提供了 Python 接口方便使用。部署完成后,只需要一个浏览器,你就可以流畅体验icefall中提供的诸多自动语音识别模型。使用教程详见极速上手新一代 Kaldi 服务端框架 sherpa。

2.1 Sherpa-ncnn

如果你在寻找一个适合于移动端或者嵌入式端的部署方案,那不妨试试sherpa-ncnn。Sherpa-ncnn[10]是新一代Kaldi团队在去年推出的安装便捷,支持实时语音识别的 Python 包。仅需一行代码

pip install sherpa-ncnn

便可以体验新一代 Kaldi 支持的诸多语音识别模型。sherpa-ncnn现在已经支持Linux,Windows,macOS,Android 等常见平台。在嵌入式平台上,sherpa-ncnn也实现了实时语音识别。我们还实现了基于ncnn的 int8 模型量化,能够进一步压缩模型大小,提升推理速度。更多细节欢迎大家阅读这几篇文章:

  • sherpa-ncnn 简介:sherpa + ncnn 进行语音识别

  • 移动端使用案例:新一代 Kaldi - 移动端语音识别;

  • 嵌入式端使用案例:新一代 Kaldi - 嵌入式端实时语音识别;

每篇都干货满满,并且展示了诸多 demo!(小编注:军哥手把手教你,零基础教你玩转语音识别,一看就会!)

3. 更多的 recipe 和模型

过去的一年中,我们在icefall中增添了不少新的 recipe,涵盖了诸多公开数据集其中包括:

  • 中文数据集:aishell2[11], aishell4[12], wenetspeech[13];

  • 英文数据集:gigaspeech[14],tedlium3[15];

  • 中英文数据集:tal_csasr[16]

  • 藏语数据集:xbmu_amdo31[17]

我们还新增支持了多种模型结构,包括

  • Reworked Conformer[18],是新一代 Kaldi 提出的改进版 Conformer 模型;

  • LSTM[19],使用了 LSTM 模型作为 Encoder,并加入了诸多改动提升训练的稳定性;

  • Emformer[20],是 facebook 提出的低内存占用的流式模型。icefall中的实现详见这里[21];

  • Zipformer[22],小编在上文已经介绍过了,这里不做重复啦;


参考资料

[1]工作: https://arxiv.org/abs/2206.13236

[2]工作: https://arxiv.org/abs/2211.00484

[3]工作: https://arxiv.org/abs/2211.00508

[4]这里: https://arxiv.org/abs/2211.00490

[5]icefallhttps://github.com/k2-fsa/icefall/tree/master/egs/librispeech/ASR/pruned_transducer_stateless7

[6]语言模型融合: https://mp.weixin.qq.com/s/MkvKF5JJch3DT2RA87v9lQ

[7]跳帧Blank-skipping: https://github.com/k2-fsa/icefall/tree/master/egs/librispeech/ASR/pruned_transducer_stateless7_ctc_bs

[8]原论文: https://arxiv.org/abs/2210.16481

[9]sherpa: https://github.com/k2-fsa/sherpa

[10]Sherpa-ncnn: https://github.com/k2-fsa/sherpa-ncnn

[11]aishell2: https://github.com/k2-fsa/icefall/tree/master/egs/aishell2/ASR

[12]aishell4: https://github.com/k2-fsa/icefall/tree/master/egs/aishell4/ASR

[13]wenetspeech: https://github.com/k2-fsa/icefall/tree/master/egs/wenetspeech/ASR

[14]gigaspeech: https://github.com/k2-fsa/icefall/tree/master/egs/gigaspeech/ASR

[15]tedlium3: https://github.com/k2-fsa/icefall/tree/master/egs/tedlium3/ASR

[16]tal_csasr: https://github.com/k2-fsa/icefall/tree/master/egs/tal_csasr/ASR

[17]xbmu_amdo31: https://github.com/k2-fsa/icefall/tree/master/egs/xbmu_amdo31/ASR

[18]Reworked Conformer: https://github.com/k2-fsa/icefall/tree/master/egs/librispeech/ASR/pruned_transducer_stateless5

[19]LSTM: https://github.com/k2-fsa/icefall/tree/master/egs/librispeech/ASR/lstm_transducer_stateless2

[20]Emformer: https://arxiv.org/abs/2010.10759

[21]这里: https://github.com/k2-fsa/icefall/tree/master/egs/librispeech/ASR/conv_emformer_transducer_stateless2

[22]Zipformer: https://github.com/k2-fsa/icefall/tree/master/egs/librispeech/ASR/pruned_transducer_stateless7

相关文章:

2022年新一代kaldi团队技术输出盘点

目录 1. 技术创新 1.1 Pruned RNN-T loss 1.2 RNN-T 的快速 GPU 解码 1.3 多码本量化索引的知识蒸馏 1.4 RNN-T 和 CTC 的低延时训练 1.5 Zipformer 1.6 Small tricks 2. 模型部署 2.1 Sherpa 2.1 Sherpa-ncnn 3. 更多的 recipe 和模型 参考资料 1. 技术创新 1.1 …...

数据结构复习(三)顺序表oj

目录 27. 移除元素 26. 删除有序数组中的重复项 88. 合并两个有序数组 27. 移除元素 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外…...

2023.2.10每日一题

每日一题题目描述解题核心解法一:模拟题目描述 题目链接:2553. 分割数组中数字的数位 给你一个正整数数组nums,请你返回一个数组answer,你需要将nums中每个整数进行数位分割后,按照nums中出现的相同顺序放入答案数组…...

Homekit智能家居DIY一智能吸顶灯

买灯要看什么因素 好灯具的灯光可以说是家居的“魔术师”,除了实用的照明功能外,对细节的把控也非常到位。那么该如何选到一款各方面合适的灯呢? 照度 可以简单理解为清晰度,复杂点套公式来说照度光通量(亮度&#x…...

关于 OAuth 你又了解哪些?

作者罗锦华,API7.ai 技术专家/技术工程师,开源项目 pgcat,lua-resty-ffi,lua-resty-inspect 的作者。 OAuth 的背景 OAuth,O 是 Open,Auth 是授权,也就是开放授权的意思。OAuth 始于 2006 年&a…...

18. 构造函数和析构函数,构造函数的分类和调用

构造函数和析构函数 构造函数 //没有返回值 不用写void//函数名 与 类名相同//可以有参数 ,可以发生重载//构造函数 由编译器自动调用一次 无须手动调用析构函数 //没有返回值 不用写void函数名 与类名相同 函数名前 加 ~不可以有参数 ,不可以发生重载析构函数 也是由编译器自…...

JavaScript设计模式es6(23种)

设计模式简介设计模式代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的…...

设计「业务」与「技术」方案

三天研发,两天设计; 01【优先做设计方案】 职场中的那些魔幻操作,研发最烦的是哪个? 作为一个数年且资深的互联网普通开发,可以来说明一下为什么是:缺乏设计; 面对业务需求的时候&#xff0c…...

C/C++:预处理(下)

目录 一.回顾程序的编译链接过程 二. 预处理之预定义#define 1.#define定义的标识符 2.#define定义的宏 3.带副作用的表达式作为宏实参 4.两个经典的宏 5.#define使用的一些注意事项小结 6.宏与函数的比较 7.#undef 附:关于#define的三个冷知识 三. 条件…...

2023互联网相关岗位转行与就业选择的简单分析

文章目录1、城市2、岗位1、城市 能找得到工作的城市,可能主要也就这些base了 2、岗位 主要技术岗位 Python 侧重人工智能,人工智能门槛高大家心知肚明。如果学python 不走人工智能,只走单纯的后端开发,不管从薪资还是岗位数量…...

LeetCode·每日一题·1223.掷骰子模拟·记忆化搜索

作者:小迅链接:https://leetcode.cn/problems/dice-roll-simulation/solutions/2103471/ji-yi-hua-sou-suo-zhu-shi-chao-ji-xiang-xlfcs/来源:力扣(LeetCode)著作权归作者所有。商业转载请联系作者获得授权&#xff0…...

【GPLT 二阶题目集】L2-043 龙龙送外卖

参考地址:AcWing 4474. 龙龙送外卖(杂题选讲) 作者:yxc 感谢y总! 龙龙是“饱了呀”外卖软件的注册骑手,负责送帕特小区的外卖。帕特小区的构造非常特别,都是双向道路且没有构成环 —— 你可以…...

Maven:基础知识

Maven概念图生命周期目录工程创建测试常用命令COMPILATION ERROR : 不再支持目标选项 5。请使用 7 或更高版本。问题解决pom.xml文件properties配置示例scope配置详解概念图 依赖管理构建项目Maven 的底层核心实现项目的构建和管理必须通过插件完成,但插件本身并不包…...

Web 框架 Flask 快速入门(一)flask基础与模板

前言 课程地址:Python Web 框架 Flask 快速入门 文章目录前言🌴 Flask基础和模板🌷 一个简单的flask程序🌼 模板的使用🌴 Flask基础和模板 1、web框架的作用 避免重复造轮子,app程序不必关心于服务器的沟…...

1CN/Jaccard/PA/AA/RA/Katz/PageRank/SimRank

common neighbors(CN) 公共邻居的数量。 Jaccard 用于比较有限样本集之间的相似性与差异性。Jaccard系数值越大,样本相似度越高。 preferential attachment(PA) 节点倾向于连接到节点度较高的节点上,&…...

YOLOv5-Backbone模块实现

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍦 参考文章地址: 365天深度学习训练营-第P8周:YOLOv5-Backbone模块实现🍖 作者:K同学啊一、前期准备1.设置GPUimport torch from torch impor…...

【C语言】程序环境和预处理

🌇个人主页:平凡的小苏 📚学习格言:别人可以拷贝我的模式,但不能拷贝我不断往前的激情 🛸C语言专栏:https://blog.csdn.net/vhhhbb/category_12174730.html 小苏希望大家能从这篇文章中收获到许…...

9.关系查询处理和查询优化

其他章节索引 梳理 名词解释 代数优化:是指关系代数表达式的优化,也即按照一定规则,通过对关系代数表达式进行等价变换,改变代数表达式中操作的次序和组合,使查询更高效物理优化:是指存取路径和底层操作算…...

计算机组成原理(三)

5.掌握定点数的表示和应用(主要是无符号数和有符号数的表示、机器数的定点表示、数的机器码表示); 定点数:小数点位置固定不变。   定点小数:小数点固定在数值位与符号位之间;   定点整数:小…...

C. Least Prefix Sum codeforces每日一题

🚀前言 🚀 大家好啊,这里是幸麟 🧩 一名普通的大学牲,最近在学习算法 🧩每日一题的话难度的话是根据博主水平来找的 🧩所以可能难度比较低,以后会慢慢提高难度的 🧩此题标…...

XCTF-web-easyupload

试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) ​遍历字符串​:通过外层循环逐一检查每个字符。​遇到 ? 时处理​: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: ​与…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

Spring Security 认证流程——补充

一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...

6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础

第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能

指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...