本类方法:
private Set<UnitContext> getStartingContexts();得到此节点的开始场景集,开始场景为一个长度等于最大的右场景尺寸的unit[]集。如果此节点为空节点,则开始场景是此节点直接后续节点的所有开始场景的集合,否则的话从节点字的每一发音来创建开始场景。返回的是startingContexts属性。
private UnitContext getStartingContext(Pronunciation pronunciation);给定字的发音获得其开始单元场景。输入:pronunciation为节点字发音。返回的是表示此发音的开始单元场景。此UnitContext中的unit[]为pronunciation中的unit[]或者unit[]中的一部分。
Collection<UnitContext>getEndingContexts();获得此节点的尾部场景集。尾部场景为与节点的结尾相匹配的长度为最大左场景长度的unit[]集合。根据字的每一发音来根据unitContext,此unitContext中的unit[]为Arrays.copyOfRange(units,size - maxSize, size) 或units。Unit为发音的unit[]。
private void pullRightContexts();访问所有的后续GState即后续语法节点,把它们的开始场景加入到此gstate的右场景中即RightContexts中。
private GrammarArc[] getSuccessors();返回gstate相关的语法节点的直接后续弧。如果一个后续弧的语法节点中不存在任何字,则我们将会代替弧来代替那个节点,以避免过程中的出现循环。返回的是此gstate语法状态的后续弧组成的数组。
private void addLeftContext(Collection<UnitContext> context);把给定的左场景集加入到此gstate的左场景集中。Context为要添加的单元场景集
private void addLeftContext(UnitContext context);添加给定的单元场景到此gstate的左单元场景集中。Context为要添加的单元场景。
void pushLeftContexts(Set<GrammarNode>visitedSet, Collection<UnitContext> leftContext);把给定的左场景集添加入后续的每一个gstate中,即LeftContexts中。如果其中的一个后续的gstate的字是空的,即是空,那么继续把给定左场景集添加入空的gstate的所有后续gstate中。
void pushLeftContexts();访问此gstate的所有后续gstate,并把此gstate的结尾场景推入后续gstate的左场景中,在此方法中调用了pushLeftContexts(visitedSet, endingContext);来实现的。
private List<SearchState> getEntryPoints(ContextPaircontextPair);返回一个给定场景对的进入点,即entryPoints.get(contextPair);
public SentenceHMMState getEntryPoint();获得此gstate的自由场景的进入点。自由场景context-free,即左右单元场景都是单元静音场景的场景对。理想意义上:我们将会查看没有左场景的每一个进入点,但是那些是不存在的,所以我们仅需要一个有SILENCE静音场景的节点的第一个进入点。这假设在一个语法中的第一个节点有一个字为SIL。这种假设不是所有的时候都是合法的。
public void collectContexts();收集此gstate的右场景,把此gstate节点的结尾场景推入到下直接后续的节点集中。此方法仅调用:pullRightContexts();和
pushLeftContexts();
private UnitContextgetStartingContext(Pronunciation pronunciation);为给定的发音对象得到开始单元场景。返回的是一个单元场景对象,代表了发音的开始场景。
protected int getRightContextSize();获得右场景的长度。通过声学模型获得。
protected intgetLeftContextSize();获得左场景的长度。通过声学模型获得。
private intgetRightContextSize(Unit unit);获得感兴趣单元的最大右场景长度即尺寸。输入参数:unit为感兴趣的单元。如果单元是填充单元,则返回的是0,否则返回的是声学模型的右单元场景的长度尺寸。
private int getLeftContextSize(Unit unit);获得感兴趣单元的最大左场景长度即尺寸。输入参数:unit为感兴趣的单元。如果单元是填充单元,则返回的是0,否则返回的是声学模型的左单元场景的长度尺寸。
private Unit[] getRC(Unit[] units, int index, UnitContext right);根据右单元场景的尺寸,退出右单元场景和当前的单元为一个单元获得其右场景。输入参数:units为单元集,index为当前单元的索引。Right为退出的又单元场景。返回的是在输入单元数组中的当前单元的右单元数组表示右场景。
private Unit[]getLC(UnitContext left, Unit[] units, int index);根据左单元场景的尺寸,进入的左单元场景和当前的单元为一个单元获得其左单元(场景)。输入参数:units为单元集,index为在units中的当前单元的索引。left为进入的左单元场景。返回的是在输入单元数组中的当前单元的左单元数组表示左场景。
private void addExitPoint(ContextPair cp, SentenceHMMState state);添加一个退出点到此语法状态中。输入参数:cp为此状态的场景标签,为场景对。state为与标签相关的状态,为句hmm状态。得到cp对于的搜索状态列表,在列表中添加输入的状态。如果搜索状态列表为null,则新建一个搜索状态列表,并把cp和搜索状态列表放入退出 点中即exitPoints中,再搜索列表中添加输入的句hmm状态。
private SentenceHMMState getExistingState(SentenceHMMState state);输入参数为:state为要检查的状态。返回的是在ExistingState中的句hmm状态。如果有相同签名的状态存在则为true。检查在ExistingState中是否有一个状态与给定的退出状态相匹配。
public Collection<SearchState> getStates();返回由此gstate语法状态维护的所有状态。返回的是所有状态的集合。因为pstate状态是没有放在缓存中的,所以我们必须收集那些状态。其它的所有状态都存在于existingstates 缓存中。
private void addStateToCache(SentenceHMMState state);添加给定状态到状态缓存中。即添加入existingstates 属性中。
void dumpInfo();打印此gstate的信息。
void dumpDetails();打印此gstate的详细信息。
private void dumpNextNodes();打印此语法节点的直接后续语法节点的名字。
private void dumpExitPoints(Collection<List<SearchState>>eps);输入参数为:eps为退出点集合。打印出退出点和它们的目标状态。
private void dumpCollection(String name, Collection<?> collection);打印出给定的集合。Name为集合的名字。Collection为要打印的集合。
public String toString();返回此gstate的字符串表示。
private void T(String s);s为要跟踪的字符串。快速及讨厌的跟踪。跟踪字符串如果’tracing’为true的话。
protected void attachState(SentenceHMMStateprevState,SentenceHMMState nextState,float logLanguageProbablity, float logInsertionProbablity);用弧连接输入给定的两个状态。prevState为父状态,nextState为子状态。转移有给定的概率。logLanguageProbablity为log域的转移语音概率。logInsertionProbablity为log域的转移的插入概率。
private void connect(List<SearchState> sourceList,List<SearchState> destList, float logLangProb);在源列表中的所有状态连接到目标列表中的状态。sourceList为源状态集。destList为目标状态集。
public void connect();连接所有的GState。每一个GState现在都有一个退出点表即此表存储了所有的退出点。这些退出点表示了此节点的尾部状态。那些尾部状态中的每一个都被一个contextpair对象所标记,这显示了转移的左场景(退出场景)和右场景(进入的场景)。为了连接到一个状态,连接需遵循以下步骤:1,迭代通过此(语法节点)状态的所有语法后续(弧)。2,得到与退出点相匹配的进入点。3,连接它们。即Hook them up。注意:对于一个有1000个字的任务,这将会涉及到35,000,000次连接检查和2,000,000的连接。在计算概率时,用发音的数目来调整语音概率,如果一个字有3中不同发音的方式,则每一个发音为总概率的1/3。
private SentenceHMMState attachUnit(PronunciationState parent,
SentenceHMMState tail, Unit[]units, int which,UnitContext leftContext, UnitContext rightContext);