查看原文
其他

【回顾】搜狗研究员讲解基于深度学习的语音分离

2017-10-10 AI 研习社 AI研习社


基于深度学习的有监督语音分离在学术界和工业界越来越受到关注,也是深度学习在语音领域的应用中重要的一部分。作为雷锋网 AI 研习社近期组织的一系列语音领域应用的分享会之一,本次我们请到了来自搜狗的研究员文仕学对语音分离方面主要的研究课题和相关方法做一些介绍。

https://v.qq.com/txp/iframe/player.html?vid=o0552iv8fi1&width=500&height=375&auto=0
▷ 观看完整回顾大概需要  31  分钟

文仕学,过去学物理,后来学 EE,现在从事 Deep Learning 工作,未来投身 AI 和 CM 事业。他的研究兴趣在于语音信号处理和深度学习。在加入搜狗之前,曾在中国科学技术大学学习,在该领域的期刊和会议上发表了若干篇论文。现在在搜狗语音团队任副研究员。

AI研习社将本次分享的内容整理如下。

分享主题:基于深度学习的语音分离

文仕学首先介绍了 “语音分离”(Speech Separation)是怎么样的一种任务。这个问题来自于 “鸡尾酒会问题”,采集的音频信号中除了主说话人之外,还有其他人说话声的干扰和噪音干扰。语音分离的目标就是从这些干扰中分离出主说话人的语音。

根据干扰的不同,语音分离任务可以分为三类:

  • 当干扰为噪声信号时,可以称为 “语音增强”(Speech Enhancement)

  • 当干扰为其他说话人时,可以称为 “多说话人分离”(Speaker Separation)

  • 当干扰为目标说话人自己声音的反射波时,可以称为 “解混响”(De-reverberation)

由于麦克风采集到的声音中可能包括噪声、其他人说话的声音、混响等干扰,不做语音分离、直接进行识别的话,会影响到识别的准确率。因此在语音识别的前端加上语音分离技术,把目标说话人的声音和其它干扰分开就可以提高语音识别系统的鲁棒性,这从而也成为现代语音识别系统中不可或缺的一环。

基于深度学习的语音分离,主要是用基于深度学习的方法,从训练数据中学习语音、说话人和噪音的特征,从而实现语音分离的目标。

这次分享的内容有以下这 5 个部分:分离使用的模型、训练目标的设置、训练数据的生成、单通道语音分离算法的介绍和讨论。

  基于深度学习的语音分离方法使用的模型

第一类模型是多层感知机,DNN,可以先做 RBM 预训练,再做微调(fine-tune);不过文仕学介绍,他们团队通过实验发现,在大数据集上不需要预训练也可以收敛。

LSTM(长短时记忆网络)的方法中把语音作为一个随时间变化的序列进行建模,比较适合语音数据;CNN(卷积神经网络)通过共享权值,可以在减少训练参数的同时获得比全连接的 DNN 更好的性能。

近些年也有人用 GAN(对抗性生成式网络)做语音增强。模型中通常会把生成器设置为全部是卷积层,为了减少训练参数从而缩短训练时间;判别器负责向生成器提供生成数据的真伪信息,帮助生成器向着 “生成干净声音” 的方向微调。

  训练目标的设置

训练目标包括两类,一类是基于 Mask 的方法,另一类是基于频谱映射的方法。

基于 Mask 的方法又可以分为几类

  • “理想二值掩蔽”(Ideal Binary Mask)中的分离任务就成为了一个二分类问题。这类方法根据听觉感知特性,把音频信号分成不同的子带,根据每个时频单元上的信噪比,把对应的时频单元的能量设为 0(噪音占主导的情况下)或者保持原样(目标语音占主导的情况下)。

  • 第二类基于 Mask 的方法是 IRM(Ideal Ratio Mask),它同样对每个时频单元进行计算,但不同于 IBM 的 “非零即一”,IRM 中会计算语音信号和噪音之间的能量比,得到介于 0 到 1 之间的一个数,然后据此改变时频单元的能量大小。IRM 是对 IBM 的演进,反映了各个时频单元上对噪声的抑制程度,可以进一步提高分离后语音的质量和可懂度。

  • TBM 与 IRM 类似,但不是对每个时频单元计算其中语音和噪声的信噪比,而是计算其中语音和一个固定噪声的信噪比

  • SMM 是 IRM 在幅度上的一种形式

  • PSM 中加入了干净语音和带噪语音中的相位差信息,有更高的自由度

虽然基于 Mask 的方法有这么多,但最常用的还是开头的 IBM 和 IRM 两种

如果使用频谱映射,分离问题就成为了一个回归问题。

频谱映射可以使用幅度谱、功率谱、梅尔谱以及 Gammatone 功率谱。Gammatone 是模拟人耳耳蜗滤波后的特征。为了压缩参数的动态范围以及考虑人耳的听觉效应,通常还会加上对数操作,比如对数功率谱。

