这里请参考理解lattice,这里有介绍解码过程中如何产生lattice内容文件,以及lattice内容分析。
gunzip -c 20200921.lat.bin.gz |\
lattice-arc-post --acoustic-scale=1.0 --print-alignment=true \
exp/chain/tdnn_1a_sp/final.mdl ark:- -|\
utils/int2sym.pl -f 5 data/lang_chain/words.txt |\
utils/int2sym.pl -f 7- data/lang_chain/phones.txt | head -n 30
结果如下,字段分别表示:
音频id 帧开始序号 总帧数 后验概率 词 transition-id对齐结果 phone
这里输出了所有arc上的得分
这里可结合lattice对齐ctm到词里面对齐到ctm的结果可推断出他的帧数是怎么计算的
# ctm结果
```shell
HAO0007501-000000 1 0.00 1.05 <eps> 1.00
HAO0007501-000000 1 1.05 0.39 有人 1.00
HAO0007501-000000 1 1.44 0.00 <eps> 0.99
HAO0007501-000000 1 1.44 0.36 抢劫 1.00
HAO0007501-000000 1 1.80 0.00 <eps> 1.00
HAO0007501-000000 1 1.80 0.24 赶紧 1.00
HAO0007501-000000 1 2.04 0.00 <eps> 1.00
HAO0007501-000000 1 2.04 0.82 打电话 1.00
HAO0007501-000000 1 2.88 0.87 <eps> 0.95
# lattice-arc-post结果
HAO0007501-000000 0 42 0.9944929 有人 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3486,3485,3485,3485,3994,3993,5866 sil ii iu3 r
HAO0007501-000000 0 41 0.003502911 有 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3486,3485,3485,3485,3994,3993 sil ii iu3
HAO0007501-000000 0 47 0.0005455299 因为 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3486,3485,3485,3485,3716,7662,7661,7304,7303,4724,4723,390 sil ii in1 uu ui4 l ai2
HAO0007501-000000 0 47 0.0005311595 以为 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3486,3485,3485,3485,2970,7668,7667,7270,7269,4588,4587,390 sil ii i3 uu ui2 l ai2
HAO0007501-000000 0 56 0.0005301483 用来 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3486,3485,3485,3485,3956,3955,3955,3955,3955,4504,390,389,389,5730,5729,5729,3210,3209,3209,3209,4226 sil ii iong4 l ai2 q iang1 j
HAO0007501-000000 0 56 0.0004011184 原来 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,8046,8045,8045,7930,7929,7929,7929,7929,4638,4637,390,389,5730,5729,5729,3210,3209,3209,3209,4226 sil vv van2 l ai2 q iang1 j
HAO0007501-000000 47 9 0.001076689 来 389,5730,5729,5729,3210,3209,3209,3209,4226 q iang1 j
HAO0007501-000000 41 15 0.002624 来 3993,3993,3993,4608,390,389,389,5730,5729,5729,3210,3209,3209,3209,4226 l ai2 q iang1 j
HAO0007501-000000 41 15 0.0004426211 人 5866,5865,5865,5865,5865,2072,2071,5832,5831,5831,3210,3209,3209,3209,4226 r en2 q iang1 j
HAO0007501-000000 41 15 0.0004362891 快来 3993,4432,6982,4514,390,389,389,5730,5729,5729,3210,3209,3209,3209,4226 k uai4 l ai2 q iang1 j
HAO0007501-000000 42 17 0.8533678 抢劫 5865,5865,5865,5865,2072,2071,5832,5831,5831,3210,3209,3209,3209,4226,4225,3422,3421 en2 q iang1 j ie2
HAO0007501-000000 42 14 0.1238573 来 5865,2072,4534,4533,390,389,5730,5729,5729,3210,3209,3209,3209,4226 en2 l ai2 q iang1 j
HAO0007501-000000 42 14 0.007563361 了 5865,2072,4534,4533,3346,3345,5806,5805,5805,3210,3209,3209,3209,4226 en2 l iao4 q iang1 j
HAO0007501-000000 42 14 0.005729984 人 5865,2072,5892,5891,2072,2071,5832,5831,5831,3210,3209,3209,3209,4226 en2 r en2 q iang1 j
HAO0007501-000000 42 14 0.001364277 零 5865,2072,4534,4533,3858,3857,5688,5687,5687,3210,3209,3209,3209,4226 en2 l ing2 q iang1 j
HAO0007501-000000 42 14 0.001132725 快来 2072,4464,6982,4514,390,389,5730,5729,5729,3210,3209,3209,3209,4226 en2 k uai4 l ai2 q iang1 j
HAO0007501-000000 42 14 0.0006666106 的 5865,5865,2072,1672,2902,2901,5676,5675,5675,3210,3209,3209,3209,4226 en2 d i1 q iang1 j
HAO0007501-000000 42 14 0.0004889528 能 5865,2072,5062,5061,2184,2183,5838,5837,5837,3210,3209,3209,3209,4226 en2 n eng2 q iang1 j
HAO0007501-000000 42 14 0.0003180968 啦 5865,2072,4534,4533,36,2,5674,5673,5673,3210,3209,3209,3209,4226 en2 l a1 sil q iang1 j
HAO0007501-000000 56 3 0.1466322 抢劫 4225,3422,3421 ie2
HAO0007501-000000 59 7 0.9977787 赶紧 3421,2628,2627,584,583,4162,3762 g an3 j in3
HAO0007501-000000 59 14 0.001163401 干净 3421,2628,2627,528,527,4202,4201,3894,1586,1585,76,75,75,1452 g an1 j ing4 d a3 d
HAO0007501-000000 59 14 0.001057859 感激 3421,2628,2627,584,583,4162,4161,2918,1450,1449,76,75,75,1452 g an3 j i1 d a3 d
HAO0007501-000000 66 16 0.9973914 打电话 3761,3761,1642,76,75,75,1452,1451,3164,3163,2650,2649,2649,2649,6928,6927 d a3 d ian4 h ua4
HAO0007501-000000 66 7 0.0003835548 你 5008,2968,1504,76,75,75,1452 n i3 d a3 d
HAO0007501-000000 73 9 0.002604805 打电话 1451,3164,3163,2650,2649,2649,2649,6928,6927 ian4 h ua4
HAO0007501-000000 82 43 0.04848694 啊 6927,6927,236,74,73,73,73,73,73,73,73,73,73,73,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 aa a3 sil
再结合理解lattice这个里面的图,再深刻理解和映射一下,我们能知道这个计算是lattice图上的graph边有效得分(有效得分是越大越好,不是cost成本,图里面的比如51113:有人/-128.39是cost成本,值越小才越好)
因为上方的ctm到词的是最佳路径上ctm,我们也可以在求出最佳路径后去打印边上得分
这里可结合lattice对齐ctm到词里面对齐到ctm的结果可推断出他的帧数是怎么计算的
# ctm结果
```shell
HAO0007501-000000 1 0.00 1.05 <eps> 1.00
HAO0007501-000000 1 1.05 0.39 有人 1.00
HAO0007501-000000 1 1.44 0.00 <eps> 0.99
HAO0007501-000000 1 1.44 0.36 抢劫 1.00
HAO0007501-000000 1 1.80 0.00 <eps> 1.00
HAO0007501-000000 1 1.80 0.24 赶紧 1.00
HAO0007501-000000 1 2.04 0.00 <eps> 1.00
HAO0007501-000000 1 2.04 0.82 打电话 1.00
HAO0007501-000000 1 2.88 0.87 <eps> 0.95
gunzip -c 20200921.lat.bin.gz |\
lattice-1best --lm-scale=10 --word-ins-penalty=0.0 ark:- ark:-|\
lattice-arc-post --acoustic-scale=1.0 --print-alignment=true \
exp/chain/tdnn_1a_sp/final.mdl ark:- -|\
utils/int2sym.pl -f 5 data/lang_chain/words.txt |\
utils/int2sym.pl -f 7- data/lang_chain/phones.txt | head -n 30
HAO0007501-000000 0 42 1 有人 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3486,3485,3485,3485,3994,3993,5866 sil ii iu3 r
HAO0007501-000000 42 17 1 抢劫 5865,5865,5865,5865,2072,2071,5832,5831,5831,3210,3209,3209,3209,4226,4225,3422,3421 en2 q iang1 j ie2
HAO0007501-000000 59 7 1 赶紧 3421,2628,2627,584,583,4162,3762 g an3 j in3
HAO0007501-000000 66 16 0.9999962 打电话 3761,3761,1642,76,75,75,1452,1451,3164,3163,2650,2649,2649,2649,6928,6927 d a3 d ian4 h ua4
【注意】因为在arc上的帧开始位置和arc所占总帧数,这里arc没有打印出,所以通过arc来推算具体时间秒(chain模型的frame-shift=0.03)有点不太一致,如果有知道为什么的,烦请留言告知。
Are lattice-arc-post and lattice-to-post basically the same