GrammarFst
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GrammarFst相关的知识,希望对你有一定的参考价值。
参考技术AGrammarFst是从多个FST中“缝合”在一起的FST,可以相互递归合并。 这仅限于左双音素语音环境)。此类并非继承自 fst::Fst ,也不支持其完整接口-仅支持以此类为的模板解码器所需的部分接口。
在GrammarFstTpl中将缝合在一起的基础FST用作模板,从而使您可以从任何类型的FST类中创建GrammarFst。
基础接口受OpenFst的 ReplaceFst (请参见其 replace.h )的启发,不同之处在于该接口处理的是左biphone语音上下文,从本质上讲,在grammar中有子FST的多个出口点和入口点--表示为非终止符的;和每当我们调用一个非终结符时的多个返回点。有关更多信息,请参见grammar(即 ../doc/grammar.dox )。
线程安全 :您不能从多个线程使用此对象;您应该使用拷贝构造函数创建此对象的轻量级副本,例如 new GrammarFst(this_grammar_fst) ,如果您想使用同一个GrammarFst从多个线程进行解码。
这个构造函数非常轻量的。 唯一的直接工作就是在提供的FST的 开始状态 下的弧上进行迭代,以设置适当的入口点。
nonterm_phones_offset : #nonterm_bos 的音素id
top_fst :语法的顶级FST,通常会在“ ifsts”中调用fsts。 “ ifsts”中的fsts也可以相互递归调用。 即使左递归也是允许的,尽管它的损失为零,但在解码时可能会爆炸。 当FST调用另一个时,调用点将具有两个特殊符号的序列,这些序列将被解码为: (#nonterm:foo,p1) (#nonterm_reenter,p2) 其中 p1 和 p2 (可能是真实音素或 #nonterm_bos )代表我们分别进入和离开子图的语音左上下文。
ifsts :ifsts是pairs的列表(非终止符,和该符号相对应的HCLG.fst)。非终止符必须是phones.txt中用户指定的那些非终止符,即,在phones.txt中名称如 #nonterm:foo 和 #nonterm:bar 的内容。 同样,在“ fsts”中,任何非终结符都不能出现多次。 ifsts可能为空,即使那没有多大意义
拷贝构造函数。 很有用,因为此对象不是线程安全的,因此不能被多个并行解码器线程使用,但是它很轻巧并且可以复制它而不会导致复制存储的FST。
这是弧边的标准表示:
这是FST的一些访问示例:
打印
绘制
汇总
以上是关于GrammarFst的主要内容,如果未能解决你的问题,请参考以下文章