Htk实验笔记-史上最完整版_第1页
Htk实验笔记-史上最完整版_第2页
Htk实验笔记-史上最完整版_第3页
Htk实验笔记-史上最完整版_第4页
Htk实验笔记-史上最完整版_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Htk实验笔记YesOrNo孤立词识别(史上最完整版哦)摘要:本试验中,我们将基于HTK对象散设立建设一个2-单词辨认体系,辞汇散是Yes,No。那是能够计划出去的最根基的主动语音辨认(Automaticspeechrecognition,ASR)体系。方针:设立建设一个伶仃词识本实验中,我们将基于HTK工具集建立一个2-单词识别系统,词汇集是Yes,No。这是可以设计出来的最基本的自动语音识别(Automaticspeechrecognition,ASR)系统。目标:建立一个孤立词识别系统,只包含yes和no两个词。步骤:A:创建一个语料库,确定识别基本元(如单词yes,no等),yes和n

2、o各录5次B:声学分析,把waveform的声音文件转换为mfcc()格式,即对语音材料库中的声音文件提取MFCC声纹特征(梅尔频率倒谱系数,这个部分的详解见教程10)。C:模型定义:为词典里的每一个词(基本元)建立一个HMM原型D:模型训练:HMM模型初始化和迭代,利用MFCC声纹特征又t每一个HMM模型进行训练,使模型参数与其描述的识别基本元对应。E:问题定义,即语法定义,定义输入语音的语法规则等,从发音对应到文字。F:对测试集合进行识别G:评测使用的教程:1. HTK(V3.1)基础指南中文版2. 语音识别工具箱之HTK安装与使用3. 语音识别系统之htk孤立词识别(yesno)4. H

