下面这几章讲WFST中的优化操作,包括空转移去除(epsilon removal),确定化操作(determinization),权重推移(weight pushing)和最小化操作(minimization)。本章重点介绍空转移去除和确定化操作。
epsilon removal是用来去除空转移(WFST中输入标签和输出标签都为空时才算)的操作,如果不进行这一步而直接进行determinzation的话也是可以的,因为我们把空符号当作一个regular的符号,但是这样的结果也不是确定的。
我们先来看一下效果图:
首先我们定义一个状态集合叫epsilon closure,它是当前状态通过若干空转移( ε:ε )可以到达的状态的集合,举个例子,上图(a)的初始状态0状态的epsilon closure就是{1,2},
然后有了上面的定义我们就找出每个状态的epsilon closure,
然后找出epsilon closure中的每个状态转移到另一个状态不为空的路径,记录它的所有信息,
最后添加新的转移,从源状态到不为空的那个转移所到达的状态,输入输出信息不变,权重相 ⨂ ,然后把空转移去除掉。
结合上图的例子,0状态的epsilon closure是{1,2},源状态就是0,对于1状态,它到3状态的转移为c不为空,则新生成的转移就是从0状态到3状态,标签为c,权重为0到1和1到3的权重相加(对tropical半环);同样对2状态来说,它到4状态的转移为