选自: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. nginx配置文件详解( 看着好长,其实不长,看了就知道了,精心整理,有些配置也是没用到呢 )

    user www www; #定义Nginx运行的用户和用户组        worker_processes ; #nginx进程数,建议设置为CPU核数2倍. error_log var/log/ ...

  2. nginx basic auth 登陆验证模块

    #1. 新建一个pw.pl文件专门用来生成密码 #!/usr/bin/perl use strict; my $pw=$ARGV[0]; print crypt($pw,$pw)."\n&q ...

  3. Exception Handling in ASP.NET Web API webapi异常处理

    原文:http://www.asp.net/web-api/overview/error-handling/exception-handling This article describes erro ...

  4. The method below converts an array of objects to a DataTable object in C#.

    http://www.c-sharpcorner.com/blogs/dynamic-objects-conveting-into-data-table-in-c-sharp1 public stat ...

  5. Python之with语句

    Python之with语句 在Python中,我们在打开文件的时候,为了代码的健壮性,通常要考虑一些异常情况,比如: try: ccfile = open('/path/data') content ...

  6. hibernate4中使用Session doWork()方法进行jdbc操作(代码)

    Hibernate3.3.2版本中getSession().connection()已被弃用,hibernate4中官方推荐使用Session doWork()方法进行jdbc操作 首先看看Work接 ...

  7. Django动态下载文件

    前台提交查询条件,下载符合条件的EXCEL数据文件,后端视图中使用 xlwt 库来返回,如: objs = Units.objects.all() # 创建 Workbook 时,如果需要写入中文,请 ...

  8. [设计模式] javascript 之 桥接模式

    桥接模式说明 定义:分离抽象化与实现化,使之可以自由独立的变化: 说明:由于软件环境需求原因,使得类型抽象具有多种实现以自身变化定义等情况,这使得我们要分离抽象实现与具体实现,使得抽象化与实现化解耦, ...

  9. plt和got

    最近在学习linux高级调试技术.下面就动态库连接这块做了一个实验 首先理解下plt是procedure linkage table,got是global offset table.got表中存放的是 ...

  10. Ubuntu 14 如何打开 .chm格式文档?

    好多手册是.chm格式,Ubuntu是需要安装第三方软件才能打开.chm格式文档,操作方式如下: 到“软件中心” -> 搜索“xchm”,并安装 -> 右键某个.chm文档,选择“属性” ...