ROC与AUC,DET与EER,minDCF,Identification Accuracy

为什么需要这些指标

  • 对于两个说话人识别系统,我们希望比较它们的性能
  • 比较它们的性能,我们需要这些性能指标
  • 必须使用同一个评价集(Evaluation Set),并且指标的具体实现一致,比较才是有意义的
  • 系统A可能在一个评价集上性能优于系统B,也可能在另一个评价集上性能劣于系统B

评价集

  • 原则
    • 训练集中出现的话语(Utterances),不得出现在评价集中
    • 训练集中出现的说话人(Speakers),不得出现在评价集中
  • 两种类型
    • 基于样本对的评价
    • 基于集合的评价

基于样本对的评价

  • 选取一系列样本对
  • 对于每个样本对,要求:
    • 有两段话语
    • 有一个二值标签,表示这两段话语来自同一个说话人(为正样本,用1表示),或来自不同的说话人(为负样本,用0表示)
  • 例子:VoxCeleb官方样本对
    在这里插入图片描述

基于集合的评价

  • 在许多现实应用中,用户常常会提供多段话语用于注册
  • 为了更好的模拟这个过程,我们可以用基于集合的评价来评价说话人识别系统
  • 评价集会被分为两个子集:
    • 注册集
    • 验证集
  • 这两个子集覆盖同一范围的说话人,但是采用不同的话语代表每个说话人
  • 步骤:
    1. 使用注册集,用说话人编码器(训练出来的模型),从所有说话人的话语中,提取出嵌入码,由于每个说话人有多端话语,因此需要将每个说话人的多个嵌入码,聚合成一个speaker profile
    2. 使用验证集,采样出话语,与之前得到的speaker profile一一对比,得到样本对,来自同一个说话人则为正样本,来自不同的说话人则为负样本
    3. 通常负样本远多于正样本,因此需要对负样本做下采样
  • 基于集合的评价,各集合示意图(图源:语音之家):
    ROC与AUC,DET与EER,minDCF,Identification Accuracy_第1张图片
    可见:训练集和评估集中的说话人是不同范围的,评估集中的两个子集中的说话人是同一范围的,但是同一说话人的话语,不在两个子集中重复。

假阳率和假阴率

  • 对于每一个样本对,系统得到的结果可以分为四类:
Ground Truth Prediction Result
1 1 True Accept
1 0 False Reject / Type II Error
0 1 False Accept / Type I Error
0 0 True Reject
  • 假阳率:在所有的负样本中,发生错误接受的比例
    F A R = F A F A + T R = F A F a l s e FAR = \frac{FA}{FA + TR} =\frac{FA}{False} FAR=FA+TRFA=FalseFA
  • 假阴率:在所有的正样本中,发生错误拒绝的比例
    F R R = F R F R + T A = F A T r u e FRR = \frac{FR}{FR + TA} =\frac{FA}{True} FRR=FR+TAFR=TrueFA

错误与阈值

  • 通过将相似度得分与阈值进行比较,系统才可以得出结果,此时的阈值也被称为操作点
  • 当阈值升高,所有接受率下降,所有拒绝率上升
  • 由于FAR和FRR都基于阈值才能得到,所以无法直接比较两个系统的FAR和FRR
  • 要比较两个系统,需要与阈值无关的性能指标

ROC(Receiver Operating Characteristic)曲线

  • 遍历阈值的所有可能取值(如:[0, 1]),并且记录每个取值的FAR和TAR,将FAR作为横坐标,TAR作为纵坐标
  • 将这些点,画到二维平面上,将得到一条单调递增的曲线,如下:
    ROC与AUC,DET与EER,minDCF,Identification Accuracy_第2张图片
  • 利用ROC曲线比较系统性能:
    • 对角线y=x(图中虚线)为随机猜测的结果,即对每个阈值,系统都判定一半样本为正,另一半样本为负
    • 曲线越靠近左上角,性能越好
    • 可以用AUC(Area Under Curve,ROC曲线下方的面积大小)来度量系统的性能,越大越好,取值[0, 1]
  • 缺点:计算AUC时,不同的阈值分辨率,会带来较大的结果浮动