3、TK(yesno)教程5. HTK孤立词识别回顾6. 一个简单的HTK入门参考例子7. 利用HTKX具包快速建立一个语音命令识别系统8. Windows安装HTK3.4.1语音识别工具(这里有HSLab运行失败的原因)9. Htkerrorbook10. UNDERSTANDINGHTKERRORMESSAGES11. htk源码12.语音信号处理之(四)梅尔频率倒谱系数(MFCC特别记录一下该博客,里面有大量语音方面的学习资料。一.准备工作预先建立文件夹我在htk目录下建立了work文件夹,今后所有的实验都放在这个文件夹中。在该文件夹中建立YesNo文件夹用于存放本实验的所有文件和数据。Ye

4、sNo文件夹中的结构如下:(1) data/:存储训练和测试数据(语音信号、标签等等),包括一个子目录data/train,而train包才2个子目录,data/train/sig(用以存储步骤1接下来录制的训练语音数据)和data/train/mfcc(用来存储步骤二中训练数据转化后的mfcc参数);(2) model/:存储识别系统的模型(HMMs)的相关文件;(3) def/:存储任务定义的相关文件;(4) test/:存储测试相关文件(我是将测试数据存在此文件夹的没有放在data中)。在data/下创建data/train/sig、data/train/lab、data/train/m

5、fcc文件夹,分别存放采集的语音材料的sig文件、lab(标签)文件和提取的MFCC声纹特征文件。在model/下创建model/proto、model/hmm0、model/hmm0flat、model/hmmlmodel/hmm2、model/hmm3文件夹:model/proto用于存放模型初始化所需HMM原型定义文件hmm_yes、hmm_no、hmm_silmodel/hmm0用于存放使用HInit命令初始化HMM模型输出的描述结果文件(依然是hmm_yes、hmm_no、hmm_sil)model/hmm0flat用于存放使用HCompv命令初始化模型时输出的可变基底宏文件vFlo

6、ors(丢弃使用HCompv初始化模型时产生的hmm_yes、hmm_no、hmm_sil)model/hmmi为使用HRest命令迭代训练HMM模型时的输出目录,i为表示当前迭代i的索引最终单词HMM模型是hmm3/hmm_yes,hmm3/hmm_no,andhmm3/hmm_sil。在 test/ 下创建 test/sig 、test/mfcc 、test/result文件夹,分别存放测试用的语音材料的sig文件、提取的MFCC声纹特征文件和测试结果文件。整个目录的结构我将在本文最后给出。二.创建语料库首先我们需要录音以采集足够的语音数据,对于yes、no”这两个命令都需要录一些相应的语

7、音样本,同时也需要对录下的语音做一些简单的标注。录音和标注可以采用HTK工具包中的HSLab来完成。这里我们采集YES和NO两个单词。在命令行下进入 HTK/work/YesNo/data/train/sig文件夹(sig语言文件保存在该目录中),输入:HSLabyes.sig回车(该命令用于使用HSLab工具打开所在目录的yes.sig文件,如果没有该文件,则在该目录中新建该文件,这里使用该命令打开HSLab图形化界面,录制yes.sig)这一步可能会遇到如下问题:报错:"ERROR+6870MakeXGraf:NotcompiledwithX11support:useHGraf.

8、X.cATALERROR-Terminatingpro”解决办法:-1、这需要修改HTKLib文件夹下的htk_htklib_nt.mkf文件,共有两处需要修改:将文件中的HGraf.null.obj替换为HGraf_WIN32.obj、HGraf.null.olv替换为HGraf_WIN32.olv;-2、然后在cmd命令行中重新编译HTKLib文件夹下的htk_htklib_nt.mkf;-3、检查HTKTools文件夹下的Make文件,如果有"-lX11"字符的话将其删除,然后在cmd命令行中重新编译HTKTools文件夹下的htk_htktools_nt.mkf文件

9、;(需要将bin.win32文件夹的路径加入到环境变量中)原因:默认情况下HSLab工具使用的是x11做的图形界面接口,windows不支持,所以需要修改一下生成文件,使用windowsGUI。重新执行HSLabyes.sig回车,一个用于录音的对话框就会出现。如图:下面我们开始录音。录音环境自己控制哈。1.录制声音。点击rec按钮,说:"yes”,然后点击stop按钮。你会看到界面上出现一个语音波形,一条语音样本就录制完成了,你可以点击play播放听一下。2 .给声音做标记。本条语音一共需要做3个标记:yes语音段的标记和其前后各一个的静音段标记。注意:做标记的语音段不能重复(可以

10、不相连)。点击mark,用鼠标选取“yes”前面的一段静音后,再点击Labelas,用键盘输入"sil"表示silence静音的意思,然后回车。这样我们就给本条语音的静音段做了一个标记。再点击mark,选取“yes”的发音段(可以选取左右两边的边界,不容易出错),然后点击Labelas按钮,用键盘输入“yes”,回车。这样我们就给本语句的yes做了标记,依照此方法,完成yes后面那个sil语音段的标记。完成这3个标记后,点击save按钮,回车。将我们的其标记文件保存。保存目录为HSLab.exe的运行目录。别找不到文件了哈。3 .重命名语音文件和语音标记文件。语音文件后缀为

11、*sig,标记文件后缀为*lab。因为HGraf:HSLab只能自动给出0,1的文件名序号,我们又需要至少10条的语音材料,所以就需要录制一条语音,重命名一条。我们将yes_0.sig重命名为yes_01.sig,将yes_0.lab重命名为yes_01.lab.至此,我们完成了一个语音材料的录制。4 .点击new按钮(这里不点new的话你会发现lab文件中有N多个标签信息,如果遇到这种情况,你可以删除相应lab文件,重新打开sig文件贴标签),会发现new按钮旁边的set0变为set1了。然后依照1,2,3步,新建下一条语音材料,这时HSLab自动保存的文件名为,yes_1.sig,yes_

