2018-07-26 22:32:01 juwairen_yangfeng 阅读数 926
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    6094 人正在学习 去看看 杨波

摘要:语音识别作为人工智能下很火爆的一门学科,是当下研究的一个重要领域。大多数的语音识别是基于市面上已有的语音识别模块,成本较高,本系统是孤立词语语音识别,考虑到成本以及可实现性,笔者选择了STM32F1系列MCU的最小系统,通过TFT彩屏实现人机交互,搭建音频采集模块,从而完成语音识别系统的硬件部分。软件设计采用A/D采样、预加重、加窗、端点检测、MFCC特征提取、特征匹配几个步骤,技术相对成熟,识别率较高。

主题词:孤立词语、音频采集模块、端点检测、MFCC特征提取、特征匹配

 

一、引言:语音识别的发展最早开始于上世纪50年代的贝尔实验室,Davis等科学家研究出可以识别出10个英文数字的实验装置。60年代的一系列数字信号处理方法推动了语音识别的发展,如FFT。同时,伴随着计算机技术的发展,语音识别逐渐从硬件工作转移到软件工作,这时的语音识别发展 很快,但人们很快就意识到语音识别的困难加深。此后,70年代日本学着提出的动态时间规整技术(DTW)解决不等长语音的对整匹配问题,以及80年代提出的隐马尔可夫模型法(HMM),都是现阶段语音识别的重要算法。

二、正文:

音频采集电路:首先是对于语音信号的采集,本系统使用电容式咪头采集音频,但MIC的输出电压只有几毫伏到十几毫伏,所以需要加放大电路,可采用三极管或者运放放大。本系统采用三极管阻容耦合二级放大电路,需要注意的是咪头需要一个工作电压,所以直接将VCC接到咪头的正极,然后第一级的耦合电容设置为10uf,这个对三极管基极充电时间有影响,它和集电极的电阻一同构成了RC充电电路,且10uf的电容会把音频信号耦合到基极上,咪头采集到的信号控制在3.3V以内。单片机是无法识别模拟电信号的,所以需要用到A/D采样;人说话的语音信号大多数有效信号集中在100HZ-3400HZ,所以根据香农采样定理,只要A/D采样频率大于等于6800HZ即可,这对于我们STM32F1系列单片机来说是完全可以实现的,接着考虑A/D精度,STM32F1ZET6拥有1~3个12 位逐次逼近型的模拟数字转换器,对于Vref=3.3v来说其最小误差为0.8mv,这是完全可以接受的,这就实现了语音模拟信号的采样量化。

高频补偿:经过研究,人的发生器官也相当于一个时变线性系统,在8000HZ以上频率时,会有大约6dB/倍频的频率衰减,所以为了平滑频率,需要对信号进行高频预加重,即 运用一个6dB/倍频的一阶数字滤波器。

语音信号的加窗处理:语音信号有一个很强的特性,那就是短时性,但从另一方面看,由于语音的形成过程是与发音器官的运动密切相关的,这种物理性的运动比起声音振动速度来说是缓慢的,所以在一个短时间范围内可以认为其变化很小,借此,我们对语音信号进行短时分析(分帧),一般语音信号在10ms-30ms之间保持稳定,我们去每帧长度为20ms,且为了使语音信号的连续性,每一帧之间混叠窗长的一半;窗函数的选择大致有矩形窗、汉宁窗、哈明窗等,而窗函数的选择要求一般包含两点:①尽量减少窗函数的旁瓣高度,使能量集中在主瓣②主瓣宽度尽量窄,以获得较陡的过渡带;介于以上条件,我们选择哈明窗。由于帧与帧连接处的信号因为加窗而弱化,如果没有帧移,这部分信息就丢失了。

端点检测:当系统接收到一段完整的语音信号时,去除语音段前后的噪声对于我们语音参数提取具有重要意义。经研究,当我们在发出语音时,清音和浊音会不断的出现,发现浊音的短时能量明显比环境噪声高,清音的短时平均过零率与环境噪声也有明显的区别,所以利用这个特性,设定短时能量和短时平均过零率的门限值,当某一帧的短时能量或短时平均过零率大于门限值,则可认为进入有效语音段,设定为语音起点,当某一帧的短时能量和短时平均过零率都小于门限值时,认为这是语音末点。

