kaldi007 -- hmm1

HMM拓扑和转移模型

介绍

在本页中,我们将介绍HMM拓扑Kaldi中是如何表示,以及我们如何建模和训练HMM转移 我们简要提到这与决策树如何互动 决策树的充分介绍在How decision trees are used in KaldiDecision tree internals 有关此组中的类和函数的列表,请参阅Classes and functions related to HMM topology and transition modeling

HMM拓扑

HmmTopology类是用户向工具包指定phoneHMM的拓扑结构的方式。 在正常的配方中,脚本在文件中创建HmmTopology对象的文本形式,然后将其提供给命令行程序。 要给出这个对象包含的一些想法,下面是正常情况下的HmmTopology对象的文本格式(3状态Bakis模型):

 <Topology>

 <TopologyEntry>

 <ForPhones> 1 2 3 4 5 6 7 8 </ForPhones>

 <State> 0 <PdfClass> 0

 <Transition> 0 0.5

 <Transition> 1 0.5

 </State>

 <State> 1 <PdfClass> 1

 <Transition> 1 0.5

 <Transition> 2 0.5

 </State>

 <State> 2 <PdfClass> 2

 <Transition> 2 0.5

 <Transition> 3 0.5

 </State>

 <State> 3

 </State>

 </TopologyEntry>

 </Topology>

在这个特定的HmmTopology对象中有一个TopologyEntry,它涵盖了phone18(所以在这个例子中只有八个phone,它们都共享相同的拓扑)。有三种发射状态(即具有与它们相关联的pdf发射特征向量)的状态);每个都有自环和向下一个状态的过渡。还有第四个,不发射状态,状态3(没有<PdfClass>条目),它没有转移(隐含地,它按照序列连接到下一个phone)。这是这些拓扑条目的标准特征; Kaldi将第一个状态(状态0)视为开始状态,最后一个状态(最后一个状态)应该始终是不发生的,并且没有任何过渡。您可以将转换概率视为与最终状态相当于HMM中的最终概率。在这个特定示例中发出的所有状态在它们中可以具有不同的pdf(因为PdfClass数字都是不同的)。我们可以通过使<PdfClass>数字相同来执行绑定。 HmmTopology对象中给出的概率是用于初始化训练的概率;被训练的概率是特定于上下文相关HMM的,并存储在TransitionModel对象中。 TransitionModelHmmTopology对象存储为类成员,但请注意,在初始化TransitionModel对象后,HmmTopology对象的转换概率通常不会使用。然而,这是一个例外。对于非最终的非执行状态(即那些具有转换但不具有<PdfClass>条目的条件),Kaldi不会训练转换概率,而是使用HmmTopology对象中给出的概率。不支持非发射状态的可训练转换概率的决定简化了我们的训练机制,由于不具有转移的非发射状态是不正常的,我们认为这不是很大的损失。

PDF-

pdf类是与HmmTopology对象相关的概念。 HmmTopology对象为每个phone指定一个原型HMM原型HMM”的每个编号状态都有两个变量“forward_pdf_class”“self_loop_pdf_class”“self_loop_pdf_class”是与自环转换相关联的一种pdf类。默认情况下与“forward_pdf_class”相同,但它可用于定义较少对流的HMM拓扑,其中自环和向前转换上的pdf不同。允许只有自环的pdf类的决定是不同的,而不包含完全的表示,其中在HMM中的所有转换的pdf可能是独立的,被做为妥协,以允许与以前的Kaldi版本兼容,同时支持我们的链模型”AKA无格子MMI中使用的拓扑。如果两个状态具有相同的pdf_class变量,那么如果它们在相同的语音环境中,则它们将始终共享相同的概率分布函数(p.d.f.)。这是因为决策树代码没有直接”HMM状态,只能看到pdf类。在正常情况下,pdf类与HMM状态索引(例如,0,12)相同,但是pdf类为用户强制共享提供了一种方式。如果您想要更丰富的过渡建模,但是希望离开声学模型,那么这主要是有用的。 pdf类的另一个功能是指定非测试状态。如果一些HMM状态的pdf类被设置为常数kNoPdf = -1,则HMM状态是不发送的(它没有相关联的pdf)。这可以简单地通过以对象的文本形式省略<PdfClass>标签和关联的数字来实现。

预期特定原型HMM的一组pdf类将从零开始并且是连续的(例如,0,1,2)。这是为了方便构图代码,不会导致任何一般性的损失

转换模型(TransitionModel对象)

