语音识别的基本概念

摘录自 http://blog.csdn.net/zouxy09/article/details/7941055
这里记载的主要是以前的传统方法,并不太涉及深度学习。

语音是一个连续的音频流,它是由大部分的稳定态和部分动态改变的状态混合而成。
一个单词的发声(波形)实际上取决于很多因素,而不仅仅是音素,例如音素上下文、说话者、语音风格等。
协同发音(指的是一个音受前后相邻音的影响而发生变化,从发生机理上看就是人的发生器官在一个音转向另一个音时其特性只能渐变,从而使得后一个音的频谱与其他条件下的频谱产生差异。)的存在使得音素的感知与标准不一样,所以我们需要根据上下文来辨别音素。将一个音素划分为几个亚音素单元。如:数字“three”,音素的第一部分与在它之前的音素存在关联,中间部分是稳定的部分,而最后一部分则与下一个音素存在关联,这就是为什么在用HMM模型做语音识别时,选择音素的三状态HMM模型。(上下文相关建模方法在建模时考虑了这一影响,从而使模型能更准确地描述语音只考虑前一音得到影响称为Bi-Phone,考虑前一音和后一音的影响称为Tri-Phoe)
音素phones构成亚单词单元,也就是音节syllables。音节是一个比较稳定的实体,因为当语音变得比较快的时候,音素往往发生改变,但是音节不变。音节与节奏语调的轮廓有关。音节经常在词汇语音识别中使用。
亚单词单元(音节)构成单词。单词在语音识别中很重要,因为单词约束了音素的组合。假如共有40个音素,然后每个单词平均有7个音素,那么就会存在40^7个单词,但幸运的是就算一个受过优等教育的人也很少使用过20K个单词,这就使识别变得可行。
单词和一些非语言学声音构成了话语utterances,我们把非语言学声音称为fillers填充物,例如呼吸,um,uh,咳嗽等,它们在音频中是以停顿做分离的。所以它们更多只是语义上面的概念,不算是一个句子。

识别过程

语音识别的一般方法是:录制语音波形,再把波形通过静音sliences分割为多个utternces,然后再识别每个utternces所表达的意思。为了达到这个目的,我们需要用单词的所有可能组合去匹配这段音频,然后选择匹配度最高的。

语言学字典phonetic dictionary:字典包含了从单词words到音素phones之间的映射。字典并不是描述单词到音素之间的映射的唯一方法。可以通过运用机器学习算法去学习一些复杂的函数完成映射功能。
语言模型language model:语言模型是用来约束单词搜索的。它定义了那哪些词能跟在上一个已经识别的词后面,这样就可以为匹配过程排除一些不可能的单词。大部分语言模型都是使用n-gram模型,它包含了单词序列的统计。和有限状态模型,它通过有限状态机来定义语音序列。

特征、模型和搜索算法三部分构成了一个语音识别系统。如果你需要识别不同的语言,那么就需要修改这三部分。很多语言,都已经存在声学模型,字典,甚至大词汇量语言模型可供下载。

语音识别系统的模型通常由声学模型和语言模型两部分组成,分别对应于语音到音节概率的计算和音节到字概率的计算。
语音识别的基本概念_第1张图片