特征提取算法在语音识别系统中,模拟语音信号在完成 A/D 转换后成为数字信号。此时的语音信号为时域的信号,时域的信号难以进行分析和处理,而且数据量庞大。通常的做法是对时域信号进行变换,提取其中某种特定的参数,通过一些更加能反映语音本质特征的参数来进行语音识别。进过几十年的发展,语音特征提取算法大致有三类:

基于线性预测分析的提取方法 (LPCC)、基于频谱分析的提取方法(MFCC)、基于其它数字信号处理技术的特征分析方法,本系统采用基于频谱分析的提取方法,Mel频率倒谱频系数MFCC。

MFCC是Mel-Frequency Cepstral Coefficients的缩写,顾名思义MFCC特征提取包含两个关键步骤:转化到梅尔频率,然后进行倒谱分析。梅尔刻度是一种基于人耳对等距的音高(pitch)变化的感官判断而定的非线性频率刻度。和频率的赫兹的关系如下: M=2595log10(1+f/700)所以当在梅尔刻度上面上是均匀分度的话,对于的赫兹之间的距离将会越来越大。梅尔刻度的滤波器组在低频部分的分辨率高,高频部分分辨率低,这跟人耳的听觉特性是相符的。所以对于有效语音段,进行离散傅里叶变化(DFT),将频谱信号通过一组Mel尺度的三角形滤波器组,定义一个有M个滤波器的滤波器组,采用的滤波器为三角滤波器,中心频率为f(m),m=1,2,...,M。M通常取22-26。各f(m)之间在赫兹轴上的间隔随着m值的减小而缩小,随着m值的增大而增宽,但在梅尔刻度却是等距离。最后就是离散余弦变换,进行反傅里叶变换然后通过低通滤波器获得最后的低频信号,这样能量会集中在低频部分。每个三角滤波器会有一个输出,通过以上计算实现了每帧数据从N(FFT点数 )点到M点的降维,大大减小了计算量,减小了内存开销、缩减了运算时间。

特征匹配算法:现阶段,语音识别用到的模型匹配方法主要有动态时间规整(DTW)、隐马尔可夫模型(HMM)和人工神经网络。本系统用于孤立词识别,DTW 算法与 HMM 算法在相同的环境条件下,识别效果相差不大,但是 HMM 算法要复杂得多,这主要体现在HMM 算法在训练阶段需要提供大量的语音数据,通过反复计算才能得到模型参数,而 DTW 算法的训练中几乎不需要额外的计算。所以在孤立词语音识别中,DTW 算法得到更广泛的应用。笔者觉得,对于一个算法的理解,首先得从它的物理意义开始,在网上很多人的博客里都对这个算法有过通俗的解释,并配以实例,在这我就不多加说明了。主要步骤为初始化矩阵,计算每个数据之间的“距离”,计算累计匹配距离,匹配距离最小的特征模板与输入特征有最大的相似性。

单片机软件设计:首先,一段短时语音信号长度大约为2s以内,我们以8khz的ADC采用频率去采样得到的最大点数为16000,因为STM32F1为12位ADC,所以每个点的数据相当于两个字节,总的算来需要16000*2=32000字节,对于拥有64KB RAM的STM32F103ZET6来说在内存上是可以实现的。ST官方固件库提供的16位、1024点FFT用时2.138 ms,20ms为一帧,算下来总共有100帧,也就是100次1024点的FFT计算,总用时就是213.8ms,加上其他地方的指令、算法运算时间,识别一个指令应该在0.5s以内。至于每帧20ms,按照8khz的采样频率只能得到160个点,采用1024点FFT则需要在尾部补864个零,因为由公式(delta f)=fs/N 补零可以提高频率分辨率。且考虑到ADC采样次数比较多,所以采集到的数据采用DMA的方式传输到设定的数组,这样可以节省指令执行时间。从工程的初始化开始,代码如下……先是设定单片机运行频率(72MHZ),延时函数初始化(SysTick),ADC、DMA、按键函数部分以及需要用到的引脚的初始化,main()中的主要为一个按键函数来实现何时进行模板训练,何时进行语音识别。工程的主要部分为端点检测、MFCC语音特征提取、以及特征提算DTW的代码实现。想着重提出来说的是DTW算法,算法基于动态规划(DP)的思想,用于于长度不等的序列如何匹配。通俗理解也就是说怎么样的warping才是正确的?直观上理解,当然是warping一个序列后可以与另一个序列重合recover。这个时候两个序列中所有对应点的距离之和是最小的。所以从直观上理解,warping的正确性一般指“feature to feature”的对齐,我想这也是动态时间规整算法的核心。这个解释应该很宏观,理解了物理意义,这个算法也变的简单起来。

