HTK孤立词识别简单流程

时间:2024-02-17 21:31:53

1.数据准备

 [command] HSLab one.wav

 [Rec    ] 开始录音

 [Stop   ] 录音结束

 [Mark   ] 选择需要标注的区域

 [Labelas] 输入标注 回车确定

 [Save   ] 保存

 孤立词标注3个部分:起始静音(sil) 词语音(one) 结束静音(sil)

 

 按照上述步骤,录制训练集和测试集

 

 编写EBNF文法,并生成最终的解码网络

 [command] HParse -T 1 gram.txt net.sf

   [gram.txt]

   # WORD = one | two | three;

   # ({start_sil}[$WORD]{end_sil})

 

2.特征提取

 [command   ] HCopy -C hcopy.conf -S train.mfcc.list -A -D -T 1

              -C   配置文件

              -S   特征提取的列表文件

              -A   显示命令行参数

              -D   显示配置设置

              -T 1 显示算法动作的相关信息              

 

 [hcopy.conf] 

    OURCEFORMAT    = HTK

    SOURCERATE     = 625

    TARGETKIND     = MFCC_0_D_A

 

    TARGETRATE     = 100000

    WINDOWSIZE     = 250000.0

 

    USEHAMMING     = T

    PREEMCOEF      = 0.97

    NUMCEPS        = 12

 

   注:

    SOURCERATE = 625

      #T = 62500ns = 0.0625ms = 0.0000625s, sample = 1/T = 1/0.0000625 = 16000 = 16kHz

      #T = 1250ns  = 0.1250ms = 0.0001250s, sample = 1/T = 1/0.0001250 = 8000  = 8kHz

 

    TARGETRATE = 100000

      #T = 10ms 

    WINDOWSIZE = 250000

      #T = 25ms

      # |_ _ _ _ _|

      # |   |_ _ _ _ _|

      # |   |     |

      # A   B     C

      # A-->B: TARGETRATE(frame move)

      # A-->C: WINDOWSIZE(frame length)

 [train.mfcc.list] 

    /disk2/data/train/one.wav /disk2/data/train/one.mfcc

    ....

 

3.初始化hmm模型

 [command] HInit -A -D -T 1 -i 10 -L data/train/lab/one/ -C data/hinit.conf -M hmm/hmm.0/ proto/one data/train/wav/one_*.mfcc

  [proto/one] 需要人工生成hmm的基础结构文件

 

4.多次迭代hmm模型

 [command] HRest -A -D -T 1 -i 10 -L data/train/lab/one/ -C data/hrest.conf -M hmm/hmm.1/ hmm/hmm.0/one data/train/wav/one_*.mfcc

 

 训练hmm模型,其实就是训练每个孤立词的hmm,和字典的的内容的对应关系如下:

 [dict] 

   #S_SIL sil

   #E_SIL sil

   #one   ON

   #two   TW

   #three TH

   假如字典如上,那么我们训练的hmm模型就是sil,ON,TW,TH的hmm模型,然后多次迭代,产生每个音素的hmm模型

 

 然后将所有的音素的hmm模型合并,并去除其中的

 #~o

 #<STREAMINFO> 1 39

 #<VECSIZE> 39<NULLD><MFCC_D_A_0><DIAGC>

 只在开始的位置保留一次,这样就产生了所有音素的一个hmm模型

 

5.解码及测试

 [command] HVite -A -D -T 1 -H hmm/hmm.3/hmmdef -l test/ -w netlattce/net.sf netlattce/dict netlattce/hmmlist data/test/wav/*.mfcc

  [hmmlist] 每个音素自成一行 

 

 [command] HResults -A -D -T 1 -I ref.mlf lab.lst rec.mlf

  [ref.mlf]

    # #!MLF!#

    # "*/one.lab"

    # 2300 4500000 one

    # .

  [rec.mlf]

    # #!MLF!#

    # "*/one.lab"

    # 2300 4500000 one -1245

    # .

  屏幕会输出最终的识别结果