12、1.lab,将其命名为yes_02.sig和yes_02.lab即可。5 .再执行9次第4步,得到yes_03,yes_04yes_10的语音材料和标记文件。6 .依口1,2,3,4,5步的方法,完成no的语音材料和标记文件的制作,得到no_00.sig,no_00.labno_10.sig,no_10.lab.7 .这样我们就完成了本yes和no语音识别系统的语音库的建立。然后将所有的*lab文件放入到laber_dir文件夹中。以方便后面训练操作。我们可以打开一个.lab文件看一下它的结构。如下记录了sig文件各标签的起止信息(如果你打开文件不是这样,而是有很多的标签,也许你在打标签的过程

13、中出现了问题)。三.声学分析语音识别系统并不直接在语音信号上进行识别,而是先要进行特征提取,包括分帧,加窗,求取频谱及倒谱,这样确保提取出的特征更加紧凑并尽可能多的保留语音内容的信息。HTK中负责提取特征的是HCopy工具,它将wav格式的语音文件转化为包含若干特征矢量的特征文件。具体命令如下:Hcopy-A-D-Ctest/analysis.conf-Sdef/targetlist.txt使用该命令前,首先需要完成两个配置文件的编写(用记事本编写即可)。1) analysis.conf为抽取参数配置文件,用于对特征提取过程中的参数进行配置,如命令所示保存在test文件夹下。内容如下:SOUR

14、CEFORMAT=HTK#指定输入语音文件的搁置TARGETKINDMFCC_0_D_A#定义提取什么样的特征参数,这里定义的是12个MFCC系数,1个nullMFCC系数c0,13个一阶MFC僚数,13个二阶MFCCC(数。一共39个。MFCC勺有关材料白度既可。WINDOWSIZE=250000.0#定义帧长TARGETRATE=100000.0#定义取帧时的滑动长度NUMCEPS12#定义取到的MFCCf系数的个数。上边的12就来源于此。USEHAMMING=T#定义取帧时用到的窗函数。这里定义使用汉宁窗。PREEMCOEF=0.97#定义预加重系数,NUMCHANS=26#定义美尔频谱

15、的频道数量CEPLIFTER=22#定义倒谱所用到的滤波器组内滤波器个数。其中#后代表注释,参数意义以后详细说(该文件可以有注释)2) targetlist.txt为源/目的列表文件,用以说明抽取源文件(*sig)的路径和目标文件(*mfcc)的保存路径,内容如下:data/train/sig/yes_01.sigdata/train/mfcc/yes_01.mfccdata/train/sig/yes_02.sigdata/train/mfcc/yes_02.mfccdata/train/sig/yes_03.sigdata/train/mfcc/yes_03.mfccdata/train/

16、sig/yes_04.sigdata/train/mfcc/yes_04.mfccdata/train/sig/yes_05.sigdata/train/mfcc/yes_05.mfccdata/train/sig/no_01.sigdata/train/mfcc/no_01.mfccdata/train/sig/no_02.sigdata/train/mfcc/no_02.mfccdata/train/sig/no_03.sigdata/train/mfcc/no_03.mfccdata/train/sig/no_04.sigdata/train/mfcc/no_04.mfccdata/tr

17、ain/sig/no_05.sigdata/train/mfcc/no_05.mfcc这里我只将yes和no的前五条作为抽取的源文件,原先是将10条都作为源文件的,但是有的文件在后面的初始化过程中报错了。原因可能是在贴标签的时候,标签之间出现了重复,目前我也不是非常清楚。去掉有问题的文件后,就没有问题了。由于录音不方便,于是想到将yes和no的前五条作为抽取的源文件,后五条作为测试文件。于是乎,需要将后五条sig文件存储到test/sig文件中。读者可以全都写上,然后有报错的时候再去掉,然后重新生成mfcc文件即可完成上面两个文件后,运行上述命令Hcopy-A-D-Ctest/analysis

18、.conf-Sdef/targetlist.txt,结果如下图:屏幕上会输出配置文件中的各个参数如果没有错误的话,在data/train/mfcc下,应该有*mfcc文件出现。如下图。此步骤不容易出错,一般都会成功。至此,特征提取就完成了四.HMM模型定义在model/proto中建立模型初始化所需HMM原型定义文件:hmm_yes、hmm_no、hmm_sil(注意这三个文件无后缀名,否则会报错,且后面步骤中生成的同名文件也均无后缀名)。hmm_yes内容如下(洋意:里面不能有注释,使用的时候必须删棹)o<VecSize>39<MFCC_0_D_A>#定义输入特征参数

19、的维书h"sil"#定义模型名字,这里是给识别基本元sil定义的,所以需要""内为sil<BeginHMM>#开始HMM数的设置,<NumStates>6#定义隐含状态数<State>2#状态1为空,我们从状态2开始定义<Mean>39#连续HMW的均值向量的定义0.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.0Varianc

20、e39#连续HMMH勺方差向量的定义1.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.0<State>3<Mean>390.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.0Variance391.01.01.01

21、.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.0<State>4<Mean>391.01.01.01.01.01.01.01.01.01.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.0Variance390.00.00.00.00.00.00.00.00.00.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.

22、01.01.01.01.01.01.0<State>5<Mean>391.01.01.01.01.01.01.01.01.01.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.0Variance391.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.01.0<Trans

23、P>6#转移概率矩阵的定义。0.00.50.50.00.00.00.00.40.30.30.00.00.00.00.40.30.30.00.00.00.00.40.30.30.00.00.00.00.50.50.00.00.00.00.00.0<EndHMM>列表3HMM描述文件(原型)o<VecSize>39<MFCC_0_D_A>文件头,给出系数向量大小(这里是39个系数)、系数类型(MFCC_0_D_Aoh"yes"<BeginHMM>(.)<EndHMM>封装对所谓的yes的HMMK型的描述。<

24、NumStates>6给出HMMK型的状态总、数,包括2个非发散状态1和6。<State>2表示对状态2的观察函数的描述。这里我们使用单一高斯观察函数,带有对角矩阵。这样的函数完全由一个平均向量和一个变化向量(自相关矩阵的对角元素)。状态1和6没有描述,他们没有观察函数。<Mean>390.00.0(.)0.0(x39)给出当前观察函数的平均向量(在为0,该文件仅给出HMM1型(它的全局结构)的原型39维的观察空间中)。每个元素是强制初始化这些系数后面将用来训练。<Variance>391.01.0()1.0(x39)给出当前观察函数的变化向量。每个元

25、素强制初始化为1.<TransP>6给出模型的6x6转换矩阵,即:alia12a13a14a15a16a21a22a23a24a25a26a31a32a33a34a35a36a41a42a43a44a45a46a51a52a53a54a55a56a61a62a63a64a65a66其中aij表示状态i到j转换的可能性。Null值说明相应的转换不允许。其它值进行强制初始化(但是矩阵的每行之和为1):在训练过程中将被修改。有人可能有疑问,HMM不是应该有个状态转移矩阵A,观测概率矩阵B么?怎么这里不见观测概率矩B8呢?答:有状态转移£1阵的是离散HMM(DHMM),这里用的是

26、连续型HMM(CHMM),连续性HMM的参数为:1.状态转移矩阵A,和高斯分布里用到的均值和方差,这里上面的HMM模型中都有定义。具体可查阅:,里面论文语音识别系统中特征提取和声学建模的研究里有关于HMM的详细资料,可供查阅。好了,观察状态转移矩阵,a11=0,a12=0.5,a13=0.5,a1x=0(x=4,5,6),这说明由状态1到自身的转移概率为0,到状态2的转移概率为0.5,到状态3的转移概率为0.5,到状态4,5,6的状态转移概率为0。其他行数据以此类推,由此我们便知道此HMM模型的拓扑结构,当然你也可以修改拓扑结构来试图改善识别系统性能。我们必须为每个模型生成一个这样的原型。在我

27、们的例子中,我们要写3个HMM模型原型,即yes、no、sil关于HMM描述文件更多详细信息参加HTK文档第94页(第七章HMM定义文件)。然后,以此方法建立yes和no的HMM模型,我们保持拓扑结构无变化。hmm_no.hmm、hmm_sil.hmm有着相同的内容,只需将h"yes"中yes改为相应的no和sil即可。关于HMM定义的更多知识,你可以参考htkbook.pdf英文资料,里面介绍的非常详细。至此,HMM模型定义完成。五.模型初始化在训练过程开始之前,为了使得训练算法快速精准收敛,HMM模型参数必须根据训练数据正确初始化。HTK提供了2个不同的初始化工具:Hi

