公开课|基于深度学习的多说话人分割聚类(精选整理)
本文章总结于剑桥大学的张超博士在深蓝学院分享的关于基于深度学习的多说话人分割聚类的公开课演讲内容,全文约3500字。
以下为正文内容,干货太多,自带水杯。
建议收藏和关注我们,及时获取后续更多相关推送!

什么是多说话人分割聚类(speaker diarisation)任务?
在一个场景中,同时存在多个人交叠的语音信息,我们如何去分辨出这些语音信息分别是谁说的,在什么时候说的。Speaker diarisation is the task to find “who spoke when”, while speech recognition is to find “what was spoken”. 张超博士在公开课上分享了他们ASRU 2015 MGB挑战赛top1的方法。
整个公开课的大纲如下:
1、多说话人的分割聚类(speaker diarisation)的简介
2、speaker diarisation的系统结构
3、ASRU 2015 MGB challenge top1方法的细节
4、迁移至AMI数据集上的方法细节
5、关于Discriminative neural clustering的近期工作
6、Further discussions
1 多说话人的分割聚类简介speaker diarisation
Diarisation是一个生造的词,可以翻译为“分割和聚类”,在一些场景中,如一段电话对话、一场会议、一段广播语音或者是一个电视节目等等日常生活中的语音场景,对语音信息进行切分,找到每个人说的语音,即对整个语音信息的分割和聚类。
Speaker diarisation is the task to find “who spoke when”, while speech recognition is to find “what was spoken”. 这个在语音识别系统中,是作为一个对对话、会议和电视节目识别前的进行预处理的部分,同时在带有语音信息的视频理解等任务中,也是一个很重要的组成部分。
2 speaker diarisation的系统结构
整个系统结构如下图所示:

首先一段语音信息流,通过VAD模块(Voice Activity Detection, 语音活跃性检测),检测出哪些帧是有语音的,哪些帧是没有语音的(无声音或者只有背景声)。接着通过CPD模块(Change Point Detection,变更点检测)来检测出说话人的变更点。最后对分割后的每一段语音,提取特征,进行聚类(Speaker Clustering),得到每一段的语音属于哪个人说的。当然最后,会使用迭代的方法,对上述过程进行反复优化迭代,即refine过程,来获得更好的diarisation的结果。
首先介绍VAD模块(Voice Activity Detection, 语音活跃性检测),任务就是找到,什么时候有语音,也可叫“端点检测”或者”End Point Detection”。传统方法基于信号处理(Model-free),如时域处理或者频域能量分析,这些方法很不鲁棒。比较好的是基于Model-based的方法。
然后介绍CPD模块(Change Point Detection,变更点检测),任务就是寻找说话人变更点,找到这些点,对语音信息进行分割。比如可以使用滑动窗,在语音流上滑动,当提取的特征对应的分数发生一定阈值以上的变更,就认为发生了说话人身份变更现象。也可以使用神经网络,对每个点进行一个分类,分出变更点和非变更点。
接着介绍说话人聚类(Speaker Clustering)模块,就是对CPD模块的分割输出,进行聚类,将同一个人说的话聚类到一起。常用的方法如IAC、AHC、k-means以及谱聚类等,或者基于每个人的说话特点,提取特征进行聚类等。
最后对上述的流程进行反复迭代,refine结果。常用的方法如iterative Variational Bayes,以及不同迭代次数中,改变滑动窗的长度,甚至也有使用语音识别结果,来迭代修正前面的流程。
3 ASRU 2015 MGB challenge top1方法的细节
这个挑战赛源自于BBC的一个需求,BBC将其过去很多年的视频数据公开,但是字幕有很多错误,因此提出了将这些语音信息进行识别,对字幕进行纠正和对准。该比赛的数据是BBC提供的7周的电视节目数据,设计纪录片、戏剧、新闻、电视剧、儿童节目等等,约1600小时的数据量。
本公开课不涉及语音识别部分,只涉及diarisation部分。比赛分成了三个任务,分别是语音识别任务、diarisation任务、以及字幕对准任务。作者团队在三个任务上,均取得了top1的结果,并且大幅领先其他参赛队伍。
作者团队的方法框架如下:

语音信息流进来后,过VAD,进行语音活跃性检测,然后过CPD,做变更点检测,这里的CPD,尽量保证召回率要高,准确率先不保证。接着使用高斯核提特征进行合并,即把准确率拉回来,然后反复迭代这个过程。
整个框架基本属于业界常用方法,尤其是后半部分的迭代过程,作者认为他们最重要的创新是VAD模块,也是他们取得好成绩的关键因素。
具体只解释一下所用的VAD模块。整体网络就是使用一个二分类的DNN,分类出语音帧和非语音帧。同时,作者团队使用了HMM(隐马尔科夫模型),HMM可以帮助网络去限制最短的语音帧(作者团队设置的是两帧),其次HMM是一个似然模型,而神经网络是一个先验模型,如果不考虑似然,当语音信息中,充满大量的噪声或者背景声,那么这种分布就会使得神经网络更容易分成负样本。
作者团队使用了语音和非语音的先验概率来将神经网络输出的后验概率转为适用于HMM的似然,从而使得不用顾虑数据分布不平衡的问题。
在VAD模块设计中有几个关键的点,首先是神经网络要能够cover到足够的前后帧信息,即引入时序信息。其次,作者认为,二分类的任务并不是分出非静音和静音,而是分出有效语音和非有效语音(静音和噪声以及背景声等)。最后,作者认为,训练数据量越多越好,尤其注意非有效语音的数据量也要足够。
VAD模块的测试效果如下图,可以看到使用更多的时序信息、更深的网络、更多的数据带来的改善效果都是很明显。