对于它的起源(DP)我们不去过多的诉说,而它广阔的应用前景,结合cpp面向对象的特性,我想我们可以把这个warping运用的很只能,就像对于人的情感、关系,将两个人综合特征的显现进行“匹配”,或是两代人之间的种种特征(貌似很像DNA检测,不过一个是唯物,一个是格物),这是对对象的一个小小改变。

2020-02-18 16:43:13 weixin_44532659 阅读数 274
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    6094 人正在学习 去看看 杨波

“智能客服+人工坐席”的新型客户服务模式,通过自动化的语音识别技术,降低客服中心的人力成本,提升客服中心的运营效率。

应用场景:客服质检、机器人外呼、语音导航

智能客服和领域非常相关,不同领域的话题各不相同,还有大量的领域词汇,所以需要根据不同领域来训练相应的语音识别模型。

客服语音识别的技术挑战:
1、有些客户普通话口音重:不同地域有不同的口音特点
2、自然风格说话:语速快、吐字不清、抢话叠字
3、电话信道、领域术语多:电话信道8Kh采样,音质差。不同行业有自己独特的领域术语
4、有些客户讲方言:中国有七大方言区、数十种方言

语音数据训练测试实验:
一、全领域客服测试
测试数据:涵盖金融、电信、教育、电商、房产等领域的客服语音
在这里插入图片描述
ASR1: “普通话朗读数据”训练所得模型
ASR1+2: ASR1基础上,增加“重口音普通话数据”
ASR1+2+3: ASR1+2基础上,增加“普通话自然对话数据”
ASR1+2+3+4: 在ASR1+2+3基础上,增加“实网客服语音数据”

结论:
只使用数据堂普通话朗读数据训练后,识别模型的字错率是54.8%,在叠加数据堂重口音普通话、普通话自然对话、实网客服语音后,字错率降到了12.5%.

二、金融领域客服测试
测试数据:金融领域的客服语音
在这里插入图片描述
ASR1: “普通话朗读数据”训练所得模型
ASR1+2: ASR1基础上,增加“重口音普通话数据”
ASR1+2+3: ASR1+2基础上,增加“普通话自然对话数据”
ASR1+2+3+4: 在ASR1+2+3基础上,增加“实网客服语音数据”

结论:
只使用数据堂普通话朗读数据训练后,识别模型的字错率是54.8%,在叠加数据堂重口音普通话、普通话自然对话、实网客服语音后,字错率降到了12.5%.

相关实验数据:

一、普通话朗读语音
1505小时普通话手机采集语音数据
在这里插入图片描述

849小时普通话家居交互手机语音数据
在这里插入图片描述

二、普通话自然对话语音

1000小时普通话多人自然对话语音数据
在这里插入图片描述
2000小时普通话两人自然对话语音数据
在这里插入图片描述

1420小时普通话自然语音手机采集数据
在这里插入图片描述

三、重口音普通话语音

1026小时重口音普通话手机采集语音数据
在这里插入图片描述

662小时重口音普通话手机采集语音数据
在这里插入图片描述

132小时重口音普通话手机采集语音数据
在这里插入图片描述

四、实网客服语音

2823小时普通话客服实网语音采集数据
在这里插入图片描述

555小时全领域客服实网语音采集数据
在这里插入图片描述

140小时电商客服普通话实网采集语音数据
在这里插入图片描述

五、方言语音

方言语音-朗读
在这里插入图片描述

方言语音-自然对话
在这里插入图片描述
https://www.datatang.com/dataset/all/1

2019-05-07 12:00:22 zhangruiwenbb 阅读数 668
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    6094 人正在学习 去看看 杨波

机器学习及自然语言处理技术的进步,开启了人与人工智能进行语音交互的可能,人们通过对话的方式获取信息、与机器进行交互。在全新的AI历史机遇下,语音识别被应用于不同场景和不同设备,如多场景智能语音交互,应用于智能客服,外呼机器人,实时电话质检等场景;如呼叫中心音频文件转写,企业可使用呼叫中心音频文件转写服务,将电销业务、客服业务、质检业务等多场景的语音精准地转为文字,提升企业效率并降低成本。

