Htk实验笔记史上最完整版.docx

上传人:b****2 文档编号:17599186 上传时间:2023-07-27 格式:DOCX 页数:73 大小:2.30MB
下载 相关 举报
Htk实验笔记史上最完整版.docx_第1页
第1页 / 共73页
Htk实验笔记史上最完整版.docx_第2页
第2页 / 共73页
Htk实验笔记史上最完整版.docx_第3页
第3页 / 共73页
Htk实验笔记史上最完整版.docx_第4页
第4页 / 共73页
Htk实验笔记史上最完整版.docx_第5页
第5页 / 共73页
Htk实验笔记史上最完整版.docx_第6页
第6页 / 共73页
Htk实验笔记史上最完整版.docx_第7页
第7页 / 共73页
Htk实验笔记史上最完整版.docx_第8页
第8页 / 共73页
Htk实验笔记史上最完整版.docx_第9页
第9页 / 共73页
Htk实验笔记史上最完整版.docx_第10页
第10页 / 共73页
Htk实验笔记史上最完整版.docx_第11页
第11页 / 共73页
Htk实验笔记史上最完整版.docx_第12页
第12页 / 共73页
Htk实验笔记史上最完整版.docx_第13页
第13页 / 共73页
Htk实验笔记史上最完整版.docx_第14页
第14页 / 共73页
Htk实验笔记史上最完整版.docx_第15页
第15页 / 共73页
Htk实验笔记史上最完整版.docx_第16页
第16页 / 共73页
Htk实验笔记史上最完整版.docx_第17页
第17页 / 共73页
Htk实验笔记史上最完整版.docx_第18页
第18页 / 共73页
Htk实验笔记史上最完整版.docx_第19页
第19页 / 共73页
Htk实验笔记史上最完整版.docx_第20页
第20页 / 共73页
亲,该文档总共73页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Htk实验笔记史上最完整版.docx

《Htk实验笔记史上最完整版.docx》由会员分享,可在线阅读,更多相关《Htk实验笔记史上最完整版.docx(73页珍藏版)》请在冰点文库上搜索。

Htk实验笔记史上最完整版.docx

Htk实验笔记史上最完整版

Htk实验笔记——YesOrNo孤立词识别(史上最完整版哦)

[摘要:

本试验中,我们将基于HTK对象散设立建设一个2-单词辨认体系,辞汇散是{Yes,No}。

那是能够计划出去的最根基的主动语音辨认(Automaticspeechrecognition,ASR)体系。

方针:

设立建设一个伶仃词识]

  本实验中,我们将基于HTK工具集建立一个2-单词识别系统,词汇集是{Yes,No}。

这是可以设计出来的最基本的自动语音识别(Automaticspeechrecognition,ASR)系统。

目标:

建立一个孤立词识别系统,只包含yes和no两个词。

步骤:

 

A:

 创建一个语料库,确定识别基本元(如单词yes,no等),yes和no各录5次 

B:

 声学分析,把waveform的声音文件转换为mfcc()格式 ,即对语音材料库中的声音文件提取MFCC声纹特征 (梅尔频率倒谱系数,这个部分的详解见教程10)。

C:

 模型定义:

 为词典里的每一个词(基本元)建立一个HMM原型   

D:

 模型训练:

 HMM模型初始化和迭代,利用MFCC声纹特征对每一个HMM模型进行训练,使模型参数与其描述的识别基本元对应。

E:

 问题定义,即语法定义,定义输入语音的语法规则等,从发音对应到文字。

F:

 对测试集合进行识别  

G:

 评测

 

使用的教程:

1. HTK(V3.1)基础指南中文版

2. 语音识别工具箱之HTK安装与使用

3. 语音识别系统之htk------孤立词识别(yesno)

4. HTK(yesno)教程

5. HTK孤立词识别回顾

6. 一个简单的HTK入门参考例子

7. 利用HTK工具包快速建立一个语音命令识别系统

