libjulius/src/search_bestfirst_v1.c File Reference

Viterbi path update and scoring on the second pass (fast version). More...

#include <julius/julius.h>

Go to the source code of this file.

Functions

static void free_node_exec (NODE *node)
 < Define if want triphone debug messages
void free_node (NODE *node)
 Stock an unused hypothesis node for recycle.
void clear_stocker (StackDecode *s)
 Clear the node stocker for recycle.
NODEcpy_node (NODE *dst, NODE *src)
 Copy the content of node to another.
NODEnewnode (RecogProcess *r)
 Allocate a new hypothesis node.
void malloc_wordtrellis (RecogProcess *r)
 Allocate work area for trellis computation of a word.
void free_wordtrellis ()
 Free the work area for trellis computation of a word.
static LOGPROB get_max_out_arc (HTK_HMM_Trans *tr, int state_num)
 Get the maximum transition log probability to final state.
static LOGPROB max_out_arc (HMM_Logical *l)
 Get the maximum transition log probability outside a phone.
void scan_word (NODE *now, HTK_Param *param, RecogProcess *r)
 Compute the forward viterbi for the last word to update forward scores and ready for word connection.
void next_word (NODE *now, NODE *new, NEXTWORD *nword, HTK_Param *param, RecogProcess *r)
 Connect a new word to generate a next hypothesis.
void start_word (NODE *new, NEXTWORD *nword, HTK_Param *param, RecogProcess *r)
 Generate an initial hypothesis from given word.
void last_next_word (NODE *now, NODE *new, HTK_Param *param, RecogProcess *r)
 Hypothesis termination: set the final sentence scores of hypothesis that has already reached to the end.

Variables

static LOGPROBwordtrellis [2]
 Buffer to compute viterbi path of a word.
static int tn
 Temporal pointer to current buffer.
static int tl
 Temporal pointer to previous buffer.
static LOGPROBg
 Buffer to hold source viterbi scores.
static HMM_Logical ** phmmseq
 Phoneme sequence to be computed.
static int phmmlen_max
 Maximum length of phmmseq.
static boolean * has_sp
 Mark which phoneme allow short pause for multi-path mode.
static short * wend_token_frame [2]
 Propagating token of word-end frame to detect corresponding end-of-words at word head.
static LOGPROBwend_token_gscore [2]
 Propagating token of scores at word-end to detect corresponding end-of-words at word head.


Detailed Description

Viterbi path update and scoring on the second pass (fast version).

This file has functions for score calculations on the 2nd pass. It includes Viterbi path update calculation of a hypothesis, calculations of scores and word trellis connection at word expansion.

The cross-word triphone will be computed not at word expansion time, but at later pop up for rapid decoding. This is called "backscan" altgorithm. These functions are enabled when PASS2_STRICT_IWCD is UNDEFINED in config.h. If defined, "nextscan" functions in search_bestfirst_v2.c are used instead.

Here we use "delayed cross-word context handling" method for connection of next word and last word of the hypothesis for speeding up decoding:

  1. Only right context of the tail phone in the next word is considered when generating a new hypothesis (next_word()).

  1. The whole context dependency will be fully computed when the hypothesis is once pushed to stack and later popped in scan_word().

This method avoid computing full context-dependency handling for all generated hypothesis in next_word(), and only re-compute it after primising ones are popped from stack later. This speeds up decoding. But since the context dependency is not considered in the total hypothesis score (computed in next_word()).

The actual implimentation:

  1. In nextword(), the tail phone in the new word is modified considering the right context (= head phone in the last word of source hypothesis), and the outprob on the connection point between backtrellis and forward trellis is computed using the triphone.

  1. In scan_word(), not only the new word but also the head phone in the previous word should be modified and re-scanned. To realize this '1-phoneme backscan' procedure, hypothesis nodes have to keep forward scores not only at the last HMM state (g[] in NODE), but also at the backscan restart point (= before the head phone in the previous word, g_prev[] in NODE).

Note that the actual implementation becomes a little more complicated to handle 1-phoneme words...

Author:
Akinobu Lee
Date:
Sun Sep 11 23:54:53 2005
Revision
1.1.1.1