日常中智能家居与配备语音助手的智能终端给人们的生活与出行带来更多的方便。语音是人机互动下一阶段的最主要方式,AI技术结合语音通信技术,将创造出有学习能力的语音识别和语音交互系统,未来所有的服务或许都只需要语音对话来触发。

一.测试方案
语音识别测试主要包括语音唤醒及语音辨识准确度。
在这里插入图片描述
语音识别测试示意图

语音唤醒的测试,通过系统控制将唤醒音源传输给人工嘴,人工嘴以指定的声压级、角度、距离发声传给被测样品,确认被测样品的响应状态。
语音识别准确度的测试,通过系统控制人工嘴跟被测样品完成语音交互,记录被测样品应答状态,被测样品将语音转化为文字存储,与音源文件进行对比,计算准确度。

二.测试实验室
VoiceX实验室主要完成手机、智能手表、智能音箱、智能家居等智能终端的语音性能测试和语音识别测试。

在这里插入图片描述

VoiceX支持多种通讯模式,可接入蓝牙、LAN、WLAN、digisignal等测试信号模式,可对语音信号进行MOS、POLQA、PESQ算法分析,支持各类型的语音识别终端和APP,对识别率进行自动测试。

三.测试项目
语音识别测试主要包括语音唤醒率及语音辨识准确度。

附表1 测试项目
在这里插入图片描述

VoiceX专注于声学领域的应用研究,坚持技术导向型发展,通过声学测试技术和服务,改善产品的用户体验,助力中国产品和研发能力的提升。VoiceX 拥有完备的测试设备,优秀的检测工程师,丰富的经验和坚实的专业技术,随时为您提供最专业的声学测试解决方案和测试服务。

睿辉声学(深圳)科技有限公司
VoiceX Acoustics (Shenzhen)Ltd.

公司地址:深圳市龙华区龙环三路329号金禾田商务中心
联系电话:0755-21058684
公司网站:www.voicextech.com
电子邮箱:business@voicextech.com
邮政编码:518000

2017-10-20 14:45:35 weixin_34273481 阅读数 93
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    6094 人正在学习 去看看 杨波

语音识别技术是人机交互技术的重要组成部分,而语音识别中的声学模型是语音识别技术中的核心所在,堪称重中之重。阿里巴巴iDST智能语音交互团队最新的LFR-DFSMN模型相对于之前的LFR-LCBLSTM模型可以达到训练加速3倍、识别加速2倍、识别错误率降低20%和最终模型大小压缩50%的效果,实现了语音识别的迭代速度、识别成本、服务质量的全面提升。

一、语音识别背景介绍  

语音识别技术一直都是人机交互技术的重要组成部分。有了语音识别技术,机器就可以像人类一样听懂说话,进而能够思考、理解和反馈。近几年随着深度学习技术的使用,基于深度神经网络的语音识别系统性能获得了极大的提升,开始走向实用化。基于语音识别的语音输入、语音转写、语音检索和语音翻译等技术得到了广泛的应用。阿里巴巴iDST智能语音交互团队一直以来也致力于语音识别技术的研究,同时注重技术的产品落地,在工业界大规模的问题上将技术真正发扬光大去解决实际的问题。

2016年年初iDST就在工业界第一次上线了基于Latency Controlled-BLSTM-DNN hybrid的语音识别系统,这也是BLSTM模型在工业界第一次进行实时语音识别服务。相对于早期基于DNN的声学模型,以及现在工业界大规模采用的基于LSTM的声学模型,iDST的这种声学模型既保持了BLSTM声学模型的高准确率的优点,又通过Latency Control设计避免了BLSTM声学模型带来的高延时的缺点,可谓是“一举两得(更多阅读请查阅之前的分享博客[1])。2016年底,通过结合Lower Frame Rate技术,iDST智能语音交互团队进一步优化了该声学模型,一举将解码时间加速了三倍以上,通俗点说就是把语音识别服务成本降低了三倍以上,为语音识别技术走入各行各业成为基础设施打下坚实基础。在刚刚结束的云栖大会上,提到了iDST智能语音交互团队关于语音识别声学模型的一个最新的技术进展,即LFR-DFSMN(Lower Frame Rate-Deep Feedforward Sequential Memory Networks)。本文将介绍这一声学模型的研究背景,以及我们的具体实现工作。