8. Windows安装HTK3.4.1语音识别工具(这里有HSLab运行失败的原因)

9. Htkerrorbook

10.UNDERSTANDINGHTKERRORMESSAGES

11.htk源码

12.  语音信号处理之(四)梅尔频率倒谱系数(MFCC)

特别记录一下该博客,里面有大量语音方面的学习资料。

一. 准备工作——预先建立文件夹

我在htk目录下建立了work文件夹,今后所有的实验都放在这个文件夹中。

在该文件夹中建立YesNo文件夹用于存放本实验的所有文件和数据。

YesNo文件夹中的结构如下:

        

(1)data/:

存储训练和测试数据(语音信号、标签等等),包括一个子目录data/train,而train包括2个子目录,data/train/sig(用以存储步骤1接下来录制的训练语音数据) 和data/train/mfcc(用来存储步骤二中训练数据转化后的mfcc参数);

        

(2)model/:

存储识别系统的模型(HMMs)的相关文件;

        (3)def/:

存储任务定义的相关文件;

        (4)test/:

存储测试相关文件(我是将测试数据存在此文件夹的没有放在data中)。

 

        在data/下创建data/train/sig、data/train/lab、data/train/mfcc文件夹,分别存放采集的语音材料的sig文件、lab(标签)文件和提取的MFCC声纹特征文件。

        在model/下创建model/proto、model/hmm0、model/hmm0flat、model/hmm1、model/hmm2、model/hmm3文件夹:

model/proto用于存放模型初始化所需HMM原型定义文件hmm_yes、hmm_no、hmm_sil

model/hmm0用于存放使用HInit命令初始化HMM模型输出的描述结果文件(依然是hmm_yes、hmm_no、hmm_sil)

model/hmm0flat用于存放使用HCompv命令初始化模型时输出的可变基底宏文件vFloors(丢弃使用HCompv初始化模型时产生的hmm_yes、hmm_no、hmm_sil)

model/hmmi为使用HRest命令迭代训练HMM模型时的输出目录,i为表示当前迭代i的索引。

最终单词HMM模型是hmm3/hmm_yes,hmm3/hmm_no,andhmm3/hmm_sil。

        在test/下创建test/sig、test/mfcc、test/result文件夹,分别存放测试用的语音材料的sig文件、提取的MFCC声纹特征文件和测试结果文件。

        整个目录的结构我将在本文最后给出。

二. 创建语料库

首先我们需要录音以采集足够的语音数据,对于“yes、no”这两个命令都需要录一些相应的语音样本,同时也需要对录下的语音做一些简单的标注。

录音和标注可以采用HTK工具包中的HSLab来完成。

这里我们采集YES和NO两个单词。

在命令行下进入HTK/work/YesNo/data/train/sig文件夹(sig语言文件保存在该目录中),输入:

HSLab yes.sig回车

(该命令用于使用HSLab工具打开所在目录的yes.sig文件,如果没有该文件,则在该目录中新建该文件,这里使用该命令打开HSLab图形化界面,录制yes.sig)

        这一步可能会遇到如下问题:

    报错:

“ERROR[+6870] MakeXGraf:

NotcompiledwithX11support:

useHGraf.X.cFATALERROR-Terminatingpro”

    解决办法:

        -1、这需要修改HTKLib文件夹下的htk_htklib_nt.mkf文件,共有两处需要修改:

将文件中的HGraf.null.obj替换为HGraf_WIN32.obj、HGraf.null.olv替换为HGraf_WIN32.olv;

        -2、然后在cmd命令行中重新编译HTKLib文件夹下的htk_htklib_nt.mkf;

        -3、检查HTKTools文件夹下的Make文件,如果有"-lX11"字符的话将其删除,然后在cmd命令行中重新编译HTKTools文件夹下的htk_htktools_nt.mkf文件;

        (需要将bin.win32文件夹的路径加入到环境变量中)

         原因:

        默认情况下HSLab工具使用的是x11做的图形界面接口,windows不支持,所以需要修改一下生成文件,使用windowsGUI。

