/** * @file define.h * * * @brief 内部処理選択のためのシンボル定義 * * configure スクリプトは,システム/ユーザごとの設定を config.h に書き出し * ます. このファイルでは,その configure で設定された config.h 内の定義を * 元に,Julius/Julian のための内部シンボルの定義を行います. * これらは実験用のコードの切り替えや古いオプションとの互換性のために * 定義されているものがほとんどです. 通常のユーザはこの定義を書き換える * 必要はありません. * * * * @brief Internal symbol definitions * * The "configure" script will output the system- and user-dependent * configuration in "config.h". This file defines some symboles * according to the generated config.h, to switch internal functions. * Most of the definitions here are for disabling experimental or debug * code for development, or to keep compatibility with old Julius. These * definitions are highly internal, and normal users should not alter * these definitions without knowning what to do. * * * @author Akinobu LEE * @date Mon Mar 7 15:17:26 2005 * * $Revision: 1.8 $ * */ /* * 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_DEFINE_H__ #define __J_DEFINE_H__ /*****************************************************************************/ /** DO NOT MODIFY MANUALLY DEFINES BELOW UNLESS YOU KNOW WHAT YOU ARE DOING **/ /*****************************************************************************/ /* type of language model */ #define LM_UNDEF 0 ///< not specified #define LM_PROB 1 ///< Statistical (N-gram - Julius) #define LM_DFA 2 ///< DFA (Julian) /* LM variation specification */ #define LM_NGRAM 0 ///< N-gram #define LM_DFA_GRAMMAR 1 ///< DFA grammar #define LM_DFA_WORD 2 ///< Isolated word recognition #define LM_NGRAM_USER 3 ///< User-defined statistical LM /* recognition status */ #define J_RESULT_STATUS_BUFFER_OVERFLOW -7 ///< Input buffer overflow #define J_RESULT_STATUS_REJECT_POWER -6 ///< Input rejected by power #define J_RESULT_STATUS_TERMINATE -5 ///< Input was terminated by app. request #define J_RESULT_STATUS_ONLY_SILENCE -4 ///< Input contains only silence #define J_RESULT_STATUS_REJECT_GMM -3 ///< Input rejected by GMM #define J_RESULT_STATUS_REJECT_SHORT -2 ///< Input rejected by short input #define J_RESULT_STATUS_FAIL -1 ///< Recognition ended with no candidate #define J_RESULT_STATUS_SUCCESS 0 ///< Recognition output some result /* delete incoherent option */ /* CATEGORY_TREE: DFA=always on, NGRAM=always off */ /* switch with recog->category_tree */ /* UNIGRAM_FACTORING: DFA=always off, NGRAM=option */ /* enclose UNIGRAM_FACTORING section with "if (lmtype == LM_NGRAM)" */ /* abbreviations for verbose message output */ #define VERMES if (verbose_flag) jlog /** * define this to report memory usage on exit (Linux only) * */ #undef REPORT_MEMORY_USAGE /*** N-gram tree construction ***/ /* With 1-best approximation, Constructing a single tree from all words causes much error by factoring. Listing each word flatly with no tree-organization will not cause this error, but the network becomes much larger and, especially, the inter-word LM handling becomes much more complex (O(n^2)). The cost may be eased by LM caching, but it needs much memory. */ /* This is a trade-off of accuracy and cost */ #define SHORT_WORD_LEN 2 #ifdef LOWMEM /* don't separate, construct a single tree from all words */ /* root nodes are about 50 in monophone, cache size will be 5MB on max */ #define NO_SEPARATE_SHORT_WORD #else #ifdef LOWMEM2 /* experimental: separate words frequently appears in corpus (1-gram) */ /* root nodes will be "-sepnum num" + 50, cache size will be 10MB or so */ #define NO_SEPARATE_SHORT_WORD #define SEPARATE_BY_UNIGRAM #else /* separate all short words (<= 2 phonemes) */ /* root nodes are about 1100 in 20k (proportional to vocabulary), cache size will be about 100MB on max */ #endif /* LOWMEM2 */ #endif /* LOWMEM */ /*#define HASH_CACHE_IW*/ /* "./configure --enable-lowmem" defines NO_SEPARATE_SHORT_WORD instead */ /* default language model weight and insertion penalty for pass1 and pass2 */ /* these values come from the best parameters in IPA evaluation result */ #define DEFAULT_LM_WEIGHT_MONO_PASS1 5.0 #define DEFAULT_LM_PENALTY_MONO_PASS1 -1.0 #define DEFAULT_LM_WEIGHT_MONO_PASS2 6.0 #define DEFAULT_LM_PENALTY_MONO_PASS2 0.0 #ifdef PASS1_IWCD #define DEFAULT_LM_WEIGHT_TRI_PASS1 8.0 #define DEFAULT_LM_PENALTY_TRI_PASS1 -2.0 #define DEFAULT_LM_WEIGHT_TRI_PASS2 8.0 #define DEFAULT_LM_PENALTY_TRI_PASS2 -2.0 #else #define DEFAULT_LM_WEIGHT_TRI_PASS1 9.0 #define DEFAULT_LM_PENALTY_TRI_PASS1 8.0 #define DEFAULT_LM_WEIGHT_TRI_PASS2 11.0 #define DEFAULT_LM_PENALTY_TRI_PASS2 -2.0 #endif /* PASS1_IWCD */ /* Switch head/tail word insertion penalty to be inserted */ #undef FIX_PENALTY /* some definitions for short-pause segmentation */ #undef SP_BREAK_EVAL /* output messages for evaluation */ #undef SP_BREAK_DEBUG /* output messages for debug */ #undef SP_BREAK_RESUME_WORD_BEGIN /* resume word = maxword at beginning of sp area */ #ifdef GMM_VAD #define DEFAULT_GMM_MARGIN 20 /* backstep margin / determine buffer length */ #define GMM_VAD_AUTOSHRINK_LIMIT 500 #undef GMM_VAD_DEBUG /* output debug message */ #endif /* default values for spseg_naist */ #ifdef SPSEGMENT_NAIST #define DEFAULT_SP_MARGIN 40 #define DEFAULT_SP_DELAY 4 #define SPSEGMENT_NAIST_AUTOSHRINK_LIMIT 500 #endif /* '01/10/18 by ri: enable fix for trellis lookup order */ #define PREFER_CENTER_ON_TRELLIS_LOOKUP /* '01/11/28 by ri: malloc step for startnode for multipath mode */ #define STARTNODE_STEP 300 /* default dict entry for IW-sp word that will be added to dict with -iwspword */ #define IWSPENTRY_DEFAULT " [sp] sp sp" /* confidence scoring method */ #ifdef CONFIDENCE_MEASURE # ifndef CM_NBEST /* use conventional N-best CM, will be defined if "--enable-cm-nbest" specified */ # define CM_SEARCH /* otherwise, use on-the-fly CM scoring */ # endif #endif /* dynamic word graph generation */ #undef GRAPHOUT_SEARCH_CONSIDER_RIGHT /* if defined, only hypothesis whose left/right contexts is already included in popped hypo will be merged. EXPERIMENTAL, should not be defined. */ #ifdef CM_SEARCH_LIMIT #undef CM_SEARCH_LIMIT_AFTER /* enable above only after 1 sentence found */ #undef CM_SEARCH_LIMIT_POP /* terminate hypo of low CM on pop */ #endif /* compute exact boundary instead of using 1st pass result */ /* also propagate exact time boundary to the right context after generation */ /* this may produce precise word boundary, but cause bigger word graph output */ #define GRAPHOUT_PRECISE_BOUNDARY #undef GDEBUG /* enable debug message in graphout.c */ /* some decoding fix candidates */ #undef FIX_35_PASS2_STRICT_SCORE /* fix hypothesis scores by enabling bt_discount_pescore() in standard mode with PASS2_STRICT_IWCD, */ #define FIX_35_INHIBIT_SAME_WORD_EXPANSION /* privent connecting the same trellis word in 2nd pass */ /* below are new since 3.5.2 */ /** * Allow overwriting existing graph word if score is higher. * By default, while search, Julius merges the same graph words appeared at the * same location as previously stored word, and terminate search. This * option make Julius to continue search in that case if fscore_head of * current hypo. is greater than the already existing one. In that case, * the score of existing one will be overridden by the new higher one. * (from 3.5.2) * */ #define GRAPHOUT_OVERWRITE /* with GRAPHOUT_OVERWRITE, use gscore_head instead of fscore_head */ /** * (EXPERIMENTAL) With GRAPHOUT_OVERWRITE, use gscore_head for the * comparison instead of fscore_head. * */ #undef GRAPHOUT_OVERWRITE_GSCORE /** * At post-processing of graph words, this option limits the number of * "fit boundary" loop up to this value. This option is made to avoid * long loop by the "boundary oscillation" of short words. (from 3.5.2) * */ #define GRAPHOUT_LIMIT_BOUNDARY_LOOP /** * This option enables "-graphsearchdelay" and "-nographsearchdelay" option. * When "-graphsearchdelay" option is set, Julius modifies its alogrithm of * graph generation on the 2nd pass not to apply search termination by graph * merging until the first sentence candidate is found. * * This option may result in slight improvement of graph accuracy only * when you are going to generate a huge word graph by setting broad search. * Namely, it may result in better graph accuracy when you set wide beams on * both 1st pass "-b" and 2nd pass "-b2", and large number for "-n". * */ #define GRAPHOUT_SEARCH_DELAY_TERMINATION /** * This option enables word graph cutting by word depth at post-processing. * This option will erase many short words to explode at a wide beam width. * */ #define GRAPHOUT_DEPTHCUT /** * Mimimal beam width that will be auto-determined for the 1st pass. * See set_beam_width() and default_width() for details. * */ #define MINIMAL_BEAM_WIDTH 200 /** * (DEBUG) Use old full lcdset instead of category-pair-aware lcdset * on Julian (-oldiwcd on 3.5.3 and previous) */ #undef USE_OLD_IWCD /** * (EXPERIMENTAL) early word determination on isolated word recognition mode. * Results will be shown via CALLBACK_RESULT_PASS1_DETERMINED. * */ #undef DETERMINE #define FWD_NGRAM #define MAX_SPEECH_ALLOC_STEP 320000 #define POWER_REJECT_DEFAULT_THRES 9.0 /** * A test to find optimal warping factor for VTLN (EXPERIMENTAL) * */ #undef DEBUG_VTLN_ALPHA_TEST #define VTLN_RANGE 0.2 #define VTLN_STEP 0.02 /** * Use fast successor composition at 1-gram factoring. * */ #define FAST_FACTOR1_SUCCESSOR_LIST /** * Enable score based pruning at the 1st pass. * */ #define SCORE_PRUNING #endif /* __J_DEFINE_H__ */