1. 测试数据评估pipline
输入内容:输入说话人A 和 B(wav文件,不需要增加任何其他数据) :获取A和B的speaker embedding (不需要进入分类层,因为此处只需要判断是否是同一人,并非属于分类问题) 输出内容:两者之间的相似度评分
流程图:
graph LR
source(Input Speech)
feature[Feature extraction]
speaker[Speaker Model]
impostor[Impostor Model]
sum((Σ))
deci[Decision]
acc{Accept}
rej{Reject}
source --> feature --> speaker -->sum -->deci --> acc
feature --> impostor -->sum
deci --> rej
在evaluation 中需要传入file,以下是file格式说明
label speaker/utterances/video spaker/utterances/video
0 id1921/H5asdf-KHQy7/0001.wav id1981/BTasdf-IIQy7/0002.wav
1 id0981/Fhkdfs6R6d/0009.wav id0981/Fhkdfs6R6d/00012.wav
1:代表后两个utterances属于相同的发音人 0:代表不同的发音人
根据0和1 已经知道后面的两个utterances是否属于同一个人,我需要对此判断,给出一个评分,评分很低则是不同的人,评分高则属于同一个人
ps: 之前训练的时候,为了每个batch是需要相同的长度,所以会对音频数据进行等时间截取,但是在test时 可以直接将整个音频放入,不需要截取
通过两个utterances得到两个speaker embedding,接下来要做的就是根据这两个speaker embedding 算出一个得分,这个得分代表的是这两个speaker embedding属于同一发音人的概率
2.声纹指标(Metrics for evaluation)
通过训练之后得到的评分如下
prediction speaker/utterances/video spaker/utterances/video
0.107 id1921/H5asdf-KHQy7/0001.wav id1981/BTasdf-IIQy7/0002.wav
0.508 id0981/Fhkdfs6R6d/0009.wav id0981/Fhkdfs6R6d/00012.wav
其中0.107就是本次得到的评分,获取到评分之后,需要将performance表述出来,表述的方式常用有两种:
-
- Equal Error Rate(EER)
-
- Minimum Detection Cost (MinDCF)
2.1 EER
评分规则
首先 需要对于score需要定一个阈值,表示大于该阈值则表示属于同一发音人,比如 prediction>0.4 则表示正确 P
- T or F :prediction compare with label --> true false -->(先)lable 和prediction做比较是否相同
- P or N :prediction --> positive negative -->(后)prediction 是否为P
通过评分结果可以算出两个Rate:
- 1.False Acceptance Rate (FAR),label is 0,prediction is 1.(标签表示不同人,预测结果是同一个人)
·
FAR = FP/(TN+FP) - 2.False Rejection Rate(FRR),label is 1,prediction is 0.(标签标识同一人,预测结果不是同一个)
·
FRR = FN/(FN+TP)当FAR=FRR 此时的值就是EER此公式中:
- 1.ERR 越小越好
- 2.权重 FAR = FRR
2.2 minDCF
公式:
- Miss:False Reject
- FalseAlarm:False Accept 在VoxCeleb2中设置如下
- 1.CMiss (cost of a missed detection) =1
- 2.CFalseAlarm(cost of a spurious detection)=1
- 3.PTarget (a priori probability of the specified target speaker) =0.05 此公式中:
- 1.minDCF 越小越好
- 2.权重 FAR>FRR