语音识别基础1:建模单元 phone
声学模型描述一种语言的基本单位被称为音素Phoneme,例如BRYAN这个词就可以看做是由B, R, AY, AX, N五个音素构成的。英语中貌似有50多个音素,可以用50几个HMM state来表示这些音素,这种表示方法就是context independent模型中的单音素monophone模式。然而语音没有图像识别那么简单,因为我们再说话的时候很多发音都是连在一起的,很难区分,所以一般用左.
声学模型
描述一种语言的基本单位被称为音素Phoneme,例如BRYAN这个词就可以看做是由B, R, AY, AX, N五个音素构成的。英语中貌似有50多个音素,可以用50几个HMM state来表示这些音素,这种表示方法就是context independent模型中的单音素monophone模式。然而语音没有图像识别那么简单,因为我们再说话的时候很多发音都是连在一起的,很难区分,所以一般用左中右三个HMM state来描述一个音素,也就是说BRYAN这个词中的R音素就变成了用B-R, R, R-AY三个HMM state来表示。这样BRYAN这个词根据上下文就需要15个state了,根据所有单词的上下文总共大概需要几千个HMM state,这种方式属于context dependent模型中的三音素triphone模式。这个HMM state的个数在各家语音识别系统中都不一样,是一个需要调的参数。所以声学模型就是如何设置HMM state,对于信号中的每一frame抽怎样的特征,然后用训练什么分类器。【1】
英文的建模单元
kaldi工具箱timit例子中找到的现在英语标准的61-48-39的建模单元,从61个phone的基础上把发音相似的phone归成一个phone,降建模单元减为48个,同样的思路,再减为39个。要用这个建模单元表时,你得首先保证你数据库的标注文本都是用这样的phone标的。【2】
中文的建模单元
通常来说汉语声母、韵母建模比按phone建模识别效果要好,下图是于胜民前辈文章中的汉语建模单元(声韵母,一共61个)。可以看出,其中对韵母i的建模有i1, i2, i3,是因为在不同的情况下有不同的调。
因此,中文的声韵母建模一般是带调的建模方式,建模单元会更多,在阿里用过249个声韵母带调建模单元的。有一些建模单元的选取也会根据使用的音库而做一些增减,比如说儿化音比较重的音库,就会在文本标注中都把儿化音标出来了,然后通过列出数据库的所有建模单元,再听各种单元的发音,最后把发音相似的单元归为一个,类似英语中做的phone的映射。
感言:无论你识别哪种语言,构造语言的建模单元很重要的一点是你要自己去听你数据库里的发音,最好不要照搬别的建模单元,因为数据库间是有差别的。当然,如果你的数据库里本身有phone表,那你就简单听听音频,看看文本,对数据库做个直观认识就好了,就用人家自带的phone单元就好,就不用自己瞎忙活啦
参考:
【1】传统语音识别(GMM+HMM
【2】英文,中文,日语中的声学建模单元
【3】语音识别科普篇-术语定义-音素/音节/音标
更多推荐
所有评论(0)