HTK手册第三章教程文件Word文档下载推荐.docx

上传人:b****2 文档编号:1123978 上传时间:2023-04-30 格式:DOCX 页数:36 大小:325.29KB
下载 相关 举报
HTK手册第三章教程文件Word文档下载推荐.docx_第1页
第1页 / 共36页
HTK手册第三章教程文件Word文档下载推荐.docx_第2页
第2页 / 共36页
HTK手册第三章教程文件Word文档下载推荐.docx_第3页
第3页 / 共36页
HTK手册第三章教程文件Word文档下载推荐.docx_第4页
第4页 / 共36页
HTK手册第三章教程文件Word文档下载推荐.docx_第5页
第5页 / 共36页
HTK手册第三章教程文件Word文档下载推荐.docx_第6页
第6页 / 共36页
HTK手册第三章教程文件Word文档下载推荐.docx_第7页
第7页 / 共36页
HTK手册第三章教程文件Word文档下载推荐.docx_第8页
第8页 / 共36页
HTK手册第三章教程文件Word文档下载推荐.docx_第9页
第9页 / 共36页
HTK手册第三章教程文件Word文档下载推荐.docx_第10页
第10页 / 共36页
HTK手册第三章教程文件Word文档下载推荐.docx_第11页
第11页 / 共36页
HTK手册第三章教程文件Word文档下载推荐.docx_第12页
第12页 / 共36页
HTK手册第三章教程文件Word文档下载推荐.docx_第13页
第13页 / 共36页
HTK手册第三章教程文件Word文档下载推荐.docx_第14页
第14页 / 共36页
HTK手册第三章教程文件Word文档下载推荐.docx_第15页
第15页 / 共36页
HTK手册第三章教程文件Word文档下载推荐.docx_第16页
第16页 / 共36页
HTK手册第三章教程文件Word文档下载推荐.docx_第17页
第17页 / 共36页
HTK手册第三章教程文件Word文档下载推荐.docx_第18页
第18页 / 共36页
HTK手册第三章教程文件Word文档下载推荐.docx_第19页
第19页 / 共36页
HTK手册第三章教程文件Word文档下载推荐.docx_第20页
第20页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

HTK手册第三章教程文件Word文档下载推荐.docx

《HTK手册第三章教程文件Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《HTK手册第三章教程文件Word文档下载推荐.docx(36页珍藏版)》请在冰点文库上搜索。

HTK手册第三章教程文件Word文档下载推荐.docx

Dialthreethreetwosixfivefour

Dialninezerofouroneohnine

PhoneWoodland

CallSteveYoung

HTK规定了一个语法定义语言,用于制定简单的目标语法。

如下所示,它包括下面一组变量定义规则,描述需要识别的词。

语音拨号应用中,一个可能的语法如下:

$digit=ONE|TWO|THREE|FOUR|FIVE|SIX|SEVEN|EIGHT|NINE|OH|ZERO;

$name=[JOOP]JANSEN|[JULIAN]ODELL|[DAVE]OLLASON|[PHIL]WOODLAND|

[STEVE]YOUNG;

(SENT-START(DIAL<

$digit>

|(PHONE|CALL)$name)SENT-END)

间隔符”|”表示几选一的,方括号”[]”表示可选项,尖括号”<

>

”表示一个或可多个重复。

一个完整的语法可以被描述成一个如图3.1表示的网络。

上图中上层的目标语法描述是为了方便使用者。

HTK识别器实际上需要的是一个使用更低层的符号定义的词网络,称为HTK标准网格SLF格式(HTKStandardLatticeFormat(SLF)),在SLF里,每个词的实例和词之间的转换都明确列出了。

这种词网络可以使用HParse工具由上面的语法自动建立,比如,包含上面的语法的文件称为gram,执行下面的操作

HParsegramwdnet

将会建立一个等效的词网络并存储到wdnet文件中(如图3.2)。

第二步——词典

