kaldi中解码图的构建一

解码图谱建立概要

解码图谱也就是我们构建的的:HCLG=H*C*L*G,这里

        G是对语法或者语言模型编码的受体,它的输入和输出是一样的;

        L是发音字典,它的输出是单词,输入是音素;

        C代表语境相关性,它的输出是音素,输入符号代表上下文相关音素;

        H包含了Hmm定义,它的输出符号代表上下文相关音素,输入符号是包含概率分布函数id和其他信息的状态转移id

这是标准方案,但是这里还有其它一些细节。我们想确保输出是确定化、最小化的。为了使HCLG是确定的,我们引入消歧符号。

我们尽可能的想保证HCLG是随机的;在传统的方案中,我们使用"push-weights"操作。我们确保随机性的方法是不同的,and is based on ensuring that no graph creation step "takes away" stochasticity。

如果想用一句话来总结我们的方法(很显然,一句话抓不住所有细节),这句话如下:

    HCLG=asl(min(rds(det(H' * min(det(C * min(det(L * G)))))))), 这里asl=="add-self-loops", rds=="remove-disambiguation symbols", H'是没有自循环的H。

Weight-pushing 不是这个方案的一部分,相反,只要G是随机的,我们就要确保图谱创建的任何阶段都不会阻止结果的随机性。当然,由于带有回退(backoff)的arpa格式语言模型用fst的表达方式,G一般都不是随机的,但是我们的方法至少确保这种非随机性"stays put", 而且也不会比开始的时候更糟,这种方法避免了Weight-pushing操作失败或者是方案更糟。

消歧符号

形如#1,#2,#3等的消歧符号通常被添加在lexicon的音素序列尾部,当一个音素序列是另一个音素序列的前缀或者出现在不止一个单词当中时,就要在音素序列后面加上消歧符号。这些符号是需要的,它们可以保证L * G是确定化的。我们也把消歧符号加到另外两个地方。我们在语言模型G的回退弧(backoff arcs)有一个#0,这可以确保G在删除空边后是确定化的(确定化算法确实删掉空边)。我们也在出现在fst C左支的空边(语音刚开始时)上添加#-1,这对于解决单词用空音节表示的细微问题很必要,例如,句子的开始结束符号<s>,</s>。

我们给出证明中间阶段(例如LG,CLG,HCLG)是确定化的总结,这对于我们的方案从不失败很重要。通过确定化,我们可以在删除空边后保证确定化。大致的步骤如下:

    首先,我们规定G必须是确定的,这也是需要#0的原因;然后,我们要L也是确定的,这样对于任何确定的G,L * G都是确定的 ;再次,The same goes for C, with L o G on the right instead of G。

有很多理论的细节需要充实,但是记住两条特性,对于L就足够了。

    1、L^-1不许函数化:L的任何输入序列都只有一个输出序列;对于任何线性的接收器(acceptor)A, A * L是一个线性transducer或者是空。

    2、L有双胞胎特性:there are no two states reachable with the same input-symbol sequence, that each have a cycle with the same input sequence but different weight or output sequence.

fst C传递器也是如此,我们相信我们脚本建立的这些传递器有这些性能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章