CMSC5707-高级人工智能之语音识别
文章目录
- 语音识别预处理
- 语音识别配对
这章是将前面学的一些处理综合起来,设计出一个语音识别系统,判断当前语音的匹配度。
很多知识是和我前面总结的CMSC5707是重合的,因此笔者只关注其中不太相同的部分。
语音识别预处理
进行语音识别的过程主要如下:
- 首尾端点检测 endpoint detection
- 预加重 pre-emphasis
- 加窗分帧 frame blocking and windowing
- 特征提取 feature extraction,在课间中用的是Mel频率倒谱系数(MFCC)特征提取。
- 失真测量 distortion measure
关于第4步,MFCC特征提取相当于在之前倒谱分析的过程中加入了一层Mel滤波,之前倒谱分析参考我的上一篇文章CMSC5707-高级人工智能之音频信号特征提取,加入Mel滤波的MFCC特征提取的步骤如下:
- 先对语音进行预加重、分帧和加窗(预处理,还未进入特征提取);
- 对每一个分帧窗口,通过傅立叶变换FFT得到对应的频谱;将上面的频谱通过Mel滤波器组得到Mel频谱;
- 在Mel频谱上面进行倒谱分析(取对数,做逆变换,实际逆变换一般是通过DCT离散余弦变换来实现),获得Mel频率倒谱系数MFCC,这个MFCC就是这帧语音的特征。通过Matlab的htk-mfcc tool可以从.wav文件中提取出13个MFCC系数组成的向量,第一个系数是关于这一帧的能量energy term,与波谱分析信息无关,因此取其中的第2个到第13个系数作为音帧的特征系数。
关于第5步,就可以用上面提取出来的关于每一个frame的特征向量,衡量两个信号的差异。主要就是两个特征向量(c1,c2...c13)
和(c1',c2'...c13')
分量差距的累加和。
语音识别配对
在经过上面的预处理后,就可以进入语音识别阶段speech recognization了。针对已有的标准的样本(reference sample/ template sample)与一个待识别的输入(unknown input),已经可以计算出它们不同帧之间组成的差异矩阵distortion matrix了,问题是如何进行匹配,因为其中最难处理的就是不同语音之间的时间对齐,也就是不同语音对应音帧的时间是不完全相同的。课件中采取了一种动态规划Dynamic Programming的方法,进行弹性匹配,如下图所示。
在Accumulated distortion score matrix中找到累加差异的最小值optimal score,然后从这里开始回溯找到最佳匹配路径optimal path.
找到累加差异的最小值optimal score(最佳路径的终点)应该在最顶端一行top-row或者最靠近右边的一列right-most-column,其找到的最佳路径起点也应该在最底部一行bottom-row或者最靠近左边的一列left-most-cloumn的最小值。
但是也应该尽量让最佳匹配路径在下图中的白色区域,也就是最佳路径的终点也应在白色区域中。如果匹配的位置在黑色区域中,就会让匹配得到的输入未知序列input sequence和参考模板reference之间的长度差异过大,即使optimal score很小,这也不算是种好匹配。
习题1:
在有n个testing sample测试样本set B和有n个reference sample模板样本 set A的时候,我们可以通过绘制混淆矩阵,如下图,来表示每个测试样本和模板样本之间的差异,这也是最后在作业中展现结果的一种方式。混淆矩阵大小为n*n,每个格子填的是对应reference/input pair计算出来的累加差异的最小值optimal score.
由于测试样本和模板样本的特征表示都不一样,因此每个格子的值应该都不一样,但可以想到的是,对应同一类的声音,它们之间的差异值应该是最小的。