声纹识别技术小结:声纹建模技术
写在前面
为了达到好的表现,先将条件和应用限制在:
- 基于Kaldi sre16 v2模型
- 开集识别
- 文本相关
- 重视FAR,FRR为次要
1. 测试集
之前也提到,声纹识别系统的测试阶段包括说话人注册和测试识别两个阶段:注册集输入作为底库,验证集输入作为测试数据。
这部分讲一下在测试阶段(默认声纹的特征提取模型已知),注册集和测试集应该如何划分。
-
首先,必须确认一点:注册集和验证集都属于测试集;
-
其次,注册集和验证集都需要包含测试集中全部的说话人;
-
最后,注册集和测试集中相同说话人下面的子集是不重复的(必须是不同的语音)。
当然,如果考虑集外陌生人的识别问题,即开集问题,那么验证集则比注册集的说话人要多,多的说话人即是集外的说话人。
这里说的都是针对测试集的,关于训练所用的数据集一般要比测试集大很多,而且与测试集的说话人不相同。
2. 数据预处理
参考: zthxxx /python-Speech_Recognition——里面有一些音频处理工具(WaveOperate)
原始采集的音频数据存在的主要问题:(文本相关)
音量、语速、真实语音时长、混响(回声)、背景噪声
计划的解决思路:
-
通过音频质量检查工具(PESQ等)进行初步筛选和过滤;
-
通过语音增强(除去低音和高音)、去混响(回声)、背景噪声消除等进行音频质量提升
2.1 音频过滤
2.1.1 音频质量
使用已经训练好的语音识别模型,对采集的音频数据进行初步筛选:如果模型无法识别出任何文字,或者识别结果的可信度很低,那么很可能该音频并不包含有意义额度语音,可以将这部分语音在注册阶段直接删除或者在验证阶段要求录入者重新录制。
注:目前项目只需要针对测试数据,如需考虑训练数据则还可以从数据增强等方面进行考虑。
2.1.2 音频时长
David的一篇论文[Snyder D, Garcia-Romero D, Povey D, et al. Deep Neural Network Embeddings for Text-Independent Speaker Verification[C]// INTERSPEECH. 2017:999-1003]中提到过要剔除训练集中的短语音(5秒以下)
过短的语音对于训练分类器的NN来说,会有可能带来负影响,而kaldi的SRE16代码里也确实有这步存在。
但是:
短时音频的识别性能是决定能不商用的一个很关键的点,所以x-vector应运而生,也是JHU的那帮人,就是Kaldi的团队
这里参考知乎回答: 为什么在说话人识别技术中,PLDA面对神经网络依然坚挺?
因此,音频时长应该选定为多少?——根据x-vector的理论,应该是需要10s
左右的音频:添加链接描述
2.2 音频质量提升
这部分主要可以从 VAD 等方面来进行。
3. 常用数据集
其他考虑
-
诈骗语音
诈骗语音数据集:诈骗语音数据集如何获取? -
数据增强
Kald 语音数据增强:Kaldi当中语音数据增强有什么方法? -
以及谷歌开源的语音“克隆”代码: CorentinJ / Real-Time-Voice-Cloning