private void CreateContextDependentSuccessors() { _cdHMMs = new HashMap <Unit, HashMap <Unit, List <IHMM> > >(); _senonesToUnits = new HashMap <SenoneSequence, List <Unit> >(); _fillerHMMs = new List <IHMM>(); _leftContextSilHMMs = new List <IHMM>(); var hmmIter = AcousticModel.GetHMMIterator(); while (hmmIter.MoveNext()) { IHMM hmm = hmmIter.Current; List <Unit> sameSenonesUnits; SenoneSequence senoneSeq = ((SenoneHMM)hmm).SenoneSequence; if ((sameSenonesUnits = _senonesToUnits.Get(senoneSeq)) == null) { sameSenonesUnits = new List <Unit>(); _senonesToUnits.Put(senoneSeq, sameSenonesUnits); } sameSenonesUnits.Add(hmm.Unit as Unit); if (hmm.Unit.IsFiller) { _fillerHMMs.Add(hmm); continue; } if (hmm.Unit.IsContextDependent()) { LeftRightContext context = (LeftRightContext)hmm.Unit.Context; Unit lc = context.LeftContext[0] as Unit; if (lc == UnitManager.Silence) { _leftContextSilHMMs.Add(hmm); continue; } Unit baseUnit = hmm.Unit.BaseUnit as Unit; HashMap <Unit, List <IHMM> > lcSuccessors; if ((lcSuccessors = _cdHMMs.Get(lc)) == null) { lcSuccessors = new HashMap <Unit, List <IHMM> >(); _cdHMMs.Put(lc, lcSuccessors); } List <IHMM> lcBaseSuccessors; if ((lcBaseSuccessors = lcSuccessors.Get(baseUnit)) == null) { lcBaseSuccessors = new List <IHMM>(); lcSuccessors.Put(baseUnit, lcBaseSuccessors); } lcBaseSuccessors.Add(hmm); } } _leftContextSilHMMs.AddRange(_fillerHMMs); }
private void CreateContextIndependentSuccessors() { var hmmIter = AcousticModel.GetHMMIterator(); CISuccessors = new List <IHMM>(); _senonesToUnits = new HashMap <SenoneSequence, List <Unit> >(); while (hmmIter.MoveNext()) { IHMM hmm = hmmIter.Current; if (!hmm.Unit.IsContextDependent()) { List <Unit> sameSenonesUnits; SenoneSequence senoneSeq = ((SenoneHMM)hmm).SenoneSequence; if ((sameSenonesUnits = _senonesToUnits.Get(senoneSeq)) == null) { sameSenonesUnits = new List <Unit>(); _senonesToUnits.Put(senoneSeq, sameSenonesUnits); } sameSenonesUnits.Add(hmm.Unit as Unit); CISuccessors.Add(hmm); } } }