/**
* @file graph.h
*
*
* @brief 単語グラフの構造体定義
*
* 単語グラフ中の単語を表す構造体,および confusion network 中の
* 単語を表す構造体が定義されています.
*
*
*
* @brief Structure definition for word graph.
*
* This file defines instances for word graph and confusion network.
*
*
* @author Akinobu Lee
* @date Thu Aug 16 00:30:54 2007
*
* $Revision: 1.4 $
*
*/
/*
* Copyright (c) 1991-2012 Kawahara Lab., Kyoto University
* Copyright (c) 2000-2005 Shikano Lab., Nara Institute of Science and Technology
* Copyright (c) 2005-2012 Julius project team, Nagoya Institute of Technology
* All rights reserved
*/
#ifndef __J_GRAPH_H__
#define __J_GRAPH_H__
#define FANOUTSTEP 7 ///< Memory allocation step for connection words in WordGraph
/**
*
* 単語グラフ上の単語候補.
*
*
* Word arc on the word graph.
*
*/
typedef struct __word_graph__ {
WORD_ID wid; ///< Word ID
int lefttime; ///< Head frame where this word begins
int righttime; ///< Tail frame where this word ends
LOGPROB fscore_head; ///< Partial sentence score 'f' when the next (left) word of this word was expanded at 2nd pass. f = g(thisword) + h(nextword)
LOGPROB fscore_tail; ///< Partial sentence score when this word was expanded in 2nd pass. f = g(rightword) + h(thisword)
LOGPROB gscore_head; ///< Accumulated viterbi score at the head state of this word on lefttime. This value includes both accumulated AM score and LM score of this word.
LOGPROB gscore_tail; ///< Accumultaed viterbi score at the head state of previous (right) word.
LOGPROB lscore_tmp; ///< Temporally holds LM score
LOGPROB forward_score; ///< Forward score at right edge, incl. LM, obtained by forward-backward process
LOGPROB backward_score; ///< Backward score at left edge, incl. LM, obtained by forward-backward process
#ifdef CM_SEARCH
LOGPROB cmscore; ///< Confidence score obtained while search
#endif
LOGPROB amavg; ///< average acoustic score of matched frame
HMM_Logical *headphone; ///< Applied phone HMM at the head of the word
HMM_Logical *tailphone; ///< Applied phone HMM at the end of the word
struct __word_graph__ **leftword; ///< List of left context
LOGPROB *left_lscore; ///< List of LM score for left contexts
int leftwordnum; ///< Stored num of @a leftword
int leftwordmaxnum; ///< Allocated size of @a leftword
struct __word_graph__ **rightword; ///< List of right context
LOGPROB *right_lscore; ///< List of LM score for right contexts
int rightwordnum; ///< Stored num of @a leftword
int rightwordmaxnum; ///< Allocated size of @a letfword
struct __word_graph__ *next; ///< Pointer to next wordgraph for throughout access
boolean mark; ///< Delete mark for compaction operation
int id; ///< Unique ID within the graph
boolean saved; ///< Save mark for graph generation
#ifdef GRAPHOUT_DYNAMIC
boolean purged; ///< Purged mark for graph generation
#endif
LOGPROB graph_cm; ///< Confidense score computed from the graph
} WordGraph;
/**
* Word Cluster for confusion network generation
*
*/
typedef struct __confnet_cluster__ {
WordGraph **wg; ///< List of graph words in this cluster
int wgnum; ///< Number of @a wg;
int wgnum_alloc; ///< Allocated size of @a wg;
WORD_ID *words; ///< List of words in this cluster (WORD_INVALID) means skip ("-")
LOGPROB *pp; ///< Posterior probability of each word
int wordsnum; ///< Number of @a words
struct __confnet_cluster__ *next; ///< Pointer to next structure
} CN_CLUSTER;
/**
* Number of allocation step for CN_CLUSTER
*
*/
#define CN_CLUSTER_WG_STEP 10
#endif /* __J_GRAPH_H__ */