ImageVerifierCode 换一换
格式:DOCX , 页数:36 ,大小:325.29KB ,
资源ID:917671      下载积分:1 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-917671.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(HTK手册第三章教程文件.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

HTK手册第三章教程文件.docx

1、HTK手册第三章教程文件第三章 一个例子使用HTK指南本章作为指南部分的最后一章,将描述构造一个简单的用于语音拨号的识别器的过程。这个识别器可以识别连续的数字串和有限个名字。由于这是一个子词译者注:并非为整个单词建立模型,而是词的一部分建立模型,可理解成对音素建模(sub-word)识别系统,所以向词典中加入一个新的名字只需要修改发音词典和语法网络(task grammar)。HMM模型使用的是连续密度混合高斯模型,且使用决策树聚类的状态绑定的triphone。虽然这个语音拨号系统本身相当简单,但是系统的设计具有代表性,对学习HTK的使用很有帮助。我们将从无到有构建此系统,包括使用HTK工具H

2、SLab录制训练数据和测试数据。为了简化,这个系统是说话人相关的,但是建造一个说话人无关的系统可以采用相同的设计方法。唯一的不同在于需要足够数量的不同说话人的数据,以及相应地增加模型复杂度。构造一个“全新”的识别器包括很多相关的子任务,而且没有一个明确的实现这些任务的最佳顺序。这里就按时间顺序来介绍,构造类似系统时可以参考本书介绍的步骤。本书剩下的部分相当详细地描述了完整的过程,并清晰地给出HTK工具集所涉及的范围。 HTK的发行软件中也包含了一个用于ARPA海军资源管理任务的1000个词的识别系统的例子,放在HTK软件包的目录RMHTK下。在HTKDemo目录下有更多体现HTK性能和功能的实

3、例。另外还可以在HTKTutorial目录下找到对学习指南部分有帮助的一些例子的脚本。 这一章的指南里介绍的每个步骤,假定使用者在执行命令之前完全了解了所有部分,并对于每个HTK工具都可以参考第17章(参考章节),所以所有的命令行参数和选项都应该是容易理解的。数据准备任何构造识别器的工程的第一步都是数据准备。训练数据和测试数据都需要准备。在我们需要建造的系统里,所有的语音都需要由最原始的录音得到,而且需要对每句录音进行标注。测试数据的重要性在于,可以通过测试数据度量识别器的性能,选择测试语料的一种简单的办法是由目标语法随机生成。对训练数据来说,语料内容的标注和发音词典一起用于完成初始音素层的标

4、注,而这个标注是开启HMM训练过程所必须的。因为实际可能要将任意名字加入识别器,所以训练数据应该尽量提高音素覆盖率和均衡性译者注:训练数据各方面(比如音素覆盖、语法结构等)的均衡性对HTK训练极其重要,对识别来说,会提高识别器的鲁棒性和识别性能,对合成来说会提高合成语音的自然度。这里为了方便,我们用于训练的使用的提示脚本是从TIMIT acoustic-phonetic数据库获取的。根据上面的描述,在录数据之前,必须先定义音素集合、覆盖训练数据和测试数据的词典和目标语法。第一步 目标语法为电话拨号创建一个语音操作接口,是我们系统的最终目标。因此,识别器必须要能处理数字串和人名列表。典型输入可能

5、是这样的: Dial three three two six five four Dial nine zero four one oh nine Phone Woodland Call Steve YoungHTK 规定了一个语法定义语言,用于制定简单的目标语法。如下所示,它包括下面一组变量定义规则,描述需要识别的词。语音拨号应用中,一个可能的语法如下: $digit = ONE | TWO | THREE | FOUR | FIVE |SIX | SEVEN | EIGHT | NINE | OH | ZERO; $name = JOOP JANSEN | JULIAN ODELL | DA

6、VE OLLASON | PHIL WOODLAND| STEVE YOUNG; ( SENT-START ( DIAL | (PHONE|CALL) $name) SENT-END )间隔符”|”表示几选一的,方括号”表示可选项,尖括号”表示一个或可多个重复。一个完整的语法可以被描述成一个如图3.1表示的网络。 上图中上层的目标语法描述是为了方便使用者。HTK识别器实际上需要的是一个使用更低层的符号定义的词网络,称为HTK标准网格SLF格式(HTK Standard Lattice Format (SLF)),在SLF里,每个词的实例和词之间的转换都明确列出了。这种词网络可以使用HParse

7、工具由上面的语法自动建立,比如,包含上面的语法的文件称为gram,执行下面的操作 HParse gram wdnet将会建立一个等效的词网络并存储到wdnet文件中(如图3.2)。第二步 词典建立一个词典的第一步是建立一个经排序的包含所有词的列表。在电话拨号任务中,建立一个所有词的列表可以轻松地手工完成。但是如果任务更加复杂,则应该根据训练数据中的例句建立词列表。此外,若建立一个鲁棒性声学相关模型,就需要使用一个包含很多词的并且音素更均衡的大的句子集合。因此,训练数据是由和电话拨号任务无关的英文句子组成。下面,给出一个由句子提示建立一个词列表的简单例子。这里训练用的句子都取自TIMIT数据库中

8、使用的一些提示命令,并且为了便于处理,这些句子都重新编号。例如,开始一部分数据内容可能是下面这样的: S0001 ONE VALIDATED ACTS OF SCHOOL DISTRICTS S0002 TWO OTHER CASES ALSO WERE UNDER ADVISEMENT S0003 BOTH FIGURES WOULD GO HIGHER IN LATER YEARS S0004 THIS IS NOT A PROGRAM OF SOCIALIZED MEDICINE 等等我们希望得到的训练词列表wlist可以通过下面介绍的方式自动生成。在使用HTK之前, 首先需要以合适的方

9、式编辑文本。例如,可能需要将所有的空格变成换行,然后使用UNIX命令sort和uniq对词进行排序,最终的结果是一行一词并严格按字母顺序排序。可以使用HTKTutorial目录中的脚本prompts2wlist完成此功能。词典本身能由标准的输入源用HDMan建立。举个例子,可以用British English BEEP发音词典。词典中的音标集合除重音记号之外都将被直接采用;并且在每个发音的后面都加上一个短暂的停顿(sp)。如果词典包含任何静音标记,则MP命令将把sil和sp合并成一个sil。这些操作都可以用HDMan和一个包含三行命令的编辑脚本来完成(保存在global.ded中)。 AS s

10、p RS cmu MP sil sil sp其中,cmu表示采用了一种重音符号的风格,这种风格中,词汇的重读程度是通过直接写在音素名后面的单个数字表示的(例如,eh2 表示次重读(level 2 stress)的音素eh)。命令 HDMan -m -w wlist -n monophones1 -l dlog dict beep names会建立一个名为dict的新词典,通过搜索源词典beep和names,找到wlist中每个词的发音(见图3.3)。这里的wlist可以仅仅是一个对目标语法中出现的所有词进行排序得到的列表。其中,names是一个人工生成的包含目标语法中出现的每个名字的发音的文件

11、。HDMan的命令选项-l表示将构造词典相关的各种统计数据输出到一个log文件dlog中。特别地,如果有些词在发音词典中没有出现,它将给出提示。HDMan也能输出一个词典中出现的音素列表,这里称为monophones1。一旦训练和测试数据录好后,将根据每个音素重估出一个HMM。通常每个词典的词条格式如下: WORD outsym p1 p2 p3 .方括号中的字符串指定词被识别出后的输出,缺损的输出是词本身。如果是空字符串,则表示没有任何输出。让我们来看看词典是什么样子,下面列出了一部分词典内容: A ah sp A ax sp A ey sp CALL k ao l sp DIAL d ay

12、 ax l sp EIGHT ey t sp PHONE f ow n sp SENT-END sil SENT-START sil SEVEN s eh v n sp TO t ax sp TO t uw sp ZERO z ia r ow sp需要注意的是某些词比如 A 和 TO 有多种发音。SENT-START和 SENT-END 的实体有一个静音模型sil作为它们的发音,并且输出的是空符号。第三步 录数据我们使用HTK工具HSLab录取训练和测试数据。这是一个结合了录音和标注功能的工具。在我们的例子里,仅使用HSLab来录音,因为标注已经存在了。如果没有预先准备好的训练语料(如TIMI

13、T数据库中的数据),你可以使用HSLab通过文本(上面介绍的那样)建立它们,或者使用HSLab标注你的训练语料。 HSLab按如下的方式调用 HSLab noname执行命令后,将显示这样的窗口,窗口上半部分是一个波形播放区域,下半部分是一排按钮,包括录音按钮等。如果一个文件名当作命令参数,HSLab将播放这个文件。这里,指定的文件名是noname,指明了将要录新的数据。HSLab并不给用户特别的提示,只要录音按钮被按下,它就将录得的数据交替地写到noname_0,noname_1,.这些文件里,因此很容易写一个shell脚本,当有noname_0之类的文件出现时,就输出提示信息,并按照事先约

14、定的提示方式重命名文件(如图3.4所示)。当训练语料句子的提示按上面的方法生成后,测试语料句子的提示在录音前也要生成。工具HSGen可以帮助我们完成测试句子提示的生成;HSGen能随机的遍历一个词网络并输出穿越过程中遇到的每个词。例如,下面的命令 HSGen -l -n 200 wdnet dict testprompts将创建一个包含200个词的测试语料,内容可能是下面这样的: 1. PHONE YOUNG 2. DIAL OH SIX SEVEN SEVEN OH ZERO 3. DIAL SEVEN NINE OH OH EIGHT SEVEN NINE NINE 4. DIAL SIX

15、 NINE SIX TWO NINE FOUR ZERO NINE EIGHT 5. CALL JULIAN ODELL . etc可以用它生成测试数据所需的提示文件testprompts。第四步 建立标注文件 在训练一套HMM集合时,每个训练数据文件都必须对应一个音素级的标注。如果没有手工标注的数据用来开启初始(bootstrp)的模型训练,可以采用一种被称为flat-start的方法来代替。这种方法中,需要两套音素标注,开始使用的脚本中词之间不包含短暂停顿模型(sp),一旦一套合理的音素模型建立后,sp模型将被插入到可能有停顿的词之间。两种音素标注的起始点都是一个按HTK标签格式规范的标注

16、,可以很容易地用文本编辑器或脚本语言创建 。在RM Demo的point 0.4中能找到生成这种脚本的一个例子。另外,HTKTutorial目录下提供了脚本prompts2mlf,完成的功能是将上面例子的提示语料转化成下面的格式: #!MLF!# */S0001.lab ONE VALIDATED ACTS OF SCHOOL DISTRICTS . */S0002.lab TWO OTHER CASES ALSO WERE UNDER ADVISEMENT . */S0003.lab BOTH FIGURES (etc.)我们可以看到,提示标注要转换成“路径名”(path name),每个词

17、单独作为一行,并且每个语料按照自己的周期终止。文件第一行指明了文件是Master Label File (MLF)。这个例子里,一个文件包含了全部的标注。HTK也允许每个标注拥有各自的MLF文件,但是全部存在于同一个MLF中更加有效率。MLF中使用的“路径名”格式需要解释一下,因为实际上,它是一种模式(pattern)而不是名字(name)。HTK处理语音文件时,需要找和语音文件名字相同但是扩展名不同的标注(transcription)(或标注文件( label file))。因此,如果要处理文件/root/sjy/data/S0001.wav,HTK要找一个名为/root/sjy/data/

18、S0001.lab的标注文件。如果使用MLF文件,HTK 浏览此文件找到匹配标注文件文件名的相应模式。一个“*”可以匹配任何字符串,因此例子里使用的模式路径是没有约束的。所以,允许存储在不同位置的不同版本的语音使用同样的标注。词一级的MLF建立后,可以使用标注编辑工具HLEd生成音素级的MLF。例如,使用上面的例子中的存储在文件words.mlf中的词一级MLF,执行下面的命令: HLEd -l * -d dict -i phones0.mlf mkphones0.led words.mlf将能生成一个音素级的标注,选项-l表示输出的模式中生成路径*,格式如下, #!MLF!# */S0001

19、.lab sil w ah n v ae l ih d . etc处理过程见图3.5。HLEd编辑脚本mkphones0.led,包含以下命令: EX IS sil sil DE sp“扩展命令”EX用词典文件dict中相应的发音替换words.mlf中的每个词;“插入命令”IS在每个语料的开头和结尾插入静音模型sil; “删除命令”DE删除所有的sp标记,因为此时脚本里不需要该标注。 第五步 数据编码Coding the Data数据准备的最后一步是对原始语音数据进行参数化运算,即将波形语音转化为特征向量序列。HTK支持基于FFT的和基于LPC的分析。这里使用的是Mel域倒谱系数(Mel F

20、requency Cepstral Coefficients)(MFCC)。编码工作可以通过工具HCopy,自动生成MFCC矢量。为此,需要使用一个配置文件config,指定所有转化需要的参数,合理的配置文件格式如下: # Coding parameters TARGETKIND = MFCC_0 TARGETRATE = 100000.0 SAVECOMPRESSED = T SAVEWITHCRC = T WINDOWSIZE = 250000.0 USEHAMMING = T PREEMCOEF = 0.97 NUMCHANS = 26 CEPLIFTER = 22 NUMCEPS =

21、12 ENORMALISE = F其中有些设置是默认设置,为了完整性,这里都全部列出了。简要解释一下,此配置文件指定了目标参数是使用C0作为能量维的MFCC,帧长是10ms(HTK使用的单位是100ns),输出格式要经过压缩,并且加入了CRC校验。FFT之前需要经过加Hamming窗的处理,并且语音信号首先要经过预加重,预加重系数为0.97。filterbank使用26个三角滤波器,最后得到12个MFCC系数。变量ENORMALISE默认值为true,表示对录音数据文件进行能量规一。在线识别中不能使用这种方法。由于我们要做的系统是在线的,因此这里这个变量被设成false。并不需要预先创建特征编

22、码文件,因为可由原始波形文件在处理过程中完成特征提取的工作,要实现这一过程,只需通过对相应HTK工具指定合适的配置文件(上面的格式)即可。但是,事先建立这些文件可以减少训练工作中的预处理的时间,本身这又是一个非常耗时的工作。运行HCopy之前,要准备一个源文件的列表,这个列表包含源文件和相应的输出文件。例如,这个列表文件的前几行可能是这样的: /root/sjy/waves/S0001.wav /root/sjy/train/S0001.mfc /root/sjy/waves/S0002.wav /root/sjy/train/S0002.mfc /root/sjy/waves/S0003.w

23、av /root/sjy/train/S0003.mfc /root/sjy/waves/S0004.wav /root/sjy/train/S0004.mfc (etc.)包含列表的文件可以当作脚本文件,通常灌以后缀名scp (虽然HTK并不强制这样做)。脚本文件在命令中用“标准”选项 S 指定,它们的内容只是作为命令行参数简单地读取。因此,避免了命令行有几千个参数这样的情况。假设上面提到的脚本存储在名为codetr.scp的文件中,训练数据通过执行下面的命令进行编码: HCopy -T 1 -C config -S codetr.scp 图3.6有详细的图示。所有的训练都已经开始后,编码测

24、试数据(配置文件里使用 TARGETKIND = MFCC_0_D_A)也采用类似的过程。建立单音素(Monophone)HMMs这一节描述的是一组单高斯的单音素HMM模型的训练过程。训练开始前,应该有一组相同的HMM,每个模型的每个均值和方差都是相同的。然后重新训练这些原始模型,并加入sp模型,以及sil(静音)模型,然后再次训练这些单音素模型。词典中的某些词条可能有多个发音。但是,使用HLEd将词一级的MLF扩展成音素级的MLF时,它总是选择遇到的第一个发音。一旦一套可用的单音素模型HMM集训练出来后,可以用识别工具HVite对训练数据进行强制校正。这就意味着,将根据声学特性选择发音,从而

25、建议一个新的音素级MLF。这个新的MLF可被用于单音素模型的最终重估,即根据校正后的数据再一次重估。第六步 建立Flat Start MonophonesHMM模型训练的第一步是定义一个原始模型。这个模型的参数并不重要,它的作用是定义模型的拓扑结构。对于基于音素的系统,一种较好的拓扑结构是使用3状态、无跳转的左-右模型,结构如下: o 39 h proto 5 2 39 0.0 0.0 0.0 . 39 1.0 1.0 1.0 . 3 39 0.0 0.0 0.0 . 39 1.0 1.0 1.0 . 4 39 0.0 0.0 0.0 . 39 1.0 1.0 1.0 . 5 0.0 1.0

26、0.0 0.0 0.0 0.0 0.6 0.4 0.0 0.0 0.0 0.0 0.6 0.4 0.0 0.0 0.0 0.0 0.7 0.3 0.0 0.0 0.0 0.0 0.0 每个特征矢量长度都是39。39是静态矢量(MFCC_0 = 13)加一阶系数(+13)和二阶系数(+13)得到的。HTK工具HCompV会扫描一组数据文件,计算全局的均值和方差,并将给定的HMM中所有的高斯模型的均值方差都设为同样的值。因此,假设所有训练文件的列表被存储在train.scp中,下面的命令: HCompV -C config -f 0.01 -m -S train.scp -M hmm0 proto

27、将在hmm0目录下建立一个新的原始模型,这个模型中,原模型的0均值和单位方差被替换成全局均值和方差。需要指出的是原始模型定义了特征矢量类型是MFCC_0_D_A (注意:0而不是 o)。这意味着一阶和二阶系数将在前面描述编码过程中计算并存储的静态MFCC的基础上被计算,并且添加在静态MFCC后,为确保在数据装载过程中先计算,应该修改配置文件config,其中的target kind要作修改,即配置文件中的TARGETKIND应该被改为: TARGETKIND = MFCC_0_D_A HCompV命令有一组选项。-f 选项将方差下限(称为vFloors)设为全局方差的0.01倍,这组向量值将被

28、用于后面步骤中方差估计的下限值。-m选项指定均值和方差同时计算。 定存储在hmm0目录下的新原始模型后,将会构造名为hmmdefs的Master Macro File (MMF) 文件,hmmdefs中包含需要的每个单音素模型(包括”sil”)的副本,每个模型都复制了新的原始模型,且作了重新标记。MMF文件的格式和MLF文件的格式类似,而且也出于类似的目的,避免了单独定义模型导致数量过大的HMM定义文件(如图3.7)。存储在hmm0目录下的flat start单音素模型可以用嵌入式重估工具HERest进行重估,命令如下: HERest -C config -I phones0.mlf -t 2

29、50.0 150.0 1000.0 -S train.scp -H hmm0/macros -H hmm0/hmmdefs -M hmm1 monophones0完成的功能是,加载模型列表monophones0(monophones1 去掉sp模型)中的所有模型。这些模型将被重估,使用的数据是train.scp中列出的,新模型存储在目录hmm1下。这个命令中用到的大部分文件,除了文件macros以外都已经介绍了。macros文件需要包含一个称为global options 的macro和前面生成的方差下限macro,即vFloors。全局选项macro 简单地定义了模型的参数类型和特征向量大小

30、,例如: o 39见图3.7。这个选项可以和vFloors写在同一个文件中命名为macros。-t选项设置训练过程中的裁剪门限。裁剪限制了前-后向算法中状态队列的范围,可降低一个数量级的运算量。对大多数训练数据来说,都可以设置一个比较窄的裁剪门限,但是有些数据可能在声学特性上不能很好的匹配,因此有必要设置一个较宽的门限。HERest为处理这种情况,采用一种自动增益控制的裁剪门限。上面的例子中,一般的裁减门限是250.0,如果个别文件重估失败,裁剪门限增加150.0并对此文件重新处理。如果对文件的处理不成功,这种操作会一直循环,直到达到裁剪门限的上限1000.0。因此,我们可以假定,如果训练文件

31、出现严重问题,则提示有错误应该予以修复(典型的错误是标注有错误),即应该丢弃相应的训练数据文件。目录hmm0中的初始单音素模型的训练过程见图3.8。每次运行HERest,都是一次独立的重估过程。新的HMM集合被存储在新的目录下。HERest应该至少执行两次以上。每次改变输入和输出目录的名字(设置-H和-M选项),直到目录hmm3包含初始单音素模型的最终模型集。第七步 确定静音模型经过前面的步骤,为每个音素和静音模型sil生成了各自的3状态左右无跳转HMM。下一步是在静音模型中加入第2个状态和第4个状态之间相互跳转的弧。其目的是,通过允许独立的状态吸收训练数据中的各种噪声,使模型更具鲁棒性。后向跳转的弧可以让状态

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2