diff options
Diffstat (limited to 'decoder/cdec.cc')
-rw-r--r-- | decoder/cdec.cc | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/decoder/cdec.cc b/decoder/cdec.cc index 29070a69..a179e029 100644 --- a/decoder/cdec.cc +++ b/decoder/cdec.cc @@ -36,6 +36,8 @@ #include "sentence_metadata.h" #include "../vest/scorer.h" #include "apply_fsa_models.h" +#include "program_options.h" +#include "cfg_format.h" using namespace std; using namespace std::tr1; @@ -105,6 +107,8 @@ void print_options(std::ostream &out,po::options_description const& opts) { } +CFGFormat cfgf; + void InitCommandLine(int argc, char** argv, OracleBleu &ob, po::variables_map* confp) { po::variables_map &conf=*confp; po::options_description opts("Configuration options"); @@ -168,6 +172,10 @@ void InitCommandLine(int argc, char** argv, OracleBleu &ob, po::variables_map* c ("forest_output,O",po::value<string>(),"Directory to write forests to") ("minimal_forests,m","Write minimal forests (excludes Rule information). Such forests can be used for ML/MAP training, but not rescoring, etc."); ob.AddOptions(&opts); + po::options_description cfgo("CFG output options"); + cfgo.add_options() + ("cfg_output", po::value<string>(),"write final target CFG (before FSA rescorinn) to this file"); + cfgf.AddOptions(&cfgo); po::options_description clo("Command line options"); clo.add_options() ("config,c", po::value<vector<string> >(), "Configuration file(s) - latest has priority") @@ -177,8 +185,9 @@ void InitCommandLine(int argc, char** argv, OracleBleu &ob, po::variables_map* c ; po::options_description dconfig_options, dcmdline_options; - dconfig_options.add(opts); - dcmdline_options.add(opts).add(clo); + dconfig_options.add(opts).add(cfgo); + //add(opts).add(cfgo) + dcmdline_options.add(dconfig_options).add(clo); po::store(parse_command_line(argc, argv, dcmdline_options), conf); if (conf.count("compgen")) { @@ -653,7 +662,11 @@ int main(int argc, char** argv) { maybe_prune(forest,conf,"beam_prune","density_prune","+LM",srclen); - + HgCFG hgcfg(forest); + if (conf.count("cfg_output")) { + WriteFile o(str("cfg_output",conf)); + hgcfg.GetCFG().Print(o.get(),cfgf); + } if (!fsa_ffs.empty()) { Timer t("Target FSA rescoring:"); if (!has_late_models) @@ -662,13 +675,12 @@ int main(int argc, char** argv) { assert(fsa_ffs.size()==1); ApplyFsaBy cfg(str("apply_fsa_by",conf),pop_limit); cerr << "FSA rescoring with "<<cfg<<" "<<fsa_ffs[0]->describe()<<endl; - ApplyFsaModels(forest,smeta,*fsa_ffs[0],feature_weights,cfg,&fsa_forest); + ApplyFsaModels(hgcfg,smeta,*fsa_ffs[0],feature_weights,cfg,&fsa_forest); forest.swap(fsa_forest); forest.Reweight(feature_weights); forest_stats(forest," +FSA forest",show_tree_structure,show_features,feature_weights,oracle.show_derivation); } - /*Oracle Rescoring*/ if(get_oracle_forest) { Oracle o=oracle.ComputeOracle(smeta,&forest,FeatureVector(feature_weights),10,conf["forest_output"].as<std::string>()); |