重新执行HSLab yes.sig回车,一个用于录音的对话框就会出现。

如图:

 

下面我们开始录音。

录音环境自己控制哈。

1.录制声音。

点击rec按钮,说:

“yes",然后点击stop按钮。

你会看到界面上出现一个语音波形,一条语音样本就录制完成了,你可以点击play播放听一下。

   2.给声音做标记。

本条语音一共需要做3个标记:

yes语音段的标记和其前后各一个的静音段标记。

注意:

做标记的语音段不能重复(可以不相连)。

点击mark,用鼠标选取“yes"前面的一段静音后,再点击Labelas,用键盘输入"sil"表示silence静音的意思,然后回车。

这样我们就给本条语音的静音段做了一个标记。

再点击mark,选取“yes“的发音段(可以选取左右两边的边界,不容易出错),然后点击Labelas按钮,用键盘输入“yes”,回车。

这样我们就给本语句的yes做了标记,依照此方法,完成yes后面那个sil语音段的标记。

完成这3个标记后,点击save按钮,回车。

将我们的其标记文件保存。

保存目录为HSLab.exe的运行目录。

别找不到文件了哈。

  3.重命名语音文件和语音标记文件。

语音文件后缀为*.sig,标记文件后缀为*.lab。

因为HGraf:

HSLab只能自动给出0,1的文件名序号,我们又需要至少10条的语音材料,所以就需要录制一条语音,重命名一条。

我们将yes_0.sig重命名为yes_01.sig,将yes_0.lab重命名为yes_01.lab.至此,我们完成了一个语音材料的录制。

  4.点击new按钮(这里不点new的话你会发现lab文件中有N多个标签信息,如果遇到这种情况,你可以删除相应lab文件,重新打开sig文件贴标签),会发现new按钮旁边的set[0]变为set[1]了。

然后依照1,2,3步,新建下一条语音材料,这时HSLab自动保存的文件名为,yes_1.sig,yes_1.lab,将其命名为yes_02.sig和yes_02.lab即可。

  5.再执行9次第4步,得到yes_03,yes_04...yes_10的语音材料和标记文件。

  6.依照1,2,3,4,5步的方法,完成no的语音材料和标记文件的制作,得到no_00.sig,no_00.lab...no_10.sig,no_10.lab.

  7.这样我们就完成了本yes和no语音识别系统的语音库的建立。

然后将所有的*.lab文件放入到laber_dir文件夹中。

以方便后面训练操作。

        我们可以打开一个.lab文件看一下它的结构。

如下记录了sig文件各标签的起止信息(如果你打开文件不是这样,而是有很多的标签,也许你在打标签的过程中出现了问题)。

 

 

三. 声学分析

语音识别系统并不直接在语音信号上进行识别,而是先要进行特征提取,包括分帧,加窗,求取频谱及倒谱,这样确保提取出的特征更加紧凑并尽可能多的保留语音内容的信息。

HTK中负责提取特征的是HCopy工具,它将wav格式的语音文件转化为包含若干特征

矢量的特征文件。

具体命令如下:

Hcopy-A-D-Ctest/analysis.conf -Sdef/targetlist.txt

使用该命令前,首先需要完成两个配置文件的编写(用记事本编写即可)。

 

1) analysis.conf为抽取参数配置文件,用于对特征提取过程中的参数进行配置,如命令所示保存在test文件夹下。

内容如下:

SOURCEFORMAT=HTK             #指定输入语音文件的搁置

TARGETKIND=MFCC_0_D_A        #定义提取什么样的特征参数,这里定义的是12个MFCC系数,1个nullMFCC系数c0,13个一阶MFCC系数,13个二阶MFCC系数。

一共39个。

MFCC的有关材料XX既可。

WINDOWSIZE=250000.0        #定义帧长