建立一个词典的第一步是建立一个经排序的包含所有词的列表。

在电话拨号任务中,建立一个所有词的列表可以轻松地手工完成。

但是如果任务更加复杂,则应该根据训练数据中的例句建立词列表。

此外,若建立一个鲁棒性声学相关模型,就需要使用一个包含很多词的并且音素更均衡的大的句子集合。

因此,训练数据是由和电话拨号任务无关的英文句子组成。

下面,给出一个由句子提示建立一个词列表的简单例子。

这里训练用的句子都取自TIMIT数据库中使用的一些提示命令,并且为了便于处理,这些句子都重新编号。

例如,开始一部分数据内容可能是下面这样的:

S0001ONEVALIDATEDACTSOFSCHOOLDISTRICTS

S0002TWOOTHERCASESALSOWEREUNDERADVISEMENT

S0003BOTHFIGURESWOULDGOHIGHERINLATERYEARS

S0004THISISNOTAPROGRAMOFSOCIALIZEDMEDICINE

等等

我们希望得到的训练词列表wlist可以通过下面介绍的方式自动生成。

在使用HTK之前,首先需要以合适的方式编辑文本。

例如,可能需要将所有的空格变成换行,然后使用UNIX命令sort和uniq对词进行排序,最终的结果是一行一词并严格按字母顺序排序。

可以使用HTKTutorial目录中的脚本prompts2wlist完成此功能。

词典本身能由标准的输入源用HDMan建立。

举个例子,可以用BritishEnglishBEEP发音词典。

词典中的音标集合除重音记号之外都将被直接采用;

并且在每个发音的后面都加上一个短暂的停顿(sp)。

如果词典包含任何静音标记,则MP命令将把sil和sp合并成一个sil。

这些操作都可以用HDMan和一个包含三行命令的编辑脚本来完成(保存在global.ded中)。

ASsp

RScmu

MPsilsilsp

其中,cmu表示采用了一种重音符号的风格,这种风格中,词汇的重读程度是通过直接写在音素名后面的单个数字表示的(例如,eh2表示次重读(level2stress)的音素eh)。

命令

HDMan-m-wwlist-nmonophones1-ldlogdictbeepnames

会建立一个名为dict的新词典,通过搜索源词典beep和names,找到wlist中每个词的发音(见图3.3)。

这里的wlist可以仅仅是一个对目标语法中出现的所有词进行排序得到的列表。

其中,names是一个人工生成的包含目标语法中出现的每个名字的发音的文件。

HDMan的命令选项-l表示将构造词典相关的各种统计数据输出到一个log文件dlog中。

特别地,如果有些词在发音词典中没有出现,它将给出提示。

HDMan也能输出一个词典中出现的音素列表,这里称为monophones1。

一旦训练和测试数据录好后,将根据每个音素重估出一个HMM。

通常每个词典的词条格式如下:

WORD[outsym]p1p2p3....

方括号中的字符串指定词被识别出后的输出,缺损的输出是词本身。

如果是空字符串,则表示没有任何输出。

让我们来看看词典是什么样子,下面列出了一部分词典内容:

Aahsp

Aaxsp

Aeysp

CALLkaolsp

DIALdayaxlsp

EIGHTeytsp

PHONEfownsp

SENT-END[]sil

SENT-START[]sil

SEVENsehvnsp

TOtaxsp

TOtuwsp

ZEROziarowsp

需要注意的是某些词比如A和TO有多种发音。

SENT-START和SENT-END的实体有一个静音模型sil作为它们的发音,并且输出的是空符号。

第三步——录数据

我们使用HTK工具HSLab录取训练和测试数据。

这是一个结合了录音和标注功能的工具。

在我们的例子里,仅使用HSLab来录音,因为标注已经存在了。

如果没有预先准备好的训练语料(如TIMIT数据库中的数据),你可以使用HSLab通过文本(上面介绍的那样)建立它们,或者使用HSLab标注你的训练语料。

