Kaldi随笔(二)

今天思考的还是昨天那个问题的延续。

现在已经知道了nnet-forward输出的矩阵的每一列对应的是一个pdf,我的最终目的是想要知道每一帧(除了sil)转换成每一个phone的概率是多少。

首先我看到了Kaldi的kaldi-trunk\egs\wsj\s5\steps\nnet下有一个align.sh的脚本。

然后我找到了之前跑TIMIT实验的时候这个脚本处理后得到的ali文件,解压之后查看了一下文件内容(大概形式):

FAEM0_SI1392 2 1 4 3 3 3 3 3 3 6 5 472 471 471 471 471...... 3281 3281 3336 3335 3335 3335 2 4 3 3 3 3 3 3 6 
FAEM0_SI2022 2 1 4 3 3 3 3 3 3 3 6 5 5 5 5 5 5 5 5 2...... 406 405 405 405 405 405 2 1 1 1 1 4 3 3 3 3 6 5
每一个句子对应了一行数据,这一行的数据元素的个数是474个。

然后我又找到了当时的训练数据的特征文件,用nnet-forward跑了一遍得到矩阵文件。

矩阵文件的中一个句子的对应的矩阵的行数也是474。

与此同时,还有一个发现是ali文件里面最大的数字是4090。

4090是什么?

这就要用到上一篇博文里面提到了show-transitions工具了,当时处理模型得到的展示如下:

Transition-state 1: phone = sil hmm-state = 0 pdf = 0
 Transition-id = 1 p = 0.728349 [self-loop]
 Transition-id = 2 p = 0.27165 [0 -> 1]
Transition-state 2: phone = sil hmm-state = 1 pdf = 56
 Transition-id = 3 p = 0.809842 [self-loop]
 Transition-id = 4 p = 0.190158 [1 -> 2]
...
Transition-state 2044: phone = zh hmm-state = 2 pdf = 616
 Transition-id = 4087 p = 0.779468 [self-loop]
 Transition-id = 4088 p = 0.220532 [2 -> 3]
Transition-state 2045: phone = zh hmm-state = 2 pdf = 1949
 Transition-id = 4089 p = 0.767606 [self-loop]
 Transition-id = 4090 p = 0.232394 [2 -> 3]
可以看到,4090是最大的Transition-id。

那么现在就可以知道了,ali文件里面每一个句子后面跟着的那一行数据代表的是每一帧对应的Transition-id。

从上面那个展示中可以得知,和sil相关的Transition-id是1到6。

那么,ali文件中的那一行数据的首尾所有值为1-6的列都对应的是sil。

因而我们就可以知道我们正在处理的这个特征文件中首尾sil所占的帧数。


这个问题解决了之后,还有接下来的问题,怎么知道去除首尾代表sil的帧之后,剩下的中间段的帧,每一帧对应每一个phone的概率?

注意,这里我想要得到的是每一帧对应每一个phone的概率,因此并不是只需要概率最大的那个phone,这个已经可以有Transition-id来得到。


留待解决。





  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值