一个连续语音识别系统大致可分为四个部分:特征提取,声学模型训练,语言模型训练和解码器。
(1)预处理模块:
对输入的原始语音信号进行处理,滤除掉其中的不重要的信息以及背景噪声,并进行语音信号的端点检测(找出语音信号的始末)、语音分帧(近似认为在10~30ms内语音信号是短时平稳的,将语音信号分割为一段一段进行分析)以及预加重(提升高频部分)等处理。
(2)特征提取:
提取特征的方法很多,大多是由频谱衍生出来。Mel频率倒谱系数(MFCC)参数因其良好的抗噪性和鲁棒性而广泛应用。MFCC的计算首先用FFT将时域小信号转化为频域,之后对其对数能量谱用依照Mel刻度分布的三角滤波器组进行卷积,最后对各个滤波器的输出构成的向量进行离散余弦变换DCT,取前N个系数。
在sphinx中,用帧frames去分割语音波形,每帧大概10ms,然后每帧提取可以代表该帧语音的39个数字,这39个数字也是该帧语音的MFCC特征,用特征向量来表示。
(3)声学模型训练:
根据训练语音库的特征参数训练出声学模型参数。在识别时可以将待识别的语音的特征参数同声学模型进行匹配,得到识别结果。
目前的主流语音识别系统多采用隐马尔可夫模型HMM进行声学模型建模。声学模型的建模单元,可以是音素,音节,词等各个层次。对于小词汇量的语音识别系统,可以直接采用音节进行建模。而对于词汇量偏大的识别系统,一般选取音素,即声母,韵母进行建模。识别规模越大,识别单元选取的越小。
HMM是对语音信号的时间序列结构建立统计模型,将其看作一个数学上的双重随即过程:一个使用具有有限状态数的马尔科夫链来模拟语音信号统计特性变化的隐含(马尔科夫模型的内部状态外界不可变)的随机过程,另一个是用与马尔科夫链的每一个状态相关联的外界可见的观测序列(通常就是从各个帧计算而得的声学特征)的随机过程。
人的言语过程实际上就是一个双重随机过程,语音信号本身是一个可观测的时变序列,是由大脑根据语法知识和言语需要(不可观测的状态)发出的音素的参数流(发出的声音)。HMM合理地模仿了这一过程,是较为理想的一种语音模型。用HMM刻画语音信号需做出两个假设,一是内部状态的转移只与上一状态有关,另一是输出值只与当前状态(或当前的状态转移)有关,这两个假设大大降低了模型的复杂度。
语音识别中使用HMM通常是用从左向右单向、带自环、带跨越的拓扑结构来对识别基元建模,一个音素就是一个三至五状态的HMM,一个词就是构成词的多个音素的HMM串行起来构成的HMM,从连续语音识别的整个模型就是词和静音组合起来的HMM。
(4)语言模型训练:
语言模型是用来计算一个句子出现概率的概率模型。它主要用于决定哪个词序列的可能性更大,或者在出现几个词的情况下预测下一个即将出现的词语的内容。换一个说法说,语言模型是用来约束单词搜索的。它定义了哪些词能跟在上一个已经识别的词的后面(匹配是一个顺序的处理过程),这样就可以为匹配过程排除一些不可能的单词。
语言建模能够有效的结合汉语语法和语义的知识,描述词之间的内在关系,从而提高识别率,较少搜索范围。语言模型分为三个层析:字典知识,语法知识,句法知识。
对训练文本数据库进行语法、语义分析,经过基于统计模型训练而得到的语言模型。语言建模方法主要有基于规则和基于统计模型两种方法。统计语言模型是用概率统计的方法来揭示语言单位内在的统计规律,其中N-Gram模型简单有效。
N-Gram模型基于这样一种假设,第n个词的出现只与前面N-1个词相关,而与其他任何词都不相关,整句的概率就是各个词 出现概率的乘积。这些概率可以通过直接从语料中统计N个词同时出现的次数得到。常用的是二元的Bi-Gran和三元的Tri-Gram。
(5)语音解码和搜索算法:
解码器:即指语音识别技术中的识别过程。针对输入的语音信号,根据已经训练好的HMM声学模型、语言模型及字典建立一个识别网络,根据搜索算法在该网络中寻找最佳的一条路径,这个路径就是能够以最大概率输出该语音信号的词串,这样就确定这个语音样本所包含的文字了。所以解码操作即指搜索算法;是指在解码段通过搜索技术寻找最优词串的方法。
“帮我打开微信”
如果以音节(对汉语来说就是一个字的发音)为语音基元的话,那么电脑就是一个字一个字地学习,例如“帮”字,也就是电脑接受到一个“帮”字的语音波形,分割为一帧一帧,用MFCC提取特征,得到了一系列的系数,大概是四五十个这样,sphinx中是39个数字,组成了特征向量。不同的语音帧就有不同的39个数字的组合,混合高斯分布来表示39个数字的分布,而混合高斯分布就存在着两个参数:均值和方差;那么实际上每一帧的语音就对应着这么一组均值和方差的参数。
这样“帮”字的语音波形中的一帧就对应了一组均值和方差(HMM模型中的观察序列),那么我们只需要确定“帮”字(HMM模型中的隐含序列)也对应于这一组均值和方差就可以了。声学模型用HMM来建模,也就是对于每一个建模的语音单元,我们需要找到一组HMM模型参数就可以代表这个语音单元了。
一个字的声学模型就建立了。那对于同音字呢,则就需要语言模型了,语言模型N-Gram判断呢出现概率最大的,增加是别的准确率。

你可能感兴趣的:(语音识别)