最近学习过程中整理的语音识别的基础知识的笔记
语音识别本质上是一种模式识别的过程,未知语音的模式与已知语音的参考模式逐一进行比较,最佳匹配的参考模式被作为识别结果。
当今语音识别技术的主流算法,主要有基于动态时间规整(DTW)算法、基于非参数模型的矢量量化(VQ)方法、基于参数模型的隐马尔可夫模型(HMM)的方法、基于人工神经网络(ANN)和支持向量机等语音识别方法。
一 . 语音识别分类:
根据对说话人的依赖程度 :
1)特定人语音识别(SD):只能辨认特定使用者的语音,训练→使用。
2) 非特定人语音识别(SI):可辨认任何人的语音,无须训练。
根据对说话方式的要求 :
1)孤立词识别:每次只能识别单个词汇。
2)连续语音识别:用者以正常语速说话,即可识别其中的语句。
二. 语音识别系统的基本流程
(1)预处理模块:
对输入的原始语音信号进行处理,滤除掉其中的不重要的信息以及背景噪声,
语音信号的端点检测(找出语音信号的始末)、
语音分帧(近似认为在10-30ms内是语音信号是短时平稳的,将语音信号分割为一段一段进行分析)
预加重(提升高频部分)等处理
(2)特征提取:
去除语音信号中对于语音识别无用的冗余信息,保留能够反映语音本质特征的信息,并用一定的形式表示出来。
目前的较常用的提取特征的方法还是比较多的,不过这些提取方法都是由频谱衍生出来的。
梅尔频率倒谱系数(MFCC)参数因其良好的抗噪性和鲁棒性而应用广泛。MFCC 的计算首先用FFT将时域信号转化成频域,之后对其对数能量谱用依照Mel刻度分布的三角滤波器组进行卷积,最后对各个滤波器的输出构成的向量进行离散余弦变换DCT,取前N个系数。
CMUsphinx中也是用MFCC特征的,用帧frames去分割语音波形,每帧大概10ms,然后每帧提取可以代表该帧语音的39个数字,这39个数字也就是该帧语音的MFCC特征,用特征向量来表示。
(3)声学模型训练:
根据训练语音库的特征参数训练出声学模型参数。在识别时可以将待识别的语音的特征参数同声学模型进行匹配,得到识别结果。
目前的主流语音识别系统多采用隐马尔可夫模型HMM进行声学模型建模。声学模型的建模单元,可以是音素,音节,词等各个层次。对于小词汇量的语音识别系统,可以直接采用音节进行建模。而对于词汇量偏大的识别系统,一般选取音素,即声母,韵母进行建模。识别规模越大,识别单元选取的越小。(《HMM学习最佳范例》、《隐马尔科夫模型(hmm)简介》、《一文搞懂HMM》)
(4)语言模型训练:
语言模型是用来计算一个句子出现概率的概率模型。
语言建模能够有效的结合汉语语法和语义的知识,描述词之间的内在关系,从而提高识别率,减少搜索范围。语言模型分为三个层次:字典知识,语法知识,句法知识。
对训练文本数据库进行语法、语义分析,经过基于统计模型训练得到语言模型。
语言建模方法主要有基于规则模型和基于统计模型两种方法。统计语言模型是用概率统计的方法来揭示语言单位内在的统计规律,其中N-Gram模型简单有效,被广泛使用。它包含了单词序列的统计。
N-Gram模型基于这样一种假设,第n个词的出现只与前面N-1个词相关,而与其它任何词都不相关,整句的概率就是各个词出现概率的乘积。这些概率可以通过直接从语料中统计N个词同时出现的次数得到。常用的是二元的Bi-Gram和三元的Tri-Gram。
Sphinx中是采用二元语法和三元语法的统计语言概率模型,也就是通过前一个或两个单词来判定当前单词出现的概率P(w2| w1),P(w3| w2, w1)。
(5)语音解码和搜索算法:
解码器:
1. 解码端通过搜索技术寻找最优词串的方法。
2. 连续语音识别中的搜索,就是寻找一个词模型序列以描述输入语音信号,从而得到词解码序列。
3. 基于动态规划的Viterbi算法,在每个时间点上的各个状态,计算解码状态序列对观察序列的后验概率,并在每个节点记录下相应的状态信息以便最后反向获取词解码序列。Viterbi算法本质上是一种动态规划算法,该算法遍历HMM状态网络并保留每一帧语音在某个状态的最优路径得分。
搜索算法 :
N-best搜索和多遍搜索:为在搜索中利用各种知识源,通常要进行多遍搜索,第一遍使用代价低的知识源(如声学模型、语言模型和音标词典),产生一个候选列表或词候选网格,在此基础上进行使用代价高的知识源(如4阶或5阶的N-Gram、4阶或更高的上下文相关模型)的第二遍搜索得到最佳路径。
顺便记录了一下语音识别基础知识的思维导图如下 :