28、nit和HCompv。本步是难点,因为我在实验中总是出错,苦恼了几个小时才解决问题(关于我遇到的问题及问题的解决办法会在本文最后予以说明)。使用到命令为Hinit和HCompv。榛0&r如HInit下面的命令是使用Viterbi算法通过训练数据的时间轴对HMM模型进行初始化:HInitADT1Strainlist.txtMmodel/hmm0Hmodel/proto/hmmfilellabelLlabel_dirnameofhmm我们来解释一下:- A-D-T1等参数,是显示命令本身,显示设定变量等功能,读者可以在命令行直接输入HInit叵车,便可看到清晰的解释。trainlist.t

29、xt是训练语料库里全部mfcc文件的列表,用于建立训练集(mfcc文件存储在目录data/train/mfcc/),我将trainlist.txt存储在test/文件夹中,这里使用的时候要用test/trainlist.txt。- M后跟一个文件夹,是初始化HMM1型描述结果输出的目录名称,用来存放初始化后的hmmt件,也就是输出文件夹,这里我们采用model/hmm0,(必须提前创建好,这个我们在做准备工作的时候就创建了);- H后跟hmm莫型文件model/proto/hmmfile,它是一个描述文件,本例中包含被称作nameofhmm勺HM限型的原型(这里指proto/hmm_yes,p

30、roto/hmm_no,proto/hmm_sil);- l后是制定此HMMI型对应的标签,label用来标示哪个标签段用于训练集中(这里指yes、no或sil,因为它们对于标签和HMMK型使用了相同的名字,当然这不是强制的。)这里hmm_ye谢应的当然是yes了,还记得嘛,我们很辛苦做的标签呢,当然如果你错写成no了,就会按照no标签所指定的语音参数来初始化hmm_yesT,很影响训I练;- L后写上lab标签文件所在文件夹,即label_dir是存储相关训练集的标签文件(.lab)的目录(这里是data/train/lab/)。nameofhmm1要进行初始化的HMMI型的名称(这里指ye

31、s、no、sil)这个过程对每个模型(hmm_yes,hmm_no,hmm_sil)重复执行。具体使用的时候要根据自己的实验情况将上述字段替换成实际的目录和文件名。说明:由HInit输出的HMM模型文件和输入原型具有相同的名字。根据上面的解释可以看到,要执行HInit命令来初始化模型,我们要做三件事:1 .创建trainlist.txt文件在test/下新建trainlist.txt文件,内容为:data/train/mfcc/yes_01.mfccdata/train/mfcc/yes_02.mfccdata/train/mfcc/yes_03.mfccdata/train/mfcc/yes

32、_04.mfccdata/train/mfcc/yes_05.mfccdata/train/mfcc/no_01.mfccdata/train/mfcc/no_02.mfccdata/train/mfcc/no_03.mfccdata/train/mfcc/no_04.mfccdata/train/mfcc/no_05.mfcc2 .准备一个文件夹hmm0作为初始化输出目录。在model/下新建hmm0文件夹(准备工作中已经创建)。3 .分别执行如下命令对三个hmm原型进行初始化:Hinit-A-D-T1-Stest/trainlist.txt-Mmodel/hmm0-Hmodel/proto

33、/hmm_yes-lyes-Ldata/train/labyesHinit-A-D-T1-Stest/trainlist.txt-Mmodel/hmm0-Hmodel/proto/hmm_no-lno-Ldata/train/labnoHinit-A-D-T1-Stest/trainlist.txt-Mmodel/hmm0-Hmodel/proto/hmm_sil-lsil-Ldata/train/labsil命令行显示如下:F:dialecthtkHTKworkYesNo>Hinit-A-D-T1-Stest/trainlist.txt-Mmodel/hmm0-Hmodel/proto

