发明名称 移动语音合成方法
摘要 移动语音合成方法属于通信中文字与语音之间信息转换和处理技术领域。其特征在于,它涉及一种在移动终端设备上进行文语转换的技术。包括移动语音合成系统的语音库构建、韵律模型的训练、合成方法等。它包括使用决策树CART--Classification and RegressionTrees方法从大规模语音语料库中挑选基元样本,快速地建立适用于移动终端的语音基元精简数据库;一个基于大规模语音语调库的韵律模型训练方法,可以从自然语音中提取基频曲线以生成韵律模板。从而在移动终端上实现了从文本到语音的转换的方法和系统。对于待转换的文本,基于CART方法选取适当的基元,比对韵律模块修改语音基元,拼接成自然流畅的合成语音。
申请公布号 CN100347741C 申请公布日期 2007.11.07
申请号 CN200510086340.1 申请日期 2005.09.02
申请人 清华大学 发明人 蔡莲红;叶振兴;倪昕;黄德智
分类号 G10L13/02(2006.01);G10L13/08(2006.01) 主分类号 G10L13/02(2006.01)
代理机构 代理人
主权项 1.移动语音合成方法,其特征在于:该方法是一种在移动通信终端设备上进行文字与语音之间相互转换的方法,所述方法是在内存有本方法软件的存储卡、中央处理器和语音输出设备依次串接的系统中实现的,所述方法分为以下两个阶段,即开发阶段和语音合成阶段:开发阶段包括离线建立的语音基元精简数据库,简称语音库,和训练韵律模板库的开发阶段,该阶段依次含有以下步骤:步骤A:从大规模语音语料库内挑选合适的基元样本组成该语音库,该基元样本是指在该语音语料库中的汉字句子的实例,本发明使用汉语有调音节作为语音合成系统的合成基元,基元样本是基于公知的CART决策树模型来挑选的,CART是CassificationandRegressionTree的缩略语,中文名是分类与回归树,CART决策树即利用该语音语料为每个基元训练出来的,通过对该树相应基元的所有样本进行聚集,把韵律和频谱特征相似的样本聚到一起,再选取聚类中心而建成该语音库,步骤A依次包含以下子步骤:步骤A1:选择能反映一个有调音节的韵律变化、前后音联的九个特征组成该CART方法所需的问题集,用Q表示在该具有二叉树结构的CART树中,每一个非叶子节点包括一个问题,根据对所给问题的回答为“是”与“否”分别指向左、右两个子节点,叶子节点则包括可属于同一基元的所有样本数据;所述九个特征描述如下:1.PosInWord:当前音节在所在韵律词中的位置,共有词首、词中、词尾三种位置;所述“韵律词”,从韵律学的角度定义为:“最小的能够自由运用的语言单位”,其声学表现是发音连续且紧密,一般包括2-3个音节,音节间没有感知到的停顿;2.PosInPhrase:当前音节在所在韵律短语中的位置,共有短语首、短语中、短语尾三种位置,所述韵律短语由一组韵律词组成,边界处有停顿感或音高的变化;3.PosInSentence:当前音节在所在句子中的位置,共有句首、句中、句尾三种位置;4.PreTone:前面音节的音调类型,共有高、低、轻、无四种类型,前面音节的声调为1声或2声时,音调类型取高;前面音节的声调为3声或4声时,音调类型取低;前面音节的声调为轻声时,音调类型取轻;前面没有音节时,音调类型取无;5.PostTone:后面音节的声调类型,共有高、低、轻、无四种类型,后面音节的声调为1声或4声时,音调类型取高;后面音节的声调为2声或3声时,音调类型取低;后面音节的声调为轻声时,音调类型取轻;后面没有音节时,音调类型取无;6.LeftFinal:左邻音节的韵母,所述韵母包含所有韵母;7.RightInitial:右邻音节的声母,包含所有的声母和零声母,所述零声母用“0”表示;8.RightInitialClass:右邻音节声母类别,共分为10类,取值为1,2,3,4,5,6,7,8,9,10,依次表示爆破音、爆破音不送气、爆破音送气、塞擦音、塞擦音不送气、塞擦音送气、擦音清音、擦音浊音、鼻音、边音;9.LeftFinalClass:左邻音节韵母类别,共分为5类,取值为1,2,3,4,5,依次表示韵尾开口呼类、韵尾齐齿呼类、韵尾合口呼类、韵尾撮口呼类、韵尾鼻音;上述9个特征是从所述语音语料库中文本部分的韵律标注中得出的;步骤A2:从所述语音语料库的标注文件中提取基元的声学特征参数,用以在后面计算基元样本之间的距离,来度量样本间的相似度,所述特征参数包括:时长用D表示,音节的时长以采样点个数计;能量用U表示,音节的均方根能量;<math-cwu><![CDATA[<math> <mrow> <mi>U</mi> <mo>=</mo> <msqrt> <mfrac> <mn>1</mn> <mi>D</mi> </mfrac> <munderover> <mi>&Sigma;</mi> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>D</mi> </munderover> <msup> <mrow> <mo>|</mo> <mi>s</mi> <mrow> <mo>(</mo> <mi>i</mi> <mo>)</mo> </mrow> <mo>|</mo> </mrow> <mn>2</mn> </msup> <mo>,</mo> </msqrt> </mrow></math>]]></math-cwu>s(i)为该样本第i个采样点的幅值;基频向量用P表示,基频向量P包括三个分量:p1,p2,p3,它们分别是该音节长度的0.15、0.5、0.85处的基频值,该基频值是根据该语音语料中对基音周期所作的标注得到的;步骤A3:选择节点分裂标准,使得一个叶子节点分裂为两个子节点后,该两个子节点中的样本尽可能地集中,即相互之间距离尽可能地靠近;本申请采用最大化方差减小量ΔEq(t)为分裂标准,分裂标准的值越大,则分裂效果越好;ΔEq(t)定义为:ΔEq(t)=E(t)z(t)-[E(l)z(l)+E(r)z(r)]其中,t为被分裂节点,l、r分别为分裂后的左、右子节点;z(t)、z(l)、z(r)分别为节点t、l、r中的样本数占所有样本数的比例;E(t),E(l),E(r)分别表示节点t,l,r的能量U、时长D、基频向量P的方差的加权和,以E(t)为例描述之,E(t)用下式表示:E(t)=wdEd(t)+wuEu(t)+wpEp(t)其中,wd、wu、wp分别为时长、能量、基频向量的权值,是设定的;wd(t),Eu(t),Ep(t)分别为一个节点中所有样本的时长、能量、基频向量的方差;步骤A4:构建语音基元精简数据库对所述语音语料库中的每一个基元训练一棵CART树,该树的每一个叶子节点包含了具有相同韵律上下文和音联环境的,听感比较接近的若干基元样本,该步骤A4依次含有以下步骤:步骤A41:把一个有调音节的所有基元样本作为一个初始类;步骤A42:采用A1所述的特征,提取步骤A41所述所有基元样本的时长、能量和基频向量;步骤A43:构建有一个根节点的决策树,该根节点把步骤A41所述所有基元样本x1,x2,...xi...xN作为它的样本,样本xi的特征向量Xi包括三个分量:Di、Ui、Pi,它们分别为基元样本xi的时长、能量和基频向量;步骤A44:按下式计算步骤A43所述每一个节点的样本集中任意两个样本xj、xi之间的Mahalanobis距离,生成一个N×N的Mahalanobis距离矩阵<math-cwu><![CDATA[<math> <mrow> <mi>Dist</mi> <mrow> <mo>(</mo> <mi>i</mi> <mo>,</mo> <mi>j</mi> <mo>)</mo> </mrow> <mo>=</mo> <msqrt> <msup> <mrow> <mo>(</mo> <msub> <mi>X</mi> <mi>i</mi> </msub> <mo>-</mo> <msub> <mi>X</mi> <mi>j</mi> </msub> <mo>)</mo> </mrow> <mi>t</mi> </msup> <msup> <mi>S</mi> <mrow> <mo>-</mo> <mn>1</mn> </mrow> </msup> <mrow> <mo>(</mo> <msub> <mi>X</mi> <mi>i</mi> </msub> <mo>-</mo> <msub> <mi>X</mi> <mi>j</mi> </msub> <mo>)</mo> </mrow> </msqrt> </mrow></math>]]></math-cwu>Dist(i,j)即Mahalanobis距离,S为样本空间协方差矩阵;设置停止分裂的阀值η;步骤A45:根据节点分裂标准,从所述根节点开始进行节点分裂;对于任何一个允许分裂的叶子节点T,用问题集Q中的每一个问题q试分裂该叶子节点T,并计算所得方差减少量ΔEq,取得所述ΔEq值最大的问题把该节点T分裂为两个子节点;步骤A46:继续执行步骤A45,一直到分裂后叶子节点中的样本数≤η为止;步骤A47:根据下面公式计算距离类中心最远的样本,并且将其删除,重复此步直到删除10%的样本;<math-cwu><![CDATA[<math> <mrow> <msup> <mi>k</mi> <mo>*</mo> </msup> <mo>=</mo> <munder> <mrow> <mi>arg</mi> <mi>max</mi> </mrow> <mrow> <mi>k</mi> <mo>=</mo> <mn>1</mn> <mo>.</mo> <mo>.</mo> <mi>N</mi> </mrow> </munder> <munder> <mi>&Sigma;</mi> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> <mo>.</mo> <mo>.</mo> <mi>N</mi> <mo>,</mo> <mi>i</mi> <mo>&NotEqual;</mo> <mi>k</mi> </mrow> </munder> <mi>Dist</mi> <mrow> <mo>(</mo> <mi>i</mi> <mo>,</mo> <mi>k</mi> <mo>)</mo> </mrow> </mrow></math>]]></math-cwu>步骤A48:假设删除10%的最远的样本后,节点中剩余的样本集为x1,x2,...xi...,xM;根据公式下面公式计算类的中心样本,取类中心样本作为该叶子节点中所有样本的代表样本;<math-cwu><![CDATA[<math> <mrow> <msup> <mi>k</mi> <mo>*</mo> </msup> <mo>=</mo> <munder> <mrow> <mi>arg</mi> <mi>min</mi> </mrow> <mrow> <mi>k</mi> <mo>=</mo> <mn>1</mn> <mo>.</mo> <mo>.</mo> <mi>M</mi> </mrow> </munder> <munder> <mi>&Sigma;</mi> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> <mo>.</mo> <mo>.</mo> <mi>M</mi> <mo>,</mo> <mi>i</mi> <mo>&NotEqual;</mo> <mi>k</mi> </mrow> </munder> <mi>Dist</mi> <mrow> <mo>(</mo> <mi>i</mi> <mo>,</mo> <mi>k</mi> <mo>)</mo> </mrow> </mrow></math>]]></math-cwu>步骤A49:把每个叶子节点的类中的样本用G.723.1标准编码压缩,采用CART树作为各叶子节点的索引,建立对各基元的CART树的总索引,把最终得到的精简音库复制到移动终端设备的存储卡中供合成使用;步骤B:韵律模板的开发,即韵律模型训练,所述步骤B依次含有以下各子步骤:步骤B1:采用与所述步骤A1中由相同的若干上下文环境特征组成CART树训练所需的问题集,包括与步骤A1所述的相同的九个特征;步骤B2:采用与所述步骤A2所述的方法提取声学特征参数:提取基元样本的时长作为时长模型的训练参数;提取基元样本在0.1、0.3、0.5、0.7、0.9时长处的基频值作为基频曲线模型的训练参数;步骤B3:采用步骤A3所述的最大化方差减小量ΔEq(t)作为节点t的分裂标准;对于时长模型的训练而言:ΔEdq(t)=Ed(t)z(t)-[Ed(l)z(l)+Ed(r)z(r)]对于基频曲线模型的训练而言:ΔEpq(t)=EP(t)z(t)-[EP(l)z(l)+Ep(r)z(r)]其中,各物理量的定义与所述步骤A3中的相同;步骤B4:时长模型的训练依次含有以下步骤:步骤B41:根据步骤B1至B3所定义的问题集、时长参数和分裂标准按以下步骤对每一个基元训练一棵CART树作为时长预测树;步骤B42:统计时长预测树每一个叶子节点中所有样本的时长,按正态分布做参数分布估计,剔除两倍方差之外的样本;步骤B43:取剩余样本的时长的平均值作为该叶子节点的时长模板;步骤B44:把各叶子节点的时长模板存入韵律模板库中,采用时长预测树作为其基元的索引;步骤B5:基频曲线模型的训练;步骤B51:根据步骤B1至B3所定义的问题集、时长参数和分裂标准按以下步骤对每一个基元训练一棵CART树作为基频预测树;步骤B52:假设CART树的一个叶子节点中的样本集为x1,x2,...xi...,xN,样本xi的特征向量采用如步骤B2所述特征,该样本空间的协方差矩阵为S,根据下面公式计算任意两个样本xj,xi之间的Mahalanobis距离,生成一个N×N的Mahalanobis距离矩阵;<math-cwu><![CDATA[<math> <mrow> <mi>Dist</mi> <mrow> <mo>(</mo> <mi>i</mi> <mo>,</mo> <mi>j</mi> <mo>)</mo> </mrow> <mo>=</mo> <msqrt> <msup> <mrow> <mo>(</mo> <msub> <mi>X</mi> <mi>i</mi> </msub> <mo>-</mo> <msub> <mi>X</mi> <mi>j</mi> </msub> <mo>)</mo> </mrow> <mi>t</mi> </msup> <msup> <mi>S</mi> <mrow> <mo>-</mo> <mn>1</mn> </mrow> </msup> <mrow> <mo>(</mo> <msub> <mi>X</mi> <mi>i</mi> </msub> <mo>-</mo> <msub> <mi>X</mi> <mi>j</mi> </msub> <mo>)</mo> </mrow> </msqrt> </mrow></math>]]></math-cwu>步骤B53:根据下述公式计算每个叶子节点中距离类中心最远的样本k**,并且把其删除,重复此步直到删除10%的样本为止;<math-cwu><![CDATA[<math> <mrow> <msup> <mi>k</mi> <mrow> <mo>*</mo> <mo>*</mo> </mrow> </msup> <mo>=</mo> <munder> <mrow> <mi>arg</mi> <mi>min</mi> </mrow> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> <mo>.</mo> <mo>.</mo> <mo>.</mo> <mi>N</mi> </mrow> </munder> <munder> <mi>&Sigma;</mi> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> <mo>.</mo> <mo>.</mo> <mo>.</mo> <mi>N</mi> <mo>,</mo> <mi>i</mi> <mo>=</mo> <mi>k</mi> </mrow> </munder> <mi>Dist</mi> <mrow> <mo>(</mo> <mi>i</mi> <mo>,</mo> <mi>k</mi> <mo>)</mo> </mrow> <mo>;</mo> </mrow></math>]]></math-cwu>步骤B54:假设删除10%的最远的样本后,节点中剩余的样本集为{x1,x2,...,xM};根据下式计算每个叶子节点的类中心样本k*,取所述类中的样本为该叶子节点中所有样本的代表样本;<math-cwu><![CDATA[<math> <mrow> <msup> <mi>k</mi> <mo>*</mo> </msup> <mo>=</mo> <munder> <mrow> <mi>arg</mi> <mi>min</mi> </mrow> <mrow> <mi>k</mi> <mo>=</mo> <mn>1</mn> <mo>.</mo> <mo>.</mo> <mo>.</mo> <mi>M</mi> </mrow> </munder> <munder> <mi>&Sigma;</mi> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> <mo>.</mo> <mo>.</mo> <mo>.</mo> <mi>M</mi> <mo>,</mo> <mi>i</mi> <mo>&NotEqual;</mo> <mi>k</mi> </mrow> </munder> <mi>Dist</mi> <mrow> <mo>(</mo> <mi>i</mi> <mo>,</mo> <mi>k</mi> <mo>)</mo> </mrow> <mo>;</mo> </mrow></math>]]></math-cwu>步骤B55:把各叶子节点的类中的样本组成基频曲线模板,经过平滑处理以消除跳变点后,在存入韵律模板库,采用由上述各类中的样本构成的基频曲线预测树作为其基元的索引;步骤B57:建立所有基元的时长预测树和基频曲线预测树的总索引,把最终得到的韵律模板复制到移动终端的存储卡中供合成使用;步骤C:在语言合成阶段,依次含有以下步骤:包括文本获取、文本分析、基元选取、韵律修改和波形拼接合成:步骤C1:文本获取:从键盘输入,或从文件获得,或截取短信息;步骤C2:文本分析:首先,识别数字、简写符号或者特殊语义块,并给出对应的在词表上的规范写法;其次,进行分词和词性标注;最后,分析韵律结构,得到韵律词、韵律短语、语调短语三个韵律层级的信息;得到一个目标单元序列,其中,每个目标单元由拼音码和上下文特征组成,所述拼音码由拼音和声调构成;上下文特征包括:该音节在所处句子中的位置、该音节在所处韵律短语中的位置、该音节在所处韵律词中的位置、前音节的拼音码以及后音节的拼音码;步骤C3:基元选取,依次含有以下步骤:步骤C31:从步骤C2得到所含每个目标单元的上下文特征的目标单元序列;步骤C32:根据目标单元的拼音码在语音库中检索该基元的CART树;步骤C33:根据目标单元的上下文特征对CART树按所述步骤A1进行迭代检索,从根节点开始,回答“是”或“否”一直到合适基元样本,再用G.723.1标准算法解码,得到原始的波形数据;步骤C4:韵律修改和波形拼接步骤C41:根据目标单元的上下文特征检索韵律模板库中的时长预测树和基频曲线预测树;步骤C42:根据从步骤C33所述预测树选取出的基频曲线和时长使用TD-PSOLA算法对解码样本数据的时长和基频进行修改,对于基频而言,当修改量大于10%停止修改;步骤C43:根据步骤C42得到的修改过的样本进行拼接;步骤C44:根据需要把合成语音输出到文件或声音输出设备。
地址 100084北京市北京100084-82信箱