Speaker Diarization

Speaker Diarization(声纹分割聚类、说话人日志),解决的问题是“who spoke when”,即给定一个包含多人交替说话的语音,需要判断每个时间点是谁在说话。

技术流程框架

在这里插入图片描述

1、语音检测

利用语音检测模型(如VAD),将音频帧逐帧分为语音(speech,即有人说话)和非语音(non-speech,即无人说话)两个类别。其中非语音可能包括静音、噪音、音乐等。

2、语音分割/说话人转换检测

对于一段语音音频,分割的目标是分割后的每段音频只有一个说话人。有两种方法可以把整段语音切分为多个小段:
(1)定长切分
通常可以把每段长度设为 0.5秒 ~ 2秒 之间。例如将窗口长度设置为1.0s, 然后将整段语音音频按每1.0s为一个片段进行切分, 其中, 两个相邻片段之间的重叠时长为0.5s。

优点:简单、不需要模型;
缺点:片段太长时,可能会包含说话人转换点;判断太短时会导致说话人声纹信息不足,识别准确率下降。
(2)说话人转换检测模型(Speaker Change Detection,SCD)
训练说话人转换检测模型(Speaker Change Detection,SCD),以SCD预测的转换点进行切分。注:SCD只判断转换点,但并不知道转换后的说话人是哪个(说话人数量>2时)。所以SCD后还是需要后续的聚类步骤。
SCD和聚类的区别如下:
在这里插入图片描述
SCD有两种,如下图所示,
在这里插入图片描述
缺点:SCD的准确率严重影响声纹分割聚类整个系统的效果。

3、声纹嵌入码

使用预训练好的声纹识别模型, 将声纹识别模型中的声纹特征提取模块单独取出, 然后将上一步骤切分好的所有音频片段依次放入声纹提取模块进行处理, 通过声纹提取模块, 提取出各个音频片段的声纹向量信息(如i-vector、x-vector等)

将音频各个片段的声纹向量进行拼接, 拼接为一个矩阵, 矩阵的横坐标为时间维度, 单位为一个窗口的大小, 纵坐标为声纹向量的维度, 拼接后的矩阵我们称为该音频的声纹向量矩阵。

4、聚类分析

聚类作用
输入大量片段的声纹嵌入码,聚类算法将会输出每个片段对应的聚类标签,这个聚类标签就可以作为说话人身份标记。

一般先构建相似度矩阵,然后再做聚类(聚类算法的输入是相似度矩阵)。

音频的相似度矩阵用于描述该音频各个片段之间的相似度, 我们使用该音频的 声纹向量矩阵的转置 * 声纹向量矩阵 得到音频的相似度矩阵, 该相似度矩阵中, 每个元素的值代表了该行的索引对应的音频片段声纹信息和该列的索引对应的音频片段声纹信息的相似度。

得到相似度矩阵之后, 就可以将相似度矩阵进行聚类, 来对各个音频片段进行聚类, 片段之间相似度符合设定阈值的两个片段聚为一类。

常用的聚类算法有AgglomerativeClustering(层次聚类)、SpectralClustering(谱聚类)、KMeans。

5、二次分割

基于聚类结果获得的分割结果在分界线附近会有歧义,比如两个类重叠的区域应该划分到哪个类,二次分割的目的就是在前面聚类结果的基础上进行更精细的切分,获得更精确的结果。

以上是传统的聚类方法,此外还有监督式聚类方法(不再详细介绍):
在这里插入图片描述

参考:
1、https://zhuanlan.zhihu.com/p/338656027
2、https://zhuanlan.zhihu.com/p/394397963
3、https://www.bilibili.com/video/BV1Ky4y1876H

评价指标(Diarization Error Rate)

一般是对模型输出结果尝试各种说话人的排列,最后选效果最好的说话人分配方法计算Diarization Error Rate (DER,较常用)作为评价指标。
(还有其他的评价指标:词分割聚类错误率WDER、雅卡尔错误率JER)

在这里插入图片描述

上图中Reference是ground truth,Hypothesis是Speaker Diarization预测出来的结果,其中,
Miss : 属于说话人A的时长, 但系统没有分到说话人A音频中;
False Alarm : 被系统误分到说话人A音频中, 但实际不属于说话人A的时长;
Overlap : 被系统分为说话人A和说话人B同时说话, 但实际没有同时说话的时长;
Confusion : 被系统分为说话人A的, 但是实际属于说话人B的时长;
Reference Length : 是整条音频的总时长。
DER的计算公式如下:
在这里插入图片描述
通常False Alarm和Miss都来自于语音检测或者语音分割,与声纹嵌入码、聚类分析过程无关,Overlap在大部分论文中都忽略掉了,Confusion比较重要,是由声纹分割聚类带来的错误,因此有时也只考虑这一项用来计算DER。

DER代码实现
1、github-simpleDER

上述链接主页有调用方法说明,主要实现部分在文件der.py中的函数DER(ref, hyp),其中ref和hyp分别是ground truth和模型输出的文件,文件格式为一系列分割好的语音段(speaker, start, end),对应(说话人id,开始时间,结束时间)。
该函数计算DER的公式为:

 der = (union_total_length - optimal_match_overlap) / ref_total_length

union_total_length:将ref和hyp的所有语音段取并集之后,计算并集的总长度。
optimal_match_overlap:可以理解为ref和hyp中匹配正确的总语音时长。
ref_total_length:ref总时长。

union_total_length - optimal_match_overlap的结果就是模型判断错误的语音时长,包括MISS、False Alarm和Confusion。

def DER(ref, hyp):
    """Compute Diarization Error Rate.
    Args:
        ref: a list of tuples for the ground truth, where each tuple is
            (speaker, start, end) of type (string, float, float)
        hyp: a list of tuples for the diarization result hypothesis, same type
            as `ref`
    Returns:
        a float number for the Diarization Error Rate
    """
    check_input(ref)
    check_input(hyp)
    ref_total_length = compute_total_length(ref)
    cost_matrix = build_cost_matrix(ref, hyp) #根据ref和hyp中的语音片段,计算一个cost矩阵,
        #cost_matrix[i][j]是ref中的说话人i和hyp中的说话人j的语音交集,即将说话人语音的交集作为cost
    row_index, col_index = optimize.linear_sum_assignment(-cost_matrix)
       #使用匈牙利算法(https://blog.csdn.net/your_answer/article/details/79160045)
       #来计算ref和hyp之间的代价最小的最优匹配,由于cost_matrix取负值,因此此处是计算代价最大的匹配,此时对应语音片段匹配最优
       
    optimal_match_overlap = cost_matrix[row_index, col_index].sum()  #匹配正确的总语音时长
    union_total_length = compute_merged_total_length(ref, hyp)  #并集的总长度
    der = (union_total_length - optimal_match_overlap) / ref_total_length
    return der

2、speechbrain.utils.DER module(推荐)
使用speechbrain.utils.DER来根据ref和sys的rttm文件直接计算DER,官方介绍以及使用样例,调用输出:

MS:Miss
FA :False Alarms
SER :Speaker Error Rates,也是Confusion
DER:Diarization Error Rates.

注:这个DER module的源代码来自:https://github.com/nryant/dscore(具体是通过调用脚本scorelib/md-eval-22.pl来实现的,该脚本的计算公式可以参考本链接

参考:
1、https://github.com/wq2012/SimpleDER
2、https://github.com/nryant/dscore
3、https://speechbrain.readthedocs.io/en/latest/API/speechbrain.utils.DER.html
4、http://www.xavieranguera.com/phdthesis/node108.html

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值