语音识别基础讲义05Word文档格式.docx
《语音识别基础讲义05Word文档格式.docx》由会员分享,可在线阅读,更多相关《语音识别基础讲义05Word文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
![语音识别基础讲义05Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/25/7d12dbc2-1e5e-4d81-bca5-7c36c84e445a/7d12dbc2-1e5e-4d81-bca5-7c36c84e445a1.gif)
P(W(n)|T)=max{P(W(n)|T)}
=max{P(T|W(n))P(W(n))}
式中,W(n)表示使P(W(n)|T)成为最大的单词;
P(T|W(n))称为声学模型,即P(T|W(n))
的值可通过描述语音(单词)发声过程的统计模型,如采用隐马尔柯夫模型(HMM)来获取;
P(W(n))称为语言模型,常用的语言统计模型有N-gram等。
表5.1给出了基于模式匹配与统计模型的两种单词语音识别方式的特点。
表5.1基于模式匹配和统计模型的单词语音识别方式的特点
5.2隐马尔柯夫模型(HMM)的概念
5.2.1马尔柯夫过程
在建立语言统计模型时,通常希望得到继几个文字(或单词)C1C2C3…Ct之后,出现文字(或单词)Ct+1的概率,即求Ct+1的条件概率P(Ct+1|C1C2C3…Ct)。
当我们已知观察序列C1C2C3…Ct时,而Ct+1的条件概率若用下式来表示时,我们就把这种概率过程称之为n阶马尔柯夫过程。
P(Ct+1|C1C2C3…Ct)=P(Ct+1|Ct-n+1,Ct-n+2,Ct-n+3,…,Ct)
式5.9与式5.10分别表示一阶和二阶马尔柯夫过程的条件概率。
(5.9)
P(Ct+1|C1C2C3…Ct)=P(Ct+1|Ct)
(5.8)
P(Ct+1|C1C2C3…Ct)=P(Ct+1|Ct,Ct-1)
如图5.1所示,当我们知道某一个系统的概率
过程可用一阶马尔柯夫过程来描述时,再根据贝叶
斯(Bayes)定理,Ci和Cj的联合概率P(Ci,Cj)就可用
下式来表示:
(5.10)
P(Ci,Cj)=P(Ci)P(Cj|Ci)
同样,若想知道Ci,Cj和Ck的联合概率P(Ci,Cj,Ck),则可由下式来求得。
(5.12)
P(Ci,Cj,Ck)=P(Ci,Ci)P(Ck|Ci,Cj)
(5.11)
=P(Ci)P(Cj|Ci)P(Ck|Cj)
图5.2给出了一个描述天气情况的马尔柯夫模型λ。
设每天观测天气一次(如在中午),天气状况为
“雨天”、“多云”和“晴天”三种状态中的一种。
若问连续8天的天气为“晴,晴,晴,雨,雨,晴,
多云,晴”的概率是多少,此问题的解答为如下所示:
观察日期:
12345678
观察序列(O):
晴,晴,晴,雨,雨,晴,多云,晴
状态转移序列:
33311323
状态输出概率P(O|λ):
P(O|λ)=P(3,3,3,1,1,3,2,3|λ)
=P(3)P(3|3)P(3|3)P(1|3)P(1|1)P(3|1)P(2|3)P(3|2)
=1.0x0.8x0.8x0.1x0.4x0.3x0.1x0.2
=1.536x10-4
连续8天的天气为“晴,晴,晴,雨,雨,晴,多云,晴”的概率是1.536x10-4。
5.2.2隐马尔柯夫模型的概念
对马尔柯夫模型而言,每个状态都是决定性地对应于一个可观察的物理事件,所以其状态的输出是有规律的。
然而,这种模型的限制条件过于严格,在许多实际问题中无法应用。
于是,人们就将这种模型加以推广,提出了隐马尔柯夫模型(HMM)。
隐马尔柯夫过程是一种双重随机过程。
观察事件是依存于状态的概率函数,这是在HMM中的一个基本随机过程,另一个随机过程为状态转移随机过程,但这一过程是隐藏着的,不能直接观察到,而只有通过生成观察序列的另外一个概率过程才能间接地观察到。
为说明问题简便起见,我们再举一个例子。
设想有这样一个场景:
有一个房间,中间隔着一块不透明的屏障,一个人(甲)站在一边,另一边有一个人(乙)正在做投掷硬币的实验。
乙不告诉甲他具体是怎么做的,但他会向甲报告每次投掷的结果,即是每次投掷硬币的结果是正面还是反面。
甲得到的观测序列为:
O={o1,o2,…,oT}={H,H,…,T}
其中,o1,o2,…,oT表示第1、第2、…、
第T次观测符号,H表示正面,T表示反面。
假设有两枚“有偏”硬币,第一枚硬币
表示状态1,第二枚硬币表示状态2。
某一次
投掷选择哪一枚硬币是由另一枚有偏硬币或
其它随机事件决定的。
在这种情况下,你只
知道观测的结果是正面还是反面,但对每次
投掷结果是由哪一个状态即哪一枚硬币产生
的一无所知,这就叫做隐过程。
它可以看作是最简单的一个隐马尔柯夫模型。
图5.3给出了描述这一硬币投掷试验过程的隐马尔柯夫模型。
图中,a11、a22为状态转移概率分布,两侧的概率分别表示两枚硬币的观察符号概率分布,即共有四个概率分布参数。
5.2.3HMM的要素及其模型描述
由此可见,一个HMM模型(离散)主要由下列参数来决定:
(1)N:
模型中的状态数目。
尽管在实际应用中,隐马尔柯夫过程中的状态是隐藏着的,但是模型的状态或状
态的集合,一般都被赋予一定的物理意义,如在投掷硬币实验中,每个状态对应于一
个特定的有偏硬币。
另外,一般所有状态都与其它可到达的状态相连接,即构成一种
称为遍历性的连接模型(ergodic),但在语音识别方面,通常采用一种称为“由左至右(left
toright)”的非遍历性的连接模型。
这里,对状态集合用S={S1,S2,…,SN}来表示,而
时刻t的状态则用qt来表示。
(2)M:
每个状态可能输出的观察符号的数目。
观察符号与模型化的系统的物理输出相对应,如在投掷硬币实验中,物理输出即
为正面与反面。
这里,对符号集合用来V={v1,v2,…,vM}表示。
(3)T:
观察符号序列的长度。
这里,对观察符号序列用O=o1o2…oT来表示。
对时刻t的观察值ot而言,其值
取符号集V中的某一符号。
(4)A={aij}:
状态转移概率分布。
这里,
aij=P[qj+1=sj|qt=si],i,j=1,2,…,N
即:
aij表示时刻t的状态为si,而在时刻t+1状态转移到sj的概率分布。
(5)B={bj(k)}:
观察符号的概率分布集。
这里,
bj(k)=P[ot=vk|qt=sj],k=1,2,…,M
bj(k)表示在状态sj(j=1,2…,N)时,输出观察符号为vk的概率。
(6)π={πi}:
初始状态概率分布。
πi=P[q1=si],i=1,2,…,N
πi表示初始状态q1为si的概率。
如上所述,为了完整描述HMM,应指定两个模型参数,即N和M,再加上三个概率分布参数,即A、B和π。
一般,当A、B确定后,也就意味着N和M也已指定,所以常将HMM及其参数表示为:
λ(A,B,π)。
在这三个模型参数中,π(初始状态概率分布)最不重要;
B(某状态下事件的概率分布)最为重要,因为它就是外界观察到的事件符号的概率;
A(状态转移概率分布)也是重要的,但在孤立词识别的情况下,重要性则要差些。
5.2.4基于HMM的观察符号序列的生成方式
当给定模型λ(A,B,π)后,就可将该模型看成一个符号生成器(或称信号源),由它生成观察序列O=o1o2…oT。
其生成过程(也称HMM过程)是:
(1)按初始状态概率分布π,随机选择一个初始状态q1=Si;
(2)置t=1;
(3)按状态Si的符号概率分布bi(k),随机产生一个输出符号ot=Vk;
(4)按状态Si的状态转移概率分布aij,随机转移至一个新的状态qt+1=Sj;
(5)令t=t+1,若t≤T,则返回步骤(3),否则结束过程。
5.3HMM的三个基本问题及其解法
5.3.1HMM三个基本问题
为了将HMM应用于实际,必须解决如下三个基本问题:
(1)模型的评估问题
已知观察序列O=o1o2…oT和模型λ=(A,B,π),如何有效地计算在给定模型
λ条件下产生观察序列O的条件概率P(O|λ)。
(2)最佳路径问题
已知观察序列O=o1o2…oT和模型λ=(A,B,π),如何选择相应的在某种意义
上为最佳的(最好地解释观察序列的)状态序列。
(3)模型训练问题
如何调整模型参数(A,B,π)以便使P(O|λ)为最大。
5.3.2模型评估问题的解法
当给定模型λ以及观察序列O=o1o2…oT时,计算该模型λ对于观察序列O的概率P(O|λ)的思路是:
对长度为T(观察序列的长度)的所有可能的状态转移序列Qj=qj1qj2…qjT(j=1,…,J;
J为所有可能的状态序列数),分别计算Qj与观察序列O的联合概率P(O,Qj|λ),然后取各联合概率的和,即P(O|λ)=∑{P(O,Qj|λ)}(j=1,…,J)。
·
P(O|λ)的一般算法:
∵
P(O,Qj|λ)=P(Qj|λ)P(O|Qj,λ)(根据Bayes定理)
(5.13)
P(Qj|λ)=P(qj1)P(qj2|qj1)P(qj3|qj2)…P(qjT|qjT-1)(一介马尔柯夫过程条件)
(5.15)
=a0,1a1,2a2,3a3,4…aT-1,T(用状态转移概率表示)
(5.14)
P(Q|Qj,λ)=P(o1|qj1)P(o2|qj1)P(o3|qj2)…P(oT|qjT)(各状态输出相互独立)
=b1(o1)b2(o2)b3(o3)b4(o4)…bT(oT)
(5.17)
∴
P(O,Qj|λ)=a0,1b1(o1)a1,2b2(o2)a2,3b3(o3)a3,4…aT-1,TbT(oT)
all
(5.16)
P(O|λ)=∑{P(O,Qj|λ)}
j=1
allT
=∑{at-1,tbt(ot)}
j=1 t=1
以上解法的问题点在于计算量太大,其计算次数的数量级大约为2TNT。
如设观察序列的长度为T,状态数为N的话,则对于遍历型(ergodic)模型而言,其状态序列可以有NT个存在。
图5.4给出了一个NT=8的遍历型模型的例子。
这样,在计算式(5.17)时,需做(2T-1)NT次的乘法和NT-1次的加法,其计算次数的数量级可近似看作为是2TNT。
例如,N=5(状态),T=100(观察数)时,其计算次数的数量级大约为2x100x5100≈1072。
因此,为了使问题
(1)的解法变为现实,还必须寻求更有效的算法。
所谓前向-后向算法就是这样一种更有效算法。
·
前向算法:
首先要定义一个如式(5.18)所示的前向变量αt(i)。
即前向变量αt(i)指在给定模型λ的条件下,产生t以前的部分观察符号序列(包括ot在内){o1,o2,…,ot},且时刻t又处于状态Si的概率。
αt(i)=P(o1,o2,…,ot;
qt=Si|λ)
前向变量αt(i)可按下列步骤进行迭代计算:
(1)初始化α1(i)=πibi(o1),1≤i≤N
N
(2)迭代计算αt+1(j)=[∑αt(i)aij]bj(ot+1),1≤t≤T-1
(5.18)
(5.19)
i=11≤j≤N
(5.20)
(5.21)
N
(3)最后计算P(O|λ)=∑αT(i)
i=1
第1步是把前向变量初始化为状态Si和初始观察符号o1的联合概率。
在语音识别中,通常只设一个初始状态S1,即一般将πi设成:
π1=1.0,πj=0.0(j≠1)。
第2步迭代计算是前向算法的核心部分,该迭代计算是对t=1,2,…,T-1进行的,而且对任一给定t都要对所有状态Sj(1≤j≤N)进行计算。
αt(i)aij表示观察符号序列{o1,o2,…,ot},而且由时刻t的状态Si转移到时刻t+1的状态Sj这一联合事件发生的概率。
将这些乘积对t时刻所有N个可能状态求和,便可得出观察符号序列{o1,o2,…,ot}且在t+1时刻处于状态Sj的概率。
而将求和后的结果再乘以bj(ot+1),则可得到产生t+1以前的部分观察符号序列(包括ot+1在内){o1,o2,…,ot+1},且时刻t+1又处于状态Sj的概率,即αt+1(j)。
图5.5给出了前向变量计算的示意图。
第3步是将最后一次迭代计算的结果αT(i)对i求和,便得到P(O|λ)。
在语音识别中,通常只设一个终止状态SN,所以,P(O|λ)=αT(N)。
计算量:
对每个j计算∑αt(i)aij需用N次乘法和(N-1)次加法,乘以bj(ot+1)又需1次乘法,因而对于j取N个值来说,共需乘法次数为N(N+1),而加法次数为N(N-1);
再考虑到t从1取到T-1,所以计算αt(i)所需总乘法数为N(N+1)(T-1),总加法数为N(N-1)(T-1)。
可以近似认为计算αt(i)所需的计算量约为N2T。
例如,N=5(状态),T=100(观察数)时,其计算次数的数量约为52x100=2500。
后向算法:
首先要定义一个如式(5.22)所示的后向变量βt(i)。
即后向变量βt(i)指在给定模型M和t时刻处于状态Si的条件下,产生部分观察符号序列{ot+1,ot+2,…,oT}的概率。
ai3
aiN
ai1
tt+1
βt(i)βt+1(j)
Si
S1
S2
S3
.
SN
βt(i)=P(o1,o2,…,ot|qt=Si,M)(5.22)
后向变量βt(i)可按下列步骤进行迭代计算:
(1)初始化βT(i)=1,1≤i≤N(5.23)
(2)迭代计算βt(i)=∑aijbj(ot+1)βt+1(j),1≤i≤N
j=1
t=T-1,T-2,…,1(5.24)
(4)
图5.6后向变量计算示意图
最后计算P(O|λ)=∑β1(i)(5.25)
第1步,任意定义βT(i)等于1(对所有i)。
第2步,迭代计算可以用图5.6来说明。
为了在时间t能处于状态Si,同时为了解释从时间t+1开始以后的观察序列的出现,必须考虑在时间t+1可能处在所有N个可能状态,这样就出现了aij(从状态Si转移到状态Sj)和bj(ot+1)(在状态Si观察到输出符号ot+1)以及βt+1(j)(从状态Si以后,保持后面一部分观察序列)。
βt(i)的计算(1≤t≤T,1≤i≤N)要求数量级的运算量。
前向和后向算法统称前向-后向算法,它对于求解问题
(2)和问题(3)也有帮助。
5.3.3最佳路径问题的解法
当给定模型λ以及观察序列O=o1o2…oT时,关于如何选择相应的在某种意义上为最佳的(能最好地解释观察序列的)状态序列Q*=q*1q*2…q*T的问题,根据选择的判据的不同,该问题的解法可以有许多种。
最广泛应用的判据是寻找单个最佳状态序列Q*(路径),亦即使P(Q*|O,λ)最大,这等效于使P(Q*,O|λ)最大。
Viterbi算法:
对于给定的观察序列,为了找到单个最佳状态序列,需要定义一个量δt(i):
(5.26)
δt(i)=max{P[q1,q2,…,qt=Si,o1,o2,…,ot|λ]}
q1,q2,…,qt-1
δt(i)是沿着一条路径在t时刻的最好得分(最高概率),它说明产生头t个观察符号且终止于状态Si。
δt(i)可用迭代法进行计算:
δt+1(j)=[max{δt(i)}aij]bj(ot+1)
1≤i≤N
为了实际找到这个状态序列,需要跟踪使式(5.26)最大的参数变化的轨迹(对每个t和j值)。
可以借助于矩阵ψt(j)来实现这一点。
寻找最佳状态序列的完整过程如下所示:
(5.29)
(5.27)
(1)初始化δ1(i)=πibi(o1),ψ1(i)=0,1≤i≤N
(5.28)
(2)迭代计算δt(j)=[max{δt-1(i)}aij]bj(ot),2≤t≤T,1≤j≤N
1≤i≤N
ψt(j)=argmax[δt-1(i)}aij],2≤t≤T,1≤j≤N
(5.31)
(3)最后计算P*=max{δT(i)}
(5.32)
q*T=argmax{δT(i)}
(4)路径回溯(最佳状态序列生成)
(5.30)
q*t=ψt+1(q*t+1),t=T-1,T-2,…,1
应当注意,在实现方法上,Viterbi算法类似于前向算法(除了多一个回溯步骤外)。
它们的主要区别在于,Viterbi算法用式(5.29)的计算(即对前面的状态求最大值)来代替前向算法中的式(5.20)的求和运算。
5.3.4模型训练问题的解法
关于如何调整模型参数(A,B,π)以使条件概率P(O|λ)最大的问题也是HMM三个问题中最困难的一个问题。
目前尚无解决这个问题的解析方法。
实际上,给定任何有限观察序列作为训练数据的话,没有一种最佳方法能估计模型参数。
但是,可以利用迭代处理方法(如Baum-Welch法,或称期望值修正法即EM法)以使P(O|λ)局部最大。
Baum-Welch法
(5.33)
首先定义变量:
ξt(i,j)=P(qt=Si,qt+1=Sj|O,λ)
它是在给定模型和观察序列的条件下,在时间t处于状态Si,,而在时间t+1处于状态Sj的概率。
根据前向变量和后向变量的定义,其计算公式为:
(5.35)
ξt(i,j)=P(qt=Si,qt+1=Sj,O|λ)/P(O|λ)
=αt(i)aijbj(Ot+1)βt+1(j)/P(O|λ)
(5.36)
(5.34)
再定义变量:
γt(i)=P(qt=Si|O,λ)
它是给定观察序列和模型条件下,在时间t处于的状态Si的概率,因此,
γt(i)=∑ξt(i,j)
j=1
从以上的定义不难看出:
T-1
∑γt(i)=从状态Si转移的数学期望值
(5.37)
t=1
(5.38)
∑ξt(i,j)=从状态Si转移到状态Sj的数学期望值
利用上面的公式可以得到一种重估隐马尔柯夫模型参数的方法。
其计算方法如下:
(5.39)
γ1(i)=πi:
时间t=1时处于状态Si次数的期望值。
(5.40)
(5.42)
(5.41)
从状态Si转移到状态Sj的数学期望
从状态Si转移的数学期望
∑ξt(i,j)
∑γt(i)
T-1
∑αt(i)aijbj(Ot+1)βt+1(j)
t=1
T-1
∑αt(i)βt(i)
在状态Sj观察到符号vk次数的数学期望
处于状态Sj次数的数学期望
T
∑γt(i)
t=1s.t.ot=vk
T
∑αt(i)βt(i)δ(ot,vk)
t=1
{
1,ifot=vk
其中:
δ(ot,vk)=
0,otherwise
如果把当前的模型定义为λ=(A,B,π),计算上面各式,并把重估的模型定义为λ=(A,B,π)。
如果不断地迭代,重复上述重估过程,那么就能够改善由模型观测到O的概率,一直到达某个极限点为止。
这一重估过程的最后结果称为隐马尔柯夫模型的最大似然估计。
5.4基于HMM的孤立词语音识别方案
图5.7给出了基于HMM(离散)的孤立词语音识别方案的方框图。
(1)设词汇表由W个单词构成;
用λw(Aw,Bw,πw)表示每个单词的隐马尔柯夫
模型(状态数都为N);
(2)每个单词的语音信号,用矢量量化(VQ)技术表示成M字码本中码矢构成的时
间序列。
因此,每个观察符号就是时间序列中每个码矢的标号。
这样,对于词汇
表中的每个单词,训练序列是由该单词语音(由一个人或多个人发音)的码矢标
号构成的序列的多次重复。
(3)建立每个单词的HMM模型,这是用求解问题(3)来完成的。
即用训练序列调整模型参数(Aw,Bw,πw),使之最佳,这样便能得到每个单词的最佳参数模型λw(Aw,Bw,πw)。
(4)对模型进行细调(例如,增加状态数,改变码本尺寸等),这是用求解问题
(2)来完成的。
(5)利用已训练的模型对未知语音进行识别,这是用求解问题
(2)的Viterbi算法(或用求解问题
(1)的前向算法)来完成的。
即对所有模型,评估它们各自与待识语音序列的接近程度,最后选择得分高的模型所对应的单词作为识别结果。
X:
特征矢量的时间序列
O:
基于VQ的观察符号序列
O
X
识别