diff options
Diffstat (limited to 'training/dtrain/dtrain.h')
-rw-r--r-- | training/dtrain/dtrain.h | 110 |
1 files changed, 66 insertions, 44 deletions
diff --git a/training/dtrain/dtrain.h b/training/dtrain/dtrain.h index 0bbb5c9b..18a7dbdc 100644 --- a/training/dtrain/dtrain.h +++ b/training/dtrain/dtrain.h @@ -22,59 +22,90 @@ namespace po = boost::program_options; namespace dtrain { -struct ScoredHyp +struct Hyp { + Hyp() {} + Hyp(vector<WordID> w, SparseVector<weight_t> f, weight_t model, weight_t gold, + size_t rank) : w(w), f(f), model(model), gold(gold), rank(rank) {} + vector<WordID> w; SparseVector<weight_t> f; weight_t model, gold; size_t rank; }; -inline void -PrintWordIDVec(vector<WordID>& v, ostream& os=cerr) -{ - for (size_t i = 0; i < v.size(); i++) { - os << TD::Convert(v[i]); - if (i < v.size()-1) os << " "; - } -} - -inline ostream& _np(ostream& out) { return out << resetiosflags(ios::showpos); } -inline ostream& _p(ostream& out) { return out << setiosflags(ios::showpos); } -inline ostream& _p4(ostream& out) { return out << setprecision(4); } - bool -dtrain_init(int argc, char** argv, po::variables_map* conf) +dtrain_init(int argc, + char** argv, + po::variables_map* conf) { po::options_description opts("Configuration File Options"); opts.add_options() - ("bitext,b", po::value<string>(), "bitext") - ("decoder_conf,C", po::value<string>(), "configuration file for decoder") - ("iterations,T", po::value<size_t>()->default_value(15), "number of iterations T (per shard)") - ("k", po::value<size_t>()->default_value(100), "size of kbest list") - ("learning_rate,l", po::value<weight_t>()->default_value(0.00001), "learning rate") - ("l1_reg,r", po::value<weight_t>()->default_value(0.), "l1 regularization strength") - ("margin,m", po::value<weight_t>()->default_value(1.0), "margin for margin perceptron") - ("score,s", po::value<string>()->default_value("chiang"), "per-sentence BLEU approx.") - ("N", po::value<size_t>()->default_value(4), "N for BLEU approximation") - ("input_weights,w", po::value<string>(), "input weights file") - ("average,a", po::bool_switch()->default_value(true), "output average weights") - ("keep,K", po::bool_switch()->default_value(false), "output a weight file per iteration") - ("struct,S", po::bool_switch()->default_value(false), "structured SGD with hope/fear") - ("output,o", po::value<string>()->default_value("-"), "output weights file, '-' for STDOUT") - ("disable_learning,X", po::bool_switch()->default_value(false), "disable learning") - ("output_data,D", po::value<string>()->default_value(""), "output data to STDOUT; arg. is 'kbest', 'default' or 'all'") + ("bitext,b", po::value<string>(), + "bitext, source and references in a single file [e ||| f]") + ("decoder_conf,C", po::value<string>(), + "decoder configuration file") + ("iterations,T", po::value<size_t>()->default_value(15), + "number of iterations T") + ("k", po::value<size_t>()->default_value(100), + "sample size per input (e.g. size of k-best lists)") + ("unique_kbest", po::bool_switch()->default_value(true), + "unique k-best lists") + ("forest_sample", po::bool_switch()->default_value(false), + "sample k hyptheses from forest instead of using k-best list") + ("learning_rate,l", po::value<weight_t>()->default_value(0.00001), + "learning rate [only meaningful if margin>0 or input weights are given]") + ("l1_reg,r", po::value<weight_t>()->default_value(0.), + "l1 regularization strength [see Tsuruoka, Tsujii and Ananiadou (2009)]") + ("margin,m", po::value<weight_t>()->default_value(1.0), + "margin for margin perceptron [set =0 for standard perceptron]") + ("cut,u", po::value<weight_t>()->default_value(0.1), + "use top/bottom 10% (default) of k-best as 'good' and 'bad' for \ +pair sampling, 0 to use all pairs TODO") + ("adjust,A", po::bool_switch()->default_value(false), + "adjust cut for optimal pos. in k-best to cut") + ("score,s", po::value<string>()->default_value("chiang"), + "per-sentence BLEU (approx.)") + ("nakov_fix", po::value<weight_t>()->default_value(1.0), + "add to reference length [see score.h]") + ("chiang_decay", po::value<weight_t>()->default_value(0.9), + "decaying factor for Chiang's approx. BLEU") + ("N", po::value<size_t>()->default_value(4), + "N for BLEU approximation") + ("input_weights,w", po::value<string>(), + "weights to initialize model") + ("average,a", po::bool_switch()->default_value(true), + "output average weights") + ("keep,K", po::bool_switch()->default_value(false), + "output a weight file per iteration [as weights.T.gz]") + ("structured,S", po::bool_switch()->default_value(false), + "structured prediction objective [hope/fear] w/ SGD") + ("pro_sampling", po::bool_switch()->default_value(false), + "updates from pairs selected as shown in Fig.4 of (Hopkins and May, 2011) [Gamma=max_pairs (default 5000), Xi=cut (default 50); threshold default 0.05]") + ("threshold", po::value<weight_t>()->default_value(0.), + "(min.) threshold in terms of gold score for pair selection") + ("max_pairs", + po::value<size_t>()->default_value(numeric_limits<size_t>::max()), + "max. number of updates/pairs") + ("output,o", po::value<string>()->default_value("-"), + "output weights file, '-' for STDOUT") + ("disable_learning,X", po::bool_switch()->default_value(false), + "fix model") + ("output_updates,U", po::value<string>()->default_value(""), + "output updates (diff. vectors) [to filename]") + ("output_raw,R", po::value<string>()->default_value(""), + "output raw data (e.g. k-best lists) [to filename]") ("print_weights,P", po::value<string>()->default_value("EgivenFCoherent SampleCountF CountEF MaxLexFgivenE MaxLexEgivenF IsSingletonF IsSingletonFE Glue WordPenalty PassThrough LanguageModel LanguageModel_OOV"), - "list of weights to print after each iteration"); + "list of weights to print after each iteration"); po::options_description clopts("Command Line Options"); clopts.add_options() ("conf,c", po::value<string>(), "dtrain configuration file") ("help,h", po::bool_switch(), "display options"); opts.add(clopts); po::store(parse_command_line(argc, argv, opts), *conf); - cerr << "dtrain" << endl << endl; + cerr << "*dtrain*" << endl << endl; if ((*conf)["help"].as<bool>()) { - cerr << opts << endl; + cerr << setprecision(3) << opts << endl; return false; } @@ -90,20 +121,11 @@ dtrain_init(int argc, char** argv, po::variables_map* conf) return false; } if (!conf->count("bitext")) { - cerr << "No input given." << endl; + cerr << "No input bitext." << endl; cerr << opts << endl; return false; } - if ((*conf)["output_data"].as<string>() != "") { - if ((*conf)["output_data"].as<string>() != "kbest" && - (*conf)["output_data"].as<string>() != "default" && - (*conf)["output_data"].as<string>() != "all") { - cerr << "Wrong 'output_data' argument: "; - cerr << (*conf)["output_data"].as<string>() << endl; - return false; - } - } return true; } |