HSLab按如下的方式调用

HSLabnoname

执行命令后,将显示这样的窗口,窗口上半部分是一个波形播放区域,下半部分是一排按钮,包括录音按钮等。

如果一个文件名当作命令参数,HSLab将播放这个文件。

这里,指定的文件名是noname,指明了将要录新的数据。

HSLab并不给用户特别的提示,只要录音按钮被按下,它就将录得的数据交替地写到noname_0,noname_1,….这些文件里,因此很容易写一个shell脚本,当有noname_0之类的文件出现时,就输出提示信息,并按照事先约定的提示方式重命名文件(如图3.4所示)。

当训练语料句子的提示按上面的方法生成后,测试语料句子的提示在录音前也要生成。

工具HSGen可以帮助我们完成测试句子提示的生成;

HSGen能随机的遍历一个词网络并输出穿越过程中遇到的每个词。

例如,下面的命令

HSGen-l-n200wdnetdict>

testprompts

将创建一个包含200个词的测试语料,内容可能是下面这样的:

1.PHONEYOUNG

2.DIALOHSIXSEVENSEVENOHZERO

3.DIALSEVENNINEOHOHEIGHTSEVENNINENINE

4.DIALSIXNINESIXTWONINEFOURZERONINEEIGHT

5.CALLJULIANODELL

...etc

可以用它生成测试数据所需的提示文件testprompts。

第四步——建立标注文件

在训练一套HMM集合时,每个训练数据文件都必须对应一个音素级的标注。

如果没有手工标注的数据用来开启初始(bootstrp)的模型训练,可以采用一种被称为flat-start的方法来代替。

这种方法中,需要两套音素标注,开始使用的脚本中词之间不包含短暂停顿模型(sp),一旦一套合理的音素模型建立后,sp模型将被插入到可能有停顿的词之间。

两种音素标注的起始点都是一个按HTK标签格式规范的标注,可以很容易地用文本编辑器或脚本语言创建。

在RMDemo的point0.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.)

我们可以看到,提示标注要转换成“路径名”(pathname),每个词单独作为一行,并且每个语料按照自己的周期终止。

文件第一行指明了文件是MasterLabelFile(MLF)。

这个例子里,一个文件包含了全部的标注。

HTK也允许每个标注拥有各自的MLF文件,但是全部存在于同一个MLF中更加有效率。

MLF中使用的“路径名”格式需要解释一下,因为实际上,它是一种模式(pattern)而不是名字(name)。

HTK处理语音文件时,需要找和语音文件名字相同但是扩展名不同的标注(transcription)(或标注文件(labelfile))。

因此,如果要处理文件/root/sjy/data/S0001.wav,HTK要找一个名为/root/sjy/data/S0001.lab的标注文件。

如果使用MLF文件,HTK浏览此文件找到匹配标注文件文件名的相应模式。

一个“*”可以匹配任何字符串,因此例子里使用的模式路径是没有约束的。

所以,允许存储在不同位置的不同版本的语音使用同样的标注。

词一级的MLF建立后,可以使用标注编辑工具HLEd生成音素级的MLF。

例如,使用上面的例子中的存储在文件words.mlf中的词一级MLF,执行下面的命令:

HLEd-l'

*'

-ddict-iphones0.mlfmkphones0.ledwords.mlf

将能生成一个音素级的标注,选项-l表示输出的模式中生成路径’*’,格式如下,#!

sil

w

ah

n

v

ae

l

ih

d

..etc

处理过程见图3.5。

HLEd编辑脚本mkphones0.led,包含以下命令:

EX

ISsilsil

DEsp

“扩展命令”EX用词典文件dict中相应的发音替换words.mlf中的每个词;

“插入命令”IS在每个语料的开头和结尾插入静音模型sil;

“删除命令”DE删除所有的sp标记,因为此时脚本里不需要该标注。

第五步——数据编码CodingtheData

