WeNet模型学习笔记

news2024/11/25 10:44:34

WeNet是一个端到端语音识别模型,由于其优越的特性,成为近几年语音识别领域的热门模型。WeNet模型是一种CTC和attention结构的混合体,以Conformer或Transformer作为encoder,并使用attention decoder对CTC的输出进行重新打分(rescore)。此外,为了在统一的模型中实现流式与非流式推理,该网络还引入了基于动态块的注意力机制,使得attention可以关注不同长度的上下文。

WeNet论文共两篇,对应WeNet模型结构的两个版本。论文链接如下:

WeNet: Production Oriented Streaming and Non-streaming End-to-End Speech Recognition Toolkit

WeNet 2.0: More Productive End-to-End Speech Recognition Toolkit

开源工程地址:https://github.com/wenet-e2e/wenet

1. 模型结构

在WeNet 1中,模型结构如下:

在WeNet 2中,增加了从右向左的注意力机制,模型结构如下:

WeNet模型主要由三部分组成:Shared EncoderCTC DecoderAttention Decoder 

Shared Encoder对输入序列进行信息提取,支持TransformerConformer两种网络,其中,Conformer网络的效果更优。与Transformer相似,Conformer由多个Conformer Block堆叠而成,每个Block又由ConvSelf-AttentionResidualReLUFeed-Forward层组成。 

CTC通过引入Blank输出单元,可以处理输入和输出之间不等长以及时间同步的问题。通过对输出的连续相同字符进行合并,以及移除Blank字符,得到最终的解码结果。

Attention DecoderTransformer中的Decoder一样,是一个在目标序列上的自回归模型(也就是输入之前的输出单元,预测下一个输出单元),并在做自回归运算时,会利用Encoder的输出信息做Cross Attention,从而使其能够利用输入序列的信息。这样,可以不必显式对齐输入和输出,而是让网络隐式地去学习二者之间的对齐关系。

在解码时,同时使用CTCAED的输出,可以提高识别率,但是由于AED本身是非流式的解码,在Wenet中,先使用CTC进行第一遍流式解码,再用AEDCTCB-best结果进行Rescoring,根据得分重新排序,得到最好的识别结果。

整体模型结构可参考:

2.  Subsampling

在语音识别中,一定时间范围内的语音信号是相似的,多个连续帧对应的是同一个发音。并且,端到端的语音识别,其建模单元一般是一个时间延续较长的粗粒度的单元,比如建模一个中文汉字,加入其用时0.2s,以10ms帧移计算,对应20帧,如果将20帧的信息合并为5帧,在进行帧同步输出时不会出现丢字问题,同时还可以减少后续Encoder网络的前向计算、CTC lossAED cross-attention计算的开销。

WeNet中使用的是2D CNN实现输入的下采样。2D卷积将输入看成是通道数为1,高度为FFBank的特征维度),宽度为T(帧数)的一张图。

3. Shared Encoder

Shared Encoder用于为声学特征建模,它由多个Transformer层或Conformer层组成。原始的Conformer结构中的self-attention需要对整个序列做attention运算,无法处理流式数据。而卷积操作也依赖于右侧固定长度上下文,且依赖的长度随着模型层数增多而增多。因此,原始结构需要针对流式数据进行改进。WeNet中采用Chunk方法进行改进,也就是把序列分成多个Chunk,每帧在Chunk内部做attention。Chunk的大小会影响流式数据的延时和模型识别率,大chunk的延时较大,但效果较好;小chunk的延时较小,但性能较差。WeNet中使用动态chunk,可根据场景的延时要求和识别率要求,手动调整chunk的大小,从而兼容流式和非流式数据。

常见的Attention范围如下:

为了增加模型鲁棒性,在训练中,会使用随机chunk size大小进行训练。在解码过程中,则根据场景需要以及延迟、性能需求等,选择固定的chunk size进行解码。

ConformerTransformer的基础上引入了卷积,可以同时兼顾全局特征和局部特征,因而是目前语音识别任务效果最好的模型之一。需要说明的是,WeNet中使用的是因果卷积(Causal Convolution),即不依赖右侧上下文。 

Shared Encoder具体结构如下:

4. CTC Decoder

CTC的基本原理示意图:

CTC在此先不展开讲,后面准备再开一篇单独讲。

