• 应用HTK搭建语音拨号系统1:数据准备


    选自:http://maotong.blog.hexun.com/6204849_d.html

    应用HTK搭建语音拨号系统--数据准备

    苏统华

    哈尔滨工业大学人工智能研究室

    2006年10月30日

     

    声明:版权所有,转载请注明作者和来源

    该系统能够识别连续说出的数字串和若干组姓名。建模是针对子词(sub-word, eg. 音素),具有一定的可扩充性。当加入一个新名字时,只需修改发音词典和任务语法即可。模型为连续混合高斯输出,运用语音决策树聚类形成的绑定状态式三音素。

    1. 数据准备

    需要录制训练数据和测试数据。为进行校准,还需要数据的标注文本。这里用任务语法(task grammar)产生真值文本(ground truth)。为了处理训练数据,需要定义一个语音集合和一个字典用以涵盖训练和测试数据中涉及的单词。

    [step 1]任务语法定义

    任务语法以包含变量的正则表达式形式定义,存储在文件gram里:

    文件名:gram

    $digit = ONE | TWO | THREE | FOUR | FIVE |

           SIX | SEVEN | EIGHT | NINE | OH | ZERO;

    $name = [ SUE ] LAW |

           [ JULIAN ] TYLER |

           [ DAVE ] WOOD |

           [ PHIL ] LEE |

           [ STEVE ] YOUNG;

    ( SENT-START ( DIAL <$digit> | (PHONE|CALL) $name) SENT-END )

    上面的语法是高层表示,必须通过HParse转成HTK可用的底层表示。底层表示存于文件wnet中:

    HParse gram wdnet

    文件名:wdnet

    VERSION=1.0

    N=31   L=62  

    I=0    W=SENT-END           

    I=1    W=YOUNG              

    I=2    W=!NULL               

    ……             

    J=0     S=2    E=0   

    J=1     S=16   E=0   

    ……  

    J=61    S=0    E=29  

    [step 2]字典定义

    此例中利用BEEP语音字典,除去其中的重音符,并在每个发音后加入sp(short pause,小停顿)。如果有哑音标志,就用MP命令把sil和sp合并成sil。这些处理命令放在global.ded编辑脚本中:

    文件名:global.ded

    AS sp

    RS cmu

    MP sil sil sp

    执行HDMan生成与任务相关的发音词典dict1:

    HDMan -m -w .listswlist -n .listsmonophones1 -l dlog .dictdict1 .dicteep .dict ames

    上面的names文件是手工制作的专有人名的发音(包括SEND-START,SEND-END),文件wlist是出现在任务语法中的所有单词的有序列表,文件monophones1是用到的音素的列表,dlog为参数文件。

    注1:实际上,这里应该手工修改dict1,为SENT-END 和SENT-START加上无输出标志,为了展示队后面步骤地影响,这里故意不添加。

    文件名:.dictdict1

    CALL            k ao l sp

    DAVE            d ey v sp

    DIAL            d ay ax l sp

    EIGHT           ey t sp

    FIVE            f ay v sp

    FOUR            f ao sp

    FOUR            f ao r sp

    JULIAN          jh uw l ia n sp

    JULIAN          jh uw l y ax n sp

    LAW             l ao sp

    LEE             l iy sp

    NINE            n ay n sp

    OH              ow sp

    ONE             w ah n sp

    PHIL            f ih l sp

    PHONE           f ow n sp

    SENT-END        sil

    SENT-START      sil

    SEVEN           s eh v n sp

    SIX             s ih k s sp

    STEVE           s t iy v sp

    SUE             s uw sp

    SUE             s y uw sp

    THREE           th r iy sp

    TWO             t uw sp

    TYLER           t ay l ax sp

    WOOD            w uh d sp

    YOUNG           y ah ng sp

    ZERO            z ia r ow sp

    文件名:.dict ames

    DAVE            d ey v

    JULIAN  jh uw l y ax n

    JULIAN  jh uw l ia n

    LAW                     l ao

    LEE               l iy

    PHIL              f ih l

    SENT-END    [] sil

    SENT-START       [] sil

    STEVE           s t iy v

    SUE               s uw

    SUE               s y uw

    TYLER          t ay l ax

    WOOD          w uh d

    YOUNG         y ah ng

    为了避免在dlog里出现烦人的wanning,那就在names和beep同一目录下分别建立同名的编辑脚本,内容为空即可。

    文件名:names.ded

    文件名:beep.ded

    [step 3]录制语音数据

    HSGen工具可以生成符合task grammar的句子,用来指导录音(HTK book 里叫sentence prompts):

    HSGen -l -n 140 wdnet .dictdict1>.labels rainprompts

    HSGen -l -n 15 wdnet .dictdict1>.labels estprompts

    根据上述指令文件,录制相应的140个训练用语音数据文件和15个测试用语音数据文件。一个录制的例子如下:

    HSLab .dataTrainspeechS0001

    注2:随本文的压缩包没有包括这些数据文件,但包括了它们对应的特征文件,所以对整个实验没有什么影响。

    [step 4]标注数据,得到真值文件

    Perl脚本prompts2mlf可以把录音文本截成单词级真值文件。例如:

    perl .scriptsprompts2mlf .labels rainwords.mlf .labels rainprompts

    perl .scriptsprompts2mlf .labels estwords.mlf .labels estprompts

    标注编辑器HLEd可把单词级真值文本(word level MLF)转成音素级真值文本(phone level MLF):

    HLEd -l * -d .dictdict1 -i .labelsphones0.mlf mkphones0.led .labels rainwords.mlf

    编辑脚本mkphones0.led的内容如下:

    文件名:mkphones0.led

    EX

    IS sil sil

    DE sp

    EX命令表示按照字典dict1进行展开,IS表示在每个话语的前后插入标志,DE一行表示phones0.mlf中单词间不用sp隔开。

    [step 5]数据的特征提取

    这里所用特征为MFCC。工具HCopy可以实现提取特征的工作。

    HCopy -T 1 -C .configconfig1 -S codetr.scp

    其中,配置文件config1要设置转换参数,另一脚本文件(script file)codetr.scp指定训练及输入和输出文件列表。执行结果,HCopy对codetr.scp文件左侧的语音数据按config的配置提取特征并存入codetr.scp文件右侧特征文件中。

    文件名:.configconfig1

    # Coding parameters

    TARGETKIND = MFCC_0_D_A

    TARGETRATE = 100000.0

    SAVECOMPRESSED = T

    SAVEWITHCRC = T

    WINDOWSIZE = 250000.0

    USEHAMMING = T

    PREEMCOEF = 0.97

    NUMCHANS = 26

    CEPLIFTER = 22

    NUMCEPS = 12

    ENORMALISE = F

    对于测试数据如法炮制:

    HCopy -T 1 -C .configconfig1 -S codete.scp

    注3:由于附带的压缩包已经包括了特征文件(在.data*feature下),本步骤不用执行。

  • 相关阅读:
    node递归批量重命名指定文件夹下的文件
    nvm
    node在Web中的用途
    给flash续命(rtmp/http-flv网页播放器)
    AMR/PCM格式语音采集/编码/转码/解码/播放
    视频分析,目标跟踪应用方案梳理
    srs-librtmp pusher(push h264 raw)
    srs
    nginx-rtmp/http-flv
    Introduction to Sound Programming with ALSA
  • 原文地址:https://www.cnblogs.com/welen/p/3781882.html
Copyright © 2020-2023  润新知