语音识别之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入门相关推荐

  1. 语音识别之HTK入门(一)HTK的下载配置

    语音识别之HTK入门(一)HTK的下载配置 Linux环境配置 VMware Tools安装 必备环境 HTK下载 HTK环境设置 跪拜大佬帖子: https://www.cnblogs.com/an ...

  2. 语音识别之HTK入门(十)——HTK解码工具HVite源码分析

    这一节讲的内容又是语音识别系统非常重要的一环--veterbi解码,前面我们经过了配置文件,处理音频数据,处理标注文本数据.通过Baum-Welch(前向-后向)算法评估模型参数等多个环节,目的都是为 ...

  3. 语音识别之HTK入门(二)

    步骤四:准备语音素材 在拨号系统中,可以通过HSGen自动生成合法的拨号句子文本.然后根据这些文本来录制对应的音频文件.HTK的HSLab工具可以完成录音功能.这两个方面都不是语音识别的学习重点,现在 ...

  4. 语音识别之HTK入门(三)——单音素单高斯模型

    前面两节介绍了语音识别的一些概念,并进行数据的预处理.现在我们有了音频数据转化为MFCC特征向量的文件,以及与每个特征文件相对应的音素信息文件. 现在进入模型构建部分,包括两个核心部分,一是如何表示音 ...

  5. 语音识别之HTK入门(六)——HERest训练模型

    我们利用HCompV工具初始化了一个全局的hmm模型,也熟悉了HTK的一些重要的数据结构.它的输出是更新后的proto和vFloors两个文件,供下一步使用. 在进入下一步之前,需要手工在hmm0目录 ...

  6. 语音识别之HTK入门(四)——HCompV源码解析

    上一篇博客中用HCompV工具通过全局数据来初始化HMM模型参数,包括proto和vFloor两个文件.同时手工制作hmmdefs模型,在这个文件中列举了每一个单因素模型的参数,它们是完全相同的. 现 ...

  7. C++语音识别接口快速入门

    C++语音识别接口快速入门(Microsoft Speech SDK)                             版权声明:该博客是本宝宝原创文章,未经博主允许不得转载. 目录(?)[+ ...

  8. C++语音识别接口快速入门(Microsoft Speech SDK)——文字转语音

    C++语音识别接口快速入门(Microsoft Speech SDK) 尤其注意其中的宽字符串转化 #include <iostream> #include <sapi.h> ...

  9. mlfviewer_语音识别ASR - HTK(HResults)计算字错率WER、句错率SER

    HResults计算字错率(WER).句错率(SER) 前言 好久没发文,看到仍有这么多关注的小伙伴,觉得不发篇文对不住.确实好久没有输出经验总结相关的文档,抽了个时间,整理了下笔记,发一篇关于ASR ...

最新文章

  1. IBM用量子计算机成功模拟分子,登上《自然》封面
  2. Log4j官方文档翻译(一、基本介绍)
  3. 剑指offer 二维有序数组查找
  4. centos7.1 postgresql10+postgis2.5离线安装
  5. ffmpeg 转换flv压缩大小_使用ffmpeg进行视频文件转换成FLV整理
  6. win8.1除了应用界面的应用,其他系统程序都不能上网,包括IE
  7. 基于LAMP的cacti安装和配置问题处理(一)
  8. jQuery length和size()区别总结如下:
  9. Entity Framework 代码先行之约定配置
  10. python开发bi报表_BI报表分析和数据可视化,推荐这三个开源工具!
  11. 数字图像处理——LoG算子
  12. 高效 Windows 工作环境 Java 开发环境搭建
  13. 初中计算机卡片的制作教案,【我的拼音卡片教案】制作拼音卡片
  14. 休谟问题和金岳霖的回答
  15. iOS NSFileManager文件管理(沙盒)
  16. 分享 10 个常见的 CSS 页面布局代码片段
  17. html立方体旋转展开,html5—旋转立方体
  18. SVM学习总结(一)如何学习SVM
  19. Fatal signal 11问题的解决方法
  20. UVA 10526 - Intellectual Property (后缀数组)

热门文章

  1. 【逆向工程】x64dbg逆向扫雷及QT编写游戏辅助
  2. JixiPix Aquarella for Mac(图片转水彩画工具)
  3. ZYNQ7000-SDK部署LVGL
  4. git常用操作--分支
  5. 主编编辑器怎么复制文章?
  6. python中的解包操作
  7. 8ms入门教程| 安利!开发者用好这个嵌入式开发平台,准点下班不是梦!
  8. 那些精贵的文献资源下载网址经验总结(转载)
  9. window10 Web服务器配置IIS的环境搭建
  10. windows设置自启动服务使用winsw