kaldi语音识别 chain模型的数据准备

举报
ASR-beginer 发表于 2020/07/02 11:00:32 2020/07/02
【摘要】 kaldi chain模型的数据准备

egs的可视化:

在介绍chain模型的数据准备过程之前,我们先来看一下所生成egs的具体内容:

nnet3-chain-copy-egs ark:train.cegs ark,t:text.cegs

通过以上指令可将chain模型生成的egs由二进制文件转化成文本文件。具体形式如下图所示:

  • 53995f3a79b411eaa903cb6b0881f966是utt_id,525表示是该该trunk是从该utt的第525帧开始的。

  • <NumInputs> 1 表示只有一个输入。如果采用了ivector,则此处的值变成2.

  • input <I1V> 230 表示该trunk共230帧,左偏移40帧,右偏移189帧。

  • 第三行开始到第232行,表示230帧的mfcc特征,

  • 由于chain模型采用跳帧策略,所以egs中存储的是三倍下采样后输出索引:

  • 分子lattice。WFSA结构。用于计算MMI

  • 强制对齐结果,用于计算交叉熵

egs的生成过程

step 1. 划分验证集和训练子集。利用utt2uniq,确保训练集和验证集的划分不交叉。

step 2:设置输入特征和ivector相关信息(可选)。cmvn支持apply-cmvn-online和apply-cmvn两种

step 3:获取训练数据的帧数和特征维度

step 4 :计算egs的数量

num_archives = num_frames / (frames_per_iter) + 1

egs_per_archive = num_frames / (frames_per_eg * num_archives)

step 5:设置egs和chain的配置信息。值得一提的是constrained参数默认是True。我们后期可以设置为False

step 6: 设置lattice的情况。默认是用gmm解码得到的完整lattice作为分子,主要是为了防止gmm得到的lattice不准确,有一定的容错机制。但是我感觉可以用剪枝后的结果,以提供更加准确的信息。

step 7:验证集和训练子集的egs生成。主要涉及三个函数:lattice-align-phones、chain-get-supervision和nnet3-chain-get-egs

step 8:正式生成训练集的egs。注意,此时生成的文件名叫cegs_orig.JOB.$n.ark,第一个数字表示job_id,第二个表示ark索引。

step 9:将同属一个job id的egs合并在一起。默认情况下,archive_multiple=1。该过程还伴随着shuffle和归一化的操作。normalization.fst在分母有限状态机den.fst的基础上,修改了初始概率和终止概率得到的。

由于chain模型训练过程使用的是trunk,而不是完整的句子,所以 需要修改。

step 10:删除临时文件




【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。