本发明涉及一种集汉语全音节识别、合成、汉语声音文字转换及编辑、排版、打印的装置。其中汉语全音节识别既可是认人的系统,也可实现不认人的语音识别系统。 由于汉语是一种象形文字,它不能象拼音文种那样由键盘按音素串行输入,因此必需通过各种编码方法把汉字转换成串行码,以便通过键盘向计算机输入汉字,由于众多的汉字编码方法对大部分人来说难学、难记、难操作,这样就形成了计算机输入的“瓶颈”问题,最有效、最方便地解决这一问题的方法就是通过声控的办法输入汉字,但由于受到技术上的限制,我国大多数语音识别系统还局限于几百词和近两千词的范围,且上千词的识别系统不仅识别率低而且成本高,难以实用化,况且汉语词汇有十几万之众。因此,在现有技术条件下难以实现声控打字系统。另一方面,在现代汉语中使用的有近四百个音节,如考虑四声的差别,则有近一千二百多个单音节,以单音节为来输入汉字可以满足任何文章的需要,这是解决汉字输入的一种很好的方法。但汉语单音节十分难以识别,目前许多识别单音节的系统识别率较低。而且大多为非实时模拟结果,没有实现声控打字系统。
本发明的目的是要提供一种在微型计算机上或普通中文打字机上实现的低成本,高性能的声控打字系统。它能识别并合成全部汉语单音节,使得中文文字处理机(包括通用微机系统和电子打字机)增加声控输入汉字和朗读文字文稿的功能。
本发明的目地是这样实现的:
1.方案概述
在识别以前,要通过训练建立460个音节或1200个全音节的模板(例如可以建立基于DTW算法或HMM算法的模板)。这要求用户将这些音节逐个念一遍。在识别时,将输入的语音与预存的各个模板进行比较,按得分的高低选出优胜者作为识别结果。但是在大词汇表语音识别系统中,直接对所有模板进行比较是不切实际的,例如在我们的系统中需要对1200全音节模板进行比较,这不但使识别精度非常低,而且所需的计算量也是一般微型或小型机所不能容忍的。为了解决这个问题,我们的识别系统采用了两层识别的方案,如图1所示,其中第一层是音节粗识别,即对输入音节的四声、声母和韵母分别进行识别,并选出得分最高的6个声母和6个韵母构成36个候选音节(四声识别只选出一个结果)。第二层是音节细识别,则只在36个候选音节中进行选择。由于汉语单音节具有明显的辅音元音结构(CV结构),其中辅音和元音分别与声母及韵母相对应,并且声母只有22个、韵母只有38个,所以采用声、韵母及四声的分别识别来实现音节的粗识别是一种高效的合理的解决方案。然而,一旦粗识别产生错误,在下一层的识别中是无可挽回的,所以要求粗识别达到很高的精度。在本系统的声母识别算法中将辅音分为清音和浊音首部音素两大类并采用VQ算法进行识别,在韵母识别中采用了多节VQ的算法。这些算法的运算量很小,音节粗识别的正确率达到99.7%。第二级细识别采用基于音节的隐含马可夫模型进行识别。上述二级识别不仅可用于特定人识别系统,而且可用于非特定人识别。
2.系统概貌
普通话全音节识别系统的框图如图2所示,在特征提取部分,语音经过一个带宽为100HZ到4.2KHZ的模拟滤波器滤波后进行A/D变换(采样率为10KHZ,量化精度为12bit)。然后,对数字化的语音进行分帧,帧长为20ms(200个采样点),帧移为10ms(100个采样点)。语音的特征是按帧提取的,本系统所用的特征包括:总能量(帧)e(i),过零率z(i)规一化一阶自关系数NR(i),加哈明窗后计算的12阶自相关系数R(k)和LPC系数a(k),其中,k=0,1,……12,规一化残差能量d(i)。i表示各语音帧的编号,i按下述方法确定:系统设置一个能量门限T,然后逐帧检验总能量e(i),若e(i)>T,则认为有语音进入,这时向前推帧,定该帧为i=0,即作为语音的起点帧,其目的是将一些低能量的音节起始部分全部包括进来。在检测到语音后,再设置一个门限T,若连续6帧满足e(i)<T,则表示语音已结束,定最后一帧为i=CE,即结束帧。下面分别叙述系统中其它部分的工作原理。
3.无声(S)/清音(U)/浊音(V)三类判决
按照上面设置的能量门限截取的一个普通话的单音节总可以分为四段,即S(无声)-U(清音)-V(浊音),如图3所示,其中包括了无声段落。为了真正确定一个音节的起终点MB和MS以及清浊音的分割点ME,必须进行i=0,…CE之间各语音帧的S/U/V分类。
本系统所取的分类方案可参考文献[1]。我们对每个语音帧(编号为i)建立一个5维的特征矢量:X=[e(i),z(i),NR(i),d(i),a(l)],其中T表示转置。若标S为第一类,U为第二类,V为第三类,那末在这三类情况下X都是具有近似于正态分布的随机矢量,我们可以通过很多人的训练语音求出它们的均值向量M=E[X],和方差阵D=E[(X-M)(X-M)],k=1,2,3。对于任何一帧输入语音X,可以计算与上述三个类别的似然距离d(k),
d(k)=(X-M)τD-1(X-M),k=1,2,3 式(1)
若d(l)<min[d(m)]|成立,则判定第i帧语音属于第l类。
为了剔除某些偶尔发生的判决错误,本系统还采取了如下的平滑和校正手段:
(1).若在音节的尾部出现“U”,则改判为“S”。
(2).若两段相邻“U”之间出现一段“S”(且其长度小于5帧),则将其改判为“U”。
(3).若两段相邻“S”之间出现一段“U”,且其长度小于5帧,则将其改判为“S”。
由于这个算法的模板参数是由多人训练语音求得的,所以它是一种非特定人的算法,实践证明这种算法可得到非常高的分类精度。
4.声母识别和声韵母的分割
在建立声母和韵母的码本和进行识别之前,必须将一个音节的声母和韵母分开,这是一个较难解决的问题,因为在很多情况下二者的界面并不是非常清楚的。为了解决这个问题,我们把声母分成两类。第一类称为“清音类”,其中包括下列各个声母:
{p,t,k,h,j,q,x,z,c,s,ch,sh,g,zh,f}
第二类称为“浊音首部音素类”,其中包括下列各个声母:
{a,o,e,i,u,v,m,n,l,r,b,d,g,zh,f}
第一类声母的显著特点是它的声母部分与音节的清音段落有明确的对应关系,而且清音段的长度在大多数情况下大于60ms(6帧)。第二类声母的特点是,声母与韵母的交调很严重,因而很难确定二者的分割点;同时音节的清音段很短,一般小于40ms(4帧)。此外,第二类中包含了a,o,e,i,u,v等几个单元音,它们是在零声母的情况下,位于音节起始部位的韵母头部。在这两类音素中还包括了g,zh,f这三个共同的音素,这是由于它们的特性变化很大,如果把它们只划规某一类往往会发生错误。
根据上面的诊断,在识别时我们采取如下的声母分割方案。对于每一个测试音节,首先可以按照第3节所述的原理定出它的音节起点(即清音起点)MB和清浊分割点(也就是浊音的起点)ME。若ME-MB>6,即该音节的清音段长度大于6帧(60ms),则确切判定该音节的声母属于清音类声母,因而只要在该类声母中寻找最佳逼近者。若ME-MB<4,即该音节的清音长度小于四帧(40ms),则可判定该音节的声母属于浊音首部音素声母类,并在该类中搜寻最优者。若4ME-MB 6,则不能确判,在识别时对两类声母都得进行搜寻。
采用上述的声母分类方案,就可以对每一类别建立适合于该类别特性的训练和识别算法。
(1)清音类声母的训练和识别算法:对于清音类声母,将清音段(即MB至ME-1)作为声母段。对每一声母取出由该声母构成的各种不同音节的声母段内各帧语音建立一个VQ码本。建立码本时采用LBG算法[2],特征矢量是12个LPC系数(加哈明窗,采用自关法-Durbin算法),码字之间的距离采用Itakura距离度量,各个聚类的质心由类内各个训练语音的规一化自关系数取平均求得。每个码本中最多包含10个码字。在识别时,用每个声母的VQ码本对输入测试音节的声母段进行编码,并按照平均编码失真的大小排列,选出前六个候选声母(平均编码失真是指声母段各帧语音编码失真之和除以该段总帧数)。
(2)浊音首部音素类声母的训练和识别算法,这里分为两种情况:
[a].对于m,n,l,r这几个音,取前6帧(即MB-MB+5,相应的时间间隔是60ms)作为段(这几个音的声母段长度变化较大,且受后面韵母的影响,根据大量语音数据的分析,这些音的声母段长度平均为60ms,因而作此选择)。训练和识别算法与(1)相同。
[b].对于其它语音,取前3帧(即MB-MB+2)作为声母段(这些音的声母段长局限在前三帧)。训练和识别算法与(1)相同。
5.韵母识别
在进行韵母识别以前首先要确定一个音节中韵母的起终点,根据上一节中对于不同类声母特性的讨论,我们采取以下方案来定出韵母段的起点:
[a].若测试音节中,ME-MB≥4(即该音节的清音段帧数不少于4帧,或者说时间间隔不少于40ms)。则判定韵母段起点为ME。
[b].若测试音节中ME-MB<3(即该音节的清音段帧数不大于3帧,或者说相应的时间间隔小于或等于30ms),则判定韵母段起点为MB+5。
作此判决的依据是,若ME-MB<3,那末大量语音数据的实验证明,测试音节的声母肯定属于浊音首部音素类,这时除了零声母的情况以外,切去音节的前5帧,以第6帧作为韵母的开始,可以基本上去除声母对韵母的交调而不失去韵母的韵头部分。而在零声母的情况,浊音首部音素表中已包含了所有的韵头音素:a,i,u,o,e,v,因而即使韵母段的韵头被切除掉了,它还可以通过声母的识别部分恢复过来。反之,若ME-MB4,这时韵母
段与音节中的浊音段吻合得很好,所以可将浊音段的起点ME直接定为韵母段的起点。
在各种情况下,都将音节的终点MS定为韵母段的终点。
韵母的识别采取了3节VQ的识别算法。在训练时,对于同一韵母的各个训练音节,将其各自的韵母段等分为三段,然后每段建立一个VQ码本,每个码本的码字数不超过10个所采取的特征矢量和VQ训练时相同。在识别时,将测试音节的韵母段等分为三段,然后用各个韵母的三段VQ码本进行编码,并按照从小到大排列,选出前6个优胜者。
6.基于隐含马可夫模型的语音识别方法
6.1定义
隐含马可夫过程是一个由二种机理构成的随机过程,其一是隐含的,具有有限状态的马可夫模型,而另一个是一系列随机观察函数,每一个观察函数都与一个状态相连系。假设人的声道具有有限的发音结构,把它们与状态对应起来,语音信号作为相对于一定声道结构的观察信号,这样一种声音就可用一个隐含马可夫过程来描述。利用HMM的参数估计方法求出一种发音的过程参数,这个参数集合就叫HMM模型参数。应用于语音识别的HMM模型是离散的,线性的隐含马可夫模型,其定义为:
设{§(n)|n=0,1……}是状态空间为状态指标集S={1,2,…,N}的离散随机过程,且§(n)满足:
P{§(n+1)/§(0)=So……§(n)=Sn}=P{§(n+1)/§(n)} 式(2)
令aij(n)=P{§(n+1)=j/§(n)=i} 式(3)
aij(n)为§(n)的一步转移概率,它有如下性质:
aij(n)≥0 式(4)
若ij(n)与§n无关,则(n)称齐次马可夫模型。在语音识别中,状态是隐含的,观察到的语音特征由依附于某个状态的随机函数F(X)描述,观察函数的构成与具体语音特征有关。
在HMM语音识别方法中,为了得到一种发音的HMM模型,首先将L个同种发音样本进行VQ编码,产生L个VQ码字序列(Code Sequence),把这L个码字序列看作由同一个HMM模型产生,构造这个HMM型的准则,要求它产生K个码字序列的概率最大,当K充分大后,该HMM模型记录了这一发音所产生码字串的先验概率。在识别时,对于该发音的码字序列,利用已建立的模型求出各个模型产生此码字序列的后验概率,根据后验概率最大准准则就可以较好地识别出产生该码字序列的HMM模型,从而得出识别结果。因此对于VQ/HMM语音识别方法,观察函数实际上是一组离散观察概率。设VQ码本的标号集合为TN={m|m=0,1……M-1},Q=(Q1,Q2……QT)为语音VQ码字序列,Qt TN(t=1,2……T),观察概率定义为:Vi∈S,j∈TN;b=P{Qt=j/q(t)=i}。对于齐次HMM模型,b只与状态和观察码字有关,在齐次性假设条件下,模型参数可以通过一种重新估计算法估计出来,其识别算法也十分简单。
6.2汉语单音节HMM语音识别方法
经典HMM模型训练中,一个最大的问题就是在训练算法(Baum-Welch)中,重新估计的迭代次数多,每一次重新计算HMM模型参数,都要重复输入全部训练数据,因此,计算量异常大。另外由于状态是隐含的,没有明确物理意义,因而靠对参数的不断修正,来产生最佳模型。如果我们能一次确定模型的最佳状态分布,也就可一次估计出模型参数,而不必经多次重新估计计算,计算量和数据吞吐量也大大减少,事实上,HMM模型的状态是可以与一定音素结构对应的。下文将详述一种全新HMM模型训练方法。
基于字的HMM模型对于已知字其模型状态{qo……qN}是给定的,然而并非一个状态qi就对应于一个语音信号特征符号,而是对应于包含多个语音特征符号的集合Si={Vi1,Vi2……Vi},且不同状态qi,qj对应的符号集Si,Sj具有非空的交Si∧Sj≠0(i≠j)。HMM的这一特点使它特别适合于与人无关的语音识别。HMM模型的另一特点是不同状态转移的随机性,从而它能够自动地将不同发音长度的同一个字很好地匹配起来(起类似于DTW的作用)。
对于HMM的状态是可以作多种定义(或理解)的,但是一个好的状态定义应当既反映语音的多变性特点(一个状态对应于多个符号),又应当使不同状态对应的符号集之交(即Si∧Sj,i=j)最小,否则必然会造成较大的识别误差。
如果语音的特征符号是按时间分帧的方式提取,那么对HMM状态的一种自然解释就是把它与音素平稳段或音素间的过渡段对应起来。按照这种观点也就很容易解释,为什么图4所示的自左向右的语音状态转移模型具有更好的适应性。这是因为一个词(字)的音素是自左向右(时间增加方向)发出的,而状态之间的跨越转移反映了可能出现的“吃音”现象。对于汉语的字来说,“吃音”现象是极少出现的,因而可以忽略状态的跨越转移,描述汉语的HMM语音识别模型应可以用图5的状态转移图来描述。
如果我们从状态驻留长度分布的角度来看待图5的状态转移模型,我们就可以得到图6所示的一个状态链,图中表示状态qi的驻留长度,它是以Pi(m)为分布的一个随机函数,若Pi(0)=0,就表示状态qi有可能发生跨越转移,但对汉语语音而言,可以认为不可能发生“吃音”现象,因此总可以假设Pi(0)=0。设在t时刻已出现了(K-1)个qi状态,则在t+1时刻的状态转移概率为:
Pi(K≤mi)/Pi(K≤mi+1),j=i
aij(K)=Pi(K=mi+1)/Pi(K≤mi+1),j=i+1 式(6)
0,其它j,i=1,2……N
由于aij(k)均与k有关,从而汉语的基于状态长度分布的HMM模型是一种非平稳的Markov模型。如果用状态驻留长度的随机分布pi(Mi)能够较好地反映语音的特点,那么把这个模型用于语音识别时就能大大简化训练算法。因为目前HMM语音识别的训练算法(Baum-Welch)的复杂性对于大词汇表系统来说简直是灾难性的,而新的模型只需要对训练字进行分割获取段长信息m1……mN以mi的频数作为Pi(mi)的一个逼近,便可由式6得到状态转移概率aij(k),观测矩阵{bj(Qk)}则可由第i段中观测符号Qk出现的频数作为bj(Qk)的近似值来获得。
6.3基于状态长度分布的HMM模型参数估计
参数估计的目的是得到词或字的段长分布Pi(m)和观测矩阵{bj(Qk)}其主要计算量在于段长的分割。对于某个给定的字设有L个训练序列{Qk}k(k=1,2……L),Qk={Qk1,Qn2……Qmtk},Tk为第k个训练序列的长度,设Qkt的定义域是一个经过矢量量化的特征空间V(VQ码本),Q的一个最优划分
取最小值的一个划分。
称为序列Qk第i段的重心。定义
式(7)成为
于是使(7)最小的划分问题等效于求解约束最优化问题。
其中
Ω={(X1,……XN)|0≤X1≤X2……≤XN=Tk}式(12)
对于此类多极值泛函的最优化问题,搜索算法是否能收敛到最小值,在很大程度上取决于初值的选择。在这方面由于较易获得关于X……X的先验知识,所以算式(11)能可求取最小点。由式(11)
从而得到了段长的估计,当L足够大时,由大数定理
Pi(mi) = ( L个训练序列中第i段的长度为mi的个数 )/(L)
i=1,2…N 式(14)
在状态i时出现观察符号Qk的概率
bi(QK) = ( L个训练序列中在状态qi时出现Qk的总帧数 )/(L个序列中出现状态q 的总帧数)
i=1,2…N,k=1,2…M 式(15)
M为VQ码本V的尺寸。
对识别字表中的每个字都进行如上步骤的训练便可得到全部所需要的HMM参数。
6.3识别算法
设我们已经经过训练得到了一个语音信号特征矢量的VQ码本,各状态段长分布Pi(m)(i=1,2…N)和观察矩阵{b(Qk)}(i=1,2…N,k=1,2……M),识别字表有V个字:W={W1,W2…Wv},设待识字的语音特征矢量观察序列为Q={Q,…Q},Qt∈V(t=0,1……T)。首先按式(12)找到Q的最佳状态分割S={X,X X}。
似然比
P(Q/Wi)=P(Q S/Wi)=P(S/Wi)P(Q/WiS) 式(16)
式中的第一个等号是由于对于给定的Q,是完全确定的,使式(16)定义的似然比最大的Wi即被认为是识别结果。
由于P(Q/Wi∩)对分割要比P(O/Wi)敏感的多,故可以假设
这是一个动态规划中的最大路径问题,可用Viterbi算法求解,算法的步骤如下:
(1)δ(i)1(1)=log b(i)1(Q1)
(2)δ(i)t(j)=max[δ(i)t-1(j-1),δ(i)t-1(j)]+log b(i)j(Qt)
j=1,2……N,t=1,2……T 式(19)
δ(i)T(N)=max[log P(Q/Wi∩S)]式(20)
(3)由(1)(2)得到一个最优划分
与经典HMM识别算法相比,在步骤(2)中少了一次加法,但在计算过程中新识别算法需要记录分割点和进行步骤(3)的计算,运算量与经典HMM的Viterbi识别算法基本相同。
6.4自适应HMM方法研究
在新的HMM模型中,可以看出,HMM模型参数Pi(m),{b}均是统计平均估值,这些参数计算法十分容易自适应。因此我们对Pi(m),{b}的自适应算法作统一描述。
设Avg1=SUM1/T1,Avg2=SUM2/T2为先后一次统计的均值,Avg为总的平均值,显然,下列等式成立:
Avg=(SUM1+SUM2)/(T1+T2)=Avg T1/(T1+T2)+Avg2 T2/(T1+T2)
式(23)
Avg=(1-fa)Avg1+fa Avg2 式(24)
fa=T2/(T1+T2) 式(25)
只要根据前后二次训练数据量的比值T1/T2,就可以估计出总平均值,式中fa称自适应系数。因此,P(m),bi(j)的自适应具有十分简单的形式。
在最后的实验中对VQ,HMM分别进行自适应,就形成了实用的自适应VQ/HMM语音识别系统。
6.5结论
上文提出了一种全新的汉语全音节识别方法,它充分体现了汉语单音节的特点。其一是,采用声韵母VQ算法解决分层全音节汉语孤立字识别问题。其二是研究了一适合汉语音节特点的HMM模型,上述二者又都具有非特定人识别的性能,对于汉语不仅识别率达到98%,而且算法运算量小,可以在微机上低成本实现语音识别,具有实用价值。
本发明因为可识别全部汉语单音节,而且识别方法运算量很少,可以在微机系统上使机器增加声控打字系统,从而使得任何人均有可能用语言操纵计算机进行汉字信息处理,可大大推进计算机汉字信息处理的现代化水平。
本发明的目的是这样完成的:在微机上或在中英文电子打字机上扩充一块语音卡。语音卡识别全部汉语单音节,并将语音转变为相应的文字送入主机上存储,被存储的汉字可以在语音卡上再转变为声音输出,或者在中英文打字机上(或由微机送到打印机上)输出,这是一种非特定人(不依赖于说话人)的汉语全音节音识别的方法。对于特定人识别则具有更好的性能。
发明的具体结构由以下实施例及其附图给出。
图7是根据上述语音识别方法在IBM-PC系列微机上实现的声控打字系统框图。
该声控打字系统由语音识别卡(3)完成全部语声识别,由语音合成卡(4)完成全部语音的合成。当使用者通过话筒发音时,识别卡(3)将语音转化为计算机内的汉字内码,在计算机上可以显示(6)相应于语音的全部同音字,用户可通过键选或微机根据上下文间词组搭配自动找出正确的汉字存储。对于已输入的文稿计算机可进行排版打印(7)或者通过合成卡(4)朗读文稿以便使用人员校稿。用户输入汉字时既可用词组也可按单音节方式输入语音。