Speaker Diarization

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

技术流程框架

Speaker Diarization

; 1、语音检测

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

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

对于一段语音音频,分割的目标是分割后的每段音频只有一个说话人。有两种方法可以将整个演讲分成几个小片段:

[En]

For a segment of voice audio, the goal of segmentation is that there is only one speaker for each segment of audio after segmentation. There are two ways to cut the whole speech into several small segments:

(1)定长切分
通常可以把每段长度设为 0.5秒 ~ 2秒 之间。例如将窗口长度设置为1.0s, 然后将整段语音音频按每1.0s为一个片段进行切分, 其中, 两个相邻片段之间的重叠时长为0.5s。

优点:简单,不需要模型

[En]

Advantages: simplicity, no need for model

缺点:当分段太长时,可能会包含说话人转换点;判断太短会导致声纹信息不足,识别准确率较低。

[En]

Disadvantages: when the segment is too long, it may include the speaker conversion point; too short judgment will lead to insufficient voiceprint information and lower recognition accuracy.

(2)说话人转换检测模型(Speaker Change Detection,SCD)
训练说话人转换检测模型(Speaker Change Detection,SCD),以SCD预测的转换点进行切分。注:SCD只判断转换点,但并不知道转换后的说话人是哪个(说话人数量>2时)。所以SCD后还是需要后续的聚类步骤。
SCD和聚类的区别如下:

Speaker Diarization
SCD有两种,如下图所示,
Speaker Diarization
缺点:SCD的准确率严重影响声纹分割聚类整个系统的效果。

; 3、声纹嵌入码

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

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

[En]

The voiceprint vectors of each audio segment are spliced into a matrix, the Abscissa of the matrix is the time dimension, the unit is the size of a window, and the ordinate is the dimension of the voiceprint vector. The stitched matrix is called the voiceprint vector matrix of the audio.

4、聚类分析

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

[En]

Input a large number of voiceprint embedding codes, and the clustering algorithm will output the corresponding clustering tag for each segment, which can be used as a speaker identity tag.

通常,我们首先建立相似度矩阵,然后进行聚类(聚类算法的输入是相似度矩阵)。

[En]

Generally, we first build the similarity matrix, and then do clustering (the input of the clustering algorithm is the similarity matrix).

音频相似度矩阵用于描述音频片段之间的相似度。我们使用音频声纹向量矩阵的转置声纹向量矩阵来获得音频相似度矩阵。在相似度矩阵中,每个元素的值表示行索引对应的音频片段声纹信息与列索引对应的音频片段声纹信息之间的相似度。

[En]

The audio similarity matrix is used to describe the similarity between the audio clips. We use the transpose * voiceprint vector matrix of the audio voiceprint vector matrix to get the audio similarity matrix. In the similarity matrix, the value of each element represents the similarity between the audio segment voiceprint information corresponding to the row index and the audio segment voiceprint information corresponding to the column index.*

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

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

5、二次分割

基于聚类结果得到的分割结果在分界线附近会有歧义,例如应该将哪一类划分为两类的重叠区域。二次分割的目的是在先前聚类结果的基础上进行更精细的分割。以获得更准确的结果。

[En]

The segmentation results obtained based on the clustering results will have ambiguity near the dividing line, such as which class should be divided into the overlapping areas of the two classes. the purpose of the secondary segmentation is to segment more finely on the basis of the previous clustering results. to get more accurate results.

以上是传统的聚类方法,除了监督聚类方法(不再详细描述):

[En]

The above are the traditional clustering methods, in addition to the supervised clustering method (which will not be described in detail):

Speaker Diarization

参考:
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)

Speaker Diarization

上图中Reference是ground truth,Hypothesis是Speaker Diarization预测出来的结果,其中,
Miss : 属于说话人A的时长, 但系统没有分到说话人A音频中;
False Alarm : 被系统误分到说话人A音频中, 但实际不属于说话人A的时长;
Overlap : 被系统分为说话人A和说话人B同时说话, 但实际没有同时说话的时长;
Confusion : 被系统分为说话人A的, 但是实际属于说话人B的时长;
Reference Length : 是整条音频的总时长。
DER的计算公式如下:

Speaker Diarization
通常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_lengthoptimal_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)

    row_index, col_index = optimize.linear_sum_assignment(-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

Original: https://blog.csdn.net/weixin_44070509/article/details/123774888
Author: 44070509
Title: Speaker Diarization

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/497658/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球