二、语音识别声学模型回顾                                                                                            

463dd42c8f99b5f1c088862f0ae1999777b55ae0

图 1. 基于DNN-HMM的语音识别系统框图


目前主流的语音识别系统普遍采用基于深度神经网络和隐马尔可夫(Deep Neural Networks-Hidden Markov Model, DNN-HMM)的声学模型,其模型结构如图 1所示。声学模型的输入是传统的语音波形经过加窗、分帧,然后提取出来的频谱特征,如 PLP, MFCC 和 FBK等。而模型的输出⼀般采用不同粒度的声学建模单元,例如单音素 (mono-phone)、单音素状态、绑定的音素状态 (tri-phone state) 等。从输入到输出之间可以采用不同的神经网络结构,将输入的声学特征映射得到不同输出建模单元的后验概率,然后再结合HMM进行解码得到最终的识别结果。

最早采用的网络结构是前馈全连接神经网路(Feedforward Fully-connected Neural Networks, FNN)。FNN实现固定输入到固定输出的一对一映射,其存在的缺陷是没法有效利用语音信号内在的长时相关性信息。一种改进的方案是采用基于长短时记忆单元(Long-Short Term Memory,LSTM)的循环神经网络(Recurrent Neural Networks,RNN)。LSTM-RNN通过隐层的循环反馈连接,可以将历史信息存储在隐层的节点中,从而可以有效的利用语音信号的长时相关性。进一步的通过使用双向循环神经网络(Bidirectional RNN),可以有效的利用语音信号历史以及未来的信息,更有利于语音的声学建模。基于循环神经网络的语音声学模型相比于前馈全连接神经网络可以获得显著的性能提升。但是循环神经网络相比于前馈全连接神经网络模型更加复杂,往往包含更多的参数,这会导致模型的训练以及测试都需要更多的计算资源。另外基于双向循环神经网络的语音声学模型,会面临很大的时延问题,对于实时的语音识别任务不适用。现有的一些改进的模型例如基于时延可控的双向长短时记忆单元(Latency Controlled LSTM,LCBLSTM )[2-3],以及前馈序列记忆神经网络(Feedforward Sequential Memory Networks,FSMN)[3-5]。去年我们在工业界第一个上线了基于LCBLSTM的语音识别声学模型。配合阿里的大规模计算平台和大数据,采用多机多卡、16bit量化等训练和优化方法进行声学模型建模,取得了相比于FNN模型约17-24%的相对识别错误率下降。

三、FSMN模型的前世今生

1.     FSMN模型

 e1524ba8ff9f220352418b922ff5803f155993ee 

2. FSMN模型结构以及和RNN的对比


FSMN是近期被提出的一种网络结构,通过在FNN的隐层添加一些可学习的记忆模块,从而可以有效的对语音的长时相关性进行建模。FSMN相比于LCBLSTM不仅可以更加方便的控制时延,而且往往也能获得更好的性能,需要的计算资源也更少。但是标准的FSMN很难训练非常深的结构,会由于梯度消失问题导致训练效果不好。而深层结构的模型目前在很多领域被证明具有更强的建模能力。因而针对此我们提出了一种改进的FSMN模型,称之为深层的FSMN(Deep-FSMN, DFSMN)。进一步的我们结合LFR(lower frame rate)技术构建了一种高效的实时语音识别声学模型,相比于去年我们上线的LCBLSTM声学模型可以获得超过20%的相对性能提升,同时可以获得2-3倍的训练以及解码的加速,可以显著的减少我们的系统实际应用时所需要的计算资源。

2.     FSMN到cFSMN的发展历程

