基于Transformer的高效、低延时、流式语音识别模型
从场景上,语音识别可以分为流式语音识别和非流式语音识别。非流式语音识别(离线识别)是指模型在用户说完一句话或一段话之后再进行识别,而流式语音识别则是指模型在用户还在说话的时候便同步进行语音识别。流式语音识别因为其延时低的特点,在工业界中有着广泛的应用,例如听写转录等。
Transformer流式语音识别挑战
目前,Transformer 模型虽然在离线场景下可以进行准确的语音识别,但在流式语音识别中却遭遇了两个致命的问题:
1)计算复杂度和内存储存开销会随着语音时长的增加而变大。
由于 Transformer 使用自注意力模型时会将所有的历史信息进行考虑,因此导致了存储和计算的复杂度会随着语音时长线性增加。而流式语音识别往往本身就有很长的语音输入,所以原生的 Transformer 很难应用于流式语音识别之中。
图1:流式语音识别 Transformer 自注意力示意图
2)Transformer 模型由于层数过多会导致未来窗口大小(lookahead window)传递。
如下图所示,Transformer 模型如果每层往后看一帧,那么最终的向前看(lookahead)会随着 Transformer 层数的增加而累积。例如,一个18层的Transformer,最终会积累18帧的延时,这将在实际应用中带来很大的延时问题,使得语音识别反应速度变慢,用户体验不佳。
图2:Transformer 的未来窗口随层数而增加
基于块和基于记忆的解决方案
为了解决上述 Transformer 模型在流式语音识别中的问题,科研人员提出了基于块(chunk)和基于记忆(memory)的两种解决方案。
1) 基于块(chunk)的解决方案
第一种方案为基于块的解决方案,如下图所示,其中虚线为块的分隔符。其主体思想是把相邻帧变成一个块,之后根据块进行处理。这种方法的优点是可以快速地进行训练和解码,但由于块之间没有联系,所以导致模型准确率不佳。
图3:基于块的流式语音识别解决方案
2) 基于记忆(memory)的解决方案
基于记忆的解决方案的主体思想则是在块的基础上引入记忆,让不同块之间可以联系起来。然而,此方法会破坏训练中的非自循环机制,使得模型训练变慢。
图4:基于记忆的流式语音识别解决方案
工业界中往往有着大量的训练数据,基于记忆的解决方案会让模型训练开销增大。这就促使研究人员需要去寻找可以平衡准确率、训练速度和测试速度的方案。
快速训练和解码,Mask is all you need
针对上述问题,微软的研究员们提出了一种快速进行训练和解码的方法。该方法十分简单,只需要一个掩码矩阵便可以让一个非流的 Transformer 变成流的 Transformer。
下图为非流和0延时的掩码矩阵,其为一个全1矩阵,或者一个下三角阵。
图5:离线语音识别编码器掩码矩阵
图6:0延时的流式语音识别编码器掩码矩阵
研究员们希望将基于块的方法中的不同块连接起来,并保持 Transformer 并行训练的特点。为了达到这个目的,研究员们提出了一种基于块的流式 Transformer,具体算法如下:
首先,在当前帧左侧,让每一层的每一帧分别向前看 n 帧,这样随着层数的叠加,Transformer 对历史的视野可以积累。如果有 m 层,则可以看到历史的 n*m 帧。虽然看到了额外的 n*m 帧,但这些帧并不会拖慢解码的时间,因为它们的表示会在历史计算时计算好,并不会在当前块进行重复计算。与解码时间相关的,只有每一层可以看到帧的数目。
因为希望未来的信息延时较小,所以要避免层数对视野的累积效应。为了达到这个目的,可以让每一个块最右边的帧没有任何对未来的视野,而块内的帧可以互相看到,这样便可以阻止延时随着层数而增加。
最后,在每个块之间让不同帧都可以相互看到,这样平均延时即块长度的二分之一。
此方法可以让 Transformer 保持并行训练的优势,快速进行训练,其得到的掩码矩阵如下。
图7:所提出方法的编码器掩码矩阵
在解码过程中,解码时间主要由块的大小而决定。将之前的 key 和 value 进行缓存,这样可以避免重复计算,以加速解码。该方法的公式如下,历史的 key 和 value(标红)在进行注意力权重(attention weight)计算中被缓存。
实验
数据集与模型设置
研究员们的实验在微软内部进行了6.5万小时以上的训练,并在微软内部约180万词的测试集上进行了测试。实验使用了32个 GPU,以混合精度的方式训练了约两天可以使模型收敛,并且使用 torchjit 进行测速。研究员们使用 Transducer 框架实现语音识别流式识别,实验对比了 Transformer Transducer (T-T)、Conformer Transducer (C-T)以及 RNN Transducer(RNN-T),其中 Transformer 和 Conformer 的编码部分使用了18层,每层 hidden state(隐藏状态)= 512的参数量。而 Transducer 中的预测网络(predictor network)则使用了 LSTM 网络结构,并包含两层,每层 hidden state = 1024。RNN-T 也与其大小相似。
低延时解码效果
表1:低延时解码效果
从表1可以看到:1)在低延时的情况下,T-T 和 C-T 会比 RNN-T 消除10% 的词错率( Word Error Rate,WER);2)如果每层向左看60帧(1.8s),它和看全部历史的结果相比,性能损失不大,约1%左右;3)然而 T-T 的速度却比 RNN-T 慢了一些,在四线程的情况下 Transformer 速度比 RNN 慢了3倍左右。这个问题可以尝试利用批(batch)的方法来解决,即把相邻的几帧一起进行解码,再利用 Transformer 的并行能力,加速解码。
表2:Transformer 的实时率
表2是根据批(batch)中帧的数目的不同,所对应的不同的 Transformer 的实时率。可以看到在两帧一起解码时,Transformer 就已经达到了 RTF<1,而在5帧一起时,RTF<5。据此可以得出结论,在牺牲很少的延时的情况下(2帧约为 40ms),T-T 可以不做量化便可在实际场景中应用。
低延时解码效果
表3:低延时解码效果
而在低延时的情况下,Transformer Transducer 家族的优势更是得以突显。对比传统混合(hybrid)模型,T-T有着13%的 WER改 善,对比流式的 S2S 模型(参数量一致),Transducer 模型往往会达到更好的效果(对比 RNN S2S 和 Trans S2S)。而在同样的 Transducer 框架下,Transformer 模型会比 RNN 模型达到更好的效果,并且速度上也有显著的优势。令人惊讶的是,通过上述方法,目前 T-T 的离线和流式的距离不足10%,这就证明了研究员们提出的流式方法的有效性,可以最大程度避免精度的损失。
8比特量化
表4:8比特量化结果
经过8比特量化,可以得到更快的 Transducer 模型。在单线程的情况下,Transformer 可以提升一倍的速度,不过,RNN-T 可以提升约4倍的速度。其中,Transformer 速度提升有限的原因是,SoftMax 和 Layer Norm 等操作,难以通过8比特进行加速。
结语
在本文中,微软 Azure 语音团队与微软亚洲研究院的研究员们一起提出了一套结合 Transformer 家族的编码器和流式 Transducer 框架的流式语音识别方案解决方案。该方案利用 Mask is all you need 的机制,可以对流式语音识别模型进行快速训练以及解码。在六万五千小时的大规模训练数据的实验中,可以看到 Transformer 模型比 RNN 模型在识别准确率上有着显著地提高,并在低延时的场景下,解码速度更快。
未来,研究员们将继续研究基于 Transformer 的语音识别模型,力争进一步降低解码的运算消耗,在0延时的场景下,让 Transformer 模型可以与 RNN 模型达到相同的解码速度。
【编辑推荐】
- 欧盟推出新的人工智能法规
- AI人工智能等同于医生?
- 2021年将塑造新的人工智能
基于Transformer的高效、低延时、流式语音识别模型相关推荐
- 低延迟流式语音识别技术在人机语音交互场景中的实践
美团语音交互部针对交互场景下的低延迟语音识别需求,提出了一种全新的低出字延迟流式语音识别方案.本方法将降低延迟问题转换成一个知识蒸馏过程,极大地简化了延迟优化的难度,仅通过一个正则项损失函数就使得模型 ...
- 端到端流式语音识别研究综述——语音识别(论文研读)
端到端流式语音识别研究综述(2022.09) 摘要: 引言: 1 端到端流式语音识别模型 1.1 可直接实现流式识别的端到端模型 1.2 改进后可实现流式识别的端到端模型 1.2.1 基于单调注意力机 ...
- 基于HLS格式的低延时互动直播技术
在不牺牲服务质量(卡顿率.画面清晰度)的前提下,越低的延时能带来越好的互动性用户体验.为达成可扩展性.服务质量.互动性的三赢,Twitch团队研发了基于HLS格式的低延时互动直播技术.本文来自Twit ...
- 网易云信亮相LiveVideoStackCon2022,解构基于WebRTC的开源低延时播放器实践
8 月 5 日- 6 日,LiveVideoStackCon 2022 音视频技术大会上海站隆重召开,作为音视频领域颇具影响力的技术大会,此次大会吸引了众多行业专家,融汇新概念.新技术.新趋势和新思想 ...
- 基于ASP.NET Core SignalR的流式传输
基于ASP.NET Core SignalR的流式传输 SignalR概述 SignalR是ASP.NET Core下非常流行的实现Web实时功能的库.微软再文档中列出了适合的应用场景: 适合 Sig ...
- 完美解释:wenet-流式与非流式语音识别统一模型
Unified Streaming and Non-streaming Two-pass End-to-end Model for Speech Recognition[1] ,本文以该篇论文为主线, ...
- PaddleSpeech 流式语音识别系统 PP-ASR
(以下内容搬运自 PaddleSpeech) PP-ASR 目录 1. 简介 2. 特点 3. 使用教程 3.1 预训练模型 3.2 模型训练 3.3 模型推理 3.4 服务部署 3.5 支持个性化场 ...
- PPASR流式与非流式语音识别
前言 本项目将分三个阶段分支,分别是入门级 .进阶级 和最终级 分支,当前为最终级的V2版本,如果想使用最终级的V1版本,请在这个分支r1.x.PPASR中文名称PaddlePaddle中文语音识别( ...
- 基于Pytorch实现的流式与非流式语音识别
前言 MASR是一款基于Pytorch实现的语音识别框架,MASR致力于简单,实用的语音识别项目.可部署在服务器,Nvidia Jetson设备,未来还计划支持Android等移动设备. 源码地址:h ...
最新文章
- Python 越被黑越红?2 万程序员这么说......
- MapReduce运行机制-Map阶段
- 连续对焦 auto对焦_如何在Windows 10上使用对焦辅助(请勿打扰模式)
- datatype未定义是什么意思_vue.js一直提示未定义
- 【分享-快速仿站】无敌超强仿站小工具一键下载
- Android架构MVC,MVP与MVVM及MVPVM对比分析
- 错误:has been compiled by a more recent version of the Java Runtime (class file version 56.0)
- c语言word类型的题库,可下载c语言上机题库word版
- 个人总结 超详细 windows10下载与安装
- 6大最常用的Java机器学习库一览
- boost - 智能指针介绍
- 科技战疫,多家科技企业IT工程师驻地武汉驰援
- 日有所思(4)——磁密,磁场强度,磁通量傻傻分不清
- 使用AHK减少鼠标和方向键的使用频率,高效编辑
- 树莓派通过MFRC522写UIC卡0扇区
- Android编程权威指南.第3版.pdf
- java获取IP地址
- Linux NFS文件系统挂载
- pycharms 如何退出 python shell
- 各大电商平台如何快速获取店铺数据?
热门文章
- 中国国产万亿次高性能计算机向产业化迈进
- mysql img格式缩放,再学 GDI+[89]: TGPImage(9) - 图像缩放时的质量(算法)
- 荧光皮肤有哪些_荧光增白剂真的致癌吗?
- 在VM虚拟机中 CentOS7安装VMware Tools(超级详解)
- 二叉树前序遍历-递归与非递归
- pandas isnull() 返回bool
- tensorflow.transpose的理解
- java.lang.instrument 学习(一)
- 程序员那些年的斗智斗勇!!!
- Docker系列 五.Docker容器数据卷