- PLDA(Probabilistic Linear Discriminant Analysis)是一种信道补偿算法,认为ivector中既有说话人信息,又有channel信息,想要滤去channel信息(信道),需要对信道进行补偿。
ref:《Probabilistic Linear Discriminant Analysis for Inferences About Identity》
其中提到:LDA和PLDA相当于因子分析和主成分分析PCA的关系
因子分析
- 观测数据的分布,找到其内在的联系,然后用少量的数据描述这个数据结构。即用假想变量表示观测数据。
- 总结就是用多元高斯分布经过仿射变换,加上噪声,用来拟合真实的分布。
https://www.twblogs.net/a/5b7d54e62b71770a43deac32/zh-cn
plda-kaldi
ivector-plda-scoring <plda> <train-ivector-rspecifier> <test-ivector-rspecifier> <trials- rxfilename> <scores-wxfilename>
的第一列要是spk_id,和 的第一列种类相同
的第二列是utt_id,和 的第二列种类相同
需要将句子遍历所有说话人,得到的数目是spk_num*utt_num
其中打分的如果是个文件夹需要自行创建
报的vector:no such file or directory检查对应的文件列id是否匹配,有可能是多一点或者少一点什么
的结果是判别合成的说话人之间的差异,认为合成的不同说话人的差异越大(eer越小),合成语音不同人之间区分度越好
<我的任务>检查和source之间的相似度,因此一个人转换之后的话全部设成non-target----试验不行,如果一个人,全标成nontarget,不能算eer
- 生成speaker.txt和trials
speaker.txt是<wav_dir, utt_id>
trials 是<spk, utt_id, target/nontarget>
因为是测试转换的和原来的相似度
python gen_spk_test.py wav_dir save.txt
需要自行修改内部的文件
测试证明
- 如果将source分别标记成target和nontarget,eer并不是所想象的那样很高的错误率,p226只有33.3%
- 如果将p226和p303按照各自说话人标记,ref集的eer=0%
- 和句子长短的关系不太大,生成的句子(同一,标为nontarget)在5s内和15s内(保证enroll,test-target相同)得到的eer相同
- 如果得到分数,但是没有报错却不生成eer,检查trials文件的spk和label标签对应是否正确
参考:【1】画EER曲线,声纹确认https://blog.csdn.net/zjm750617105/article/details/60503253