语音识别之HTK入门
语音识别之HTK入门(一)
其实,无论语音识别还是HTK对我来说都不算是入门的事了。
但是现在重新再走一遍,目标还是很明确的——打牢基础。重新回顾收获肯定多多,就像我前段时间把《C++ primer plus》再看一遍一样。把之前理解不透的,知识盲点清理了一下,感觉顺畅了很多,以后还会再次看看这些经典的书籍。
入门的目标就是能够把《HTK BOOK》中的拨号系统实现,各个中间文件的格式搞明白,用到哪个工具,基本掌握它的实现原理。这次可能还会对关键代码在visual studio下调试一遍。如何在visual studio调试HTK代码,会专门写一篇Blog.
一、参考资料
首先,把我搜到的比较靠谱的参考资料提供百度网盘下载。HTK3.4.1版本已经很成熟了,2000年就已经完成了,到现在已经20年了。但是真正能为初学者提供比较靠谱的入门参考的其实不多,其中《HTK BOOK》当然是必读的资料,但因为是英文的,加上初学者对很多语音识别概念本来就比较模糊,加重了学习的难度。其中当时还在哈尔滨工业大学人工智能研究室的苏统华写的《应用 HTK 搭建语音拨号系统》以及脚本文件和中间文件是非常好的参考资料。顺着他的思路认真执行,对HTK工具有个较全面的了解。要深入的话,恐怕就非一朝一夕能到达的了,但这的确是把好梯子。
我是按照这个http://blog.sina.com.cn/s/blog_436992740102uw1j.html博客一步步在Windows下安装的,亲测可行。我下载了上面提到的资料,链接:https://pan.baidu.com/s/1QSnSoWz04b3pcACPhrMGuQ 提取码:z4k7 。
二、构建对话系统
步骤一:下载beep字典。
https://github.com/Alexir/CMUdict/blob/master/cmudict-0.7b 卡耐基.梅隆学校的网站上就有beep字典,它是语音识别系统的先验知识,对应每个单词的发音,用音子(phone)表示。
A ah
A ax
A ey
A-BOMB ey b oh m
A-BOMBS ey b oh m z
A-LEVEL ey l eh v l
A-LEVELS ey l eh v l z
A._B._C. ey b ih s iy
A._B._C. ey b iy s iy
A._B._C.S ey b ih s iy z
A._B._C.S ey b iy s iy z
A._C. ey s iy
A._D. ey d iy
A._G._M. ey jh ih eh m
A._M. ey eh m
A._M.S ey eh m z
A._N._C. ey y eh n s iy
A._R. ah ax
A._R. ah ax r
A._R. ax ax
A._R. ax ax r
A._R. ey ax
A._R. ey ax r
A._S._A._P. ey eh s ey p iy
A._T._F. ey t iy y eh f
AACHEN aa k ax n
AARDVARK aa d v aa k
AARDVARKS aa d v aa k s
AARHUS aa hh uw s
AB ae b
ABABA ae b ax b ax
ABACI ae b ax s ay
ABACK ax b ae k
ABACUS ae b ax k ax s
ABACUSES ae b ax k ax s ih z
ABAFT ax b aa f t
ABANDA ax b ae n d ax
ABANDAH ax b ae n d ax
ABANDAN ax b ae n d ax n
ABANDANDO ax b ae n d ow
ABANDED ax b ae n d ih d
ABANDEN ax b ae n d eh n
ABANDON ax b ae n d ax n
ABANDONADA ax b ae n d ax n ey d ax
ABANDOND ax b ae n d ax n d
ABANDONDED ax b ae n d ax n d ih d
ABANDONED ax b ae n d ax n d
ABANDONEE ax b ae n d ow n iy
ABANDONER ax b ae n d ax n ax
ABANDONER ax b ae n d ax n
上图就是语料的通用字典格式。
步骤二 构建目标语法。
就是系统可能的单词组合。如果在更加复杂的语音识别系统中,就是语言模型该干的事。这里就是用一个wordnet来建模。
$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 )
有了这个目标语法,系统字典包含的词就已经给出了,可以通过手工编写系统词典(wlist),如果训练语料很多的话,需要借用脚本来构建wlist,就是系统中出现的已知词。接下来的命令就是要为wlist里的每一个词建立发音标记,并写入dict文件中,这就是发英词典。其中names文件是人名的发音字典,需要系统设计者提供,因为英文名字可能千奇百怪,在beep字典里可能没有收录,需要单独提供。
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
拨号系统中wlist出现的词为下面这些:
CALL
DAVE
DIAL
EIGHT
FIVE
FOUR
JULIAN
LAW
LEE
NINE
OH
ONE
PHIL
PHONE
SENT-END
SENT-START
SEVEN
SIX
STEVE
SUE
THREE
TWO
TYLER
WOOD
YOUNG
ZERO
步骤三:执行命令HDMan生成dict字典:
HDMan -m -w wlist -n monophones1 -l dlog dict beep names
同时,还生成monophones1,包含了发音字典中所有的单音子(phone)。它们的内容如下:
dict:
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
monophones1:
k
ao
l
sp
d
ey
v
ay
ax
t
f
r
jh
uw
ia
n
y
iy
ow
w
ah
ih
sil
s
eh
th
uh
ng
z
语音识别之HTK入门相关推荐
- 语音识别之HTK入门(一)HTK的下载配置
语音识别之HTK入门(一)HTK的下载配置 Linux环境配置 VMware Tools安装 必备环境 HTK下载 HTK环境设置 跪拜大佬帖子: https://www.cnblogs.com/an ...
- 语音识别之HTK入门(十)——HTK解码工具HVite源码分析
这一节讲的内容又是语音识别系统非常重要的一环--veterbi解码,前面我们经过了配置文件,处理音频数据,处理标注文本数据.通过Baum-Welch(前向-后向)算法评估模型参数等多个环节,目的都是为 ...
- 语音识别之HTK入门(二)
步骤四:准备语音素材 在拨号系统中,可以通过HSGen自动生成合法的拨号句子文本.然后根据这些文本来录制对应的音频文件.HTK的HSLab工具可以完成录音功能.这两个方面都不是语音识别的学习重点,现在 ...
- 语音识别之HTK入门(三)——单音素单高斯模型
前面两节介绍了语音识别的一些概念,并进行数据的预处理.现在我们有了音频数据转化为MFCC特征向量的文件,以及与每个特征文件相对应的音素信息文件. 现在进入模型构建部分,包括两个核心部分,一是如何表示音 ...
- 语音识别之HTK入门(六)——HERest训练模型
我们利用HCompV工具初始化了一个全局的hmm模型,也熟悉了HTK的一些重要的数据结构.它的输出是更新后的proto和vFloors两个文件,供下一步使用. 在进入下一步之前,需要手工在hmm0目录 ...
- 语音识别之HTK入门(四)——HCompV源码解析
上一篇博客中用HCompV工具通过全局数据来初始化HMM模型参数,包括proto和vFloor两个文件.同时手工制作hmmdefs模型,在这个文件中列举了每一个单因素模型的参数,它们是完全相同的. 现 ...
- C++语音识别接口快速入门
C++语音识别接口快速入门(Microsoft Speech SDK) 版权声明:该博客是本宝宝原创文章,未经博主允许不得转载. 目录(?)[+ ...
- C++语音识别接口快速入门(Microsoft Speech SDK)——文字转语音
C++语音识别接口快速入门(Microsoft Speech SDK) 尤其注意其中的宽字符串转化 #include <iostream> #include <sapi.h> ...
- mlfviewer_语音识别ASR - HTK(HResults)计算字错率WER、句错率SER
HResults计算字错率(WER).句错率(SER) 前言 好久没发文,看到仍有这么多关注的小伙伴,觉得不发篇文对不住.确实好久没有输出经验总结相关的文档,抽了个时间,整理了下笔记,发一篇关于ASR ...
最新文章
- IBM用量子计算机成功模拟分子,登上《自然》封面
- Log4j官方文档翻译(一、基本介绍)
- 剑指offer 二维有序数组查找
- centos7.1 postgresql10+postgis2.5离线安装
- ffmpeg 转换flv压缩大小_使用ffmpeg进行视频文件转换成FLV整理
- win8.1除了应用界面的应用,其他系统程序都不能上网,包括IE
- 基于LAMP的cacti安装和配置问题处理(一)
- jQuery length和size()区别总结如下:
- Entity Framework 代码先行之约定配置
- python开发bi报表_BI报表分析和数据可视化,推荐这三个开源工具!
- 数字图像处理——LoG算子
- 高效 Windows 工作环境 Java 开发环境搭建
- 初中计算机卡片的制作教案,【我的拼音卡片教案】制作拼音卡片
- 休谟问题和金岳霖的回答
- iOS NSFileManager文件管理(沙盒)
- 分享 10 个常见的 CSS 页面布局代码片段
- html立方体旋转展开,html5—旋转立方体
- SVM学习总结(一)如何学习SVM
- Fatal signal 11问题的解决方法
- UVA 10526 - Intellectual Property (后缀数组)