在WeNet实现中,CTC部分比较简单,包含CTC Decoder和CTC Loss两部分。CTC Decoder只对Encoder的输出做了一次线性运算,并计算log_softmax,CTC Loss部分则是直接使用torch.nn.CTCLoss。

5. Attention-based Decoder

WeNet提供了单向Attention based Decoder和双向Attention based Decoder。该模块的输入是当前已经产生的输出序列,并在此基础上生成新的输出。跟Encoder中的Attention不同的是,在Decoder中,除了要做Self-Attention,还要与Encoder的输出做Cross-Attention

Decoder结构如下:

6. 整体流程 

WeNet网络的整体工作流程如下:

这张图非常直观地展示出WeNet的工作流程,感谢算法大神贡献的图。 

以上笔记的参考资料除了两篇WeNet论文, 主要参考了Chao Yang的博客: 

Wenet网络设计与实现 | Chao Yang​​​​​​​z

在此表示感谢。 

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

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

相关文章

微信小程序用 pinia数据化存储信息

import { defineStore } from pinia import { ref } from vue import type {LoginResult} from /types/member //定义 Store export const useMemberStore defineStore( member, () > { // 会员信息 const profile ref<LoginResult>() //保存会员信息&#xff0c…

MySQL数据库:详细安装与配置指南

目录 背景: 一.下载过程(MySQL数据库): 二.安装过程(MySQL数据库)&#xff1a; 三.验证MySQL是否安装成功 背景: MySQL 是一个流行的开源关系数据库管理(RDBMS)&#xff0c;由瑞典MySQL AB公司开发&#xff0c;后俩该公司被Sun Microsystems收购&#xff0c;Sun Microsyste…

el-table的多选功能

html&#xff1a; <el-table :data"list" row-key"id" selection-change"handleSelectionChange"><el-table-column type"selection" width"55"/> </el-table> js变量&#xff1a; data () {return {/…

日期类代码实现-C++

一、目标 通过前面对类和对象的介绍我们可以自己通过C代码初步实现一个简单的日期类。 实现的主要操作有&#xff1a; 1.日期类的构造函数 2.日期类的拷贝构造函数&#xff08;在头文件中实现&#xff09; 3.日期类的比较运算符重载 4.日期类的计算运算符重载 5.流插入运…

Python 爬数据案例 客户端服务端http请求 推荐 【进阶篇 2 】

网络爬虫数据原来这么简单&#xff01;&#xff01;&#xff01; 前面已经总结了关于python的面向对象继承多态的知识&#xff0c;这里主要是模块、读写文件、http请求网络数据以及如何获取网络数据知识。 网络爬虫是典型的应用程序&#xff0c;它的工作原理就是通过不断的请…

VBA语言専攻T3学员领取资料通知0817

T3学员领取资料通知0817 各位学员∶本周MF系列VBA技术资料增加681-690讲&#xff0c;T3学员看到通知后请免费领取,领取时间8月16日晚上19:00-8月17日中午12:00。本次增加内容&#xff1a; MF691:按所选范围对行进行分组显示 MF692:查找所给范围内的重复项 MF693:文本框Text…

python非交互连接mysql+mycat读写分离实现

python非交互连接mysql >>>import pymysql >>>connpymysql.connect(host"192.168.118.57",port3306,database"test",user"root",password"root") >>> cursorconn.cursor() >>> cursor.execut…

基于springboot的智能家居系统

TOC springboot198基于springboot的智能家居系统 研究背景与现状 时代的进步使人们的生活实现了部分自动化&#xff0c;由最初的全手动办公已转向手动自动相结合的方式。比如各种办公系统、智能电子电器的出现&#xff0c;都为人们生活的享受提供帮助。采用新型的自动化方式…

day22 Java基础——方法(干货)

day22 Java基础——方法 在Java中&#xff0c;方法是一段组织好的、可重复使用的代码块&#xff0c;用于执行一个特定的操作。方法提供了一种封装代码的方式&#xff0c;使得代码模块化&#xff0c;便于管理和重用。以下是关于Java中方法的一些基本介绍&#xff1a; 文章目录…

对话图像编辑研究综述

MGIE&#xff1a;MLLM 引导图像编辑&#xff08;ICLR 2024&#xff09; https://mllm-ie.github.io/ 利用 MLLM 来增强基于指令的图像编辑 (“what will this image be like if [instruction]” &#xff0c;来重写)。 训练好后&#xff0c;大视觉语言模型直接推导出简洁明确…