最早提出的FSMN的模型[3]结构如图 2(a)所示,其本质上是一个前馈全连接神经网络,通过在隐层旁添加一些记忆模块(memory block)来对周边的上下文信息进行建模,从而使得模型可以对时序信号的长时相关性进行建模。记忆模块采用如图 2(b)所示的抽头延迟结构将当前时刻以及之前 N 个时刻的隐层输出通过一组系数编码得到一个固定的表达。FSMN的提出是受到数字信号处理中滤波器设计理论的启发:任何无限响应冲击(Infinite Impulse Response, IIR)滤波器可以采用高阶的有限冲击响应(Finite Impulse Response, FIR)滤波器进行近似。从滤波器的角度出发,如图 2(c)所示的RNN模型的循环层就可以看作如图 2(d)的一阶IIR滤波器。而FSMN采用的采用如图 2(b)所示的记忆模块可以看作是一个高阶的FIR滤波器。从而FSMN也可以像RNN一样有效的对信号的长时相关性进行建模,同时由于FIR滤波器相比于IIR滤波器更加稳定,因而FSMN相比于RNN训练上会更加简单和稳定。

根据记忆模块编码系数的选择,可以分为:1)标量FSMN(sFSMN);2)矢量FSMN(vFSMN)。sFSMN 和 vFSMN 顾名思义就是分别使用标量和矢量作为记忆模块的编码系数。sFSMN和vFSMN记忆模块的表达分别如下公式:

b4ed4bebbfda36e36d8370610707f7740c327476

以上的FSMN只考虑了历史信息对当前时刻的影响,我们可以称之为单向的FSMN。当我们同时考虑历史信息以及未来信息对当前时刻的影响时,我们可以将单向的FSMN进行扩展得到双向的FSMN。双向的sFSMN和vFSMN记忆模块的编码公式如下:

a3c39b5cd1987d7b6dd6d27955756b1385ad0f0f

这里N1和N2分别代表回看(look-back)的阶数和向前看(look-ahead)的阶数。我们可以通过增大阶数,也可以通过在多个隐层添加记忆模块来增强FSMN对长时相关性的建模能力。

4df9c3503840ad148b28e3afbd0bd2b21f1c07da

图 3. cFSMN结构框图


FSMN相比于FNN,需要将记忆模块的输出作为下一个隐层的额外输入,这样就会引入额外的模型参数。隐层包含的节点越多,则引入的参数越多。研究[4]结合矩阵低秩分解(Low-rank matrix factorization)的思路,提出了一种改进的FSMN结构,称之为简洁的FSMN(Compact FSMN,cFSMN)。如图3所示,是一个第l个隐层包含记忆模块的cFSMN的结构框图。对于cFSMN,通过在网络的隐层后添加一个低维度的线性投影层,并且将记忆模块添加在这些线性投影层上。进一步的,cFSMN对记忆模块的编码公式进行了一些改变,通过将当前时刻的输出显式的添加到记忆模块的表达中,从而只需要将记忆模块的表达作为下一层的输入。这样可以有效的减少模型的参数量,加快网络的训练。具体的,单向和双向的cFSMN记忆模块的公式表达分别如下:

31345763ac5b86423805c57ad69386f9d8d87081

四、LFR-DFSMN声学模型

1.     Deep-FSMN (DFSMN)网络结构

d55827e272b223c6d40bd6e5f52cdfbd42fcfbc2
如图 4是我们进一步提出的Deep-FSMN(DFSMN)的网络结构框图,其中左边第一个方框代表输入层,右边最后一个方框代表输出层。我们通过在cFSMN的记忆模块(红色框框表示)之间添加跳转连接(skip connection),从而使得低层记忆模块的输出会被直接累加到高层记忆模块里。这样在训练过程中,高层记忆模块的梯度会直接赋值给低层的记忆模块,从而可以克服由于网络的深度造成的梯度消失问题,使得可以稳定的训练深层的网络。我们对记忆模块的表达也进行了一些修改,通过借鉴扩张(dilation)卷积[6]的思路,在记忆模块中引入一些步幅(stride)因子,具体的计算公式如下:
951d476659e8c74093c2dab4d21506a2f13a6d7e
对于实时的语音识别系统我们可以通过灵活的设置未来阶数来控制模型的时延,在极端情况下,当我们将每个记忆模块的未来阶数都设置为0,则我们可以实现无时延的一个声学模型。对于一些任务,我们可以忍受一定的时延,我们可以设置小一些的未来阶数。相比于之前的cFSMN,我们提出的DFSMN优势在于,通过跳转连接可以训练很深的网络。对于原来的cFSMN,由于每个隐层已经通过矩阵的低秩分解拆分成了两层的结构,这样对于一个包含4层cFSMN层以及两个DNN层的网络,总共包含的层数将达到13层,从而采用更多的cFSMN层,会使得层数更多而使得训练出现梯度消失问题,导致训练的不稳定性。我们提出的DFSMN通过跳转连接避免了深层网络的梯度消失问题,使得训练深层的网络变得稳定。需要说明的是,这里的跳转连接不仅可以加到相邻层之间,也可以加到不相邻层之间。跳转连接本身可以是线性变换,也可以是非线性变换。具体的实验我们可以实现训练包含数十层的DFSMN网络,并且相比于cFSMN可以获得显著的性能提升。从最初的FSMN到cFSMN不仅可以有效的减少模型的参数,而且可以获得更好的性能[4]。进一步的在cFSMN的基础上,我们提出的DFSMN,可以更加显著的提升模型的性能。如下表是在一个2000小时的英文任务上基于BLSTM,cFSMN,DFSMN的声学模型性能对比。从下表中可以看到,在2000小时这样的任务上,DFSMN模型可以获得比BLSTM声学模型相对14%的错误率降低,显著提高了声学模型的性能。

