语音识别系统结构

语音识别系统结构

语音
信号处理
根据人耳的听觉感知特点,抽取语音中最重要的特征,将语音信号转换为特征矢量
序列
声学特征
线性预测编码 Linear Predictive Coding,LPC
梅尔频率倒谱系数 Mel-frequency Cepstrum Coefficients,MFCC
梅尔标度滤波器组 Mel-scale Filter Bank,FBank
线性感知预测(Perceptual Linear Prediction, PLP)
解码器
decoder是根据字典、声学模型和语音模型,将输入的语音特征失量序列转化为
字符序列
声学模型acoustic model
对声学、语音学、环境的变量,以及说话人性别、口音的差异等的知识表示;充
分利用了声学、语音学、环境特性以及说话人性别口音等信息
特征向量序列的可变长和音频信号的丰富变化性
可变长特征向量序列问题在学术上通常有动态时间规划(Dynamic Time
Warping, DTW)和隐马尔科夫模型(Hidden Markov Model, HMM)方法来
解决
音频信号的丰富变化性是由说话人的各种复杂特性或者说话风格与语速、环
境噪声、信道干扰、方言差异等因素引起的。声学模型需要足够的鲁棒性来
处理以上的情况
传统声学模型
GMM
HMM模型对时序信息进行建模,在给定HMM的一个状态后,GMM对属
于该状态的语音特征向量的概率分布进行建模
混合高斯模型分布最明显的性质是它的多模态,这使得混合高斯模型可以
描述很多显示出多模态性质的物理数据,比如语音数据,而单高斯分布则
不合适。数据中的多模态性质可能来自多种潜在因素,每一个因素决定分
布中特定的混合成分。如果因素被识别出来,那么混合分布就可以被分解
成有多个因素独立分布的集合
HMM
CD-DNN-HMM
DNN模型为了获得更好的性能提升,引入了上下文信息(也即前后特征帧信
息),所以被称为CD-DNN-HMM(Context-Dependent DNN-HMM)模型
相比于GMM模型,DNN模型具有一些明显的优势:首先,DNN是一种判别
模型,自身便带有区分性,可以更好区分标注类别;其次,DNN在大数据上
有非常优异的表现,伴随着数据量的不断增加,GMM模型在2000小时左右
便会出现性能的饱和,而DNN模型在数据量增加到1万小时以上时还能有性
能的提升
DNN模型有更强的对环境噪声的鲁棒性,通过加噪训练等方式,DNN模型在
复杂环境下的识别性能甚至可以超过使用语音增强算法处理的GMM模型
除此之外,DNN还有一些有趣的性质,比如,在一定程度上,随着DNN网络
深度的增加,模型的性能会持续提升,说明DNN伴随模型深度的增加,可以
提取更有表达性、更利于分类的特征;人们利用这一性质,提取DNN模型的
Bottle-neck特征,然后在训练GMM-HMM模型,可以取得和DNN模型相当
的语音识别效果
DNN应用到语音识别领域后取得了非常明显的效果,DNN技术的成功,鼓舞
着业内人员不断将新的深度学习工具应用到语音识别上,从CNN到RNN再到
RNN与CTC的结合等等,伴随着这个过程,语音识别的性能也在持续提升
声学模型的任务是计算P(X|W),即给定文字后,发出这段语音的概率
首先第一个问题就是:怎么才能知道每个单词应该发什么音呢?这就需要
另一个模块,叫作词典(lexicon),它的作用就是把单词串转换成音素串
词典一般认为是跟声学模型、语言模型并列的模块。词典中会遇到一词多
音的问题
有了词典的帮助,声学模型就知道给定的文字串该依次发哪些音了
不过,为了计算语音与音素串的匹配程度,还需要知道每个音素的起止时

