Implementation of dict2pid. More...
#include <string.h>
#include "dict2pid.h"
#include "logs3.h"
Functions | |
void | compress_table (s3ssid_t *uncomp_tab, s3ssid_t *com_tab, s3cipid_t *ci_map, int32 n_ci) |
int32 | get_rc_nssid (dict2pid_t *d2p, s3wid_t w, dict_t *dict) |
s3cipid_t * | dict2pid_get_rcmap (dict2pid_t *d2p, s3wid_t w, dict_t *dict) |
dict2pid_t * | dict2pid_build (mdef_t *mdef, dict_t *dict, int32 is_composite, logmath_t *logmath) |
void | dict2pid_free (dict2pid_t *d2p) |
void | dict2pid_report (dict2pid_t *d2p) |
void | dict2pid_comsenscr (dict2pid_t *d2p, int32 *senscr, int32 *comsenscr) |
void | dict2pid_comsseq2sen_active (dict2pid_t *d2p, mdef_t *mdef, uint8 *comssid, uint8 *sen) |
void | dict2pid_dump (FILE *fp, dict2pid_t *d2p, mdef_t *mdef, dict_t *dict) |
Implementation of dict2pid.
A general remark, notice "comsseq" sometimes means compressed sequence. It should be understood as differnet thing as composite in the source code.
Compress this map
References BAD_S3CIPID, and BAD_S3SSID.
dict2pid_t* dict2pid_build | ( | mdef_t * | mdef, | |
dict_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.
mdef | A model definition | |
dict | An initialized dictionary | |
is_composite | Whether composite triphones will be built |
References BAD_S3SENID, BAD_S3SSID, dict2pid_t::comsseq, dict2pid_t::comstate, dict2pid_t::comwt, dict_pron, dict_pronlen, dict_size, dict_wordstr, dict2pid_t::internal, dict2pid_t::is_composite, IS_S3SENID, dict2pid_t::ldiph_lc, logs3(), dict2pid_t::lrdiph_rc, dict2pid_t::lrssid, mdef_n_ciphone, mdef_phone_id_nearest(), mdef_pid2ssid, dict2pid_t::n_ci, mdef_t::n_ciphone, dict2pid_t::n_comsseq, dict2pid_t::n_comstate, dict2pid_t::n_dictsize, mdef_t::n_emit_state, NOT_S3SSID, dict2pid_t::rdiph_rc, dict2pid_t::rssid, dict2pid_t::single_lc, WORD_POSN_BEGIN, WORD_POSN_INTERNAL, and WORD_POSN_SINGLE.
void dict2pid_comsenscr | ( | dict2pid_t * | d2p, | |
int32 * | senscr, | |||
int32 * | comsenscr | |||
) |
Populate composite senone score array.
The composite senone score is the maximum of its component senones' scores, scaled down by the number of component senones.
d2p | In: a dict2pid_t structure | |
senscr | In: Ordinary senone scores | |
comsenscr | Out: Composite senone scores |
References dict2pid_t::comstate, dict2pid_t::comwt, dict2pid_t::n_comstate, and NOT_S3SENID.
void dict2pid_comsseq2sen_active | ( | dict2pid_t * | d2p, | |
mdef_t * | mdef, | |||
uint8 * | comssid, | |||
uint8 * | sen | |||
) |
Mark senones active based on a set of active composite senones.
d2p | In: a dict2pid_t structure | |
mdef | In: a mdef_t structure | |
comssid | In: Active flag for each comssid | |
sen | In/Out: Active flags set for senones indicated by the active comssid |
References dict2pid_t::comsseq, dict2pid_t::comstate, IS_S3SENID, mdef_n_emit_state, and dict2pid_t::n_comsseq.
void dict2pid_dump | ( | FILE * | fp, | |
dict2pid_t * | d2p, | |||
mdef_t * | mdef, | |||
dict_t * | dict | |||
) |
For debugging
fp | In: a file pointer | |
d2p | In: a dict2pid_t structure | |
mdef | In: a mdef_t structure | |
dict | In: a dictionary structure |
References dict2pid_t::comsseq, dict2pid_t::comstate, dict_pronlen, dict_size, dict_wordstr, dict2pid_t::internal, IS_S3SENID, IS_S3SSID, dict2pid_t::ldiph_lc, mdef_ciphone_str(), mdef_n_ciphone, mdef_n_emit_state, dict2pid_t::n_comsseq, dict2pid_t::n_comstate, mdef_t::n_sseq, dict2pid_t::single_lc, and mdef_t::sseq.
void dict2pid_free | ( | dict2pid_t * | d2p | ) |
Free the memory dict2pid structure
d2p | In: the d2p |
References dict2pid_t::comsseq, dict2pid_t::comstate, dict2pid_t::comwt, dict2pid_t::internal, dict2pid_t::ldiph_lc, dict2pid_t::lrdiph_rc, dict2pid_t::lrssid, dict2pid_t::n_ci, dict2pid_t::n_comsseq, dict2pid_t::rdiph_rc, dict2pid_t::rssid, and dict2pid_t::single_lc.
s3cipid_t* dict2pid_get_rcmap | ( | dict2pid_t * | d2p, | |
s3wid_t | w, | |||
dict_t * | dict | |||
) |
Get RC map
d2p | In: a dict2pid | |
w | In: a wid | |
dict | In: a dictionary |
References xwdssid_t::cimap, dictword_t::ciphone, dict2pid_t::lrssid, dictword_t::pronlen, dict2pid_t::rssid, and dict_t::word.
void dict2pid_report | ( | dict2pid_t * | d2p | ) |
Report a dict2pid data structure
d2p | In: a dict2pid_t structure |
References dict2pid_t::is_composite, dict2pid_t::n_comsseq, and dict2pid_t::n_comstate.
int32 get_rc_nssid | ( | dict2pid_t * | d2p, | |
s3wid_t | w, | |||
dict_t * | dict | |||
) |
ARCHAN, A duplicate of get_rc_npid in ctxt_table.h. I doubt whether it is correct because the compressed map has not been checked.
d2p | In: a dict2pid | |
w | In: a wid | |
dict | In: a dictionary |
References dictword_t::ciphone, dict2pid_t::lrssid, xwdssid_t::n_ssid, dictword_t::pronlen, dict2pid_t::rssid, and dict_t::word.