语音识别过程

时间:2022-09-05 10:33:24

语音识别过程就是输入一段语音信号,找到一串文字(字或词)序列的过程,

语音输入

O =o1,o2,o3,...,ot

对应的标注

W =w1,w2,w3,...,w


这个过程一般用概率来表示,用O表示语音信号,用W表示文字序列,则是要解决下面这个问题:

语音识别过程

由贝叶斯公式

语音识别过程

展开,可得

语音识别过程

由于 P(O|W )P(W ) / P(O) 是对每个句子进行计算的,而对每个句子来说 P ( O ) 是不变的, 所以可以改写成如下
语音识别过程
即:
语音识别过程
其中P(O|) 称做观测最大释然,由声学模型计算可得
其中P(w)称做先验概率,由语言模型模型计算可得
综上所述,语音识别就是解码(decoding)过程,如下图所示:
语音识别过程


声学模型的任务是计算P(O|), 即给定文字之后发出这段语音的概率(最后利用贝叶斯,求P(O|)是使用)。 首先第一问题: 怎么才能知道每个单词发什么音呢? 这就需要另外一个模块,叫做词典,看eesen的源码在数据准备阶段就是先求出词对应音素的dict, 它的作用就是把单词串转化成音素串,然后再求的语言模型和 训练声学模型(用lstm+ctc 训练声学模型).

有了dict的帮助,声学模型就知道给定的文字串该依次发哪些音了。不过为了计算语音跟音素串的匹配程度,还需要知道每个音素的起止时间。 这是利用动归来进行的,可以高效的找到音素的分界点,使得每一段语音与音素的匹配程度(用概率表示)之积最大。实际使用的算法称为viterbi算法,它不仅仅考虑了每一段语音和音素的匹配程度,还考虑了各个音素之间转换的概率(转换概率通过HMM估计) 实际中使用的比音素更小的单位,原理一样(不是很确定,值得是一帧数据(25ms)吗,一帧不到不到一个音素的长度?)

在求音素分界点的过程中,以及在有了分界点后计算 P ( O | )时,声学模型都需要知道怎样计算一个音素与一段语音信号的匹配程度。要做这件事,需要找到一种合适的表示语音信号的方法。一般是把语音信号分成许多帧,对于每一帧,通过傅里叶变换等一系列操作,把它转换成一个特征向量。最常用的特征是MFCC,从训练数据中,我们可以提取出大量的特征向量,以及它们对应的音素;利用这些数据,就可以训练从特征到音素的分类器。前些年最常用的分类器是高斯混合模型(GMM),它的大致原理是估计出每个音素的特征向量的分布,然后在识别阶段,计算每一帧的特征向量 语音识别过程由相应音素 语音识别过程产生的概率 语音识别过程,把每一帧的概率相乘,就得到 P ( O | )。现在,神经网络渐渐火了起来,它可以直接给出 语音识别过程,用贝叶斯公式可以转换成 语音识别过程,再相乘得到 P ( O | )