TARGETRATE=100000.0        #定义取帧时的滑动长度

NUMCEPS=12             #定义取到的MFCC首系数的个数。

上边的12就来源于此。

USEHAMMING=T            #定义取帧时用到的窗函数。

这里定义使用汉宁窗。

PREEMCOEF=0.97           #定义预加重系数,

NUMCHANS=26             #定义美尔频谱的频道数量

CEPLIFTER=22            #定义倒谱所用到的滤波器组内滤波器个数。

其中#后代表注释,参数意义以后详细说(该文件可以有注释)。

2)targetlist.txt为源/目的列表文件,用以说明抽取源文件(**.sig)的路径和目标文件(**.mfcc)的保存路径,内容如下:

data/train/sig/yes_01.sigdata/train/mfcc/yes_01.mfcc

data/train/sig/yes_02.sigdata/train/mfcc/yes_02.mfcc

data/train/sig/yes_03.sigdata/train/mfcc/yes_03.mfcc

data/train/sig/yes_04.sigdata/train/mfcc/yes_04.mfcc

data/train/sig/yes_05.sigdata/train/mfcc/yes_05.mfcc

data/train/sig/no_01.sigdata/train/mfcc/no_01.mfcc

data/train/sig/no_02.sigdata/train/mfcc/no_02.mfcc

data/train/sig/no_03.sigdata/train/mfcc/no_03.mfcc

data/train/sig/no_04.sigdata/train/mfcc/no_04.mfcc

data/train/sig/no_05.sigdata/train/mfcc/no_05.mfcc

        这里我只将yes和no的前五条作为抽取的源文件,原先是将10条都作为源文件的,但是有的文件在后面的初始化过程中报错了。

原因可能是在贴标签的时候,标签之间出现了重复,目前我也不是非常清楚。

去掉有问题的文件后,就没有问题了。

由于录音不方便,于是想到将yes和no的前五条作为抽取的源文件,后五条作为测试文件。

于是乎,需要将后五条sig文件存储到test/sig文件中。

读者可以全都写上,然后有报错的时候再去掉,然后重新生成mfcc文件即可。

        完成上面两个文件后,运行上述命令Hcopy-A-D-Ctest/analysis.conf -Sdef/targetlist.txt,结果如下图:

 

屏幕上会输出配置文件中的各个参数。

如果没有错误的话,在data/train/mfcc下,应该有*.mfcc文件出现。

如下图。

此步骤不容易出错,一般都会成功。

 至此,特征提取就完成了。

 

四.HMM模型定义

在model/proto中建立模型初始化所需HMM原型定义文件:

hmm_yes、hmm_no、hmm_sil(注意这三个文件无后缀名,否则会报错,且后面步骤中生成的同名文件也均无后缀名)。

 

hmm_yes内容如下(注意:

里面不能有注释,使用的时候必须删掉)

~o39 #定义输入特征参数的维书

