src/libpocketsphinx/dict2pid.h File Reference

Building triphones for a dictionary. More...

#include <stdio.h>
#include <logmath.h>
#include <bitvec.h>
#include "s3types.h"
#include "bin_mdef.h"
#include "s3dict.h"

Go to the source code of this file.

Data Structures

struct  xwdssid_t
 cross word triphone model structure More...
struct  dict2pid_t
 Building composite triphone (as well as word internal triphones) with the dictionary. More...

Defines

#define dict2pid_internal(d, w, p)   ((d)->internal[w][p])
 Access macros; not designed for arbitrary use.
#define dict2pid_n_comstate(d)   ((d)->n_comstate)
 return number of composite state
#define dict2pid_n_comsseq(d)   ((d)->n_comsseq)
 return number of composite state sequence
#define dict2pid_is_composite(d)   ((d)->is_composite)
 return whether dict2pid is in composite triphone mode or not
#define dict2pid_rssid(d, ci, lc)   (&(d)->rssid[ci][lc])
#define IS_COMPOSITE   1
#define NOT_COMPOSITE   0

Functions

dict2pid_tdict2pid_build (bin_mdef_t *mdef, s3dict_t *dict, int32 is_composite, logmath_t *logmath)
 Build the dict2pid structure for the given model/dictionary.
dict2pid_tdict2pid_retain (dict2pid_t *d2p)
 Retain a pointer to dict2pid.
int dict2pid_free (dict2pid_t *d2p)
 Free the memory dict2pid structure.
void dict2pid_comsenscr (dict2pid_t *d2p, int16 const *senscr, int16 *comsenscr)
 Compute composite senone scores from ordinary senone scores (max of component senones).
void dict2pid_comsseq2sen_active (dict2pid_t *d2p, bin_mdef_t *mdef, bitvec_t *comssid, bitvec_t *sen)
 Mark active senones as indicated by the input array of composite senone-sequence active flags.
void dict2pid_dump (FILE *fp, dict2pid_t *d2p, bin_mdef_t *mdef, s3dict_t *dict)
 For debugging.
void dict2pid_report (dict2pid_t *d2p)
 Report a dict2pid data structure.
int32 get_rc_nssid (dict2pid_t *d2p, s3wid_t w, s3dict_t *dict)
 Get number of rc.
s3cipid_tdict2pid_get_rcmap (dict2pid_t *d2p, s3wid_t w, s3dict_t *dict)
 Get RC map.

Detailed Description

Building triphones for a dictionary.

This is one of the more complicated parts of a cross-word triphone model decoder. The first and last phones of each word get their left and right contexts, respectively, from other words. For single-phone words, both its contexts are from other words, simultaneously. As these words are not known beforehand, life gets complicated. In this implementation, when we do not wish to distinguish between distinct contexts, we use a COMPOSITE triphone (a bit like BBN's fast-match implementation), by clubbing together all possible contexts.

There are 3 cases:

1. Internal phones, and boundary phones without any specific context, in each word. The boundary phones are modelled using composite phones, internal ones using ordinary phones.

2. The first phone of a multi-phone word, for a specific history (i.e., in a 2g/3g/4g... tree) has known left and right contexts. The possible left contexts are limited to the possible last phones of the history. So it can be modelled separately, efficiently, as an ordinary triphone.

3. The one phone in a single-phone word, for a specific history (i.e., in a 2g/3g/4g... tree) has a known left context, but unknown right context. It is modelled using a composite triphone. (Note that right contexts are always composite, left contexts are composite only in the unigram tree.)

A composite triphone is formed as follows. (NOTE: this assumes that all CIphones/triphones have the same HMM topology, specifically, no. of states.) A composite triphone represents a situation where either the left or the right context (or both) for a given base phone is unknown. That is, it represents the set of all possible ordinary triphones derivable from * the unkown context(s). Let us call this set S. It is modelled using the same HMM topology * as the ordinary triphones, but with COMPOSITE states. A composite state (in a given position * in the HMM state topology) is the set of states (senones) at that position derived from S.

Actually, we generally deal with COMPOSITE SENONE-SEQUENCES rather than COMPOSITE PHONES. The former are compressed forms of the latter, by virtue of state sharing among phones. (See mdef.h.)

In 3.6, the composite triphone will only be build when -composite 1 (default) is specified. Other than that, full triphone expansion will be carried out in run-time

Definition in file dict2pid.h.


Define Documentation

#define dict2pid_internal ( d,
w,
 )     ((d)->internal[w][p])

Access macros; not designed for arbitrary use.

return internal dict2pid

Definition at line 249 of file dict2pid.h.


Function Documentation

dict2pid_t* dict2pid_build ( bin_mdef_t mdef,
s3dict_t dict,
int32  is_composite,
logmath_t *  logmath 
)

Build the dict2pid structure for the given model/dictionary.