FreeRTOS队列(下)

文章目录 一、使用队列实现多设备输入1、增加旋转编码器2、使用队列集执行任务3、增加姿态控制&#xff08;使用MPU6050控制挡球板&#xff09; 二、队列实验_分发数据给多个任务(赛车游戏)三、传输大块数据四、示例&#xff1a;邮箱&#xff08;Mailbox&#xff09;五、队列集…

远程桌面你的凭据不工作解决方法

如果遇到“你的凭据不工作”的提示&#xff0c;请首先确认您输入的凭据是否正确。如果确认无误但仍然出现Windows远程桌面凭据不工作的提示&#xff0c;这可能是由于Windows安全设置的问题所导致的。要解决远程桌面连接提示你的凭据不工作这一问题&#xff0c;您可以尝试以下解…

qemu的VNC协议(RFB协议)

1、握手 1.1、服务器收到客户端TCP连接上后&#xff0c;服务器发送RFB的版本&#xff1a; 52 46 42 20 30 30 33 2e 30 30 38 0a RFB 003.008\n 1.2、客户端收到后回复&#xff1a; 52 46 42 20 30 30 33 2e 30 30 38 0a RFB 003.008\n 2、安全认证 2.1、服务器发送支…

MySQL数据库之part2

一、索引原理与慢查询优化 一&#xff09;介绍 1、为何需要有索引 一般的应用系统&#xff0c;读写比例是10:1左右&#xff0c;而且插入操作和一般的更新操作很少出现性能问题。在生产环境中&#xff0c;我们遇到最多的、也是最容易出问题的还是一些负责的查询操作。因此查询语…

密码学基础---椭圆曲线一文打尽

1.ECC简介及密钥生成 当前公认安全有效的三大类公钥密钥体制分别为基于大数因子分解难题(RSA)、离散对数难题(DSA)和椭圆曲线离散对数&#xff08;ECC&#xff09;难题的密码体制。 最初RSA由于其容易理解被广泛运用&#xff0c;但随着计算机性能的提升&#xff0c;要保证RS…

JavaScript学习笔记(十三):网络请求JS AJAX

1、AJAX - XMLHttpRequest 对象 1.1 XMLHttpRequest 对象是 AJAX 的基石。 创建 XMLHttpRequest 对象定义回调函数打开 XMLHttpRequest 对象向服务器发送请求 1.2 XMLHttpRequest 对象 所有现代浏览器都支持 XMLHttpRequest 对象。 XMLHttpRequest 对象可用于在后台与 Web…

【mysql】MySQL的数据库简单搭建

文章目录 前言基础知识数据库数据表数据表结构记录&#xff08;数据&#xff09; 数据类型数值类型字符串类型日期类型二进制类型其他数据类型 约束where子句其他条件 order by 语句 &#xff08;排序&#xff09;group by语句&#xff08;分组&#xff09; 数据库操作新建数据…

漏洞挖掘 | EDU拿敏感信息的骚思路

1. 寻找资产 在进行edu漏洞挖掘的时候&#xff0c;我们常常遇到统一认证平台&#xff0c;账号是学号&#xff0c;密码是身份证后6位&#xff08;甚至是更复杂的密码&#xff09;&#xff0c;同时找到这两者的几率很小&#xff0c;所以我们把关注点放在微信小程序中&#xff0c…

15 个高难度 Java 面试题及答案

一、企业聘用指南 聘用合适的 Java 开发人员对您的业务至关重要。聘用不当可能会导致代码效率低下、错过最后期限以及团队活力不佳。这就是为什么在聘用候选人之前必须彻底审查每位候选人的原因。这个过程的一部分是在面试 Java 开发人员候选人时提出正确的问题。 通过我们列…

OK-COIN : 总统大选成为比特币牛市的导火索

每一届总统大选&#xff0c;都将带动比特币进入牛市行情&#xff0c;还有三个多月时间&#xff0c;现在比特币经过底部针震荡整理后&#xff0c;形成了坚实的“双针探底”形态&#xff0c;确认比特币底部形成&#xff0c;随后迎来了非常强势的单边趋势性行情机会 &#xff0c;相…