Kaldi中解码图的建立

首先,我们不详细介绍有限状态转换以及它在语音识别中的应用。

需要了解的,可以看"Speech Recognition with Weighted Finite-State Transducers" by Mohri, Pereira and Riley (in Springer Handbook on Speech Processing and Speech Communication, 2008)。我们要用的主要方法那里面都有介绍,但是一些细节,尤其是像怎样处理混淆符,怎样处理weight-pushing可能与那篇论文中的就不一样了。

Overview of graph creation

整个解码网络都是围绕HCLG = H o C o L o G的图来建立的。

  • G是用来编码语法或者语言模型的接收器(i.e:它的输入和输出符号是一样的)
  • L是发声词典;输出是词,输入是音素。
  • C表示上下文关系,输出是音素,输入是上下文相关的音素例如N个音素组成的窗。具体看Phonetic context windows里面的介绍。
  • H包含HMM的定义;输出符表示上下文相关的音素,输入是transitions-ids(转移id),transitions-ids是编码pdf-id或者其他信息(自转或向后转),具体看( Integer identifiers used by TransitionModel)

以上是标准方法,然而还有好多细节没有说明。我们想确保输出是确定化的和最小化的,为了让HCLG确定化,我们插入了消歧符。关于消歧符更多的介绍,看下面的Disambiguation symbols

我们也想让HCLG尽可能的随机。传统的方法是通过"push-weights"来达到这种效果。我们确保随机性方法与传统的不同,是基于确保没有消除随机性的图构建步骤;具体看Preserving stochasticity and testing it

如果我们用一行公式来总结我们的方法(很明显一行不能覆盖所有的细节),那一行应该是下面这样,asl=="add-self-loops" rds=="remove-disambiguation-symbols", H' 是 H不带自环的:

HCLG = asl(min(rds(det(H' o min(det(C o min(det(L o G))))))))

Weight-pushing没有被我们采用。相反,我们的目标是只要G是随机的,这样就可以确保图的构建过程中没有消除结果随机性的。当然,G不会是绝对随机的,因为带补偿的Arpa语言模型是被用FSTs表示,但是至少我们的方法确保不随机性的部分不会增加,不会比开始变的更糟糕;这种方法避免了"push-weights"操作失败或者是变更坏的危险。

results matching ""

    No results matching ""