Kaldi声学模型训练

语音增强和语音识别系列博文链接

  • 支持标准的基于ML训练的模型
    • 线性变换,如LDA,HLDA,MLLT/STC
    • 基于fMLLR,MLLR的说话人自适应
    • 支持混合系统
      • 支持SGMMs
    • 基于fMLLR的说话人识别
      • 模型代码,可以容易的修改扩展

声学模型训练过程

1.获得语料集的音频集和对应的文字集

可以提供更精确的对齐,发音(句子)级别的起止时间,但这不是必须的。

2.将获得的文字集格式化

kaldi需要各种格式类型的,训练过程中将会用到每句话的起止时间,每句话的说话人ID,文字集中用到的所有单词和音素。

3.从音频文件提取声学特征

MFCC或者PLP被传统方法广泛使用。对于NN方法有所差异。

4.单音素训练

单音素训练不使用当前音素之前或者之后的上下文信息,三音素则使用当前音素,之前的音素和之后的音素。

5.基于GMM/HMM的框架

1.将音频根据声学模型对齐
声学模型的参数在声学训练时获得,然而,这个过程可以使用训练和对齐的循环进行优化。这也称之为维特比(Viterbi)训练(包括前向-后向以及期望最大化密集计算过程),通过将音频和文字对齐,可以使用额外的训练算法提升和精细化参数模型。所以,每一个训练步骤会跟随一个对齐步骤。

2.训练三音素模型
单音素模型仅仅表示了单个音素的参数,但是音素是随着上下文变化的,三音素模型使用上下文的前后音素展现了音素的变化。
并不是所有的单音素组合都存在于提供的文字集中,总共有 p o h e m s 3 个可能的三音素,但是训练集所包含的是一个有限的子集,并且出现的三音素组合也要有一定的次数以方便训练,音素决策树会将这些三音素聚类成更小的集合。

3.根据声学模型重新对齐音频&重新训练三音素模型
重复上述1,2步骤,并加入额外更精细的三音素模型训练,通常包括delta+delta-delta训练, LDA-MLLT以及SAT。对齐算法包括说话人对齐和FMLLR。

4.训练算法
Delta和Delta-delta算法计算特征的一阶和二阶导数,或者是动态参数以补充MFCC特征。
LDA-MLLT(Linear Discriminant Analysis – Maximum Likelihood Linear Transform), LDA根据降维特征向量建立HMM状态。MLLT根据LDA降维后的特征空间获得每一个说话人的唯一变换。MLLT实际上是说话人的归一化。
SAT(Speaker Adaptive Training)。SAT同样对说话人和噪声的归一化。

5.对齐算法
实际的对齐操作是一样的,不同文集使用不同的声学模型。

声学模型类

这里写图片描述

GMM

  • 高效似然估计

log f G a u s s ( x ) = K 1 ( ) 1 2 ( X μ ) T 1 ( X μ ) = K 1 ( ) 1 2 [ X T 1 X 2 μ T 1 X + μ T 1 μ ] = K 2 ( μ , ) + μ T 1 X x T 1 X

  • 概率计算经过两个矩阵向量的相乘获得,可以使用优化的BLAS函数实现。
    这里写图片描述

Kaldi 中GMM类

这里写图片描述
解码部分接口如下:

class DecodableInterface{
public:
//Returns the log likelihood(negated in the decoder).
virtual BaseFloat LogLikelihood(int32 frame, int32 index)=0;

//Frames are one-based.
virtual bool IsLastFrame(int32 frame)=0;

//Indices are one-based(compatibility with OpenFst).
virtual int32 NumIndices()=0;

virtual ~DecodableInterface(){}
}

这里写图片描述

带fMLLR的声学模型

这里写图片描述

带MLLR的声学模型

这里写图片描述

SGMM类

这里写图片描述

猜你喜欢

转载自blog.csdn.net/shichaog/article/details/78441304