Model

BLSTM

cFSMN

DFSMN

WER%

10.9

10.8

9.4


2.     基于LFR-DFSMN的语音识别声学模型

80606de5ad682b76cb6414cc3a1e612ef5bcb73b

5. LFR-DFSMN声学模型结构框图

目前的声学模型,输入的是每帧语音信号提取的声学特征,每帧语音的时长通常为10ms,对于每个输入的语音帧信号会有相对应的一个输出目标。最近有研究提出一种低帧率(Low Frame Rate,LFR)[7]建模方案:通过将相邻时刻的语音帧进行绑定作为输入,去预测这些语音帧的目标输出得到的一个平均输出目标。具体实验中可以实现三帧(或更多帧)拼接而不损失模型的性能。从而可以将输入和输出减少到原来的三分之一甚至更多,可以极大的提升语音识别系统服务时声学得分的计算以及解码的效率。我们结合LFR和以上提出的DFSMN,构建了如图 5的基于LFR-DFSMN的语音识别声学模型,经过多组实验我们最终确定了采用一个包含10层cFSMN层+2层DNN的DFSMN作为声学模型,输入输出则采用LFR,将帧率降低到原来的三分之一。识别结果和去年我们上线的最好的LCBLSTM基线比较如下表所示。通过结合LFR技术,我们可以获得三倍的识别加速。从上表中可以看到,在实际工业规模应用上,LFR-DFSMN模型比LFR-LCBLSTM模型可以获得20%的错误率下降,展示了对大规模数据更好的建模特性。

CER%

产品线A

产品线B

LFR-LCBLSTM

18.92

10.21

LFR-DFSMN

15.00(+20.72%)

8.04(21.25%) 


五、基于多机多卡的大数据声学模型训练

实际的语音识别服务通常会面对非常复杂的语音数据,语音识别声学模型一定要尽可能的覆盖各种可能的场景,包括各种对话、各种声道、各种噪音甚至各种口音,这就意味着海量的数据。而如何应用海量数据快速的训练声学模型并上线服务,就直接关系到业务相应速度。我们利用阿里的Max-Compute计算平台和多机多卡并行训练工具,在使用8机16GPU卡、训练数据为5000小时的情况下,关于LFR-DFSMN声学模型和LFR-LCBLSTM的训练速度如下表:

 

处理一个epoch需要的时间

LFR-LCBLSTM

10.8小时

LFR-DFSMN

3.4小时

相比于基线LCBLSTM模型,每个epoch DFSMN可以获得3倍的训练速度提升。在2万小时的数据量上训练LFR-DFSMN,模型收敛一般只需要3-4个epoch,因此在16GPU卡的情况下,我们可以在2天左右完成2万小时数据量的LFR-DFSMN声学模型的训练。

六、解码延时、识别速度和模型大小

设计更为实用化的语音识别系统,我们不仅需要尽可能的提升系统的识别性能,而且需要考虑系统的实时性,这样才能给用户提供更好的体验。此外在实际应用中我们还需要考虑服务成本,因而对于语音识别系统的功耗也有一定的要求。传统的FNN系统,需要使用拼帧技术,解码延迟通常在5-10帧,大约50-100ms。而去年上线的LCBLSTM系统,解决了BLSTM的整句延迟的问题,最终可以将延时控制在20帧左右,大约200ms。对于一些对延时有更高要求的线上任务,还可以在少量损失识别性能的情况下(0.2%-0.3%绝对值左右),将延迟控制在100ms,完全可以满足各类任务的需求。LCBLSTM相比于最好的FNN可以获得超过20%的相对性能提升,但是相同CPU上识别速度变慢(即功耗高),这主要是由模型的复杂度导致。