TransitionModel对象存储有关HMM拓扑的转移概率和信息(它包含HmmTopology对象)。 构图代码取决于TransitionModel对象来获取拓扑和转移概率(它还需要一个ContextDependencyInterface对象来获取与特定语音环境相关联的pdf-id)。

Kaldi我们如何建模转移概率

基于很多转移建模代码的主意如下:我们决定使上下文相关HMM状态的转移概率取决于以下五个事项(您可以将它们视为5元组):

phone(我们的HMM

   HMM状态(由HmmTopology对象解释,即通常为0,12

 forward-pdf-id(即与状态相关联的前向转换pdf的索引)

 self-loop-pdf-id(即与状态相关联的自循环pdf的索引)

 HmmTopology对象中的转移索引

这四个项目中的最后一个可以被视为编码HmmTopology对象中的目标HMM状态。训练转移概率取决于这些事物的原因是,这是我们可以建模转移概率而不增加编译的解码图的大小的最细粒度的方式;训练转移概率也是非常方便的。在实践中,使用传统的设置,可能没有任何差异来像这样精确地对转移进行建模,而在单phone级别共享转换的HTK方法可能就足够了。

transition-ids等的原因

TransitionModel对象在初始化时设置一些整数映射,并由代码的其他部分用于执行这些映射。除了上述数量之外,还有一些称为转换标识符(transition-ids),转换索引(与transition-ids不一样的事件)和转换状态。我们引入这些标识符和关联映射的原因是为了使我们能够使用完全基于FST的训练配方。最基于FST的最自然的设置将会在输入标签上使用我们所称的pdf-id。然而,请记住,考虑到我们的树形算法,将不可能将唯一的pdf-id映射到phone,这将使得难以从输入标签序列映射到phone序列,并且由于一些原因是不方便的;一般来说,使用FST中的信息来训练转移概率也很困难。为此,我们在FST的输入标签上放置了称为transition-ids的标识符,这些标识符可以映射到pdf-id,也可以映射到phone和原型HMM中的特定转换(如HmmTopology对象中给出的)。

TransitionModel使用的整数标识符

TransitionModel接口中使用以下类型的标识符。所有这些都表示为int32类型。请注意,这些数量中的一些是基于1,一些是基于零的。我们已经尝试在工具包中尽可能多地避免使用基于1的索引,因为它们与C ++数组索引不兼容,但是由于OpenFst作为特殊情况(意为特殊符号epsilon)为零,所以我们决定允许在FST上频繁显示为输入符号的数量的索引。最重要的是,transition-ids基于1。由于我们没有想像出现FST标签非常频繁的pdf-id,并且由于我们经常将它们用作C ++数组索引,所以我们决定使它们为零,但如果它们显示为FST输入符号(这很少),那么我们给他们添加一个当读取TransitionModel代码时,请注意,当使用基于数量的数据索引数组时,会有一些情况,我们减去一,有些情况下我们没有;这是记录成员变量被声明的位置。在任何情况下,这样的代码不在公共界面,所以它不应该导致太多的混乱。 TransitionModel中使用的各种整数的完整列表如下所示:

phone(基于1):这种类型的标识符在整个工具包中使用;它可以通过OpenFst符号表转换为phone名称。不一定是连续的(工具包允许phone索引中的跳过)。

hmm状态(从零开始):这是HmmTopology :: TopologyEntry类型的索引。在正常情况下,它是{012}之一。

pdf或者pdf-id(从零开始):这是原始由决策树聚类分配的p.d.f.的索引; (见PDF identifiers)。系统通常会有几千个pdf-id

transition-statetrans_state(基于1):这是由TransitionModel本身定义的索引。每个可能的三phonehmm状态,pdf)映射到一个独特的过渡状态。想想它是HMM状态的最细粒度,其中过渡被分别估计。

transition-indextrans_index(从零开始):这是HmmTopology :: HmmState类型的“transitions”数组的索引。它将特定过渡状态的转换编号。

transition-idtrans_id(基于1):它们中的每一个对应于转换模型中的唯一转移概率。存在从(transition-statetransition-index)到transition-id的映射,反之亦然。

过渡建模代码中也有以下概念参考:

元组意味着可以从过渡状态映射的4元组(phonehmm状态,转移pdf,自环pdf)。

transition-id和到transition-id转换对转移状态,转移索引)。


猜你喜欢

转载自blog.csdn.net/u012361418/article/details/73075275
HMM
007