由上述的VAD模块,设计的整个diarisation系统,也取得了非常好的效果。同时diarisation的提升,也带来了识别任务的效果提升。
4 迁移至AMI数据集上的方法细节
AMI数据集是一个集合了很多会议内容的语音数据集,涉及了100多个人。作者坦诚这个数据集很难跑,分析了原因之后,发现原来是数据集的标注问题。
在一些人工分段上,即使只有很短的语音,AMI数据集也经常会在语音段前后加入长达数秒时间,而在这长达数秒的非语音中,很有可能发生其它说话人说话的情况,从而影响了语音段的纯度。
因此作者团队用自动对准的方法对AMI数据集进行了矫正,带来的明显的改变是,数据集中的分段更多了,真正的说话人重叠比较少。
作者团队基于这个矫正后的AMI数据集,进行VAD实验,整体的VAD测试都正常了,同时作者团队修正了该数据集的标注并公开发布,欢迎其他对会议转录任务和AMI数据集感兴趣的同行使用。
关于CPD模块部分,整体的网络结构如下:

整体网络的输出可以看做为一个二分类网络,输入是一个时序的RNN,具体细节是:在当前帧的前n帧和后n帧,分别提取单帧静态特征,然后各自通过RNN聚合,最后将RNN的特征输出做一个点乘,再过一些网络,最终二分类输出结果。
关于说话人聚类(Speaker Clustering)模块部分,作者团队使用的方法是,在每个分的段上,进行提特征(Embeding),然后聚类,所以关键在于如何提特征,作者团队设计了很多中结构。
比如,设计了在每一段上采用self-attention的结构,加权出一个特征,进行聚类。除此之外,作者团队还设计2D Consecutive Self-attentive Combination,其实就是将多种提特征的模型ensemble,然后再总的来一个self-attention,这些模型包括TDNN和HORNN。更进一步,作者在ensemble的时候,除了使用self-attention外,还尝试了双线性池化的特征融合。
最终,作者团队将以上方法都融合在了一起,即使用不同的模型做融合,融合方法不仅包括self-attention,也包括双线性池化融合,如下图所示:

在AMI数据集上的整体系统结构如下:

和前面所说的pipeline基本一致,虚线部分表示可以考虑越过CPD模块,但是其实这是一种不好的方式,因为插嘴现象还是会发生的,作者也在实验中验证了这一点。
5关于Discriminative neural clustering的近期工作
这一部分是作者团队近期的工作,从前面的流程中,我们发现,只有在聚类部分,即对提取的特征进行聚类部分,没有采用神经网络方法,作者团队在这一处进行了一些改进工作。传统工作如k-means这种无监督的方法,具有很多超参数,这些超参数需要不断调试,并且泛化性并不理想。
使有分类器模型进行聚类工作需要对聚类的所有可能性进行排列组合。比如一段语音中,涉及到A、B、C、D四个说话人,在聚类的场景下A、B、C、D都分别可能被当作四类中的任何一个,共有4!=24种排列组合。
说话人置换不变性训练是一种常用的策略,相当于进行了label替换后的数据扩充。但这样在说话人比较多的时候会导致数据扩充倍数过高而无法运算。
因为作者团队提出的区分性神经聚类算法使用了置换无关的损失函数,而无需进行置换不变性训练。通过强制按照说话人在语音流中出现的顺序与聚类节点进行关联。比如如下例子中所示。

然而为了学习到这种前后特征相关的特征,需要大量的数据,AMI中只有100多个会议,即100多个训练样本,这是不够的。因此很重要的任务是,如何扩充数据集,作者团队采用了三种数据集的扩充方法。
第一种是子会议的随机化,即对一个大会议进行切分。第二种是输入向量随机化,对输入的每一段的说话人身份进行变更,这样输入特征顺序也会变化,然而并没有破坏聚类学习的目标。第三种是Diaconis Augmentation,因为提取的特征是经过L2正则化的,所以特征都分布在超球空间,经过Diaconis Augmentation,相当于将超球空间进行了一个整体的旋转,这样相对分布并没有改变。
作者团队经过实验,采用上述的方法以及不同的数据集扩充实验,可以取得较好的结果。
6 Further discussions
作者关于diarisation的未来发展提出了以下几点展望:
1、Discriminative neural clustering方法未来如何改进成端到端的模型。
2、CPD模块(变更点检测模块)是否是必要的,因为当多个人同时说话的时候,并不好去定义变更点。
3、如何处理不确定人数上限的聚类。
4、说话人分割聚类和说话人的确认、辨认的关系。在实际的系统中,该如何去设计,如何取舍平衡。
*感谢雍洋同学对本次公开课内容的整理,感谢张超博士后期对文稿的审核与修改。