基于频谱映射的方法,是让模型通过有监督学习,自己学习有干扰的频谱到无干扰的频谱(干净语音)之间的映射关系;模型可以是 DNN、CNN、LSTM 甚至 GAN。

这一页是使用相同的 DNN 模型、相同的输入特征、不同的训练目标得到的结果。

左边的 STOI 指语音的可懂度,得分在 0 到 1 之间,越高越好;右边的 PESQ 是语音的听觉质量、听感,范围为 - 0.5 到 4.5,也是越高越好。

基于 Mask 的方法 STOI 表现较好,原因是有共振峰的能量得到了较好的保留,而相邻共振峰之间波谷处的声音虽然失真较大,但人耳对这类失真并不敏感;两类方法在 PESQ 中表现相当。

  训练数据的生成

针对语音分离中的语音增强任务,首先可以通过人为加噪的方法生成带噪语音和干净语音对,分别作为输入和输出(有标注数据),对有监督学习模型进行训练。加入的噪声可以是各种收集到的真实世界中的噪声。

不过收集噪声需要成本,而且人工能够收集到的噪音总是有限的,最好能够有一套完备、合理的方案,用仿真的方式生成任意需要的噪声。 在今年的 MLSP(信号处理机器学习)会议上,搜狗语音团队就发表了一项关于噪声基的工作,通过构造一个噪声基模型,在不使用任何真实噪音数据的情况下,生成带噪语音对语音增强模型进行训练,达到了与使用 50 种真实噪音的情况下相当的性能(下图)。

如果将这 50 种真实噪声和噪声基产生的数据混合在一起,性能可以比单独使用真实噪音的情况得到进一步提高。这也说明噪声基生成的噪声和真实噪声数据之间有着互补性,在实际应用中也可以解开一些真实噪声数据不足带来的限制。

  单通道语音分离算法

如开头所说,语音分离任务可以分为三类,语音增强、多说话人分离和解混响。不同任务的处理方法也有所不同。

对于语音增强,基于 Mask 的方法首先进行耳蜗滤波,然后特征提取、时频单元分类、二值掩蔽、后处理,就可以得到增强后的语音了。

语音增强的另一类基于频谱映射的方法中,先特征提取,用深度神经网络学习带噪语音和干净语音的对数功率谱之间映射关系,再加上波形重建,就可以得到增强后的语音。

基于有监督学习的算法都存在推广性(generalization)的问题,语音增强这里也不例外。针对噪音类型、信噪比和说话人的推广性都还有提升的空间。

对于解混响,同样可以使用基于频谱映射的方法。解混响中也需要生成训练数据,但不同于带噪语音生成时做时域的相加,带混响的语音是在时域上进行卷积;同样都把干净语音作为带标注数据。

在基于频谱映射的方法基础上还可以加以改进。对于不同的混响时间,深度神经网络需要学习的时间窗口长度是不一样的,因而改进方法中加入了告知混响时间的功能,根据帧移 R 和扩帧数目 N 提特征后解码,可以获得更好的解混响效果。

多说话人分离分为三种情况

  • 目标说话人和干扰说话人都固定,Speaker dependent,有监督分离

  • 目标说话人固定,训练阶段和测试阶段的干扰说话人可变,Target dependent,半监督分离

  • 目标说话人和干扰说话人都可变,Speaker independent,无监督分离

对于有监督和半监督分离,可以使用基于频谱映射的方法,与前面使用基于频谱映射的方法做语音增强类似。

对于无监督分类,有无监督聚类、深度聚类以及最近的序列不变训练(PIT)方法。PIT 方法的核心是红框中标出的部分,在误差回传的时候,分别计算输出序列和标注序列间各种组合的均方误差,然后从这些均方误差中找到最小的那个作为回传误差,也就是根据自动找到的声源间的最佳匹配进行优化,避免出现序列模糊的问题。

  讨论两个问题

最后,文仕学给大家留了两个思考题,欢迎大家在评论区给出自己的见解。

  • 第一个问题是语音分离任务中,是按传统思路先变换到频域,然后在频域上进行处理,还是直接在时域上处理比较好?后者的好处是端到端训练,不用考虑频域方法做傅立叶反变换时相位的问题。

  • 第二个问题是对于语音增强任务,应该使用真实噪声加噪还是使用人工仿真生成的噪声进行降噪?

感谢文仕学此次的分享以及对文本的指正,也欢迎大家关注 AI 研习社未来的更多分享活动!


新人福利



关注 AI 研习社(okweiwu),回复  1  领取

【超过 1000G 神经网络 / AI / 大数据,教程,论文】



如何用 MOOC 组合掌握机器学习?

▼▼▼

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

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