三音素,音素的一种,与单音素(如t, iy, n)不同,三音素表示为如t-iy+n,即由三个单音素组成,与单音素iy类似,但其考虑了上下文的关系,即,上文为t,下文为n。
三音素和单音素都是一个隐马尔科夫模型(HMM)
三音素是为了考虑上下文的信息(协同发音)
倒谱特征提取时,汉宁窗向左、向右包含了冗余的频谱,因此,用三音素代替单音素是合理的
单音素复制为三音素后,状态的个数成指数增加,但复制后的状态。为了解决数据稀疏,而需要训练的数量庞大,因此需要降低参数的数量。
聚类是为了降低所有三音素参数的数量,即降低三音素的状态的个数。
决策树的作用就是给三音素的状态做聚类。
聚类后,所有的三音素的状态被聚类为多个簇,为每个簇内的所有三音素状态进行绑定(即多个状态共享一个状态。
的参数)。
单音素训练完成后(train_mono.sh),三音素的训练(train_deltas.sh)
需要用到exp/mono0a_ali的对齐结果,将对齐结果使用Cross word方法映射到(复制为)三音素:
sil s p iy ch t ae s k sil
sil sil-s+p s-p+iy p-iy+ch iy-ch+t ch-t+ae t-ae+s ae-s+k s-k+sil sil
维特比解码是对一段音频进行解码,生成的是状态序列,这个状态序列对应多个音素(HMMs)。维特比解码的解码范围是什么?是FST?但FST是对训练的一句话生成的。是lattice?lattice是FST的一个实例,与FST类似。是所有的状态(单高斯或混合高斯)?那么A=[aij]从何得来?
Baum-Welch算法是为了确定一个HMM=λ=(π,Α,Β),使P(O/λ)最大
维特比算法中需要的A=[aij]就是单个HMM中的A
维特比算法的定义:这个算法解决了给定一个观察值序列O=O1,O2,…,OT和一个模型λ=(π,Α,Β),在最佳的意义上确定一个状态序列Q*=q1*,q2*,…,qT*的问题
训练中使用维特比算法时,某个HMM及其对应的特征序列(音频序列)是给定的,这时,是满足维特比算法的定义的。
解码时使用维特比算法时,有一段较长的特征序列,但不知道其对应的HMMs。不过,这时已经有了一个声学模型(如final.mdl),猜测其中定义了所有HMM的转移和所有聚类状态的参数,或许可以用前向后向算法计算mdl中每个HMM
hmm_chinese.pdf p55 3.1.2 音素HMM连续语音识别
hmm_chinese.pdf p59
在训练时用的是Viterbi算法,在识别时则用状态Viterbi算法处理状态级数据,用词汇Viterbi算法处理词汇级数据
识别时,采用了时间帧同步Viterbi(beam)搜索算法