数据准备的最后一步是对原始语音数据进行参数化运算,即将波形语音转化为特征向量序列。

HTK支持基于FFT的和基于LPC的分析。

这里使用的是Mel域倒谱系数(MelFrequencyCepstralCoefficients)(MFCC)。

编码工作可以通过工具HCopy,自动生成MFCC矢量。

为此,需要使用一个配置文件config,指定所有转化需要的参数,合理的配置文件格式如下:

#Codingparameters

TARGETKIND=MFCC_0

TARGETRATE=100000.0

SAVECOMPRESSED=T

SAVEWITHCRC=T

WINDOWSIZE=250000.0

USEHAMMING=T

PREEMCOEF=0.97

NUMCHANS=26

CEPLIFTER=22

NUMCEPS=12

ENORMALISE=F

其中有些设置是默认设置,为了完整性,这里都全部列出了。

简要解释一下,此配置文件指定了目标参数是使用C0作为能量维的MFCC,帧长是10ms(HTK使用的单位是100ns),输出格式要经过压缩,并且加入了CRC校验。

FFT之前需要经过加Hamming窗的处理,并且语音信号首先要经过预加重,预加重系数为0.97。

filterbank使用26个三角滤波器,最后得到12个MFCC系数。

变量ENORMALISE默认值为true,表示对录音数据文件进行能量规一。

在线识别中不能使用这种方法。

由于我们要做的系统是在线的,因此这里这个变量被设成false。

并不需要预先创建特征编码文件,因为可由原始波形文件在处理过程中完成特征提取的工作,要实现这一过程,只需通过对相应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.wav/root/sjy/train/S0003.mfc

/root/sjy/waves/S0004.wav/root/sjy/train/S0004.mfc

包含列表的文件可以当作脚本文件,通常灌以后缀名scp(虽然HTK并不强制这样做)。

脚本文件在命令中用“标准”选项–S指定,它们的内容只是作为命令行参数简单地读取。

因此,避免了命令行有几千个参数这样的情况。

假设上面提到的脚本存储在名为codetr.scp的文件中,训练数据通过执行下面的命令进行编码:

HCopy-T1-Cconfig-Scodetr.scp

图3.6有详细的图示。

所有的训练都已经开始后,编码测试数据(配置文件里使用TARGETKIND=MFCC_0_D_A)也采用类似的过程。

建立单音素(Monophone)HMMs

这一节描述的是一组单高斯的单音素HMM模型的训练过程。

训练开始前,应该有一组相同的HMM,每个模型的每个均值和方差都是相同的。

然后重新训练这些原始模型,并加入sp模型,以及sil(静音)模型,然后再次训练这些单音素模型。

词典中的某些词条可能有多个发音。

但是,使用HLEd将词一级的MLF扩展成音素级的MLF时,它总是选择遇到的第一个发音。

一旦一套可用的单音素模型HMM集训练出来后,可以用识别工具HVite对训练数据进行强制校正。

这就意味着,将根据声学特性选择发音,从而建议一个新的音素级MLF。

这个新的MLF可被用于单音素模型的最终重估,即根据校正后的数据再一次重估。

第六步——建立FlatStartMonophones

HMM模型训练的第一步是定义一个原始模型。

这个模型的参数并不重要,它的作用是定义模型的拓扑结构。

对于基于音素的系统,一种较好的拓扑结构是使用3状态、无跳转的左-右模型,结构如下:

~o<

VecSize>

39<

MFCC_0_D_A>

~h"

proto"

<

BeginHMM>

NumStates>

5

State>

2

Mean>

39

0.00.00.0...

Variance>

1.01.01.0...

3

4

TransP>

0.01.00.00.00.0

0.00.60.40.00.0

0.00.00.60.40.0

0.00.00.00.70.3

0.00.00.00.00.0

EndHMM>

每个特征矢量长度都是39。

39是静态矢量(MFCC_0=13)加一阶系数(+13)和二阶系数(+13)得到的。