这是通过动态规划算法来进行的,利用动态规则算法,可以高效地找到音
素的分界点,使得每一段语音与音素的匹配程度(用概率表示)之积最大
实际使用的算法称为Viterbi算法,它不仅仅考虑了每一段语音与音素
的匹配程度,还考虑了在各个音素之间转换的概率;后者是通过隐马
尔可夫模型(HMM)估计出来的
隐含马尔可夫模型Hidden Markov Model,HMM
某一语音特征矢量序列对某一状态的后验概率
概率图模型,用来表示序列之间的相关关系
带权有向图,图上的每一个节点称为状态
每一时刻,HMM都有一定概率从一个状态跳转到另一个状态,并
有一定概率发射一个观测符号,跳转的概率用边上的权重表示
HMM假定,每一次状态的转移,只和前一个状态有关,而与之
前之后的其他状态无关
前之后的其他状态无关
即马尔可夫假设,在每一个状态下发射的符号,只与当前状态有
关,与其他状态和其他符号没有关系,即独立输出假设
隐含马尔可夫模型可以产生两个随机的序列,一个是状态序列,一
个是观测符号序列,所以是一个双重随机过程,但外界只能观测到
观测符号序列,不能观测到状态序列
利用维特比算法 Viterbi Algorithm找出在给定观测符号序列的条
件下,发生概率最大的状态序列
对于某一观测符号序列的概率,可以通过前向后向算法ForwardBackward Algorithm高效的求得
每一个状态的转移概率和观测符号发射概率可以通过鲍姆-韦尔
奇算法Baum-Welch Algorithm计算得到
HMM对声学单元和语音特征序列之间的关系建模
声学单元级别较小,其数量就少,但对上下文的敏感性则会大
大词汇量连续语音识别系统中一般采用子词Sub-word作为声学单元
英语中采用因素
汉语中采用声母、韵母
由于连续语音中具有协同发音的现象,故需要对前后三个音素共同
考虑,称为三音子(Triphone)模型。引入三音子后,将引起隐含
马尔科夫模型数量的急剧增加,所以一般会对状态进行聚类,聚类
后的状态称为 Senone
语音识别任务中的声学特征矢量取值是连续的,为了消除量化过程
造成的误差,所以考虑使用连续概率密度函数来对特征矢量对状态
的概率进行建模。混合高斯模型(Gaussian Mixture Models,
GMM)可以对任意的概率密度函数进行逼近,所以成为了建模的首
选。
邓力等将深度学习引入语音识别的声学建模中,用深度神经网络对
声学特征矢量和状态的关系进行建模 ,极大地提升了语音识别的准
确率,此后深度学习在语音识别声学建模上的应用开始蓬勃发展,
如利用声学特征矢量上下文关系的循环神经网络(Recurrent Neural
Networks,RNN)及其特殊情况长短时记忆网络(Long Shortterm Memory,LSTM)等。
实际系统中使用的是比音素更小的单位,不过原理是一样的
在求音素分界点的过程中,以及在有了分界点后计算P(X|W)时,声学模型
都需要知道怎样计算一个音素与一段语音信号的匹配程度
要做这件事,需要找到一种合适的表示语音信号的方法。一般是把语音信
号分成许多帧,对于每一帧,通过傅里叶变换等一系列操作,把它转换成
一个特征向量
最常用的特征是MFCC
https://www.zhihu.com/question/2726…
从训练数据中,我们可以提取出大量的特征向量,以及它们对应的音
素;利用这些数据,就可以训练从特征到音素的分类器
前些年最常用的分类器是高斯混合模(GMM),它的大致原理是估计出
每个音素的特征向量的分布,然后在识别阶段,计算每一帧的特征向
量Xt由相应音素Si产生的概率P(Xt|Si),把每一帧的概率相乘,就得到
P(X|W)
现在,神经网络渐渐火了起来,它可以直接给出P(Si|Xt),用贝叶斯公
式可以转换成P(Xt|Si),再相乘得到P(X|W)
语言模型language model
对一组字符序列构成的知识表示
表示某一字序列发生的概率
例如,你的名字叫“福贵”你输入了“fugui”,出来的可能是“富贵”,但不会
出来“抚跪”,这就是语言模型的功劳
语音识别中语言模型的目的就是根据声学模型输出的结果,给出概率最大
的文字序列
语言模型的背景
语言模型是针对某种语言建立的概率模型,目的是建立一个能够描述给定词
序列在语言中的出现的概率的分布
“定义机器人时代的大脑引擎,让生活更便捷、更有趣、更安全”。 “代时人机器定义引擎的大脑,生活让更便捷,有趣更,安更全”。
语言模型会告诉你,第一句话的概率更高,更像一句”人话”
语言模型技术广泛应用于语音识别、OCR、机器翻译、输入法等产品上
语言模型建模过程中,包括词典、语料、模型选择,对产品的性能有至关
重要的影响
语言模型的建模需要利用复杂的模型公式进行模拟计算
语言模型的技术难点
语言模型的性能,很大程度上取决于语料的质量和体量。和特定任务匹配的
大语料,永远是最重要的。但是实际应用中,这样的语料往往可遇不可求
传统的Ngram建模技术,对长距离的依赖处理的欠佳。如工业界常用的四元
模型,即当前词的概率,只依赖三个历史词。因此,更远距离的历史词在建
模中,没有对当前词概率产生影响
此外,Ngram模型建模的参数空间过于庞大。同样以四元模型为例,词典大
小为V,参数空间就是V4。实际应用中V大小为几万到几百万,可想而知,参
数空间有多大。在这样的参数规模下,多大的数据显得都有些稀疏
近年来提出的神经网络语言模型技术,一定程度上解决了参数空间大,长距
离依赖的问题。而且对于相似的词,概率估计上自带一定程度的平滑,从另
一个角度解决了数据稀疏的问题。但是神经网络语言模型的缺点是训练时间
长,实际应用中查询速度较慢,需要结合硬件做加速
语言模型一般利用链式法则,把一个句子的概率拆解成其中每个词的概率之积
设W是由W1,W2,W3,…,Wn组成的;P(W)=P(w1,w2,w3,
…,wn)=P(w1)P(w2|w1)P(w3|w1,w2)…P(wn|w1,w2,w3,…,wn−1)每一项都是在已
知之前所有词的条件下,当前词的概率
不过,当条件太长的时候,概率就不好估计了,所以最常见的做法是认为
每个词的概率分布只依赖于历史中最后的若干个词。这样的语言模型称为
n-gram模型
N 元文法N-Gram
统计前后N个字出现的概率
假定某一个字出现的概率仅与前面N-1个字出现的概率有关系
假设有一字序列W=(w1,w2,w3,⋯,wU) ,则其发生概率可以被分解为如
下形式:
P(W)=P(w1,w2,w3,…,wn)=P(w1)P(w2|w1)P(w3|w1,w2)…P(wn|w1,w2,w3,
…,wn−1)
但是,这样的概率无法统计。根据马尔科夫假设,则只需考虑前 N 个
字符发生条件下的概率即可。假设 N=2 则有
P(W)=P(w1)P(w2|w1)P(w3|w2)…P(wn|wn−1)
马尔科夫假设(Markov Assumption):下一个词的出现仅依赖于
它前面的一个或几个词
再根据贝叶斯公式,可以得出某一个字在另一个字的条件下发生的概