DET(Detection Error Tradeoff)曲线

  • DET曲线和ROC曲线关系紧密:横坐标都是FAR,但DET的纵坐标的FRR,ROC的纵坐标是TAR,比较如下:
    ROC与AUC,DET与EER,minDCF,Identification Accuracy_第3张图片

  • DET曲线尝试用对数刻度,从而看起来更接近直线

  • 利用DET曲线比较系统性能:

    • 曲线越靠近左下角,性能越好
    • 在DET曲线中,绘制对角线,得到与曲线的交点,该点的FAR与FRR相等(理想状态下),将此点的FAR和FRR的值称为EER(Equal Error Rate,等错误率),将此点对应的阈值称为EER阈值
    • 可以用EER来度量系统的性能,越小越好,取值[0, 1]
  • EER的计算

    1. 由于阈值的分辨率有限,不一定能找到刚好使FAR和FRR相等的阈值
    2. 转而寻找距离对角线最近的点,然后以对角线为对称中心,得到对称点,连接对称点得到线段,线段与对角线的交点就是EER点
      ROC与AUC,DET与EER,minDCF,Identification Accuracy_第4张图片
    3. 代码
import csv

def ComputeEER():
    """Compute the Equal Error Rate from the data in scores.csv
    
    Returns:
        a floating point number for the equal error rate (between 0 and 1)
    """
    labels = []
    scores = []
    with open("coding5\scores.csv", newline='') as csvfile:
        spamreader = csv.reader(csvfile, delimiter=',', quotechar='|')
        for row in spamreader:
            labels.append(int(row[0]))
            scores.append(float(row[1]))

    positive = 0
    negative = 0
    for label in labels:
        if 1 == label:
            positive += 1
        else:
            negative += 1

    th = 0
    eer = 1
    eer_th = 0
    min_delta = 1
    while th <= 1:
        true_accept = 0
        true_reject = 0
        false_accept = 0
        false_reject = 0
        for i in range(len(scores)):
            if scores[i] < th:
                if 0 == labels[i]:
                    true_reject += 1
                else:
                    false_reject += 1
            else:
                if 1 == labels[i]:
                    true_accept += 1
                else:
                    false_accept += 1

        far = false_accept / negative
        frr = false_reject / positive
        delta = abs(far - frr)
        if delta < min_delta:
            min_delta = delta
            eer_th = th
            eer = (far + frr) / 2

        th += 0.005

    return eer

其中,csv文件为:

1,0.569124
0,0.476595
0,0.413035
0,0.293926
0,0.440901
0,0.368193
0,0.389329
0,0.376836
0,0.569162
1,0.638756
0,0.524672
1,0.661512
0,0.165377
0,0.420235
0,0.446507
0,0.482949
0,0.552219
0,0.378767
0,0.430548
1,0.747565
0,0.168463
0,0.278504
1,0.657658
0,0.229037
0,0.219550
0,0.424466
0,0.456832
1,0.555986
0,0.373798
0,0.426028
0,0.350222
0,0.290085
0,0.320089
0,0.425232
1,0.575289
0,0.439917
0,0.352562
0,0.256855
1,0.678153
0,0.546677
1,0.553341
0,0.546400
0,0.416762
0,0.320113
0,0.509082
0,0.296723
0,0.391334
1,0.632965
0,0.306316
0,0.317127
0,0.406913
0,0.540259
0,0.391180
0,0.302759
1,0.779792
0,0.455095
1,0.637135
0,0.248829
0,0.369333
0,0.493602
0,0.542002
0,0.431087
0,0.301929
1,0.631853
0,0.612609
0,0.449952
0,0.287069
0,0.265009
1,0.651048
0,0.520650
0,0.141886
0,0.042039
1,0.729197
0,0.364319
0,0.168674
0,0.319438
1,0.643376
0,0.267376
0,0.113846
0,0.248857
0,0.212427
1,0.527515
0,0.300285
0,0.264906
0,0.279250
0,0.525230
0,0.413385
0,0.305920
1,0.650475
0,0.588482
1,0.600876
0,0.570961
0,0.325268
0,0.269917
0,0.450660
1,0.541685
0,0.515372
0,0.337933
0,0.329257
0,0.446274

