应用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 .\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:数据准备的更多相关文章
- 应用HTK搭建语音拨号系统3:创建绑定状态的三音素HMM模型
选自:http://maotong.blog.hexun.com/6261873_d.html 苏统华 哈尔滨工业大学人工智能研究室 2006年10月30日 声明:版权所有,转载请注明作者和来源 该系 ...
- 应用HTK搭建语音拨号系统2:创建单音素HMM模型
选自:http://maotong.blog.hexun.com/6204849_d.html 苏统华 哈尔滨工业大学人工智能研究室 2006年10月30日 声明:版权所有,转载请注明作者和来源 该系 ...
- 应用HTK搭建语音拨号系统4: 识别器评估
选自:http://maotong.blog.hexun.com/6261890_d.html 苏统华 哈尔滨工业大学人工智能研究室 2006年10月30日 声明:版权所有,转载请注明作者和来源 该系 ...
- HTK搭建语音拨号系统实验材料下载
选自:http://maotong.blog.hexun.com/6267266_d.html 压缩包包括全部的配置文件,脚本文件,必备的模型文件和实验手册. 全部实验材料的下载链接: 1 http: ...
- SLAM+语音机器人DIY系列:(五)树莓派3开发环境搭建——1.安装系统ubuntu_mate_16.04
摘要 通过前面一系列的铺垫,相信大家对整个miiboo机器人的DIY有了一个清晰整体的认识.接下来就正式进入机器人大脑(嵌入式主板:树莓派3)的开发.本章将从树莓派3的开发环境搭建入手,为后续ros开 ...
- 如何使用laravel搭建后台登录系统
今天想用laravel搭建一个后台系统,就需要最简单的那种,有用户登录系统,试用了下,觉得laravel的用户登录这块做的还真happy.当然,前提就是,你要的用户管理系统是最简单的那种,就是没有用户 ...
- 超强教程:如何搭建一个 iOS 系统的视频直播 App?
现今,直播市场热火朝天,不少人喜欢在手机端安装各类直播 App,便于随时随地观看直播或者自己当主播.作为开发者来说,搭建一个稳定性强.延迟率低.可用性强的直播平台,需要考虑到部署视频源.搭建聊天室.优 ...
- 基于HTTP Live Streaming(HLS) 搭建在线点播系统
1. 为何要使用HTTP Live Streaming 可以参考wikipedia HTTP Live Streaming(缩写是 HLS)是一个由苹果公司提出的基于HTTP的流媒体 网络传输协议.是 ...
- 使用monit搭建一个监控系统
上周用monit搭建或者说定制了一个监控系统,来监控服务器发生事情.当然了主要是监控异常,因为我们的产品属于服务器类型,很多进程都daemon,要不停的运行.我们搭建监控目的不过是出现问题能够及时的知 ...
随机推荐
- __cdecl和__stdcall
MSVC在编译C/C++程序的时候,默认采用__cdecl调用约定来编译.__stdcall是Win32 API函数的默认调用规约. Calling Convention Internal* MSVC ...
- Unity逻辑热更新
http://www.xuanyusong.com/archives/3075 http://www.unitymanual.com/thread-36503-1-1.html http://www. ...
- xcopy
xcopy "$(ProjectDir)Admin" "$(SolutionDir)模块\CanDoo.Admin.WebHost\Admin" /e/h ...
- autofac获取全局Container
_UserService = ((IContainerProviderAccessor)HttpContext.Current.ApplicationInstance).ContainerProvid ...
- Lua弱引用table
弱引用table 与python等脚本语言类似地,Lua也采用了自动内存管理(Garbage Collection),一个程序只需创建对象,而无需删除对象.通过使用垃圾收集机制,Lua会自动删除过期对 ...
- ImageTragick Exploit & Fix
ImageMagick是一款广泛流行的图像处理软件,有无数的网站(国内国外都有)使用它来进行图像处理,本周二,ImageMagick披露出了一个严重的0day漏洞,此漏洞允许攻击者通过上传恶意构造的图 ...
- HDInsight 路径问题
HDInsight中..上传文件的路径是要区分大小写的.. 很变态吧.. 所以项目中要求全部路径使用小写..
- gitingore
**/.DS_Store node_modules/ logs/*.log views/dir/*.tpl(视图文件后缀)
- Mac截图快捷键
Shift+Command+3 截取全屏幕至桌面 Shift+Command+4 截取部分屏幕至桌面 Shift+Command+4+空格 截取窗口或原件至桌面 Shift+Command+4 然后E ...
- 使用idea开发Springmvc
使用IntelliJ IDEA开发SpringMVC网站(一)开发环境 http://my.oschina.net/gaussik/blog/385697?fromerr=A4EKE0Ix idea1 ...