当前位置: 首页 > 工具软件 > HTK > 使用案例 >

语音识别之HTK入门

慕容齐智
2023-12-01

语音识别之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

 

 类似资料: