Ejemplo n.º 1
0
      la->end = lat->lnodes+2+i;

      la->lmlike = log(1.0/(float) (voc->nwords));

      la++;

   }

   for (i = 0; i < voc->nwords; i++) {

      la->start = lat->lnodes+2+i;

      la->end = lat->lnodes+nNode-2;

      la->lmlike = 0.0;

      la++;

   }

   /* finally overwrite start/end !NULL words if sil at start/end */

   if (bStartId != NULL) {

      wd = GetWord(voc,bStartId,TRUE);

      ln = lat->lnodes; ln->word = wd;

      wd = GetWord(voc,bEndId,TRUE);

      ln = lat->lnodes+nNode-1; ln->word = wd;

   }

   return lat;

}





/*ProcessBoBiGram: Convert back-off bigram in nLM into lattice */ 

Lattice *ProcessBoBiGram(MemHeap *latHeap, Vocab *voc, NGramLM *nLM)

{

   int nNode,nArc;

   NEntry *ne;

   SEntry *se;

   Word wd,fromWd,toWd;

   LNode *ln,*fromNode,*toNode;
Ejemplo n.º 2
0
      bigramLm = ReadLModel(&gstack, ipFn);

      if (bigramLm->type != boNGram)

         HError(3030,"HBuild: File specified is not a back-off bigram");

      lat = ProcessBiGram(&gstack,&voc,bigramLm);

      SaveLattice(lat,latFn,format);

      break;

   case multiLat:

      if (trace & T_TOP)

         printf("Reading input lattice from file %s\n",ipFn);

      ipLat = LoadLattice(&buildStack,ipFn,&voc,FALSE);

      if (ipLat->subList!=NULL) {

         if (trace & T_TOP)

            printf("Expanding multi-level lattice\n");

         lat = ExpandMultiLevelLattice(&buildStack,ipLat,&voc);

      }

      else

         lat = ipLat;

      SaveLattice(lat,latFn,format);

      break;

   case wordLoop:

      if (trace & T_TOP)

         printf("Building word loop\n");

      lat = ProcessWordLoop(&gstack,&voc);

      SaveLattice(lat,latFn,format);

      break;

   case wordPair:

      lat = ProcessWordPair(&gstack,&voc,ipFn);

      SaveLattice(lat,latFn,format);
Ejemplo n.º 3
0
         if (NextArg()!=STRINGARG)

            HError(3019,"HBuild: Matrix Bigram file name expected");

         ipFn = GetStrArg(); 

         break;

      case 'n':

         if (bType != unknown)

            HError(3019,"HBuild: Can only specifiy one of -m, -n, -w, -x");

         bType = boBiGram;

         if (NextArg()!=STRINGARG)

            HError(3019,"HBuild: Back-off Bigram file name expected");

         ipFn = GetStrArg(); 

         break;

      case 's':

         if (NextArg() != STRINGARG)

            HError(3019,"HBuild: Bigram ENTER label name expected");

         enterId=GetLabId(GetStrArg(),TRUE);

         if (NextArg() != STRINGARG)

            HError(3019,"HBuild: Bigram EXIT label name expected");

         exitId=GetLabId(GetStrArg(),TRUE);

         break;

      case 't':

         if (NextArg() != STRINGARG)

            HError(3019,"HBuild: Bracket start label name expected");

         bStartId=GetLabId(GetStrArg(),TRUE);

         if (NextArg() != STRINGARG)

            HError(3019,"HBuild: Bracket end label name expected");

         bEndId=GetLabId(GetStrArg(),TRUE);

         break;

      case 'u':

         if (NextArg() != STRINGARG)

            HError(3019,"HBuild: Unknown label name expected");

         unknownId=GetLabId(GetStrArg(),TRUE);

         break;
Ejemplo n.º 4
0
            HError(3019,"HBuild: Can only specifiy one of -m, -n, -w, -x");

         bType = wordPair;

         if (NextArg()!=STRINGARG)

            HError(3019,"HBuild: Word pair grammar file name expected");

         ipFn = GetStrArg(); 

         break;

      case 'x':

         if (bType != unknown)

            HError(3019,"HBuild: Can only specifiy one of -m, -n, -w, -x");

         bType = multiLat;

         if (NextArg()!=STRINGARG)

            HError(3019,"HBuild: Multi-level lattice file name expected");

         ipFn = GetStrArg(); 

         break;

      case 'z':

         zapUnknown = TRUE; break;    

      case 'T':

         trace = GetChkedInt(0,511,s); break;

      default:

         HError(3019,"HBuild: Unknown switch %s",s);

      }

   } 

   if (NextArg()!=STRINGARG)

      HError(3019,"HBuild: Word List file name expected");

   wordListFn = GetStrArg();

   if (NextArg()!=STRINGARG)

      HError(3019,"HBuild: output lattice file name expected");

   latFn = GetStrArg();

   if (bType == unknown) bType = wordLoop;

   if (saveLatBin) format |= HLAT_LBIN;   

   /* Read the word-list into a Vocab data structure */

   InitVocab(&voc);

   if(ReadDict(wordListFn, &voc)<SUCCESS)

      HError(3013,"HBuild: ReadDict failed");

   switch (bType) {

   case matBiGram:

      if (trace & T_TOP)

         printf("Reading bigram from file %s\n",ipFn);

      bigramLm = ReadLModel(&gstack, ipFn);

      if (bigramLm->type != matBigram)

         HError(3030,"HBuild: File specified is not a matrix bigram");

      lat = ProcessBiGram(&gstack,&voc,bigramLm);

      SaveLattice(lat,latFn,format);

      break;

   case boBiGram:

      if (trace & T_TOP)
Ejemplo n.º 5
0
/* LatTraceBack

     produce Lattice from the wordEnd hypotheses recoded in dec
*/
Lattice *LatTraceBack (MemHeap *heap, DecoderInst *dec)
{
   Lattice *lat;
   int i, nnodes = 0, nlinks = 0;
   WordendHyp *sentEndWE;

   if (!dec->net->end->inst)
      HError (-9999, "LatTraceBack: end node not active");
   else
      printf ("found %d tokens in end state\n", dec->net->end->inst->ts->n);

   if (buildLatSE && dec->net->end->inst && dec->net->end->inst->ts->n == 1)
      sentEndWE = dec->net->end->inst->ts->relTok[0].path;
   else {
      if (buildLatSE)
         HError (-9999, "no tokens in sentend -- falling back to BUILDLATSENTEND = F");
      sentEndWE = BuildLattice (dec);
   }

   if (!sentEndWE) {
      HError (-9999, "LatTraceBack: no active sil wordend nodes");
      if (forceLatOut) {
         HError (-9999, "LatTraceBack: forcing lattice output");
#ifdef MODALIGN
         if (dec->modAlign) 
/*             HError (-9999, "LatTraceBack: forced lattice output not supported with model-alignment"); */
            sentEndWE = BuildForceLat (dec);
         else 
#endif
            sentEndWE = BuildForceLat (dec);
      }
   }
   if (!sentEndWE)
      return NULL;
   
   /* recursively number weHyps (nodes), count weHyp + altweHyp (links) */
   LatTraceBackCount (dec, sentEndWE, &nnodes, &nlinks);

   ++nnodes;    /* !NULL lattice start node */
   printf ("nnodes %d nlinks %d\n", nnodes, nlinks);

   /*# create lattice */
   lat = NewLattice (heap, nnodes, nlinks);

   /* #### fill in info (e.g. lmscale, inspen, models) */
   lat->voc = dec->net->voc;
   lat->utterance = dec->utterFN;
   lat->vocab = dec->net->vocabFN;
   lat->hmms = dec->hset->mmfNames ? dec->hset->mmfNames->fName : NULL;
   lat->net = dec->lm->name;
   lat->lmscale = dec->lmScale;
   lat->wdpenalty = dec->insPen;
   lat->prscale = dec->pronScale;
   lat->framedur = 1.0;
      
   for (i = 0; i < nnodes; ++i)
      lat->lnodes[i].hook = NULL;

   {
      int na;
      na = 0;
      /* create lattice nodes & arcs */
      Paths2Lat (dec, lat, sentEndWE, &na);
   }
   
#ifdef MODALIGN
   if (dec->modAlign)
      CheckLAlign (dec, lat);
#endif
   return lat;
}