LatticeOptimizer API

<span style="font-size:24px;">public class LatticeOptimizer
本类用来collapse即收缩所有相等的路径在lattice中的。在一个lattice中的results是确定(每有节点有到2个或更多相等节点的边)和最小化的(没有节点的边来自于2个或更多个相等节点)。
本类的属性:
 protected final Lattice lattice;为要优化的lattice。
本类的构造方法:
  public LatticeOptimizer(Lattice lattice);给定参数创建一个新的lattice优化器对象。
本类的方法:
  public void optimize();对lattice进行优化处理。优化lattice的代码。一个理想化的lattice把所有相同的路径当做原点(the original),但是有很少的节点和边。注意在lattice中的所有方法它是很容易的改动对equivalent即相等节点和边的定义的。例如:一个相等节点也许会有相同的字,但是其开始和结束是不同时刻的。为了对equivalent另外定义的试验,仅需创建一个lattice的超类。
 protected void optimizeForward();使lattice变得确定性,使得节点没有到相同节点的多条边,边了输出边,指向下节点。考虑到来自于相同节点的到2个相同节点的2边。用一条到一个节点的边来代替原来的到2个节点的2边。
A --> B --> C \--> B' --> Y    其中B和B'是相等的。此上被A --> B" --> C \--> Y  所代替。其中B''为B和B'的合并merge。注意相同的节点必须由一样的输入边例如: A --> B \ \ X --> B' B和B'是不相同的由于其输入边是不一样的。
protected boolean optimizeNodeForward(Node n);查找到相同节点的2输入边。用一条边到相同节点的合并后的节点代替。如果节点的输入边相同,并有相同的标记,则节点是相同的。合并节点有一个从"form"到"to"边。输入为n,返回true,如果节点n需要一个前向优化。
 protected boolean equivalentNodesForward(Node n1, Node n2) ;如果节点有来自于相同节点的输入边,并有着相同的标记(token ,开始和结束时间),则节点是具有相同前向的。返回为true。如果输入n1和n2节点是相同前向节点。
  protected boolean equivalentNodeLabels(Node n1, Node n2);2个节点的内容是否相同即其token,开始和结束时间是否相同。如果输入的2个节点有相同的labels则返回为true。必须是其字和开始及结束时间都相同才返回为true。
protected void mergeNodesAndEdgesForward(Node n, Edge e1, Edge e2);给定来自于节点n的到节点n1的边1,到节点n2的边2.合并边1和边2就是合并边1和边2的得分,创建的n'是n1和n2的合并。需要到合并节点的输出边(指向下节点)进行必要的处理。
private double mergeAcousticScores(double score1, double score2) ;提供一个单独的方法来合并声学得分,以便转换到声学得分怎样仅在一个点被合并。返回的是合并后的得分。本类此方法返回的是输入2个得分中的最大值,而非其和。
 private double mergeLanguageScores(double score1, double score2);与声学得分的合并处理一样只是此是语言得分。
 protected void optimizeBackward();本质上与前向处理是一样的,最小化lattice的确定,以便没有节点有来自于相同节点的多条边。考虑到来自于相同节点的2边到一个单独的节点,用一条来自于1个节点的边来代替原来的。例如:A --> B --> C X --> B' --/ 其中B和B'是相同的。此被A --> B" --> C X --/ 代替。其中B''为B和B'的合并。注意相同节点必须有相同的边。如:A --> X \ \ \ A' --> B  其中A与A'是不相同的,因为其输出边是不同的。
  protected boolean optimizeNodeBackward(Node n);查看来自于相同节点的2个输入边。进行合并操作。如果节点n需要后向优化返回为true。
protected boolean equivalentNodesBackward(Node n1, Node n2);节点的2个输入前续节点是否有着相同的labels。即两个输入节点是否为相同的后向节点。如果输入2个节点有着不同的离开边则是2个节点是不同的,如果不匹配也是不同的即不等的。
 protected void mergeNodesAndEdgesBackward(Node n, Edge e1, Edge e2) ;合并后向节点和边。本质上与前向处理是一样的。
protected void removeHangingNodes() ;移除那些没有边到达它们的所有节点但是并不包括<s>和</s>即句的结束和开始标志字。此处理后使得lattice的每一条路径都表示一句话即包括<s>和</s>的字序列。</span>



你可能感兴趣的:(sphinx,语音识别)