选自: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 .\lists\wlist -n .\lists\monophones1 -l dlog .\dict\dict1 .\dict\beep .\dict\names

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

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

文件名:.\dict\dict1

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\names

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 .\dict\dict1>.\labels\trainprompts

HSGen -l -n 15 wdnet .\dict\dict1>.\labels\testprompts

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

HSLab .\data\Train\speech\S0001

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

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

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

perl .\scripts\prompts2mlf .\labels\trainwords.mlf .\labels\trainprompts

perl .\scripts\prompts2mlf .\labels\testwords.mlf .\labels\testprompts

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

HLEd -l * -d .\dict\dict1 -i .\labels\phones0.mlf mkphones0.led .\labels\trainwords.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 .\config\config1 -S codetr.scp

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

文件名:.\config\config1

# 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 .\config\config1 -S codete.scp

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

应用HTK搭建语音拨号系统1:数据准备的更多相关文章

  1. 应用HTK搭建语音拨号系统3:创建绑定状态的三音素HMM模型

    选自:http://maotong.blog.hexun.com/6261873_d.html 苏统华 哈尔滨工业大学人工智能研究室 2006年10月30日 声明:版权所有,转载请注明作者和来源 该系 ...

  2. 应用HTK搭建语音拨号系统2:创建单音素HMM模型

    选自:http://maotong.blog.hexun.com/6204849_d.html 苏统华 哈尔滨工业大学人工智能研究室 2006年10月30日 声明:版权所有,转载请注明作者和来源 该系 ...

  3. 应用HTK搭建语音拨号系统4: 识别器评估

    选自:http://maotong.blog.hexun.com/6261890_d.html 苏统华 哈尔滨工业大学人工智能研究室 2006年10月30日 声明:版权所有,转载请注明作者和来源 该系 ...

  4. HTK搭建语音拨号系统实验材料下载

    选自:http://maotong.blog.hexun.com/6267266_d.html 压缩包包括全部的配置文件,脚本文件,必备的模型文件和实验手册. 全部实验材料的下载链接: 1 http: ...

  5. SLAM+语音机器人DIY系列:(五)树莓派3开发环境搭建——1.安装系统ubuntu_mate_16.04

    摘要 通过前面一系列的铺垫,相信大家对整个miiboo机器人的DIY有了一个清晰整体的认识.接下来就正式进入机器人大脑(嵌入式主板:树莓派3)的开发.本章将从树莓派3的开发环境搭建入手,为后续ros开 ...

  6. 如何使用laravel搭建后台登录系统

    今天想用laravel搭建一个后台系统,就需要最简单的那种,有用户登录系统,试用了下,觉得laravel的用户登录这块做的还真happy.当然,前提就是,你要的用户管理系统是最简单的那种,就是没有用户 ...

  7. 超强教程:如何搭建一个 iOS 系统的视频直播 App?

    现今,直播市场热火朝天,不少人喜欢在手机端安装各类直播 App,便于随时随地观看直播或者自己当主播.作为开发者来说,搭建一个稳定性强.延迟率低.可用性强的直播平台,需要考虑到部署视频源.搭建聊天室.优 ...

  8. 基于HTTP Live Streaming(HLS) 搭建在线点播系统

    1. 为何要使用HTTP Live Streaming 可以参考wikipedia HTTP Live Streaming(缩写是 HLS)是一个由苹果公司提出的基于HTTP的流媒体 网络传输协议.是 ...

  9. 使用monit搭建一个监控系统

    上周用monit搭建或者说定制了一个监控系统,来监控服务器发生事情.当然了主要是监控异常,因为我们的产品属于服务器类型,很多进程都daemon,要不停的运行.我们搭建监控目的不过是出现问题能够及时的知 ...

随机推荐

  1. 后台程序员的HTTP缓存

    1.后端程序员只需要关注请求头: if-None-Match //上一次response头中的ETag的值. 响应头: Etag //是URL的Entity Tag,用于标示URL对象是否改变,区分不 ...

  2. MySQL笔记-最简单的方法来解决找不到mysqld.sock文件的问题

    首先,环境:ubuntu 14.04,采用apt-get的方式安装的,手动安装可能路径设置稍有区别. 1.安装MySQL后,用命令行首次启动时发现找不到Mysqld.sock文件,提示: ERROR ...

  3. MSSQL数据库链接字符串Asynchronous Processing=true不是异步查询吗,怎么是缓存

    ;Asynchronous Processing=true  不是异步查询吗,怎么是缓存 <!--<add name="default" providerName=&q ...

  4. Simple colum formatting in Yii 2 GridView

    A very important widget in the business apps development is the GridView control. In this post I wil ...

  5. HttpHandler过滤请求..

    记得以前写过一篇..后来找不到了..我自己也忘记怎么弄了.. 在网上找了很多的教程..写的总有瑕疵..感觉不顺畅.. 自己来一篇.. 其实很简单.. 先建立一个类  继承并实现接口 IHttpHand ...

  6. 使用 Ant 自动生成项目构建版本

    引言 对 于多版本项目,要提供新版本来跟上新功能或缺陷报告增加的速度,并同时仍然保持可接受的质量水平,可能是一项不小的挑战.构建自动化可确保准确性和消除人 为错误的可能性,从而部分地解决此问题.自动化 ...

  7. [git]添加项目到git

    写在前面 一直在想把代码托管到git上面,一直没有去研究,最近发现自己写的demo,好多都找不到了,实在是没办法了,耐下心研究了下git.这里通过添加了自己做的demo,算是也是学习下git的操作吧. ...

  8. 在Linux下如何使用GCC编译程序、简单生成 静态库及动态库

      最近在编写的一个Apache  kafka 的C/C++客户端,,在看他写的 example中,他的编译是用librdkafka++.a和librdkafka.a    静态库编译的,,,而我们这 ...

  9. fedora配置网络

    网络配置包括3个部分: ipadd的配置 gateway profile dns profile 格式区别: 1和2的格式都是: CONFIG_ITEM = value; 3的格式是: nameser ...

  10. nginx下面server配置

    haomeiv配置 log_format www.haomeiv.com '$remote_addr - $remote_user [$time_local] "$request" ...