~h"sil"      #定义模型名字,这里是给识别基本元sil定义的,所以需要“”内为sil

  #开始HMM参数的设置,

        6 #定义隐含状态数

        2     #状态1为空,我们从状态2开始定义

                39    #连续HMM中的均值向量的定义

                        0.00.00.00.00.00.00.00.00.00.00.00.00.0

                        0.00.00.00.00.00.00.00.00.00.00.00.00.0

                        0.00.00.00.00.00.00.00.00.00.00.00.00.0

                39  #连续HMM中的方差向量的定义

                        1.01.01.01.01.01.01.01.01.01.01.01.01.0

                        1.01.01.01.01.01.01.01.01.01.01.01.01.0

                        1.01.01.01.01.01.01.01.01.01.01.01.01.0

        3

                39

                        0.00.00.00.00.00.00.00.00.00.00.00.00.0

                        0.00.00.00.00.00.00.00.00.00.00.00.00.0

                        0.00.00.00.00.00.00.00.00.00.00.00.00.0

                39

                        1.01.01.01.01.01.01.01.01.01.01.01.01.0

                        1.01.01.01.01.01.01.01.01.01.01.01.01.0

                        1.01.01.01.01.01.01.01.01.01.01.01.01.0

        4

                39

                        0.00.00.00.00.00.00.00.00.00.00.00.00.0

                        0.00.00.00.00.00.00.00.00.00.00.00.00.0

                        0.00.00.00.00.00.00.00.00.00.00.00.00.0

                39

                        1.01.01.01.01.01.01.01.01.01.01.01.01.0

                        1.01.01.01.01.01.01.01.01.01.01.01.01.0

                        1.01.01.01.01.01.01.01.01.01.01.01.01.0

        5

                39

                        0.00.00.00.00.00.00.00.00.00.00.00.00.0

                        0.00.00.00.00.00.00.00.00.00.00.00.00.0

                        0.00.00.00.00.00.00.00.00.00.00.00.00.0

                39

                        1.01.01.01.01.01.01.01.01.01.01.01.01.0

                        1.01.01.01.01.01.01.01.01.01.01.01.01.0

                        1.01.01.01.01.01.01.01.01.01.01.01.01.0

        6     #转移概率矩阵的定义。

                        0.00.50.50.00.00.0

                        0.00.40.30.30.00.0

                        0.00.00.40.30.30.0

                        0.00.00.00.40.30.3

                        0.00.00.00.00.50.5

                        0.00.00.00.00.00.0

 

列表3HMM描述文件(原型)

~o39

文件头,给出系数向量大小(这里是39个系数)、系数类型(MFCC_0_D_A)。

~h"yes"(...)

封装对所谓的yes的HMM模型的描述。

6

        给出HMM模型的状态总数,包括2个非发散状态1和6。

  

2

        表示对状态2的观察函数的描述。

这里我们使用单一高斯观察函数,带有对角矩阵。

这样的函数完全由一个平均向量和一个变化向量(自相关矩阵的对角元素)。

状态1和6没有描述,他们没有观察函数。

390.00.0(...)0.0(x39)

        给出当前观察函数的平均向量(在39维的观察空间中)。

每个元素是强制初始化为0,该文件仅给出HMM模型(它的全局结构)的原型。

这些系数后面将用来训练。

391.01.0(...)1.0(x39)给出当前观察函数的变化向量。

每个元素强制初始化为1.6给出HMM模型的6x6转换矩阵,即:

a11a12a13a14a15a16

a21a22a23a24a25a26

a31a32a33a34a35a36

a41a42a43a44a45a46

a51a52a53a54a55a56

a61a62a63a64a65a66

其中aij表示状态i到j转换的可能性。

Null值说明相应的转换不允许。

其它值进行强制初始化(但是矩阵的每行之和为1):

在训练过程中将被修改。

 

有人可能有疑问,HMM不是应该有个状态转移矩阵A,观测概率矩阵B么?

怎么这里不见观测概率矩阵B呢?

答:

有状态转移矩阵的是离散HMM(DHMM),这里用的是连续型HMM(CHMM),连续性HMM的参数为:

1.状态转移矩阵A,和高斯分布里用到的均值和方差,这里上面的HMM模型中都有定义。

具体可查阅:

,里面论文《语音识别系统中特征提取和声学建模的研究》里有关于HMM的详细资料,可供查阅。

好了,观察状态转移矩阵,a11=0,a12=0.5,a13=0.5,a1x=0(x=4,5,6),这说明由状态1到自身的转移概率为0,到状态2的转移概率为0.5,到状态3的转移概率为0.5,到状态4,5,6的状态转移概率为0。

其他行数据以此类推,由此我们便知道此HMM模型的拓扑结构,当然你也可以修改拓扑结构来试图改善识别系统性能。

 

我们必须为每个模型生成一个这样的原型。

在我们的例子中,我们要写3个HMM模型原型,即yes、no、sil。

关于HMM描述文件更多详细信息参加H

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2