/** * /// Creates a unit search state for the given unit node * * /// @param endNode the unit node * /// @param previous the previous state * /// @return the search state */ ISearchStateArc CreateEndUnitArc(EndNode endNode, LexTreeState previous) { float smearProbability = Parent.GetUnigramSmear(endNode) + previous.SmearTerm; float languageProbability = smearProbability - previous.SmearProb; float insertionProbability = Parent.CalculateInsertionProbability(endNode); return(new LexTreeEndUnitState(endNode, WordHistory, previous.SmearTerm, smearProbability, languageProbability, insertionProbability, Parent)); }
/** * /// Creates a word search state for the given word node * * /// @param wordNode the wordNode * * * /// @return the search state for the wordNode */ protected ISearchStateArc CreateWordStateArc(WordNode wordNode, HMMNode lastUnit, LexTreeState previous) { //TODO: UNCOMMENT DURING RELEASE //this.LogInfo("CWSA " + wordNode + " fup " /*+ fixupProb*/); float languageProbability = Parent.LogOne; Word nextWord = wordNode.GetWord(); float smearTerm = previous.SmearTerm; if (nextWord.IsFiller && !Equals(nextWord, Parent.SentenceEndWord)) { return(new LexTreeWordState(wordNode, lastUnit, _wordSequence, smearTerm, Parent.LogOne, languageProbability, Parent)); } WordSequence nextWordSequence = _wordSequence.AddWord(nextWord, Parent.MaxDepth); float probability = Parent.LanguageModel.GetProbability(nextWordSequence) * Parent.LanguageWeight; smearTerm = Parent.GetSmearTermFromLanguageModel(nextWordSequence); //this.LogInfo("LP " + nextWordSequence + " " /*+ logProbability*/); // subtract off the previously applied smear probability languageProbability = probability - previous.SmearProb; //Boolean collapse = (probability.depth < parent.maxDepth - 1) || !parent.fullWordHistories; if (Equals(nextWord, Parent.SentenceEndWord)) { return(new LexTreeEndWordState(wordNode, lastUnit, nextWordSequence.Trim(Parent.MaxDepth - 1), smearTerm, Parent.LogOne, languageProbability, Parent)); } return(new LexTreeWordState(wordNode, lastUnit, nextWordSequence.Trim(Parent.MaxDepth - 1), smearTerm, Parent.LogOne, languageProbability, Parent)); }
/** * /// Creates a unit search state for the given unit node * * /// @param hmmNode the unit node * * /// @return the search state */ public ISearchStateArc CreateUnitStateArc(HMMNode hmmNode, LexTreeState previous) { ISearchStateArc arc; float insertionProbability = Parent.CalculateInsertionProbability(hmmNode); float smearProbability = Parent.GetUnigramSmear(hmmNode) + previous.SmearTerm; float languageProbability = smearProbability - previous.SmearProb; //if we want a unit state create it, otherwise //get the first hmm state of the unit if (Parent.GenerateUnitStates) { arc = new LexTreeUnitState(hmmNode, WordHistory, previous.SmearTerm, smearProbability, languageProbability, insertionProbability, Parent); } else { IHMM hmm = hmmNode.HMM; arc = new LexTreeHmmState(hmmNode, WordHistory, previous.SmearTerm, smearProbability, hmm.GetInitialState(), languageProbability, insertionProbability, null, Parent); } return(arc); }