34、/hmm_no-lno-Ldata/train/labnoHinit-A-D-T1-Stest/trainlist.txt-Mmodel/hmm0-Hmodel/proto/hmm_no-lno-Ldata/train/labnoNoHTKConfigurationParametersSetnitialisingHMMno.一States:2345(width)Mixess1:1111(39)NumUsing:0000ParmKind:MFCC_D_A_0Numberofowners=1SegLab:nomaxIter:20epsilon:0.000100minSeg:3Updating:Me

35、ansVariancesMixWeights/DProbsTransProbs-systemisPLAIN5ObservationSequencesLoadedStartingEstimationProcessteration1:AverageLogP=-2423.35156teration2:AverageLogP=-2344.08716Change=79.26445teration3:AverageLogP=-2336.55200Change=7.53520teration4:AverageLogP=-2335.74146Change=0.81060teration5:AverageLog

36、P=-2335.31958Change=0.42192teration6:AverageLogP=-2335.31958Change=0.00005Estimationconvergedatiteration7Outputwrittentodirectorymodel/hmm0NoHTKConfigurationParametersSetF:dialecthtkHTKworkYesNo>Hinit-A-D-T1-Stest/trainlist.txt-Mmodel/hmm0-Hmodel/proto/hmm_yes-lyes-Ldata/train/labyesHinit-A-D-T1-

37、Stest/trainlist.txt-Mmodel/hmm0-Hmodel/proto/hmm_yes-lyes-Ldata/train/labyesNoHTKConfigurationParametersSetnitialisingHMMyes.一States:2345(width)Mixess1:1111(39)NumUsing:0000ParmKind:MFCC_D_A_0Numberofowners=1SegLab:yesmaxIter:20epsilon:0.000100minSeg:3Updating:MeansVariancesMixWeights/DProbsTransPro

38、bs-systemisPLAIN5ObservationSequencesLoadedStartingEstimationProcessteration1:AverageLogP=-3840.66357teration2:AverageLogP=-3785.84644Change=54.81709teration3:AverageLogP=-3783.84375Change=2.00269teration4:AverageLogP=-3783.55591Change=0.28789teration5:AverageLogP=-3783.55591Change=0.00005Estimation

39、convergedatiteration6Outputwrittentodirectorymodel/hmm0NoHTKConfigurationParametersSetF:dialecthtkHTKworkYesNo>Hinit-A-D-T1-Stest/trainlist.txt-Mmodel/hmm0-Hmodel/proto/hmm_sil-lsil-Ldata/train/labsilHinit-A-D-T1-Stest/trainlist.txt-Mmodel/hmm0-Hmodel/proto/hmm_sil-lsl-Ldata/train/labsilNoHTKConf

40、igurationParametersSetnitialisingHMMsil.States:2345(width)Mixess1:1111(39)NumUsing:0000ParmKind:MFCCDA0Numberofowners=1SegLab:silmaxIter:20epsilon:0.000100minSeg:3Updating:MeansVariancesMixWeights/DProbsTransProbs-systemisPLAINObservationSequencesLoadedStartingEstimationProcessteration1:AverageLogP=

41、-1884.75818teration2:AverageLogP=-1831.56348Change=53.19470teration3:AverageLogP=-1827.01855Change=4.54492teration4:AverageLogP=-1808.18774Change=18.83086teration5:AverageLogP=-1785.25684Change=22.93091teration6:AverageLogP=-1781.88904Change=3.36777teration7:AverageLogP=-1781.35974Change=0.52927tera

42、tion8:AverageLogP=-1781.07556Change=0.28416teration9:AverageLogP=-1781.00781Change=0.06775teration10:AverageLogP=-1780.98633Change=0.02148teration11:AverageLogP=-1780.98633Change=0.00000Estimationconvergedatiteration12Outputwrittentodirectorymodel/hmm0NoHTKConfigurationParametersSetF:dialecthtkHTKwo

