对角GMM

DiagGmm类表示一个对角协方差矩阵的高斯混合模型。一组DiagGmm的对象,由从0开始的pdf-ids索引组合在一起,组成声学模型。这个声学模型是由AmDiagGmm类实现的。尽管这个声学模型类的接口比单个GMM丰富,但你可以简单地把AmDiagGmm看作是DiagGmm的矢量。把声学模型表示为独立模型的集合,每个模型用于表示一个pdf,我们可以想象,这不是对所有模型都适用的构建方法。例如,SGMM就不能这样表示。而且,如果我们想实现不同状态之间GMM子成分的捆绑,就不能把每个pdf单独表示了。(译者注:pdf,科技文献中写作p.d.f.,是概率密度函数的缩写。)

独立GMM

理论上,DiagGmm类是一个简单的、被动的对象,负责存储高斯混合模型的参数,并且有一个用于计算似然度的成员函数。它完全不知道自己会被如何使用,它只提供获取其成员的接口。它不获取累计量(Accumulation),不更新参数(对于参数更新,参见MlEstimateDiagGmm类)。DiagGmm类存储参数的方式是:方差的倒数,以及均值乘以方差倒数的结果。这意味着,通过简单的内积操作就可以计算似然度。与HTK的gconst不同,Kaldi中的gconst是独立于均值的。

由于以这种方式调整高斯参数很不方便,我们提供了DiagGmmNormal类, 用于以简单直观的方式存储参数。同时,我们提供了DiagGmmDiagGmmNormal实 例互相转换的函数。大部分的参数更新代码作用于DiagGmmNormal类。

基于GMM的声学模型

AmDiagGmm类 表示一组DiagGmm对象,由pdf-id索引。该类不表示HMM-GMM模型,仅仅是一组GMM的集合。将其与HMM组合在一起由其他代码负责,主要是负责拓扑结构和转移概率部分的代码以 及负责整合解码图的代码(参见HMM的拓扑结构和状态转移的建模)。在这里需要指出的是,在声学模型中,我们没有只存储一个AmDiagGmm对象,而是同时保存了一个TransitionModel对象和一个AmDiagGmm对象。这是为了避免在存储器上写入太多的独立文件。这样做的原因是,高斯模型和转移概率的更新往往是同时进行的。这样做的初衷是,在创建其他类型的 模型时,我们可以将一个TransitionModel和一个目标模型的对象保存在同一个文件中。这样,那些只需要读取转移模型的程序(如创建解码图)就可以直接读取模型文件,而不需要知道其中声学模型的类型。

AmDiagGmm类是一个相对简单的对象,并不负责模型估计(参见AccumAmDiagGmm)和变换矩阵估计等工作。在Kaldi中,有其他的代码来负责这些工作,参见特征域和模型域变换

满协方差GMM

对于满协方差矩阵的GMM,我们创建了FullGmm类,其作用与DiagGmm相似,区别只在与协方差矩阵的形式。这个类主要是用来在SGMM建模中训练满协方差的广义背景模型(UBM)。唯一用于满方差GMM的命令行工具是用于训练全局混合模型的,也就是UBM。我们没有编写AmDiagGmm类的满方差版本以及对应的命令行工具。不过要实现这个功能也不是难事。

results matching ""

    No results matching ""