应用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,要不停的运行.我们搭建监控目的不过是出现问题能够及时的知 ...
随机推荐
- Markdown常用用法
很早之前就听过Markdown,一直没用,用过才发现,原来这么好用,迷人,就好比一位知性.大方.成熟.美丽的少妇一样深深吸引着我,特深夜把学习的笔记记录下. 引用 ">"最好 ...
- Linux下小工具使用总结
0. 前言 这篇博客仅用于记录个人在工作中用到的一个小工具,后续用到别的会再补充. 1. Tmux 终端分用器(multiplexer),可以在一个屏幕上创建多个终端,这个工具也可以用于结对编程. 个 ...
- Ubuntu如何以root身份登陆-(基于14.04版本)
1.打开terminal,输入命令 $ sudo passwd root 键入密码, 重复确认, 2.然后再次在终端模式下进入root, $ sudo -s -H 键入密码 # vi /usr/sh ...
- Lua与C的交互
Lua 与 C 的交互 Lua是一个嵌入式的语言,它不仅可以是一个独立运行的程序,也可以是一个用来嵌入其它应用的程序库. C API是一个C代码与Lua进行交互的函数集,它由以下几部分构成: 1. ...
- Windwos下常用DOS命令
1.添加用户命令: net user 用户名 密码 /add 2.将用户加入组的命令: net localgroup administrators 用户名 /add 3.在dos命令行模式下启用用户: ...
- Linux下显示ip所属位置
在linux下,要是网络出现延迟,通常我们需要分析自己到对端的服务器的网络环境 例:ping www.baidu.com traceroute www.baidu.com 通过分析来确定大概是什么问题 ...
- Why you shouldn't use Entity Framework with Transactions
Links EntityFramework This is a .net ORM Mapper Framework from Microsoft to help you talking with yo ...
- maven jar包库
如果你的项目不是maven项目,比如ant,你的项目需要某些jar包的时候可以到maven 的jar包中心库下载 地址:http://search.maven.org/ http://mvnrepos ...
- 使用CFURLCreateStringByAddingPercentEscapes进行URL编码
iOS程序访问HTTP资源时需要对URL进行UTF8编码,特酷吧在之前一直都喜欢使用NSString的stringByAddingPercentEscapesUsingEncoding方法进行编码.今 ...
- [CentOs]ip操作
摘要 在虚机里面安装好centos之后,需要知道centos的ip,方便以后连接时使用. 查看ip命令 命令 ifconfig 能查看到信息,说明已经配置过了,如果没配置过,可以通过下面的方式进行配置 ...