Definition in file search_bestfirst_v1.c.


Function Documentation

static void free_node_exec ( NODE node  )  [static]

< Define if want triphone debug messages

Free a hypothesis node actually.

Parameters:
node [in] hypothesis node

Definition at line 138 of file search_bestfirst_v1.c.

Referenced by clear_stocker().

void free_node ( NODE node  ) 

Stock an unused hypothesis node for recycle.

Parameters:
node [in] hypothesis node

Definition at line 170 of file search_bestfirst_v1.c.

Referenced by free_all_nodes(), put_all_in_stack(), and put_to_stack().

Here is the caller graph for this function:

void clear_stocker ( StackDecode s  ) 

Clear the node stocker for recycle.

Parameters:
s [in] stack decoding work area

Definition at line 206 of file search_bestfirst_v1.c.

NODE* cpy_node ( NODE dst,
NODE src 
)

Copy the content of node to another.

Parameters:
dst [out] target hypothesis
src [in] source hypothesis
Returns:
the value of dst.

Definition at line 247 of file search_bestfirst_v1.c.

Referenced by last_next_word().

Here is the caller graph for this function:

NODE* newnode ( RecogProcess r  ) 

Allocate a new hypothesis node.

If the node stocker is not empty, the one in the stocker is re-used. Otherwise, allocate as new.

Parameters:
r [in] recognition process instance
Returns:
pointer to the newly allocated node.

Definition at line 324 of file search_bestfirst_v1.c.

void malloc_wordtrellis ( RecogProcess r  ) 

Allocate work area for trellis computation of a word.

Parameters:
r [in] recognition process instance

Definition at line 440 of file search_bestfirst_v1.c.

static LOGPROB get_max_out_arc ( HTK_HMM_Trans tr,
int  state_num 
) [static]

Get the maximum transition log probability to final state.

(multipath)

Parameters:
tr [in] transition matrix
state_num [in] number of states
Returns:
the maximum log probability of transition to the final state.

Definition at line 537 of file search_bestfirst_v1.c.

Referenced by max_out_arc().

static LOGPROB max_out_arc ( HMM_Logical l  )  [static]

Get the maximum transition log probability outside a phone.

(multipath)

Parameters:
l [in] phone
Returns:
the maximum transition log probability outside a phone.

Definition at line 568 of file search_bestfirst_v1.c.

Referenced by scan_word().

void scan_word ( NODE now,
HTK_Param param,
RecogProcess r 
)

Compute the forward viterbi for the last word to update forward scores and ready for word connection.

Parameters:
now [i/o] hypothesis
param [in] input parameter vectors
r [in] recognition process instance

Definition at line 595 of file search_bestfirst_v1.c.

void next_word ( NODE now,
NODE new,
NEXTWORD nword,
HTK_Param param,
RecogProcess r 
)

Connect a new word to generate a next hypothesis.

The optimal connection point and new sentence score of the new hypothesis will be estimated by looking up the corresponding words on word trellis.

Parameters:
now [in] source hypothesis
new [out] pointer to save the newly generated hypothesis
nword [in] next word to be connected
param [in] input parameter vector
r [in] recognition process instance

Definition at line 1393 of file search_bestfirst_v1.c.

void start_word ( NODE new,
NEXTWORD nword,
HTK_Param param,
RecogProcess r 
)

Generate an initial hypothesis from given word.

Parameters:
new [out] pointer to save the newly generated hypothesis
nword [in] words of the first candidates
param [in] input parameter vector
r [in] recognition process instance

Definition at line 1625 of file search_bestfirst_v1.c.

void last_next_word ( NODE now,
NODE new,
HTK_Param param,
RecogProcess r 
)

Hypothesis termination: set the final sentence scores of hypothesis that has already reached to the end.

Parameters:
now [in] hypothesis that has already reached to the end
new [out] pointer to save the final sentence information
param [in] input parameter vectors
r [in] recognition process instance

Definition at line 1719 of file search_bestfirst_v1.c.


Generated on Tue Dec 18 16:01:25 2007 for Julius by  doxygen 1.5.4