声纹识别笔记(一)实验平台 特征 神经网络
发展源流: GMM -- ivector -- DNN
背景介绍
评价指标
设置一个阈值,高于这个阈值的为True,低于则不接受
用softmax输出一个概率Accuracy,则EER ~(1-ACC)/2。 e.g. Accuracy = 80% EER = (1-0.8)/2 = 10%
实验结果越好,阈值选取越高,一般作为评价指标。
EER是(一个分类器的)ROC曲线(接受者操作特性曲线)中错分正负样本概率相等的点(所对应的错分概率值)。这个点就是ROC曲线与ROC空间中对角线([0,1]-[1,0]连线)的交点(如下图所示)。
实验平台
Tensorflow 60%
- 自动微分系统,定义了前项,后项自动训练
- 工程化好,易于实现跨平台和嵌入式,工业界用很多
- 接口变动频繁,复杂的系统设计
- 文档较为混乱
PYTORCH
- 动态神经网络
- 语言类似python
- 简洁高效,便于拓展开发,研究用多
- 社区活跃
- 部署困难,模型难以调用
KALDI
- 专门的语音技术研究平台
- 集成了绝大多数主流的语音处理方案
- 代码结构清晰,文档健全
- 工业界用很多,讯飞、阿里
- 底层C++,实现自己的模型速度不够快(新的神经网络难写)
特征提取
aishell 采样率16k
Fbank
预加重:为了对语音的高频部分进行加重,去除口唇辐射的影响,增加语音的高频分辨率。一般通过传递函数为
y(n)=x(n)-ax(n-1)一阶FIR高通数字滤波器来实现预加重,其中a为预加重系数,0.9<a<1.0
Mel滤波:因为人对频率变化的感觉是非线性的,把线性频率映射到mel维度
Python库函数
MFCC
提取到的特征矩阵: 列:特征维数;行:帧数
声学模型
神经网络
CNN
通道:层数
32*32个像素点
第一层卷积:卷积核6个通道(6层),5*5卷积核,32-5+1=28,变成28*28*6的特征
第二层降采样pooling:average pooling 或者maxpooling(一般用2*2),变成14*14*6的特征
第三层卷积:16通道的卷积核,14-5+1=10,变成10*10*16的特征
第四层降采样: 变成5*5*16
再经过三次全连接,10个类别OUTPUT为10个,再通过softmax得到打分EER
输入通道黑白或彩色3,输出通道一般为2的倍数
stride: 右移、下移;
padding:是否在周围补零
dilation:3*3的卷积作用在5*5,用少的卷积核作用在大的区域,使用少
groups:输出channel可以看到输入channel的多少,使用少
bias:偏置项
N:batch数 C:channel H:特征 W:帧数
Hardtanh:**函数
不用定义后向运算,要定义前项运算forward
view维度变换
ResNet
CNN前面的卷积层得不到训练
实线;虚线
RNN
Xt当前隐层 St上一个隐层
BiRNN
LSTM
通过输入门输出门遗忘门来控制