Exemplo n.º 1
0
static void
utt_confidence(void *data, utt_res_t * ur, int32 sf, int32 ef, char *uttid)
{
    if (ur->lmname)
        lmset_set_curlm_wname(lmset, ur->lmname);
    confidence_utt(uttid, inmatchsegfp);
}
Exemplo n.º 2
0
lmset_t *
lmset_init(const char *lmfile,
           const char *lmctlfile,
           const char *ctl_lm,
           const char *lmname,
           const char *lmdumpdir,
           float32 lw, float32 wip, float32 uw, dict_t * dict, logmath_t * logmath)
{
    lmset_t *lms;
    lms = NULL;

    if (lmfile && lmctlfile)
        E_FATAL("Please only specify either -lm or -lmctlfn\n");

    if (!lmfile && !lmctlfile)
        E_FATAL("Please specify either one of -lm or -lmctlfn\n");

    if (lmfile) {               /* Data structure are shared. But it is still a sore
                                   point to have two interfaces for -lm and
                                   -lmctlfile */
        if (lmname != NULL)
            lms =
                lmset_read_lm(lmfile, dict, lmname, lw, wip, uw,
                              lmdumpdir, logmath);
        else
            lms =
                lmset_read_lm(lmfile, dict, "default", lw, wip, uw,
                              lmdumpdir, logmath);
        if (lms == NULL)
            E_FATAL("lmset_read_lm(%s,%e,%e,%e) failed\n:", lmctlfile, lw,
                    wip, uw);

    }
    else if (lmctlfile) {
        E_INFO("Reading LM ctl file\n");
        lms = lmset_read_ctl(lmctlfile, dict, lw, wip, uw, lmdumpdir, logmath);
        if (lms == NULL)
            E_FATAL("lmset_read_ctl(%s,%e,%e,%e) failed\n:", lmctlfile, lw,
                    wip, uw);
    }
    else {
        E_FATAL("You must specify either -lm or -lmctlfn\n");
    }

    if (lms && ctl_lm == NULL) {
        const char *name;

        if (lmname == NULL)
            name = lms->lmarray[0]->name;
        else
            name = lmname;

        /* Set the default LM */
        if (name)
            lmset_set_curlm_wname(lms, name);

        /* If this failed, then give up. */
        if (lms->cur_lm == NULL)
            E_FATAL("Failed to set default LM\n");
    }

    return lms;
}
Exemplo n.º 3
0
/* Decode the given mfc file and write result to given directory */
static void
utt_astar(void *data, utt_res_t * ur, int32 sf, int32 ef, char *uttid)
{
    char dagfile[1024], nbestfile[1024];
    const char *latdir;
    const char *latext;
    const char *nbestext;
    dag_t *dag;
    int32 nfrm;

    if (ur->lmname)
        lmset_set_curlm_wname(lmset, ur->lmname);

    latdir = cmd_ln_str_r(config, "-inlatdir");
    latext = cmd_ln_str_r(config, "-latext");
    nbestext = cmd_ln_str_r(config, "-nbestext");
    if (latdir) {
        build_output_uttfile(dagfile, latdir, uttid, ur->uttfile);
        strcat(dagfile, ".");
        strcat(dagfile, latext);
    }
    else
        sprintf(dagfile, "%s.%s", uttid, latext);

    ptmr_reset(&tm_utt);
    ptmr_start(&tm_utt);

    nfrm = 0;
    if ((dag = dag_load(dagfile,
                        cmd_ln_int32_r(config, "-maxedge"),
                        cmd_ln_float32_r(config, "-logbase"),
                        cmd_ln_int32_r(config, "-dagfudge"), dict, fpen, config, logmath)) != NULL) {
        if (dict_filler_word(dict, dag->end->wid))
            dag->end->wid = dict->finishwid;

        dag_remove_unreachable(dag);
        if (dag_bypass_filler_nodes(dag, 1.0, dict, fpen) < 0) {
            E_ERROR("maxedge limit (%d) exceeded\n", dag->maxedge);
            goto search_done;
        }
        dag_compute_hscr(dag, dict, lmset->cur_lm, 1.0);
        dag_remove_bypass_links(dag);

        E_INFO("%5d frames, %6d nodes, %8d edges, %8d bypass\n",
               dag->nfrm, dag->nnode, dag->nlink, dag->nbypass);

        nfrm = dag->nfrm;
        build_output_uttfile(nbestfile, nbestdir, uttid, ur->uttfile);
        strcat(nbestfile, ".");
        strcat(nbestfile, nbestext);
        nbest_search(dag, nbestfile, uttid, 1.0, dict, lmset->cur_lm, fpen);

        lm_cache_stats_dump(lmset->cur_lm);
        lm_cache_reset(lmset->cur_lm);
    }
    else
        E_ERROR("Dag load (%s) failed\n", uttid);
search_done:
    dag_destroy(dag);

    ptmr_stop(&tm_utt);

    printf("%s: TMR: %5d Frm", uttid, nfrm);
    if (nfrm > 0) {
        printf(" %6.2f xEl", tm_utt.t_elapsed * 100.0 / nfrm);
        printf(" %6.2f xCPU", tm_utt.t_cpu * 100.0 / nfrm);
    }
    printf("\n");
    fflush(stdout);
}