Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
                }
            }
        }