注意:必须要先寻找使 a b s ( F A R − F R R ) abs(FAR-FRR) abs(FARFRR) 最小的点,然后取 E E R = F A R + F R R 2 EER = \frac{FAR+FRR}{2} EER=2FAR+FRR,而不能直接取使 F A R + F R R 2 \frac{FAR + FRR}{2} 2FAR+FRR 最小的点,数学理由:

  • 点到直线距离公式:
    d = ∣ A x 0 + B y 0 + C ∣ A 2 + B 2 d = \frac{|Ax_0 + By_0 + C|}{\sqrt{A^2 + B^2} } d=A2+B2 Ax0+By0+C
    其中,点为 ( x 0 , y 0 ) (x_0,y_0) (x0,y0),直线为 A x + B y + C = 0 Ax+By+C=0 Ax+By+C=0。现在代入直线 x − y = 0 x-y=0 xy=0,点 ( F A R , F R R ) (FAR,FRR) (FAR,FRR),得:
    d = ∣ F A R − F R R ∣ 2 d = \frac{|FAR - FRR|}{\sqrt{2}} d=2 FARFRR
    a b s ( F A R − F R R ) abs(FAR-FRR) abs(FARFRR) 最小时, d d d最小,设此时的点为 ( F A R 0 , F R R 0 ) (FAR_0,FRR_0) (FAR0,FRR0)
  • 过点 ( F A R 0 , F R R 0 ) (FAR_0,FRR_0) (FAR0,FRR0)作对角线的垂线,垂线的方程为:
    x + y − F A R 0 − F R R 0 = 0 x + y - FAR_0 - FRR_0 = 0 x+yFAR0FRR0=0
    x − y = 0 x-y=0 xy=0 联立,得到交点 ( F A R 0 + F R R 0 2 , F A R 0 + F R R 0 2 ) (\frac{FAR_0 + FRR_0}{2},\frac{FAR_0 + FRR_0}{2} ) (2FAR0+FRR0,2FAR0+FRR0),因此 E E R = F A R 0 + F R R 0 2 EER = \frac{FAR_0 + FRR_0}{2} EER=2FAR0+FRR0
  • 若直接取使 F A R + F R R 2 \frac{FAR + FRR}{2} 2FAR+FRR 最小的点,结果会偏小,如下图所示:
    ROC与AUC,DET与EER,minDCF,Identification Accuracy_第5张图片
  • 缺点,EER只能反映DET曲线的局部特性,没有反映出DET曲线的整体形状,如下图所示,蓝色曲线整体更偏左下,但是EER高于红色曲线:
    ROC与AUC,DET与EER,minDCF,Identification Accuracy_第6张图片

minDCF(Minimum Detection Cost Function,最小检测代价函数)

  • 不同的实际应用对不同类型的错误有不同的容忍程度,可以理解为不同类型的错误带来的风险不相同
  • 例如:
    • 安全类应用:错误接受率过高是几乎不可容忍的,因此错误接受的风险更大
    • 唤醒类应用:错误拒绝率过高会导致较差的用户体验,因此错误拒绝的风险更大。而错误接受可以只开放部分权限,或者根据用户的进一步操作来交叉验证用户身份
  • DCF的公式:
    C D e t = C F R ⋅ F R R ⋅ P T + C F A ⋅ F A R ⋅ P I C_{Det} = C_{FR} \cdot FRR \cdot P_{T} + C_{FA} \cdot FAR \cdot P_{I} CDet=CFRFRRPT+CFAFARPI
    其中:
    • C F R C_{FR} CFR 是错误拒绝的代价
    • P T P_{T} PT 是出现真实说话人的先验概率
    • C F A C_{FA} CFA 是错误接受的代价
    • P I P_{I} PI 是出现仿冒说话人(Imposter)的先验概率
  • minDCF指:寻找使DCF取得最小值的阈值

Identification Accuracy(辨认准确率)

  • 上述AUC、EER。minDCF都是针对说话人验证定义的性能指标
  • 对于说话人辨认任务,需要使用Identification Accuracy(辨认准确率)来评价
  • 步骤:
    1. 对每个样本,构造(k+1)个数据,其中k个数据为用于注册的说话人话语,1个为待辨认的话语
    2. k个用于注册的说话人,必须包含待辨认的话语所属的说话人
    3. 系统将待辨认的话语,与k个用于注册的话语分别计算相似度得分,得分最高的两段话语属于同一个说话人为辨认成功,否则辨认失败
    4. 计算辨认成功的样本,占总样本的比例,即为辨认准确率
  • 对于同一个系统,通常k越大,辨认准确率越低

你可能感兴趣的:(说话人识别,深度学习,人工智能,音频)