HTK工具HCompV会扫描一组数据文件,计算全局的均值和方差,并将给定的HMM中所有的高斯模型的均值方差都设为同样的值。

因此,假设所有训练文件的列表被存储在train.scp中,下面的命令:

HCompV-Cconfig-f0.01-m-Strain.scp-Mhmm0proto

将在hmm0目录下建立一个新的原始模型,这个模型中,原模型的0均值和单位方差被替换成全局均值和方差。

需要指出的是原始模型定义了特征矢量类型是MFCC_0_D_A(注意:

’0’而不是’o’)。

这意味着一阶和二阶系数将在前面描述编码过程中计算并存储的静态MFCC的基础上被计算,并且添加在静态MFCC后,为确保在数据装载过程中先计算,应该修改配置文件config,其中的targetkind要作修改,即配置文件中的TARGETKIND应该被改为:

TARGETKIND=MFCC_0_D_A

HCompV命令有一组选项。

-f选项将方差下限(称为vFloors)设为全局方差的0.01倍,这组向量值将被用于后面步骤中方差估计的下限值。

-m选项指定均值和方差同时计算。

定存储在hmm0目录下的新原始模型后,将会构造名为hmmdefs的MasterMacroFile(MMF)文件,hmmdefs中包含需要的每个单音素模型(包括”sil”)的副本,每个模型都复制了新的原始模型,且作了重新标记。

MMF文件的格式和MLF文件的格式类似,而且也出于类似的目的,避免了单独定义模型导致数量过大的HMM定义文件(如图3.7)。

存储在hmm0目录下的flatstart单音素模型可以用嵌入式重估工具HERest进行重估,命令如下:

HERest-Cconfig-Iphones0.mlf-t250.0150.01000.0\

-Strain.scp-Hhmm0/macros-Hhmm0/hmmdefs-Mhmm1monophones0

完成的功能是,加载模型列表monophones0(monophones1去掉sp模型)中的所有模型。

这些模型将被重估,使用的数据是train.scp中列出的,新模型存储在目录hmm1下。

这个命令中用到的大部分文件,除了文件macros以外都已经介绍了。

macros文件需要包含一个称为globaloptions的macro和前面生成的方差下限macro,即vFloors。

全局选项macro简单地定义了模型的参数类型和特征向量大小,例如:

见图3.7。

这个选项可以和vFloors写在同一个文件中命名为macros。

-t选项设置训练过程中的裁剪门限。

裁剪限制了前-后向算法中状态队列的范围,可降低一个数量级的运算量。

对大多数训练数据来说,都可以设置一个比较窄的裁剪门限,但是有些数据可能在声学特性上不能很好的匹配,因此有必要设置一个较宽的门限。

HERest为处理这种情况,采用一种自动增益控制的裁剪门限。

上面的例子中,一般的裁减门限是250.0,如果个别文件重估失败,裁剪门限增加150.0并对此文件重新处理。

如果对文件的处理不成功,这种操作会一直循环,直到达到裁剪门限的上限1000.0。

因此,我们可以假定,如果训练文件出现严重问题,则提示有错误应该予以修复(典型的错误是标注有错误),即应该丢弃相应的训练数据文件。

目录hmm0中的初始单音素模型的训练过程见图3.8。

每次运行HERest,都是一次独立的重估过程。

新的HMM集合被存储在新的目录下。

HERest应该至少执行两次以上。

每次改变输入和输出目录的名字(设置-H和-M选项),直到目录hmm3包含初始单音素模型的最终模型集。

第七步——确定静音模型

经过前面的步骤,为每个音素和静音模型sil生成了各自的3状态左右无跳转HMM。

下一步是在静音模型中加入第2个状态和第4个状态之间相互跳转的弧。

其目的是,通过允许独立的状态吸收训练数据中的各种噪声,使模型更具鲁棒性。

后向跳转的弧可以让状态

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

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

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