我们最新的LFR-DFSMN,通过LFR技术可以将识别速度加速3倍以上,进一步的DFSMN相比于LCBLSTM在模型复杂度上可以再降低3倍左右。如下表是我们在一个测试集上统计的不同的模型需要的识别时间,时间越短则表示我们所需要的计算功耗越低:

模型

整个测试集识别所需要的时间

LCBLSTM

956

DFSMN

377

LFR-LCBLSTM

339

LFR-DFSMN

142

关于LFR-DFSMN的解码时延问题,我们可以通过减小记忆模块滤波器的向未来看的阶数来减小时延。具体实验中我们验证了不同的配置,当我们将LFR-DFSMN的延时控制在5-10帧时,大致只损失相对3%的性能。 此外,相对于复杂的LFR-LCBLSTM模型,LFR-DFSMN模型具有模型精简的特点,虽然有10层DFSMN,但整体模型大小只有LFR-LCBLSTM模型的一半,模型大小压缩了50%。


参考文献

  • [1] https://yq.aliyun.com/articles/2308?spm=5176.100244.teamhomeleft.53.ifFpZn
  • [2] Yu Zhang, Guoguo Chen, Dong Yu, and Kaisheng Yao, ng Yao,  long short term memory RNNs for distant speech recognition, in IEEE International Conference of Acoustics,Speech and Signal Processing (ICASSP), 2016, pp. 5755-5759.
  • [3] Xue S, Yan Z. Improving latency-controlled BLSTM acoustic models for online speech recognition[C], Acoustics, Speech and Signal        Processing (ICASSP), 2016 IEEE International Conference on. IEEE. 2017.
  • [4] Zhang S, Liu C, Jiang H, et al. Feedforward sequential memory networks: A new structure to learn long-term dependency[J]. arXiv preprint arXiv:1512.08301, 2015.
  • [5] Zhang S, Jiang H, Xiong S, et al. Compact Feedforward Sequential Memory Networks for Large Vocabulary Continuous Speech         Recognition[C], INTERSPEECH. 2016: 3389-3393.
  • [6] Zhang S, Liu C, Jiang H, et al. Non-recurrent Neural Structure for Long-Term Dependency[J]. IEEE/ACM Transactions on Audio, Speech,  and Language Processing, 2017, 25(4): 871-884.
  • [7] Oord A, Dieleman S, Zen H, et al. Wavenet: A generative model for raw audio[J]. arXiv preprint arXiv:1609.03499, 2016.
  • [8] Pundak G, Sainath T N. Lower Frame Rate Neural Network Acoustic Models[C],INTERSPEECH. 2016: 22-26.

p[[

2019-03-21 08:53:47 weixin_33881140 阅读数 54
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    6094 人正在学习 去看看 杨波

AWS近日利用半监督式学习方法,来提升语音识别系统效能,特别是在吵杂的环境中,AWS表示,虽然现在深度神经网络能够准确地辨识大量词汇的对话,训练工作还是需要长达数千个小时的标注数据,收集这些庞大数据不但耗时且成本昂贵,因此,过去AWS的科学家不断在研究能够在人工干预最小化的情况下,让Alexa学习正确辨识语音的技术,大致上分为非监督式和半监督式学习。

AWS采用半监督式学习方法,首先,用800小时标注过的语音数据,训练了一套SBF999语音识别模型,该辨识模型担任老师的角色,并用该模型「轻微地」标记另外尚未标记的7,200小时语音数据,接着,AWS手动在一些数据集中加入噪声,再将这些带有噪声的数据集和被第一个模型标记的数据,一起用来训练第二个辨识模型,而这个模型则是担任学生的角色,藉由这样的设计,AWS期望创在学生模型是用具有噪音的数据训练,而老师模型则是干净的语音数据,如此一来,就能改善语音识别系统处理噪音的稳定度。

转载于:https://juejin.im/post/5c934ed76fb9a07100165692

没有更多推荐了,返回首页