P(wn|wn−1)=P(wn,wn−1)/P(wn−1)
由此,在大量的语料中统计出相邻的字发生的概率,再统计出单个字
出现的概率,即可。
由于必然会有一些生僻词组在语料中未曾出现,但其也存在着发生的
概率,所以需要算法生成这些生僻词组的概率,即平滑
常用的平滑方式有古德-图灵平滑(Good-Turing Smoothing)和卡
茨平滑(Katz Smoothing)等
n-gram模型中的n越大,需要的训练数据就越多。一般的语音识别系统
可以做到trigram(n=3);Google似乎可以做到n=7
当n取1、2、3时,n-gram模型分别称为unigram、bigram和
trigram语言模型
更大的n:对下一个词出现的约束信息更多,具有更大的辨别力;
更小的n:在训练语料库中出现的次数更多,具有更可靠的统计信
息,具有更高的可靠性
理论上,n越大越好,经验上,trigram用的最多,尽管如此,原则
上,能用bigram解决,绝不使用trigram
构造语言模型
通常,通过计算最大似然估计(Maximum Likelihood Estimate)构造
语言模型,这是对训练数据的最佳估计,公式如下:
p(w1|wi-1) = count(wi-1, wi) / count(wi-1)
count(X)表示在训练语料中出现的次数,训练语料的规模越大,参
数估计的结果越可靠
但即使训练数据的规模很大,如若干GB,还是会有很多语言现象在训
练语料中没有出现过,这就会导致很多参数(某n元对的概率)为0
这种问题也被称为数据稀疏(Data Sparseness),解决数据稀疏问
题可以通过数据平滑(Data Smoothing)技术来解决
1)加法平滑 基本思想是为避免零概率问题,将每个n元对得出现次
数加上一个常数δ(0<δ≤1) 2)Good-Turing Smoothing
利用频率的类别信息来对频率进行平滑
3)线性插值平滑 该数据平滑技术主要利用低元n-gram模型对高元
n-gram模型进行线性插值。因为在没有足够的数据对高元n-gram
模型进行概率估计时,低元n-gram模型通常可以提供有用的信息
4)Katz平滑 也称为回退(back-off)平滑,其基本思想是当一个n
元对的出现次数足够大时,用最大似然估计方法估计其概率;当n
元对的出现次数不够大时,采用Good-Turing估计对其平滑,将其
部分概率折扣给未出现的n元对;当n元对的出现次数为0时,模型
回退到低元模型
n-gram解码算法
常用的解码算法是viterbi算法
对于音字转换问题,输入拼音nixianzaiganshenme,可能对应着很多转换
结果,对于这个例子,可能的转换结果如下图所示(只画出部分的词语节
点),各节点之间构成了复杂的网络结构,从开始到结束的任意一条路径
都是可能的转换结果,从诸多转换结果中选择最合适的结果的过程就需要
解码算法
开源语言模型工具
SRILM(http://www.speech.sri.com/projects/srilm/)
无法打开
IRSTLM(http://hlt.fbk.eu/en/irstlm)
链接丢失
MITLM(http://code.google.com/p/mitlm/)
子主题 1
BerkeleyLM(http://code.google.com/p/berkeleylm/)
训练数据集的获取
开源n-gram数据集
Google Web1T5-
gram(http://googleresearch.blogspot.com/2006/08/all-our-n-gramare-belong-to-you.html)
Google Book N-grams(http://books.google.com/ngrams/)
Chinese Web 5-
gram(http://www.ldc.upenn.edu/Catalog/catalogEntry.jsp?
catalogId=LDC2010T06)
当然,数据集的选取很大程度上影响着模型的好坏,获取适合自己工程的
数据集才是好的数据集,在实际项目中,经常使用诸如爬虫算法在网络上
获取适合自己的数据集,例如,你在开发一个与金融有关的语音识别项
目,你就可以通过爬虫算法在网络上搜索所有与金融有关的网页,文章等
资源,来建立自己的语料库(数据集)
为了利用到历史中比较久远的信息,人们还创造了许多种其它的语言模型,
例如基于神经网络的语言模型。由于训练数据量的限制,这些模型单独使用
时性能一般并不好,需要跟n-gram模型结合使用
基于加权有限状态转换器的解码Weighted Finite State Transducer
一个长度为T的给定的声学观测acoustic observation序列X=(x1,x2,x3,⋯,xT),求
出一个长度为U的对应的字word序列W=(w1,w2,w3,⋯,wU),使得后验概率
P(W|X)最大化,即求得字序列W,W^=argmaxP(W|X)
后验概率P(W│X)不易直接求得。根据贝叶斯公式可得:
W^=argmaxP(W|X)=argmaxP(X|W)P(W)/P(X)
由于声学观测序列已经给定,所以声学观测的概率是常数,故可以归约为
如下形式:
W^=argmaxP(W|X)=argmaxP(X|W)P(W)
加权有限状态转换器是一种赋权有向图,其每一个节点表示一个“状态”,
当接受到一个输入符号以后,就会由对应的弧跳转到另一个“状态”,并“发 射”一个输出符号,弧上还可以赋予权值。其形式化描述如下:
半环K上的加权有限状态转换器T是一个八元组 T=(Σ,Δ,Q,I,F,E,λ,ρ)T=
(Σ,Δ,Q,I,F,E,λ,ρ),其中 Σ为输入符号集合, Δ为输出符号集合, Q为状态集
合,I, Q为初始状态集合,F, Q为终止状态集合,五元关系
E⊆Q×(Σ∪ϵ)×(Δ∪ϵ)×K×QE⊆Q×(Σ∪ϵ)×(Δ∪ϵ)×K×Q表示转移函数,映射
λ:I→Kλ:I→K表示初始状态的权值,映射 ρ:F→Kρ:F→K表示终止状态
的权值
语言模型的评价指标
交叉熵CrossEntropy
来自预测概率与压缩算法的关系,给定语言模型下可以得到一个压缩算
法,对一个概率为p(s)的句子,用 -log2P(S)bits 保存该句子
在给定语言模型下的压缩算法,对句子中每个词需要的平均bits数
H(p,m) = -1/n logp(w1,…,wn),m为概率p的模型
困惑度
2H(p,m) = -1/n logp(w1,…,wn),m为概率p的模型
从直觉上,我们可以把困惑度理解为在随机实验中选择随机变量的加权平
均数
越小的困惑度对应一个越好的语言模型,语言模型的预测能力越强
实际产品中的性能,如语音识别中的字错误率,输入法中的句准确率等
语言模型技术的最新进展
语言模型的最新进展,主要集中在神经网络的应用上语言模型的最新进展,
主要集中在神经网络的应用上。Bengio最早提出nnlm,将几个历史词拼在一
起作为输入,将当前词放在输出层作为目标。为了解决词典的高维数问题,
nnlm利用了映射层,对输入进行降维。Nnlm属于连续型模型,自带平滑,
对相同的词历史有一定的聚类功能,一定程度上增加了模型的鲁棒性。如果
和ngram模型进行融合,实验中会获得进一步的提升
因Rnn在序列建模上有很大的优势,Mikolov在nnlm上的基础上,提出了
rnnlm。Rnnlm将词历史抽象成一个state,降低了输入维数。此外,为了解决
输出维数,将输出层的词进行聚类,通过因式分解,降低了计算复杂度
Mikolov的rnnlm之后,lstm、cnn在语言模型上也有研究陆续在跟进。此外,
在输入层,引入语义特征,也会带来性能的提升。语言模型作为语音识别、
OCR、输入法等产品中的重要模型,未来如何融合语义和产品、提升用户体

目前一般采用的大词汇量语音识别技术,会将声学、语音学以及语言学的知识引
入进系统中去
用H表示隐含马尔可夫的状态序列,C表示上下文相关的音素序列,L表示音
素序列
假设声学特征序列、隐含马尔可夫模型的状态序列、音素序列、字序列之间
是独立的
W=argmax∑H∑C∑LP(X|H)P(H|C)P(C|L)P(L|W)P(W)
式子中, P(X|H) 称为声学模型,表示声学特征序列对隐马尔科夫状态序列的
后验概率
P(H│C) 状态序列对上下文相关的音素序列的后验概率
P(C│L) 上下文相关的音素序列对音素序列的后验概率
P(C│L) 上下文相关的音素序列对音素序列的后验概率
P(L│W) 音素序列对字序列的后验概率
P(W) 表示句子发生的概率,称为语言模型。这些概率都是由前面的“训练”过
程得到的
文本输出
模型的训练
声学模型和语言模型主要利用大量语料进行统计分析,进而建模得到
参考文献
1 Huang X, Acero A, Hon H, et al. Spoken Language Processing[J]., 2000.
2 Rabiner L R. A tutorial on hidden Markov models and selected applications in
speech recognition[J]. Proceedings of the IEEE, 1989, 77(2): 257-286.
3 Mohri M, Pereira F C, Riley M, et al. Weighted Finite-state Transducers in Speech
Recognition[J]. Computer Speech & Language, 2002, 16(1): 69-88.
目的
语音转换成文字。具体来说,是输入一段语音信号,要找一个文字序列(由词或字
组成),使得它与语音信号的匹配程度最高。这个匹配程度,一般是用概率表示的
X表示语音信号,W表示文字序列
W= argmaxP(W|X)
W^=argmaxP(W|X)=argmaxP(X|W)P(W)
我们要找的W,需要使得P(W)和P(X|W)都大。
P(W)表示一个文字序列本身的概率,也就是这一串词或字本身有多“像话”(like a
sentence)
用SRILM工具做LM的训练得到3-Gram 和 4-Gram,是词于词、词与句子的映

发音字典是字词对应的音素index集合,是字词和音素之间的映射
发音字典(lexicon)包含了从单词(words)到音素(phones)之间的映射,作用
是用来连接声学模型和语言模型的
发音字典包含系统所能处理的单词的集合,并标明了其发音。通过发音字
典得到声学模型的建模单元和语言模型建模单元间的映射关系,从而把声
学模型和语言模型连接起来,组成一个搜索的状态空间用于解码器进行解
码工作
拼音-音素的映射
可以有不同的映射关系,如汉字一的拼音 “yi1”可以对应 “ii i1”,也可以
对应 “y i1”(前者是清华语音识别使用的规则)。
不同的映射关系会产生不同的识别效果
中文词-拼音的映射
中文词 拼音的映射
需要列出尽可能多的中文词及其对应的拼音,有多音字的可列出其不
同组合
g2p工具实现
通过以上两个步骤即可实现中文词-音素的转换,也就是
G2P(Grapheme-to-Phoneme Conversion)。
通过脚本可实现输入中文词,输出对应音素的功能。
收集中文词
发音字典需要覆盖尽可能多的词-音素。
可以通过之前的文章构建语言模型(二):模型训练与评估 中的
方式,将分词后的文本语料统计各单词及其词频,去掉低频词与过长
的词,得到中文词表
构建语言模型(二):模型训练与评估…
生成词典
将中文词表作为输入,通过g2p工具即可得到词-音素的映射,也就是
发音词典
What is G2P? http://www.voxforge.org/home/docs/faq/faq/whatis-g2p
P(X|W)表示给定文字后语音信号的概率,即这句话有多大的可能发成这串音。
用LSTM+CTC训练,得到语音特征到音素的映射
计算这两项的值,就是语言模型和声学模型各自的任务
从上面的叙述来看,求文字串、计算语言模型概率、求音素串、求音素分界点、
计算声学模型概率几个步骤似乎是依次进行的。其实不然,因为文字串、音素分
界点都有非常多种可能,枚举是不现实的。实际中,这几个步骤同时进行并互相
制约,随时砍掉不够优的可能,最终在可接受的时间内求出最优解
W^=argmaxP(W|X)

你可能感兴趣的:(算法)