1 预处理 Preprocessing
与 i-vector 一样。
2 特征提取 Feature Extraction
使用TDNN(Time Delay Neural Network) 时延神经网络来提取特征。
- 在pooling之前是TDNN结构,每次取得固定数目的帧数(取决于时延数)。在原始论文中,第一层取出当前的帧的特征向量以及前后2帧的,一共5帧,第二层取出当前加上前后2帧,5+4=9帧,第三层再加上前后3帧,一共15帧。
- pooling layer累积所有的向量, 因为每一帧都给了一个向量。然后算出这些输入的均值和方差向量,放在一起,继续。
- 在pooling之后是两个全向连接层,和一个softmax输出层(分类器,分类当前属于哪一个说话人)。输出层的神经元个数等于训练时的所有说话人的个数。
- 跟d-vector一样,在注册时,embedding a 或者 b 就可以被当作 x-vector,而softmax输出层被省略。
在训练完成以后去除输出层,只需要得到embedding,也就是x-vector。
3 使用打分系统
比如PLDA,或者余弦距离。
4 其他:介绍TDNN
4.1 普通神经网络识别音素 B, D, G
其中输入0-12代表每一帧的特征向量(如13维MFCC特征)。没有办法抓取到时序。
4.2 TDNN
延时为2,则连续的3帧都会被考虑。其中隐藏层起到特征抽取的作用,输入层每一个矩形内共有13个小黑点,代表该帧的13维MFCC特征。
其中绿色的线权值相同,红色的线权值相同,蓝色的线权值相同。相当于把滤波器延时。
在介绍TDNN的原始论文中,每一层的Time-Delay用N表示,单元数用J表示,只有4层:
- 输入层:N=1(因为输入层特征是单帧提取的), J=16(Mel滤波的维度为16),共15个frame;
- 第一隐层: N=2, J=8, 共13(15-2) frame, 参数量 8(当前层8个节点) x (2+1) (每一帧要重复连3次)* 16(上一层的节点数量) = 384(从输入层到第一隐层);
- 第二隐层: N=4, J=3, 共9(13-4) frame, 参数量 3 x (4+1) * 8 = 120;
- 输出层:N=8, J=3, 共1(9-8) frame, 参数量 3 x (8+1) * 3 = 81;
总的参数量为384 + 120 + 81 = 585,相比现在网络动辄上百万的参数量,简直轻量到不能再轻量了。论文中提到,最后一层再时间维度上共享参数,如此输出层的参数量为 3 x 3 = 9,总的参数量更少。
5 x-vector 优势
因为TDNN以上的特性,参数很少,TDNN便于训练,收敛速度比较快。
神经网络的特点使得特征抽取能力加强,很多防止过拟合的技巧也能够用上,比如maxout和dropout。
加入降噪的技巧后,比如在Deep neural network embeddings for text-independent speaker verification中,x-vector 很明显的比i-vector更加厉害。
Reference List
- Time-Delay Neural Network(TDNN)-上
https://blog.csdn.net/wxb1553725576/article/details/81588440 - 语音识别-TDNN
https://blog.csdn.net/wxb1553725576/article/details/81588440 - 基于x-vector的文本无关说话人识别
https://blog.csdn.net/monsieurliaxiamen/article/details/79638227?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-1