基于VGGish的声音类别分类在语音机器人的应用实践
The following article is from 58技术 Author 马双
导读
语音机器人是58同城TEG技术工程平台群AI Lab自主研发的具有自动电话拨打、多轮语音交互、智能意向判断等多种功能的智能对话机器人。可应用于自动电话销售、产品服务推广、信息审核、语音通知等多种业务场景。语音机器人接收到的语音信号后,为了避免非正常信号如环境音、嘈杂人声等听不清的语音信号影响语音识别效果造成意图识别错误,语音机器人中声音类别分类模块会将分类为听不清的语音信号进行过滤,从而提升意图识别效果。
背景
语音机器人接收到用户语音后,先进行语音断句VAD,再通过语音识别ASR转成文本,将得到的文本送入自然语音理解(NLU)和对话管理器(DM)模块,对话管理器根据不同的策略会返回相应的文本回复,最后将通过文本转语音(TTS)模块转成的语音发送给用户。在实际情况下,语音机器人存在收到很多噪音、机器音等听不清类型的语音,此类语音通过ASR将转译成错误的文本,从而影响整个语音交互对话的用户体验,为了解决此类问题,提升对话质量,需要识别出语音机器人接收语音中的听不清语音,也就是要对接收到的声音类别进行分类,对于听不清类别的语音,对话管理模块(DM)将提供相应的策略进行应对。目前声音类别分类模型效果的准确率在92%左右,召回率在77%左右。声音特征提取
要进行声音类别分类,首先离不开对语音特征的了解。语音作为一种信息传播的媒介,有其独特的特征。人耳一般能听到的音频范围是20hz—20khz,但是实际生活电话沟通中,为了节省传输带宽,通常将音频范围限制在4khz以下,采用8khz的采样率对语音信号进行采样。声音的特征提取一般流程如下图所示。加窗和分帧语音在其持续过程中,其包含的频率成分一般是随时间变换而变化的,分帧的主要目的是将语音信号切分成一段一段的短时间语音帧,在一段短时语音帧中,可以认为其包含的频率成分是稳定的,这样就可以通过傅里叶变换来分析其内部的各频率成分,也就是其内部特征信息。加窗的主要目的是减小其频域的频谱泄漏,加窗与分帧过程如下所示。
(图片 https://ithelp.ithome.com.tw/articles/10206570)
短时傅里叶变换短时傅里叶变换就是傅里叶变换,傅里叶变换是信号处理的重要基石。因为语音信号是频率时变信号,但是在短时间内可以认为其频率是时不变的,这样就能对其进行傅里叶分析。通过短时傅里叶变换能够得到各语音帧信号的频谱,求模之后就能获得幅度谱,幅度谱是语音信号的重要特征,它揭示了该语音信号背后的各基频成分的强弱大小。经过傅里叶变换之后,在频域就能很清晰地展示出各语音帧的各频率成分,而这在时域是很难办到的。如下图,两个基频,一个3khz,另一个5khz,通过麦克风之后合成的时域信号,在时域几乎看不出来原始信号的基频成分,但是通过傅里叶变换之后,在频域能很清晰地看到,在3khz和5khz的两个频率处展示出两个明显的尖峰。
(图片https://medium.com/@y1017c121y/python-computer-vision-tutorials-image-fourier-transform-part-1-4e91e4e74724)
(图片https://www.cancerresearchuk.org/about-cancer/head-neck-cancer/cancer-of-the-ear/middle-inner-about)
(图片 https://wiki.aalto.fi/display/ITSP/Cepstrum+and+MFCC)
梅尔滤波器的传递函数和频谱图分别如下图所示,梅尔滤波器三个主要参数为最低频率、最高频率和滤波器个数。
(图片 https://wiki.aalto.fi/display/ITSP/Cepstrum+and+MFCC)可以看到,梅尔滤波器是由多个三角滤波器组成,每一个三角滤波器并行与语音帧频谱进行内积(相乘求和),这样一帧语音信号的频谱经过梅尔滤波后就能获得M个点,M为梅尔滤波器的个数。具体的滤波示意可如下图所示。
MFCC特征Fbank特征取DCT变换之后,即可获得语音的MFCC特征,一般舍弃DCT变换后的第1阶直流成分,取第2到第13阶系数,MFCC特征简单来说代表了连接语音各共振峰的包络信息,不同语音信号的包络形状通常会不相同。
VGGish简介
Google的声音理解团队于2017年在YouTube视频音轨组成的数据集上训练得到类VGG模型,该模型中生成128维的embedding,这个基于tensorflow 的VGG模型,称为VGGish。VGGish能从音频波形中提取具有语义的128维embedding特征向量,其具体网络结构如下图所示。声音类型分类
声音类型分类的初步版本采用的网络结构如下图所示,先将语音分帧,提取各语音帧的声学特征,将提取到的Fbank特征送入VGGish网络,得到128维特征向量,再经过Bi-LSTM和Attention层,最后由softmax进行分类。召回率很低,为了提升召回,我们尝试将声学特征由Fbank改为MFCC特征,网络结构保持不变,遗憾的是模型效果很不理想,准确率降低了60%左右,具体的准确率、召回率和F1值见于下表。
此时的召回率依然很低,于是我们决定尝试改进网络结构。VGGish的网络结构是谷歌的预训练模型,该模型的训练数据是基于YouTube上的各种音频训练而成,音频种类包括人声、动物声、乐器声等等,而这与我们的电话音频场景大相径庭,于是我们想到,能否基于当前场景的标注数据,训练一个新的VGGish。为了节省训练时间和规模,我们去掉了VGGish后面的Bi-LSTM和Attention层,简单的将VGGish的输出经过简单的FC和softmax之后进行分类。此时的网络结构变为下图所示结构。
为了进一步改进,我们将网络去掉的Bi-LSTM和Attention层重新加到网络中,进行新的训练,看能否进一步提升模型效果。这次的提升效果不是很明显,召回率仅提高了1%左右,这也说明了网络对于语音特征的学习集中在了网络的前半部分,网络的后半部分仅起到了锦上添花的作用。
除了在特征和网络结构上进行优化尝试,我们还在原数据上加入了一批新的标注数据,因为新标注的数据数量有限,量级大约为原训练数据的十分之一。在上述VGGish + BiLSTM + Attention网络结构上进行新的训练,发现数据带来的模型效果提升不明显,在准确率持平的基础上,召回率大约能够提升0.5个百分点。
总结
本文简要介绍了语音特征提取流程,VGGish网络在声音类别分类上的实践应用,并论述了在声学特征和网络结构上的种种优化尝试。相比MFCC特征,FBank特征使得识别准确率极大提升,这是因为MFCC特征只保留了语音各共振峰之间的包络信息,而丢弃了其他高频细节信息,而这些细节恰恰是识别声音听清与否的重要依据。利用语音机器人场景音频数据训练的VGGish网络效果要优于预训练的VGGish网络。在数据与算力允许的条件下,可以尝试利用当前任务数据训练的网络取代预训练的网络。另外RNN与Attention网络在本任务上有正面效果,但影响不明显。后续我们将继续在网络结构和声学特征上进行优化探索,语音特征组合,将各语音帧的Fbank、MFCC和Delta特征组合起来,将组合特征输入到VGGish网络。网络结构上,使用增强版的VGGish,在VGGish中的各CNN层之后均加入Batch Normalization,Global pooling 层取代flatten层,减少FC层的神经元个数等进行进一步的尝试。参考文献:[1] Speech Processing for Machine Learning: Filter banks, Mel-Frequency Cepstral Coefficients (MFCCs) and What\'s In-Between作者简介马双,58同城AI Lab算法高级工程师,2019年9月加入58同城,2013年硕士毕业于中国航天科工二院,在58同城主要负责语音机器人、语音分析相关算法工作。
AI Lab 招聘信息欢迎关注开源项目 qa_matchqa_match是58同城开源的一款基于深度学习的问答匹配工具,支持一层和两层结构知识库问答。qa_match通过意图匹配模型支持一层结构知识库问答,通过融合领域分类模型和意图匹配模型的结果支持两层结构知识库问答。qa_match同时支持无监督预训练功能,通过轻量级预训练语言模型(SPTM,Simple Pre-trained Model)可以提升基于知识库问答等下游任务的效果。github地址:https://github.com/wuba/qa_match
文章介绍:
欢迎关注部门微信公众号:58AILab
欢迎在欣秀(https://app.ic3i.com)平台上加入"58同城AILab技术沙龙"圈子,一起交流技术,可以扫描以下二维码加入该圈子。