亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? hlat.c

?? 隱馬爾科夫模型工具箱
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* ----------------------------------------------------------- *//*                                                             *//*                          ___                                *//*                       |_| | |_/   SPEECH                    *//*                       | | | | \   RECOGNITION               *//*                       =========   SOFTWARE                  */ /*                                                             *//*                                                             *//* ----------------------------------------------------------- *//* developed at:                                               *//*                                                             *//*      Speech Vision and Robotics group                       *//*      Cambridge University Engineering Department            *//*      http://svr-www.eng.cam.ac.uk/                          *//*                                                             *//* author: Gunnar Evermann <ge204@eng.cam.ac.uk>               *//* ----------------------------------------------------------- *//*         Copyright:                                          *//*         2001-2002  Cambridge University                     *//*                    Engineering Department                   *//*                                                             *//*   Use of this software is governed by a License Agreement   *//*    ** See the file License for the Conditions of Use  **    *//*    **     This banner notice must not be removed      **    *//*                                                             *//* ----------------------------------------------------------- *//*       File: HLat.c:  Lattice Manipulation                   *//* ----------------------------------------------------------- *//*#### todo:     - implement lattice oracle WER calculation     - allow batch processing?*/char *hlat_version = "!HVER!HLat:   3.2 [CUED 09/12/02]";char *hlat_vc_id = "$Id: HLat.c,v 1.3 2002/12/19 16:37:11 ge204 Exp $";#include "HShell.h"#include "HMem.h"#include "HMath.h"#include "HWave.h"#include "HAudio.h"#include "HParm.h"#include "HLabel.h"#include "HModel.h"#include "HUtil.h"#include "HDict.h"#include "HNet.h"#include "HLM.h"#include "HLat.h"/* ----------------------------- Trace Flags ------------------------- */#define T_TOP  00001#define T_PRUN 00002#define T_FB   00004#define T_EXP  00010#define T_MEM  00020#define T_TRAN 00040static int trace=0;static ConfParam *cParm[MAXGLOBS];      /* config parameters */static int nParm = 0;/* --------------------------- Global Flags -------------------------- */static LabId startWord;         /* word at start of Lattice (!SENT_START) */static LabId endWord;           /* word at end of Lattice (!SENT_END) */static LabId startLMWord;       /* word at start in LM (<s>) */static LabId endLMWord;         /* word at end in LM (</s>) */static LabId nullWord;          /* null word in Lattices (!NULL) */static MemHeap slaHeap, slnHeap;/* MHEAPs for use in LatExpand() *//* --------------------------- Prototypes ---------------------------- */#ifndef NO_LAT_LMtypedef struct _SubLNode SubLNode;typedef struct _SubLArc SubLArc;struct _SubLNode {   union {      LMState lmstate;      LNode *newln;   } data;   SubLArc *foll;   SubLNode *next;};struct _SubLArc {   LogFloat lmprob;   SubLNode *end;   LArc *la;   SubLArc *next;};#endif/* --------------------------- Initialisation ---------------------- *//* EXPORT->InitLat: register module & set configuration parameters */void InitLat(void){   int i;   Register(hlat_version,hlat_vc_id);   nParm = GetConfig("HLAT", TRUE, cParm, MAXGLOBS);   if (nParm>0){      if (GetConfInt(cParm,nParm,"TRACE",&i)) trace = i;   }#ifndef NO_LAT_LM   CreateHeap (&slaHeap, "LatExpand arc heap", MHEAP, sizeof (SubLArc), 1.0, 1000, 128000);   CreateHeap (&slnHeap, "LatExpand node heap", MHEAP,sizeof (SubLNode), 1.0, 1000, 32000);#endif}/* --------------------------- Lattice processing ------------------- *//* LatCheck     check lattice for consistency: single start & end nodes; no cycles.*/void LatCheck (Lattice *lat){   int i, nStart, nEnd;   LNode *ln;   LNode **topOrder;   /* check for unique start and end nodes */   nStart = nEnd = 0;   for (i = 0, ln = lat->lnodes; i < lat->nn; ++i, ++ln) {      if (!ln->pred)         ++nStart;      if (!ln->foll)         ++nEnd;   }   if (nStart != 1)      HError (8622, "HLat: lattice has %d start nodes (should be 1)", nStart);   if (nEnd != 1)      HError (8622, "HLat: lattice has %d end nodes (should be 1)", nEnd);   /* check wheter lat is a DAG ( <=> top order exists). */   topOrder = (LNode **) New (&gcheap, lat->nn * sizeof(LNode *));   if (!LatTopSort (lat, topOrder))      HError (8622, "HLat: lattice contains cylces");   Dispose (&gcheap, topOrder);}/* FixPronProbs     replace pronunciation probabilities in lattices with values taken from     the dictionary*/void FixPronProbs (Lattice *lat, Vocab *voc){   int i, v;   LNode *ln;   Pron pron;   LArc *la;   for (i = 0, ln = lat->lnodes; i < lat->nn; ++i, ++ln) {      if (ln->word != voc->nullWord) {         if (ln->v > ln->word->nprons)            HError (8621, "FixPronprbs: lattice refers to non-existing pron");         pron = ln->word->pron;         for (v = 2; v <= ln->v; ++v)            pron = pron->next;         if (pron->pnum != ln->v)            HError (8621, "FixPronprbs: dict pron numbering invalid");                  for (la = ln->pred; la; la = la->parc)            la->prlike = pron->prob;      }      else {         for (la = ln->pred; la; la = la->parc)            la->prlike = 0.0;      }   }}/* LatStartNode     return lattice start node     ###GE: maybe store this in Lattice structure to save time?*/LNode *LatStartNode (Lattice *lat){   int i;   LNode *ln;   for (i = 0, ln = lat->lnodes; i < lat->nn; ++i, ++ln)      if (!ln->pred)         return ln;   HError (8622, "HLat: lattice has no start node");   return NULL;         /* make compiler happy */}/* LatEndNode     return lattice end node     ###GE: maybe store this in Lattice structure to save time?*/LNode *LatEndNode (Lattice *lat){   int i;   LNode *ln;   for (i = 0, ln = lat->lnodes; i < lat->nn; ++i, ++ln)      if (!ln->foll)         return ln;   HError (8622, "HLat: lattice has no end node");   return NULL;         /* make compiler happy */}/* helper function for LatTopSort()   number preceeding nodes depth first */void LatTopSortVisit (LNode *ln, int *time){   LArc *la;   ln->n = -2;          /* mark node as seen, but not numbered, yet (GRAY in CLR) */   for (la = ln->pred; la; la = la->parc)      if (la->start->n == -1)         LatTopSortVisit (la->start, time);      ++(*time);   ln->n = *time;}/* LatTopSort     sort lattice nodes in topological order     returns array of LNode pointers.     uses depth first traversal (in reverse (pred) direction)      based on [CLR:1990], p. 485 */Boolean LatTopSort (Lattice *lat, LNode **topOrder){   int time = -1;       /* new numbering will start at 0 */   int i;   LNode *ln;   LArc *la;   Boolean isDAG = TRUE;   for (i = 0, ln = lat->lnodes; i < lat->nn; ++i, ++ln)      ln->n = -1;        /* mark node as unseen (WHITE in CLR) */   LatTopSortVisit (LatEndNode (lat), &time);      /* we should have seen all nodes */   assert (time+1 == lat->nn);    /* check topological order */   for (i = 0, la = lat->larcs; i < lat->na; ++i, ++la)      if (!(la->start->n < la->end->n)) {         isDAG = FALSE;         HError (-8622, "LatTopSort: Lattice contains cycles");          break;      }   for (i = 0, ln = lat->lnodes; i < lat->nn; ++i, ++ln)      topOrder[ln->n] = ln;      /*#### GE: reset ln->n values? */   for (i = 0, ln = lat->lnodes; i < lat->nn; ++i, ++ln)      ln->n = i;   return isDAG;}/* LatAttachInfo     allocate & attach an Info structre for each node*/void LatAttachInfo (MemHeap *heap, size_t size, Lattice *lat){   int i;   LNode *ln;      for (i = 0, ln = lat->lnodes; i < lat->nn; ++i, ++ln)      ln->hook = (Ptr) New (heap, size);}/* LatDetachInfo     free Info structre for each node*/void LatDetachInfo (MemHeap *heap, Lattice *lat){   int i;   LNode *ln;      for (i = 0, ln = lat->lnodes; i < lat->nn; ++i, ++ln)      Dispose (heap, ln->hook);}/* LatForwBackw     perform forward-backward algorithm on lattice and store scores in     FBInfo structre     choice of using sum (LATFB_SUM) or max (LATFB_MAX) of scores*/LogDouble LatForwBackw (Lattice *lat, LatFBType type){   int i;   LNode *ln;   LArc *la;   LNode **topOrder;   LogDouble score;   /* We assume that the FBinfo structures are already allocated. */   /* init */   for (i = 0, ln = lat->lnodes; i < lat->nn; ++i, ++ln) {      LNodeFw (ln) = LNodeBw (ln) = LZERO;   }   LNodeFw (LatStartNode (lat)) = 0.0;   LNodeBw (LatEndNode (lat)) = 0.0;   /* find topological order of nodes */   topOrder = (LNode **) New (&gcheap, lat->nn * sizeof(LNode *));   if (!LatTopSort (lat, topOrder))      HError (8622, "LatForwBackw: cannot calculate forw/backw score on Lattice with cycles");          /* the processing in the forward and backward directions are really      almost the same. if the data structures had been done _slightly_      nicer this could be done in one loop. The only readable way now       would be defining a couple of macros... */   /* forward direction */   for (i = 0; i < lat->nn; ++i) {      ln = topOrder[i];      for (la = ln->foll; la; la = la->farc) {         assert (la->start == ln);                  score = LNodeFw (ln) + LArcTotLike (lat, la);         switch (type) {         case LATFB_SUM:            LNodeFw (la->end) = LAdd (LNodeFw (la->end), score);            break;         case LATFB_MAX:            if (score > LNodeFw (la->end))               LNodeFw (la->end) = score;            break;         default:            abort ();         }      }   }   /* backward direction */   for (i = lat->nn - 1; i >= 0; --i) {      ln = topOrder[i];      for (la = ln->pred; la; la = la->parc) {         assert (la->end == ln);                  score = LNodeBw (ln) + LArcTotLike (lat, la);         switch (type) {         case LATFB_SUM:            LNodeBw (la->start) = LAdd (LNodeBw (la->start), score);            break;         case LATFB_MAX:            if (score > LNodeBw (la->start))               LNodeBw (la->start) = score;            break;         default:            abort ();         }      }   }   if (trace & T_FB) {      printf ("forward prob:  %f\n", LNodeFw (topOrder[lat->nn - 1]));      printf ("backward prob: %f\n", LNodeBw (topOrder[0]));   }   score = LNodeBw (topOrder[0]);   Dispose (&gcheap, topOrder);   return score;}/* EXPORT->LatFindBest     find the N-best paths (i.e. lowest sum of LArcTotLike()s) and generate     Transcription.     ####GE: currently only N=1 is supported*/Transcription *LatFindBest (MemHeap *heap, Lattice *lat, int N){   int i;   LNode *ln;   LNode **topOrder;   LArc *la;   LogDouble score, ac, lm, pr, tot;   Word nullWord;   Pron pron;   Transcription *trans;   LabList *ll;   LLink lab;      if (N != 1)      HError (8690, "FindBest: only 1-best supported, yet.");   /* during the search ln->score will hold the score of the best      path to ln (i.e. lowest score). ln->hook will point to      the arc leading to the preceeding node in this path */   /* init fields */   for (i = 0, ln = lat->lnodes; i < lat->nn; ++i, ++ln) {      ln->score = LZERO;      ln->hook = NULL;   }   LatStartNode (lat)->score = 0.0;   /* find topological order of nodes */   topOrder = (LNode **) New (&gcheap, lat->nn * sizeof(LNode *));   if (!LatTopSort (lat, topOrder))      HError (8690, "LatFindBest: cannot find best path in Lattice with cycles");   assert (topOrder[0] == LatStartNode (lat));   /* traverse nodes in top order */   for (i = 0; i < lat->nn; ++i) {      ln = topOrder[i];            /* for all outgoing arcs: propagate scores forward */      for (la = ln->foll; la; la = la->farc) {         assert (la->start == ln);         score = la->start->score + LArcTotLike (lat, la);         if (score > la->end->score) {            la->end->score = score;            la->end->hook = (Ptr) la;         }      }   }   /* create traqnscription */   trans = CreateTranscription (heap);   ll = CreateLabelList (heap, 0);      nullWord = lat->voc->nullWord;   ac = lm = pr = tot = 0;   if (trace & T_TRAN)      printf ("1best trans (wordPron t ac lm pr tot): ");   /* backtrack from end node along best path and generate transcription */   ln = LatEndNode (lat);   la = (LArc *) ln->hook;   while (la) {      LabId outlab;      if (ln->word != nullWord) {         for (pron = ln->word->pron; pron; pron = pron->next)            if (pron->pnum == ln->v)                break;         if (pron)            outlab = pron->outSym;         else   /* if we can't find pronvar (e.g. wlist), fall back to word */            outlab = ln->word->wordName;         if (outlab) {            lab = CreateLabel (heap, ll->maxAuxLab);            lab->labid = outlab;            lab->start = la->start->time * 1.0e7;            lab->end = ln->time * 1.0e7;            lab->score = LArcTotLike (lat, la);                        lab->succ = ll->head->succ;            lab->pred = ll->head;            lab->succ->pred = lab->pred->succ = lab;         }      }      ac += la->aclike;      lm += la->lmlike;      pr += la->prlike;      tot += LArcTotLike (lat, la);      if (trace & T_TRAN)         printf ("(%s%d %.2f %.3f %.3f %.3f %.3f) ", ln->word->wordName->name, ln->v,                 ln->time, la->aclike, la->lmlike, la->prlike, LArcTotLike (lat, la));

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品美女一区二区三区| 在线视频国内一区二区| 久久先锋影音av鲁色资源| 国内精品视频666| 久久综合九色欧美综合狠狠| 国产精品亚洲午夜一区二区三区| 日韩欧美国产不卡| 高清国产一区二区三区| 最新日韩av在线| 欧美日韩大陆一区二区| 久久99热国产| 亚洲欧洲综合另类在线| 91麻豆精品国产91久久久资源速度 | 久久99热狠狠色一区二区| 欧美不卡一区二区三区| 成人手机在线视频| 一区二区三区国产精华| 欧美一级生活片| 国产v日产∨综合v精品视频| 亚洲三级免费观看| 欧美一区二区高清| 99久久综合99久久综合网站| 亚洲第一成人在线| 国产女人aaa级久久久级| 欧洲中文字幕精品| 狠狠色狠狠色综合系列| 亚洲一区免费在线观看| 久久久久久影视| 欧美性色综合网| 国产精品一区二区你懂的| 亚洲综合在线视频| 国产清纯美女被跳蛋高潮一区二区久久w | 国产精品狼人久久影院观看方式| 欧美色图激情小说| 成人污污视频在线观看| 午夜精品久久久久久久久| 国产精品久久午夜| 欧美成人女星排行榜| 色婷婷久久综合| 国产成人一区在线| 日本不卡免费在线视频| 一区二区在线电影| 国产嫩草影院久久久久| 日韩西西人体444www| 91久久奴性调教| 国产成人精品亚洲777人妖| 日本午夜精品视频在线观看| 亚洲人午夜精品天堂一二香蕉| 久久综合九色综合欧美98| 91精品国产综合久久久久久久久久| av一区二区三区四区| 国产精品亚洲视频| 精品一区二区三区在线观看| 亚洲成人av一区二区| 亚洲欧美另类图片小说| 国产精品高潮呻吟| 欧美国产一区视频在线观看| 久久一二三国产| ww亚洲ww在线观看国产| 日韩欧美一区电影| 日韩一级高清毛片| 91精品在线一区二区| 欧美亚洲一区二区三区四区| 99久久精品国产导航| 国产电影精品久久禁18| 国产一区二区三区日韩| 麻豆成人av在线| 美女视频免费一区| 免费在线观看不卡| 免费黄网站欧美| 久久国产精品色| 精品在线一区二区三区| 美女视频网站久久| 激情六月婷婷综合| 国产一区在线不卡| 国产精品99精品久久免费| 国产另类ts人妖一区二区| 国产一区二区福利| 成人一区二区三区视频在线观看| 国产一区二区电影| 国产精华液一区二区三区| 成人午夜大片免费观看| 99久久婷婷国产综合精品电影 | 欧美色手机在线观看| 欧美日韩电影一区| 日韩精品中文字幕在线一区| 精品少妇一区二区三区免费观看| 欧美成人女星排名| 国产视频一区在线播放| 自拍视频在线观看一区二区| 亚洲免费观看高清在线观看| 亚洲在线一区二区三区| 天天av天天翘天天综合网 | 国产电影一区在线| 97精品国产露脸对白| 欧美日韩国产综合草草| 日韩欧美亚洲国产精品字幕久久久 | 激情成人综合网| 国产aⅴ综合色| 在线观看免费成人| 日韩精品一区二区在线| 国产丝袜美腿一区二区三区| 亚洲视频一二区| 婷婷亚洲久悠悠色悠在线播放| 九九**精品视频免费播放| av亚洲产国偷v产偷v自拍| 欧美精品三级在线观看| 久久久www免费人成精品| 亚洲三级理论片| 免费人成精品欧美精品| 不卡一区二区中文字幕| 欧美三级电影精品| 国产亚洲短视频| 亚洲国产精品久久不卡毛片| 国产九色sp调教91| 欧美色精品在线视频| 国产亚洲成aⅴ人片在线观看| 亚洲一区二区欧美激情| 国产精品456| 欧美精品一级二级三级| 国产精品美女视频| 裸体一区二区三区| 色8久久精品久久久久久蜜| 久久久久高清精品| 丝袜美腿亚洲一区二区图片| 成人av网址在线观看| 日韩欧美视频在线| 亚洲一区二区3| 成人短视频下载| 精品少妇一区二区三区视频免付费| 亚洲情趣在线观看| 风间由美一区二区三区在线观看| 欧美一级午夜免费电影| 一区二区三区四区激情| 成人v精品蜜桃久久一区| 日韩一区二区精品葵司在线| 亚洲精品福利视频网站| 成人黄色电影在线 | 不卡视频在线看| 欧美精品一区二区高清在线观看| 一片黄亚洲嫩模| 9i在线看片成人免费| 久久精品一区二区三区不卡牛牛| 日本三级亚洲精品| 在线免费av一区| 国产精品夫妻自拍| 成人免费毛片片v| 欧美精品一区二区蜜臀亚洲| 蜜桃视频在线一区| 欧美美女网站色| 亚洲电影激情视频网站| 91美女在线观看| 国产精品国产精品国产专区不蜜| 国产精品一区一区三区| 久久久精品国产免大香伊| 精彩视频一区二区三区| 日韩视频一区二区| 久久爱另类一区二区小说| 日韩三级精品电影久久久| 日本欧美加勒比视频| 日韩三级免费观看| 经典三级一区二区| 久久在线观看免费| 国产一区二区三区高清播放| 久久久久综合网| 夫妻av一区二区| 自拍偷拍亚洲欧美日韩| 日本电影欧美片| 亚洲高清不卡在线观看| 欧美精品1区2区3区| 男男gaygay亚洲| 亚洲精品一区二区三区四区高清| 久久电影网电视剧免费观看| 日韩精品一区二区三区中文精品 | 国产乱码精品一区二区三区av| 精品国产1区2区3区| 国产一区中文字幕| 国产精品久久久久久久久免费桃花| 成人av网站在线| 亚洲亚洲人成综合网络| 7777精品伊人久久久大香线蕉超级流畅| 首页综合国产亚洲丝袜| 91精品婷婷国产综合久久竹菊| 久久97超碰色| 中文字幕免费一区| 色婷婷国产精品综合在线观看| 亚洲va韩国va欧美va精品| 日韩美女一区二区三区| 成人亚洲精品久久久久软件| 1000精品久久久久久久久| 欧美色男人天堂| 久久99精品网久久| 国产精品每日更新在线播放网址| 99久久99久久精品免费看蜜桃| 亚洲一区二区美女| 26uuuu精品一区二区| 色综合久久精品| 久久99国产精品尤物| 亚洲四区在线观看| 日韩一区二区免费高清|