43、rkYesNo>这样就实现了分别对三个模型hmm_yes,hmm_no,hmm_sil进行初始化。初始化成功后,初始化了的三个模型便被保存在了hmm0文件夹中:其实到这里,初始化已经完成了,由于后面需要文件vFloors来又tHMM进行训练,所以还要使用Hcompv来进行一次训练,以得到此文件。HCompvHCompv工具用来对模型进行平坦初始化。HMM模型的每个状态给定相同的平均向量和变化向量:在整个训练集上全局计算而得。一般初始化命令行形式如下:HCompvA-DT1Strainlist.txtMmodel/hmm0flatHmodel/proto/hmmfilef0.01nameo

44、fhmm我们来解释一下:nameofhmm,hmm见HInit中的解释。model/hmm0flat:HMMI型输出目录,与HInit必须保持不同,避免覆盖。说明:label选项也可以使用。这种情况下,对全局平均和变化向量的估值就仅基于训练集的相应的标签部分。我们不使用HCompv来初始化我们的模型(已经使用了HInit)。尽管它也输出了初始化后的HMM模型,我们只使用与初始化模型一起输出一个名称为vFloors的有趣的文件,它包含乘以因子的全局变化向量(见列表4)。这个因子可通过-f选项来设置(这里是0.01)。可变基底宏文件vFloors如下所示:1-工-1-5341-51G?B»

45、;=TO-1'U'14iSklbrj11111,'由varfloorl二二二£91. 993330e-00ll2.52O051.e-OQiL2.24G2l6e-0Jl4.LLiABLeOOl3.14OG92t-OOL2. 3.靖OMTe-UU3.5S5462E-0013l5L291Ce-0D_三,能"MQeTM3. tjy490De-001d.2314£.&r0U12:25?Ot0019L3197ULeJD39.24b?71c-0031.j,1,55to43e-D2LaO0S8e-OO22. OC093Se-0022.1T10220

46、021.637317e-0021.51200ee-OD2k674SO.1G-0029.0Ltl4Be-LC31.34?&e9e-0031.4H490&e-C03L.4a529teJ032.26'SiJe-003Z*3D134Be-00S2.U7791e-OOS3L10012-003SL5L3490e-OD31箱5芯丸7皖3. 4i60a2e-OO32.061OT7OOS3.D315S5e-003L.2S3t?7e<1D31DC9i®,l存储在varFloorl中的值(称作可变基底宏),在后面训练过程中用作估计的变化向量的基底。在训练迭代过程中,与特定HM

47、M模型状态相关联的训练帧数可能很低。该状态的估计变化值会很小(如果只有一个可用的训练帧的话,变化甚至为空null)。这种情况下,可用基底来替代,避免变化值趋于极小(甚至产生计算错误)。这里,我们将对HMM原型之一使用HCompv一次,来计算上述varFloorl宏。相应的vF100rs文件输出到目录model/hmmOflat/。根据上面的解释,我们知道,使用Hcompv命令彳4到vFloors文件我们需要做两件事:1 .创建HMM模型输出目录model/hmmOflat(准备工作中已经创建)。2 .使用如下命令,执行初始化。HCompv-A-D-T1-Stest/trainlist.txt-

48、Mmodelhmm0hmm1-Hmodel/proto/hmm_yes-f0.01yesBH匚indDW5systennJ2cmd.exeERHOH*201?JHCompV"VariaocoflooihFATAiLERROR-Tei-ninjitinHCnnpvF:1sMiialcGtMhtkMlMworlkWejaNo?HCDEi。HA-D-T1Tlut.txtHnodclMinn0xhffiiril-HmodeVpi-aco6=f。01y”IICewA-D-T1-StBst/tr-Aioliist.1stMffMadnIHa-fR.HIwaNipHTKCumfigiupatiar

49、ikFainaneSetCaulacIngFlxodUai"iAfiiCCiHHMIPrvtuCjjiw:yuuL科h*l:Hnn»NkinStreams;1UpdatIngrflean:HuTa.rEtDlretifc£nodlrJlMvimldSJirnriilll!y(Ispeechfrarie心仁11皿1屯£*壮UpdatIn3iHMMOiitpint*rritt«riitpdirc-rtoi-ymdrUnrfInornnicrosnutputtnfi1-cmodelhmmRzhrtnlZwFlonrsNoHlHCunfIgiurdti

