EasyTraining模型训练流程文档
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
安徽中科大讯飞信息科技有限公司
Anhui USTC iFlyT ek CO.,LTD.
The EasyTraining Toolkit
系统概览及流程指南
科大讯飞版权所有(2006)
目录
目录 0
一.系统概述 (1)
二.上下文相关(Context-dependent)模型的训练流程 (3)
2.1 上下文无关模型的训练 (4)
2.1.1 用CompV估计全局方差 (4)
2.1.2 用ModelGen克隆monophone (5)
2.1.3 分割训练数据列表 (5)
2.1.4 用HLEd将词级MLF文件转为音素级MLF文件 (5)
2.1.5 HERest训练不带sp的monophone模型 (6)
2.1.6 在monophone中加入停顿模型sp (7)
2.1.7 HERest训练带sp的monophone模型 (8)
2.1.8 校正训练数据 (10)
2.1.9 用校正后的数据训练模型 (11)
2.2 克隆上下文相关(context-dependent)模型 (13)
2.3 状态绑定上下文相关模型 (15)
2.4 分裂高斯 (16)
2.5 生成最终模型 (18)
三.右相关声母及带调韵母模型的训练流程 (19)
3.1 无关模型的训练流程 (19)
3.2 克隆右相关声母及带调韵母模型 (19)
3.3 分裂高斯 (20)
3.4 得到最终模型 (20)
四.HTK声学模型测试 (21)
4.1 HParse生成语法网络 (21)
4.2 HVite识别 (21)
4.3 HResults计算识别率 (22)
五.版本信息 (23)
一.系统概述
The EasyTraining Toolkit是一个以HTK为基础而开发的用于大词汇量连续语音识别系统模型训练的工具包,目前的版本支持上下文相关(context-dependent)模型、右相关声韵母模型及带调模型的训练,两种模型只需要配置不同的基础文件即可。
EasyTraining统一MLE训练的框架图如下图所示:
图1.1 Easytraining 统一MLE训练框架图
The EasyTraining Toolkit的特点:
⏹统一框架
⏹跨平台(WIN32、Linux兼容)
⏹较少基础文件准备
⏹断点恢复
⏹训练数据检查
⏹决策树聚类状态数指定
⏹清除中间文件
⏹并行化
⏹灵活配置
表1 上下文相关模型基础文件列表
表2 右相关声母及带调韵母模型基础文件列表:
二.上下文相关(Context-dependent)模型的训练流程
本节以Tri-phone模型训练为例,介绍用HTK对上下文相关(context-dependent)模型的训练流程,Tri-phone单元都是基于基准的上下文无关的音素单元(即Mono-phone)进行跨词的上下文扩展所得。
其中sil为上下文无关(context independent)的模型,sp为相关可穿越(context free)模型。
模型命名规则为:左相关-模型+右相关,例如_a-a+b。
下图为声学模型训练过程的基本流程:
图2.1 Easytraining基本训练流程图
从图中可以看出,整个模型训练的过程可以分成下面四个部分:
第一部分:上下文无关模型
第二部分:上下文相关模型
第三部分:决策树状态绑定模型
第四部分:最终测试模型
下图为声学模型训练的详细流程图:
图2.2 Easytraining声学模型训练的详细流程图
2.1 上下文无关模型的训练
2.1.1 用CompV估计全局方差
HcompV计算出所有训练数据的全局均值和方差,并用全局均值和方差取代原型文件proto中的0均值和1方差,生成global模型作为下一步克隆时的原型模型;同时,将全局方差的0.01倍设为方差下限并输出vFloor方差下限文件。
命令行如下:
1. -C $g_cf_Mono 为配置文件config;
2. -S $g_scp_Training 为所有训练数据全目录文件名列表文件train.scp;
3. $g_prt_Proto 为定义HMM结构的原型文件proto;
输出(目录:$g_dir_Mono/Init)文件:
1. -o global 输出为全局均值和方差的MMF文件global;
2. vFloor 输出下限方差文件vFloor;
2.1.2 用ModelGen 克隆monophone
ModelGen 将上一步得到的global 作为原型模型,克隆出每一个音素(phone )的HMM 模型,并把所有克隆出来的音素模型参数保存在MMF 文件“hmm0/MODELS ”中。
1. -H $g_dir_Mono/Init/global 为上一步得到的global 文件;
2. -v $g_dir_Mono/Init/vFloors
上一步得到的vFloors 文件;
3. $g_cmd_EasyTraining_ModelGen 编辑命令文件(包含要克隆的
phone 及其状态数); 输出文件: 1. -M $g_dir_Mono/Init/hmm0/MODELS
克隆后包含所有音素模型的MMF 文件;
2.1.3 分割训练数据列表
SplitScripts 将所有训练语音的全路径列表文件$g_scp_Training 分割成$g_nSplit 等份,用于在下一步分别训练模型乃至实现并行化。
命令行如下:
参数:
1. $g_nSplit
需要分割的数量;
输入文件:
1. $g_scp_Training
待分割的全部训练语音的全路径列表文件;
输出文件: $g_scp_Training.1,$g_scp_Training.2,…,$g_scp_Training. $g_nSplit 。
为分割成$g_nSplit 等份后每一部分数据的路径列表文件名。
2.1.4 用HLEd 将词级MLF 文件转为音素级MLF 文件
HLEd 将基于词的MLF (Master Label File )标注文件转为基于音素的MLF 标注文件;同时,生成不带sp 的音素列表文件$hmmlist_mono_sp 。
命令行如下:
1. -d $g_dict_Mono
音素词典文件;
2. $g_cmd_HLEd_Word2Mono_nosp 由词转为音素的编辑命令文件;
3. $g_mlf_Word 基于词的MLF 标注文件; 输出文件: 1. -i $g_dir_Mono/MLF.mono.nosp
不含sp 的音素标注MLF 文件;
2. -n $g_hmmlist_mono_nosp
不含sp 的音素列表文件;
2.1.5 HERest训练不带sp的monophone模型
HERest对训练数据进行训练,得到不带sp的monophone模型。
这个过程可以跳过,即可以直接训练带sp的模型。
如果要跳过,直接设置全局布尔变量$g_bTieSilSp即可(流程可见图2.3)。
训练过程分两步进行训练,首先,对每一个已经分割好的训练语音列表文件$g_scp_Training.i(i表示第i个列表文件)中的语音特征都要进行训练。
命令行如下:
1. -p $j 当j>0时,进行并行训练,对每一部分训练数据会产生一个HER.acc文件;
当j=0时,读取所有HER.acc文件,对所有训练结果进行汇总;
2. $g_strBinaryFlag 二进制标志,如果值为“-B”,表示输出存储为二进制文件;
输入文件:
1. -C $g_cf_Mono 配置文件config;
2. $g_dir_Mono/Init/hmm$k/MODELS 每轮迭代训练前的MMF文件;
3. -S $g_scp_Training.$j 第j个训练数据列表文件,表示这一次训练只用
-S $g_scp_Training.$j中的数据进行训练;
4. -I $g_dir_Mono/MLF.mono.nosp 用于训练的MLF音素标注文件(由第3步生成);
5. $g_hmmlist_mono_nosp 用于训练的音素列表文件(由第3步生成);
输出文件:
1. -M $g_dir_Mono/Init/hmm$i 指定第i轮训练时,产生的HER.acc文件存储目录;上述训练完成后,再用所有数据进行一次训练:
命令行如下:
1. -p $j $j=0,表示要读取所有HER.acc文件,对所有训练数据进行训练;
2. $g_strBinaryFlag 二进制标志,值为“-B”,表示输出存储为二进制文件;
3. $g_strPruning “-t 250.0 150.0 1000.0 –v 0.00001 –w 1.0”;
-v 0.00001表示方差下限;-w 1.0表示混合高斯分布权重的门限为1.0*MINMIX,权重小于该值时置为零;-t参数是为了加快训练速度设置的,一般形式为-t f [i l]这里f表示计算后向概率时,如果其(对数)值与最大的后向概率值的差值超过f,则忽略这些后向概率值,同样,只计算有有效后向概率的前向概率,此外,如果前向后向概率的乘积与总的概率之比
小于某一门限时,这些前向后向概率被忽略,如果对某句话来说,f 这个门限太小,则会导致处理该句话时失败,此时如果i ,l 两个参数同时被设置,则门限提高i ,重新处理该句话,直至门限到达l 。
输入文件:
1. -C $g_cf_Mono -H $g_dir_Mono/Init/hmm$k/MODELS $g_hmmlist_mono_nosp 同前;
2. $g_dir_Mono/Init/hmm$i/HER$j.acc 所有的HER.acc 文件。
输出文件:
1. -s $g_dir_Mono/Init/hmm$i/occ.0
训练过程产生的统计文件occ.0;
2. -M $g_dir_Mono/Init/hmm$i
第i 轮训练完成后,得到新的MMF 文件MODELS 的存储目录;
2.1.6 在monophone 中加入停顿模型sp
经过前面几步已经得到了在编辑命令文件$g_cmd_EasyTraining_ModelGen 中列出的所
有音素的monophone 模型,这一步将停顿模型sp 加入到monophone 模型中去。
首先,用HHEd 把sil 模型加入2-4、4-2的状态跳转,并把其中间状态设置为一个宏”silst ”。
命令行如下:
1. -C $g_cf_Mono 配置文件config ;
2. -H $modelnow
前面训练好的模型
MODELS(MMF 文件); 3. $g_hmmlist_mono_nosp 由第3步产生的音素列表文件;
4. $g_cmd_HHEd_Fixsil
对sil 模型进行处理的编辑命令文件;
输出文件:
1. –w $g_dir_Mono/FixSilSp/MODELS.fixsil 对sil 模型处理之后的MODELS(MMF
文
件)
其中,$g_cmd_HHEd_Fixsil 的编辑命令内容为:
其次,用HLEd 得到含有sp 模型的音素列表文件及音素标注文件,命令行与第3步基本相同,不同在于第3步得到的是不带sp 的音素列表文件及音素标注文件。
命令行如下:
输入文件:
1. -d $g_dict_Mono
音素词典文件;
2. $g_cmd_HLEd_Word2Mono_sp 由词转为音素(含sp )的编辑命令文件;
3. $g_mlf_Word
基于词的MLF 标注文件;
输出文件:
1. -i $g_dir_Mono/MLF.mono 包含sp的音素标注文件;
2. -n $g_hmmlist_mono_sp 包含sp的音素列表文件;
下面是$g_cmd_HLEd_Word2Mono_nosp和$g_cmd_HLEd_Word2Mono_sp的内容比较:
完成这两个步骤后,就得到了带sp的monophone模型,接下来要结这一模型进行训练。
2.1.7 HERest训练带sp的monophone模型
这一阶段的训练过程与第5步训练不带sp的monophone模型基本上是一样的。
唯一不同的就是所用的音素标注文件(MLF)和音素列表文件(hmmlist)这两个文件不一样,第5步用的是$g_dir_Mono/MLF.mono.nosp 和$g_hmmlist_mono_nosp,而现在这一步用的是$g_dir_Mono/MLF.mono和$g_hmmlist_mono_sp。
经过迭代训练后,得到了训练好的带sp的mono-phone模型MODELS,上述2.1.1~2.1.7得到mono-phone模型的整个过程可以用下面的流程图来表示:
图2.3 上下文无关的mono-phone训练流程图
2.1.8 校正训练数据
为了防止在训练数据集中出现对模型训练不起作用的“坏数据”,需要对训练数据进行挑选,认为“合格”的数据才能继续进入后面的模型训练。
训练数据挑选也是一步可选的步骤,设置全局布尔变量$g_bCheckScript 即可选择。
校正训练数据分三个步骤进行:
首先,对音素词典进行扩展,命令行如下:
1. $g_strNonPhoneList 值为“sil sp ”。
输入文件:
1. $g_dict_Mono
没有经过扩展的音素词典文件;
输出文件: 2. $g_dir_Mono/Align/dict.align 扩展后的音素词典文件;
其次,再对基于词的MLF 标注文件进行处理,生成词一级的、不含任何填塞模型(sil 、
sp 、noise 、garbage 等等)的MLF 标注。
该步骤通过下面两个命令行实现,
即先生成处理MLF 标注文件所必需的HLEd 编辑命令文件,命令行如下:
1. $g_strNoTiePhoneList
值为“sil sp ”;
输出文件:
1. $g_dir_Mono/Align/HLEd.MLF.align
处理MLF 文件所需的编辑命令文件;
然后,由HLEd 命令对MLF 标注文件进行处理,命令行如下: 1. $g_mlf_Word 处理前的MLF 标注文件;
2. $g_dir_Mono/Align/HLEd.MLF.align 上一命令行产生的编辑命令文件; 输出文件:
1. -i $g_dir_Mono/Align/MLF.align
处理后的MLF 标注文件;
最后,对训练数据进行Force-Alignment 。
1. -C $g_cf_Mono 配置文件config ;
2. -H $modelnow
当前模型文件;
3. -I $g_dir_Mono/Align/MLF.align 词级MLF标文件;
4. -S $g_scp_Training.$j 第j批训练数据;
5. $g_dir_Mono/Align/dict.align Multi-Pronunciation的音素词典文件;
6. $g_hmmlist_mono_sp 音素列表文件;
输出文件:
1. -i $g_dir_Mono/Align/MLF.Aligned.$j 对第j批数据测试的结果;
2. $g_dir_Mono/Align/LOG.HVite.Split.$j 测试结果日志文件;
从日志文件中,选出“合格”的训练数据(初步定为Force-Alignment能存活的文件),并保存,命令行如下:
输入文件:
1. $g_dir_Mono/Align/LOG.HVite.Split 测试结果日志文件;
输出文件:
1. $g_scp_Aligned_Training 校正后合格的训练数据列表;
2.1.9 用校正后的数据训练模型
用上一步得到的校正后的训练数据再进行训练,首先对数据分开进行训练。
命令行为:
1. -C $g_cf_Mono 配置文件config;
2. -H $g_dir_Mono/Align/hmm$k/MODELS 待训练的MMF模型文件;
3. -S $g_scp_Aligned_Training.$j 校正后的训练数据列表文件;
4. -I $g_dir_Mono/MLF.mono 包含sp的音素标注文件;
5. $g_hmmlist_mono_sp 包含sp的音素列表文件;
输出文件:
1. -M $g_dir_Mono/Align/hmm$i 第i轮训练时,产生的HER.acc文件存储目录;然后对全部数据进行汇总,命令行如下:
输入文件:
1. -C $g_cf_Mono 配置文件config;
2. -H $g_dir_Mono/Align/hmm$k/MODELS 待训练的MMF模型文件MODELS;
3. $g_hmmlist_mono_sp 包含sp的音素列表文件;
2. $g_dir_Mono/Align/hmm$i/HER$j.acc 所有的HER.acc文件;
输出文件:
1. -s $g_dir_Mono/Align/hmm$i/occ.0 训练过程产生的统计文件occ.0;
2. -M $g_dir_Mono/Align/hmm$i 第i轮训练完成后,得到新的MMF文件
MODELS的存储目录;
通过上述9个步骤就完成了整个monophone模型的训练过程,下一步将monophone模型克隆为上下文相关(context-dependent)模型。
图2.4给出了对训练数据进行检查的程序流程图:
图2.4 Force-alignment检查训练数据流程图
2.2 克隆上下文相关(context-dependent )模型
首先,用HLEd 生成上下文相关模型MLF 标注文件(下面进行上下文相关模型的训练时需要用到该文件)。
命令行如下:
1. $g_dir_Mono/MLF.mono 含sp 的monophone 音素标注MLF 文件;
2. $g_cmd_HLEd_Mono2Context HLEd
命令编辑文件;
输出文件: 1. $g_dir_Context/MLF.context
上下文相关音素标注MLF 文件; 2. $g_hmmlist_context
上下文相关音素列表文件;
其次,用MakeM2CHHEdCmd 生成从Mono-Phone 克隆到
Tri-Phone 的HHEd 命令编辑文件。
需要指出的是,此编辑文件还将各个phone 的状态转移矩阵绑在了一起。
命令行如下:
1. $g_hmmlist_context 只将该文件名作为输入参数; 输入文件: 1. $g_hmmlist_mono_nosp
不含sp 的音素列表文件; 输出文件:
2. $g_dir_Context/HHEd.Mono2Context
HHEd 命令编辑文件;
接着,通过执行HHEd 命令将monophone 模型转化为上下文相关模型。
命令行如下:
1. $g_cf_Context 配置文件config ;
2. -H $modelnow 第9步得到的monophone 模型MODELS ;
3. $g_dir_Context/HHEd.Mono2Context HHEd 命令编辑文件;
4. $g_hmmlist_mono_sp 不含sp 的音素列表文件;
输出文件:
-M $g_dir_Context/hmm0
上下文相关模型MODELS 存放目录;
最后,对得到的上下文相关模型$g_dir_Context/hmm0/MODELS进行迭代训练。
和前面训练过程一样分两步进行,即先对训练数据分开进行训练,然后再对全部数据进行训练。
对训练数据分开进行训练的命令行如下:
输入文件:
1. -C $g_cf_Context 配置文件config;
2. -H $g_dir_Context/hmm$k/MODELS 待训练的MMF模型文件;
3. -S $g_scp_Aligned_Training.$j 校正后的训练数据列表文件;
4. -I $g_dir_Context/MLF.context 上下文相关的音素标注文件;
5. $g_hmmlist_context 上下文相关的音素列表文件;
输出文件:
1. -M $g_dir_Context/hmm$i 第i轮训练时,产生的HER.acc文件存储目录;
输入文件:
1. $g_cf_Context 配置文件config;
2. -H $g_dir_Context/hmm$k/MODELS 待训练的MMF模型文件MODELS;
3. $g_hmmlist_context 包含sp的音素列表文件;
2. $g_dir_Context/hmm$i/HER$j.acc 所有的HER.acc文件;
输出文件:
1. -s $g_dir_Context/hmm$i/occ.0 训练过程产生的统计文件occ.0;
2. -M $g_dir_Context/hmm$i 第i轮训练完成后,得到新的MMF文件
MODELS的存储目录;
2.3 状态绑定上下文相关模型
首先,要生成用于绑定状态的HHEd编辑命令文件,命令行如下:
1. $g_strOutlier
2. $g_strInitTB 给定的初始TB值;
3. $g_strNoTiePhoneList 不需要绑定的音素列表;
4. $statnow 当前统计文件的文件名;
5. $g_dir_TiedContext/TREE 将要生成的决策树的文件名;
7. $g_hmmlist_tiedcontext 将要生成的绑定音素列表文件的文件名;
输入文件:
1. $g_qst_QuestionSet 问题集文件;
2. $g_cmd_EasyTraining_ModelGen 编辑命令文件(包含要克隆的phone及其状态数);输出文件:
1. $g_dir_TiedContext/HHEd.Clustering HHEd编辑命令文件;
然后,根据HHEd编辑命令文件中的命令,用HHEd进行状态绑定,命令行如下:
输入文件:
1. -C $g_cf_TiedContext 配置文件config;
2. -H $modelnow 绑定前的模型文件MMF;
3. $g_dir_TiedContext/HHEd.Clustering HHEd命令编辑文件;
4. $g_hmmlist_context 上下文相关的音素列表文件;
输出文件:
1. -M $g_dir_TiedContext/hmm0 绑定后的模型文件MMF;
2. $g_dir_TiedContext/HHEd.Tied.log 绑定的日志文件;
3. $g_dir_TiedContext/TREE 生成的决策树;
4. $g_hmmlist_tiedcontext 生成的绑定音素列表文件;
最后,检查目前所得模型的聚类状态数。
如果它不满足设定的状态数条件(目前状态数处于$g_strTiedStates正负百分之$g_strTolerance范围内),则对TB进行修改,并重新进行决策树聚类。
命令行如下:
1. $g_strTiedStates
绑定后的状态数目; 2. $g_strTolerance
输入文件:
1. $g_dir_TiedContext/HHEd.Tied.log 绑定的日志文件; 输出文件:
1. $g_dir_TiedContext/hmm0/MODELS 调整状态数目后的模型;
2. $g_dir_TiedContext/Clst.log 聚类日志文件;
2.4 分裂高斯
前面所做的各个步骤都是基于单个高斯,这一步将单个高斯逐步分裂成多个高斯。
EasyTraining 被设计成对填塞模型和普通phone 模型可以沿着不同的mixture-up path 增长高斯。
首先,通过如下命令行生成分裂高斯的HHEd 命令编辑文件:
1. $m phone 的当前高斯数;
2. $n
Nonphone 的当前高斯数;
3. $g_strNonPhoneList
填塞模型列表; 输入文件: 1. $g_hmmlist_mono_sp 含sp 的音素列表文件; 输出文件: 1. $g_dir_TiedContext/mix$m/HHEd.MixtureUp HHEd 命令编辑文件;
得到HHEd 命令编辑文件后,HHEd 按照该文件中的命令增加模型中的高斯混合数目,命令行如下:
1. -C $g_cf_TiedContext
配置文件config ;
2. -H $modelnow
当前模型文件;
3. $g_dir_TiedContext/mix$m/HHEd.MixtureUp HHEd 命令编辑文件;
4. $g_hmmlist_tiedcontext 决策树绑定后的音素列表文件;;
输出文件:
1. -M $g_dir_TiedContext/mix$m/hmm0
m 个高斯时初始MODELS 存储目录;
输入文件:
1. -C $g_cf_TiedContext 配置文件config;
2. -H $g_dir_TiedContext/mix$m/hmm$k/MODELS待训练的MMF模型文件;
3. -S $g_scp_Aligned_Training.$j 校正后的训练数据列表文件;
4. -I $g_dir_TiedContext/MLF.tiedcontext 决策树绑定后的音素标注文件;
5. $g_hmmlist_tiedcontext 决策树绑定后的音素列表文件;
输出文件:
1. -M $g_dir_TiedContext/mix$m/hmm$i 第i轮训练时,产生的HER.acc文件存储目录;
1. -C $g_cf_TiedContext 配置文件config;
2. -H $g_dir_TiedContext/mix$m/hmm$k/MODELS待训练的MMF模型文件;
3. $g_hmmlist_tiedcontext 包含sp的音素列表文件;
2. $g_dir_TiedContext/mix$m/hmm$i/HER$j.acc 所有的HER.acc文件;
输出文件:
1. -s $g_dir_TiedContext/mix$m/hmm$i/occ.0 训练过程产生的统计文件occ.0;
2. -M $g_dir_TiedContext/mix$m/hmm$i 第i轮训练完成后,得到新的MMF
文件MODELS的存储目录;
2.5 生成最终模型
首先,用MakeAllXwrdTP 生成所有测试词典中可能出现的cross word tri-phone 列表,命令行如下:
$i = @g_strContextFreePhone;
Context-Free phone, e.g., sp
$j = @g_strContextIndependentPhone; Context-Independent phone, e.g., sil 输入文件:
1. $g_dict_Test
测试用的词典文件; 输出文件: 1. $g_dir_Final/hmmlist.tmp
tri-phone 音素列表文件;
其次,生成
Addunseen 的HHEd 编辑命令文件,命令行如下:
参数:
1. $g_dir_TiedContext/TREE 决策树的文件名;
2. $g_dir_Final/hmmlist.tmp tri-phone 音素列表文件名;
3. $g_dir_Final/hmmlist.final
最终的音素列表文件名;
输出文件: 1. $g_dir_Final/HHEd.Addunseen
HHEd 编辑命令文件;
输入文件: 1. -C $g_cf_TiedContext
配置文件config ; 2. -H $modelnow
当前的模型文件;
3. $g_dir_Final/HHEd.Addunseen HHEd 编辑命令文件;;
4. $g_hmmlist_tiedcontext
上下文绑定后的音素列表文件; 输出文件: 1. $g_dir_Final/MODELS.final
最终模型文件;
三.右相关声母及带调韵母模型的训练流程
右相关声韵母及韵母带调模型的训练流程基本上与上下文相关模型的训练流程是一致的,但是比上下文相关模型要简单一些,它在训练过程中不需要进行状态绑定,这是因为这种模型本身的状态数目并不庞大。
下图为声学模型训练过程的基本流程:
图2.1 Easytraining右相关模型基本训练流程图
从图中可以看出,整个模型训练的过程可以分成下面四个部分:
第一部分:无关模型
第二部分:右相关声母及带调韵母模型
第三部分:最终测试模型
3.1 无关模型的训练流程
第一部分无关模型的训练过程和Tri-phone模型中的上下文无关模型训练过程完全一致,区别只是配置文件不同,请参见2.1-2.9。
需要指出是这里的Mono-Phone训练是不带调的。
3.2 克隆右相关声母及带调韵母模型
首先,用HLEd生成右相关带调模型的音素级MLF标注文件(下面进行上下文相关模型的训练时需要用到该文件)和右相关带调的音素列表文件。
命令行如下:
1. -d $g_dict_Mono 右相关声韵母带调模型带调字典;
2. $g_cmd_HLEd_Mono2Context HLEd编辑命令文件;
3. $g_mlf_Word 带调的词级标注文件;
输出文件:
1. -i $g_dir_Context/MLF.context 右相关带调的音素级标注文件;
2. -n $g_hmmlist_context 右相关带调的音素列表文件;
其次,通过函数MakeSYHmmList由右相关带调的音素列表文件$g_hmmlist_context生成剥离声调的上下文无关的音素列表文件$g_hmmlist_mono_sp。
命令行如下:
输入文件:
1. $g_hmmlist_context 右相关带调的音素列表文件;
输出文件:
2.$g_hmmlist_mono_sp 上下文无关的音素列表文件;
接着,函数MakeM2CHHEdCmd生成用于HHEd将mono-phone模型克隆成右相关带调模型的编辑命令文件,命令行如下:
输入文件:
1. $g_hmmlist_mono_sp 上下文无关的音素列表文件;
2. $g_hmmlist_context 右相关带调的音素列表文件;
输出文件:
1. $g_dir_Context/HHEd.Mono2Context mono转右相关的HHEd编辑命令文件;
最后,由HHEd由monophone模型克隆出右相关模型,命令行如下:
输入文件:
1. -C $g_cf_Context 配置文件config.all;
2. -H $modelnow 当前模型文件;
3. $g_dir_Context/HHEd.Mono2Context HHEd编辑命令文件;
4. $g_hmmlist_mono_sp 音素列表文件;
输出文件:
1. -M $g_dir_Context/hmm0
从而得到了单个高斯的右相关声韵母及韵母带调模型,下一步进行高斯分裂。
与训练上下文相关模型相比,没有对模型进行迭代训练和状态绑定就直接进入高斯分裂。
3.3 分裂高斯
这一部分与tri-phone模型训练中的分裂高斯完全相同,请参见2.12。
3.4 得到最终模型
与tri-phone模型训练不同在于,右相关模型不需要对分裂高斯后的模型再进行处理,而是直接将分裂高斯后的模型做为最终模型。
四.HTK声学模型测试
HTK声学模型测试过程如下图所示,首先由HParse将Grammar生成HTK可以识别的语法网络word net;接着用Hvite识别出测试数据,识别结果存放在rec.mlf中;最后由HResults 计算出识别率。
图3.1 HTK测试框架图
4.1 HParse生成语法网络
用来生成语法网络的命令行如下:
输入文件:grammar.863syllableloop
输出文件:net.863syllableloop
4.2 HVite识别
1. -H {$HMM_DIR}/MODELS.final 训练出来的最终模型;
2. -S $LIST_FILE 测试用的数据列表文件;
3. -w $NET 语法网络文件;
4. $DICT 词典文件;
5. $WORD_LIST 训练完成后最终的上下文相关的hmm.final;输出文件:
-i $OUT_MLF
输出识别结果MLF ;
参数:
1. $flags 取值为:"-p -10.0 -s 0.0 -t 250.0 150.0 1000.1"
这里-p 设置词插入的对数概率为-10.0;-s 设置语法因子为0.0;-t 250.0表示使这样的一些模型失效,这些模型的最大的对数概率值比对所有模型最大的对数概率小250.0。
4.3 HResults 计算识别率
命令行如下:
参数:
1. -e “???” sp –e “???” sil 表示计算时不考虑sp 和sil 。
输入文件:
1. –I $g_mlf_Word 参考词级标注文件;
2. $OUT_MLF
由HVite 识别出来的结果MLF ;
输出:
节数(称为删除错误),S 是替换的音节数(称为替换错误),I 是插入的音节数(称为插入错误),Corr 是只计算删除错误和替换错误的识别率,Acc 则是三种错误都计算的识别率,即:
%100%100⨯=
⨯--=N
H N
S D N Corr %100%100⨯-=
⨯---=
N
I H N
I
S D N Acc
我们通常所说的识别率是Acc 。
五.版本信息
1.0 建立EasyTraining文档Mar., 2006。