This segments of code take care of the initialization of internal[0] and ldiph[b][r][l]

This part will take care of the initialization of internal[pronlen-1] and rdiph[b][l][r]. Notice that this is symmetric to the first part of the code.

Parameters:
mdef A model definition
dict An initialized dictionary
is_composite Whether composite triphones will be built

Definition at line 594 of file dict2pid.c.

References BAD_S3SENID, BAD_S3SSID, dict2pid_t::comsseq, dict2pid_t::comstate, dict2pid_t::comwt, dict2pid_report(), dict2pid_t::internal, dict2pid_t::is_composite, dict2pid_t::ldiph_lc, dict2pid_t::lrdiph_rc, dict2pid_t::lrssid, dict2pid_t::n_ci, bin_mdef_s::n_ciphone, dict2pid_t::n_comsseq, dict2pid_t::n_comstate, dict2pid_t::n_dictsize, bin_mdef_s::n_emit_state, dict2pid_t::rdiph_rc, dict2pid_t::rssid, SENSCR_SHIFT, dict2pid_t::single_lc, WORD_POSN_BEGIN, WORD_POSN_END, WORD_POSN_INTERNAL, and WORD_POSN_SINGLE.

Referenced by ps_reinit().

void dict2pid_comsenscr ( dict2pid_t d2p,
int16 const *  senscr,
int16 *  comsenscr 
)

Compute composite senone scores from ordinary senone scores (max of component senones).

Compute composite senone scores from ordinary senone scores (max of component senones).

The composite senone score is the maximum of its component senones' scores, scaled down by the number of component senones.

Parameters:
d2p In: a dict2pid_t structure
senscr In: Ordinary senone scores
comsenscr Out: Composite senone scores

Definition at line 1064 of file dict2pid.c.

References dict2pid_t::comstate, dict2pid_t::comwt, and dict2pid_t::n_comstate.

void dict2pid_comsseq2sen_active ( dict2pid_t d2p,
bin_mdef_t mdef,
bitvec_t *  comssid,
bitvec_t *  sen 
)

Mark active senones as indicated by the input array of composite senone-sequence active flags.

Caller responsible for allocating and clearing sen[] before calling this function.

Parameters:
d2p In: a dict2pid_t structure
mdef In: a bin_mdef_t structure
comssid In: Active flag for each comssid
sen In/Out: Active flags set for senones indicated by the active comssid

Definition at line 1090 of file dict2pid.c.

References dict2pid_t::comsseq, dict2pid_t::comstate, and dict2pid_t::n_comsseq.

void dict2pid_dump ( FILE *  fp,
dict2pid_t d2p,
bin_mdef_t mdef,
s3dict_t dict 
)

For debugging.

Parameters:
fp In: a file pointer
d2p In: a dict2pid_t structure
mdef In: a bin_mdef_t structure
dict In: a dictionary structure

Definition at line 1115 of file dict2pid.c.

References dict2pid_t::comsseq, dict2pid_t::comstate, dict2pid_t::internal, dict2pid_t::ldiph_lc, dict2pid_t::n_comsseq, dict2pid_t::n_comstate, bin_mdef_s::n_sseq, dict2pid_t::single_lc, and bin_mdef_s::sseq.

int dict2pid_free ( dict2pid_t d2p  ) 
s3cipid_t* dict2pid_get_rcmap ( dict2pid_t d2p,
s3wid_t  w,
s3dict_t dict 
)

Get RC map.

Parameters:
d2p In: a dict2pid
w In: a wid
dict In: a dictionary

Definition at line 551 of file dict2pid.c.

References xwdssid_t::cimap, dictword_t::ciphone, dict2pid_t::lrssid, dictword_t::pronlen, dict2pid_t::rssid, and s3dict_t::word.

void dict2pid_report ( dict2pid_t d2p  ) 

Report a dict2pid data structure.

Parameters:
d2p In: a dict2pid_t structure

Definition at line 1041 of file dict2pid.c.

References dict2pid_t::is_composite, dict2pid_t::n_comsseq, and dict2pid_t::n_comstate.

Referenced by dict2pid_build().

int32 get_rc_nssid ( dict2pid_t d2p,
s3wid_t  w,
s3dict_t dict 
)

Get number of rc.

Get number of rc.

I doubt whether it is correct because the compressed map has not been checked.

Parameters:
d2p In: a dict2pid
w In: a wid
dict In: a dictionary

Definition at line 527 of file dict2pid.c.

References dictword_t::ciphone, dict2pid_t::lrssid, xwdssid_t::n_ssid, dictword_t::pronlen, dict2pid_t::rssid, and s3dict_t::word.

Referenced by lextree_enter(), lextree_hmm_propagate_non_leaves(), and vithist_enter().


Generated on 16 Jul 2011 for PocketSphinx by  doxygen 1.6.1