50、DinP&tMHetE踊SetP二MlUlvvCXhLkxHTItXULkFN>.脸涧排食输入法半;读者可能有注意到,图中命令的输出目录为hmml,这是因为我对Hmm三个原型都进行了一次Hcompv来观察生成的初始化文件。放在不同文件夹下避免覆盖。生成的三个vFloors文件是完全一致的。之后我手动将vF100rs文件移动到model/hmm0flat下,并清空hmm1,hmm2,hmm3文件夹,待后续步骤使用。读者仅需按照我上面所述的两个步骤进行操作即可。六.模型训练初始化成功后,就可以进行训练了,训练过程的描述如下图:户68好中一*hutuhsation-*_:西小48个广学

51、比icOProceduneTtst/.工_i什1Falx由青曲!p江格E由口FT图4完整的训练过程模型参数的估计采用HRest工具,调用该工具完成一轮参数的重新估计,具体命令行如下:HRest-A-D-T1-Strain1ist.txt-Mmodel/hmmi-HvFloors-Hmodel/hmmi-1/hmmlabel-Llabel.dirnameofhmm我们来解释一下:trainlist.txt文件包含所有用于训练的mfcc特征文件列表model/hmmiHMM1型的输出目录,i从1开始,每次迭代加1vFloors由HComp性成的最小方差值的文件hmmfile是名字为nameofhm

52、m勺HM限型文件,放在model/hmmi-1(hmmi-1代表上一次迭代使用的输出目录,作为这一次迭代使用的输入目录,每次迭代都会生成模型文件和vFloors)abel训练语料中的标签(yes,no,sil)abel_dir是存放标注文件(.lab)的目录nameofhmm要训练的HM限型的名字(yes,no,sil)对于每个要训练的HMM程序可输出数据的似然值。change量度标示收敛性。就该停止了。每个HMMVFlOOfBr.uruoa ownTriBOfCo即 IBrrmn*HR«9t模型,整个训练过程需要迭代多次,通常 5-10轮次。每次迭代时,HRest每次, HRest

53、迭代(即当前再估计迭代中的迭代)显示在屏幕上,通过一旦这个量度值不再从一个HRest迭代到下个迭代减少(绝对值),过程都要重复这个过程N次,在我们的例子中,2或3次再估计迭代就足够了。最终的单词模型存储在:hmm3hmm_yes, hmm2hmm_no, hmm1hmm_sil根据上面的解释,我们知道,使用 HRest命令得到最终的HMM模型我们需要做两件事:1 .创建每次迭代使用的输出目录:在 model下创建文件夹hmm1 , hmm2 , hmm32 .使用如下命令进行训练HRest -A -D -T 1 -S test/trainlist.txt -M model/hmm1 -H mo

54、del/hmm0flat/vF100rs -H model/hmm0/hmm_yes -l yes -L data/train/lab yes回车,实现对模型 yes 的第一次迭代优化,使用如下命令进行第二次:HRest -A -D -T 1 -S test/trainlist.txt -M model/hmm2 -H model/hmm0flat/vF100rs -Hmodel/hmm1/hmm_yes-lyes-Ldata/train/labyes回车,实现对模型yes的第二次迭代优化,使用如下命令进行第三次:HRest-A-D-T1-Stest/trainlist.txt-Mmodel/

55、hmm3-Hmodel/hmm0flat/vF100rs-Hmode1/hmm2/hmm_yes-lyes-Ldata/train/labyes回车。这样我们就完成了对模型hmm_yes的训I练,并保存在了hmm3文件夹中。对模型hmm_no和hmm_sil的训练同上,只需替换命令中yes的部分即可。如上所述命令是近乎每一个使用了vFloors文件的教程中都使用的。然而我在实际实验过程却无法按此命令顺利执行。报错如下:查看htk-error-booK:ernopm7032Optionmismatch'AllHMMsinaparticularsetmusthaveconsistentoptions.查看htk源码:/*CheckOptions:checkthatoptionsaresetingivenHMMset*/staticRetur

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论