查看原文
其他

基于VGGish的声音类别分类在语音机器人的应用实践

58AILab 2022-03-15

The following article is from 58技术 Author 马双

导读

 语音机器人是58同城TEG技术工程平台群AI Lab自主研发的具有自动电话拨打、多轮语音交互、智能意向判断等多种功能的智能对话机器人。可应用于自动电话销售、产品服务推广、信息审核、语音通知等多种业务场景。语音机器人接收到的语音信号后,为了避免非正常信号如环境音、嘈杂人声等听不清的语音信号影响语音识别效果造成意图识别错误,语音机器人中声音类别分类模块会将分类为听不清的语音信号进行过滤,从而提升意图识别效果。


背景

语音机器人接收到用户语音后,先进行语音断句VAD,再通过语音识别ASR转成文本,将得到的文本送入自然语音理解(NLU)和对话管理器(DM)模块,对话管理器根据不同的策略会返回相应的文本回复,最后将通过文本转语音(TTS)模块转成的语音发送给用户。在实际情况下,语音机器人存在收到很多噪音、机器音等听不清类型的语音,此类语音通过ASR将转译成错误的文本,从而影响整个语音交互对话的用户体验,为了解决此类问题,提升对话质量,需要识别出语音机器人接收语音中的听不清语音,也就是要对接收到的声音类别进行分类,对于听不清类别的语音,对话管理模块(DM)将提供相应的策略进行应对。目前声音类别分类模型效果的准确率在92%左右,召回率在77%左右。


声音特征提取

要进行声音类别分类,首先离不开对语音特征的了解。语音作为一种信息传播的媒介,有其独特的特征。人耳一般能听到的音频范围是20hz—20khz,但是实际生活电话沟通中,为了节省传输带宽,通常将音频范围限制在4khz以下,采用8khz的采样率对语音信号进行采样。声音的特征提取一般流程如下图所示。  首先会对语音信号进行分帧和加窗,其次对加窗后的各帧信号进行短时傅里叶变换(STFT)再求模获得幅度谱,然后根据人耳的接收特性进行梅尔滤波,对梅尔滤波器的输出取对数后就得到了声音的FBank特征,最后进行离散余弦变换(DCT),得到声音的梅尔频率倒谱系数(MFCC)[1]。接下来,我们简要介绍下上述声音特征的提取流程。
加窗和分帧语音在其持续过程中,其包含的频率成分一般是随时间变换而变化的,分帧的主要目的是将语音信号切分成一段一段的短时间语音帧,在一段短时语音帧中,可以认为其包含的频率成分是稳定的,这样就可以通过傅里叶变换来分析其内部的各频率成分,也就是其内部特征信息。加窗的主要目的是减小其频域的频谱泄漏,加窗与分帧过程如下所示。  

(图片 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为梅尔滤波器的个数。具体的滤波示意可如下图所示。 (图片http://www.inf.ed.ac.uk/teaching/courses/asr/2018-19/asr02-signal-handout.pdf


FBank特征对梅尔滤波后的信号取对数即可得到语音信号的FBank特征,取对数的目的是压低频谱在幅值上的大小差异,FBank特征表征了模拟人耳能区分的各频率范围内语音信号的能量大小。
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进行分类。 上图中我们使用了谷歌原生的VGGish预训练模型,听不清声音的识别准召率和F1值见于下表。
召回率很低,为了提升召回,我们尝试将声学特征由Fbank改为MFCC特征,网络结构保持不变,遗憾的是模型效果很不理想,准确率降低了60%左右,具体的准确率、召回率和F1值见于下表。 计算公式为:帧权重 = 帧频谱算术平均 / 帧频谱几何平均造成这个结果的原因是由于MFCC只保留了连接语音各共振峰之间的包络信息,而丢弃了其他的高频细节信息,而这些细节恰恰是识别声音听清与否的重要特征。
 帧权重 = 帧频谱算术平均 / 帧频谱几何平均通过加权,可以相对加强声音帧的频谱幅值,同时相对压低噪声帧的频谱幅值。依然提取FBank声学特征,实践结果的如下表所示。
此时的召回率依然很低,于是我们决定尝试改进网络结构。VGGish的网络结构是谷歌的预训练模型,该模型的训练数据是基于YouTube上的各种音频训练而成,音频种类包括人声、动物声、乐器声等等,而这与我们的电话音频场景大相径庭,于是我们想到,能否基于当前场景的标注数据,训练一个新的VGGish。为了节省训练时间和规模,我们去掉了VGGish后面的Bi-LSTM和Attention层,简单的将VGGish的输出经过简单的FC和softmax之后进行分类。此时的网络结构变为下图所示结构。实验效果印证了我们之前的猜想,相比之前的预训练模型,召回率提升了38%,具体结果如下表所示。这个结论说明,模型最好还是基于当前的场景数据进行训练,而不能生搬硬套,除非对于某些大型网络结构,不具备训练条件。使用其他场景的预训练模型,即使预训练模型后面接入了rnn层和Attention层,效果也不能提升多少。
为了进一步改进,我们将网络去掉的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 招聘信息

58同城AI Lab 社招/校招/实习生 招聘,欢迎加入

欢迎关注开源项目 qa_matchqa_match是58同城开源的一款基于深度学习的问答匹配工具,支持一层和两层结构知识库问答。qa_match通过意图匹配模型支持一层结构知识库问答,通过融合领域分类模型和意图匹配模型的结果支持两层结构知识库问答。qa_match同时支持无监督预训练功能,通过轻量级预训练语言模型(SPTM,Simple Pre-trained Model)可以提升基于知识库问答等下游任务的效果。
github地址:https://github.com/wuba/qa_match
文章介绍:
欢迎关注开源项目 dl_inferencedl_inference是58同城推出的通用深度学习推理服务,可在生产环境中快速上线由TensorFlow、PyTorch、Caffe框架训练出的深度学习模型。dl_inference提供GPU和CPU两种部署方式,实现了模型多节点部署时的负载均衡策略,支持线上海量推理请求,该服务支撑了58同城各AI场景下日均超过10亿次的线上推理请求。github地址:https://github.com/wuba/dl_inference文章介绍:
AI Lab部门介绍58同城TEG技术工程平台群AI Lab,旨在推动AI技术在58的落地,打造AI中台能力,以提高各前台业务人效、收入和用户体验。AI Lab目前负责的主要产品包括:智能客服、语音机器人、"灵犀"智能语音分析平台、智能写稿、AI算法平台、语音识别、CRM商机智能分配系统等,未来将持续加速创新,拓展AI应用。

欢迎关注部门微信公众号:58AILab

欢迎加入58 AI Lab技术交流社区

欢迎在欣秀(https://app.ic3i.com)平台上加入"58同城AILab技术沙龙"圈子,一起交流技术,可以扫描以下二维码加入该圈子。



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存