log_to_file(log_file_name, epoch, avg_train_loss, train_accuracy, dev_accuracy) if patience == train_hyperparams['PATIENCE']: print 'out of patience after {} epochs'.format(epoch) train_progress_bar.finish() break # finished epoch train_progress_bar.update(epoch) print 'finished training.' ti = SoftAttention(pc, model_hyperparams, best_model_path) dev_accuracy, dev_results = ti.evaluate(dev_data.iter(), int(arguments['--beam'])) print 'Best dev accuracy: {}'.format(dev_accuracy) write_param_file(output_file_path, dict(model_hyperparams.items()+train_hyperparams.items())) write_pred_file(output_file_path, dev_results) write_eval_file(output_file_path, best_dev_accuracy, dev_path) elif arguments['test']: print '=========EVALUATION ONLY:=========' # requires test path, model path of pretrained path and results path where to write the results to assert arguments['--test_path']!=None print 'Loading data...' test_path = check_path(arguments['--test_path'], '--test_path') data_set = SoftDataSet input_format = [int(col) for col in arguments['--input_format'].split(',')] test_data = data_set.from_file(test_path,input_format, arguments['--lowercase']) print 'Test data has {} examples'.format(test_data.length) print 'Checking if any special symbols in data...'
arguments["--lm_paths"].split(','),\ [int(o) for o in arguments["--lm_orders"].split(',')]\ )): lm_model_folder = check_path(path, 'LM_MODEL_FOLDER_{}'.format(i), is_data_path=False) if lm_type=="srilm_char": print '...Loading lm model {} from path {}'.format(i,lm_model_folder) lm_model = SRILM_char_lm_loader(lm_model_folder, order) elif lm_type=="srilm_morph": lm_model = SRILM_morpheme_lm_loader(lm_model_folder,order) assert arguments['--morph_vocab'] != None lm_model.vocab = Vocab.from_file(check_path(arguments['--morph_vocab'], 'morph_vocab', is_data_path=False)) else: print "WARNING -- Could not load language model. Unknown type",lm_type,". Use 'srilm_char' or 'srilm_morph'" lm_models.append(lm_model) lm_number = len(lm_models) output_file_path = os.path.join(model_folder,arguments['--pred_path']) # save best dev model parameters and predictions print 'Evaluating on test..' t = time.clock() if arguments['--indices']: indices = [int(ind) for ind in arguments['--indices'].split(',')] accuracy, test_results = evaluate_syncbeam(test_data.iter(indices), nmt_models, lm_models, weights, int(arguments['--beam']), int(arguments['--output_format']), verbose=arguments['--verbose'], exclude_eow=arguments['--exclude_eow']) else: accuracy, test_results = evaluate_syncbeam(test_data.iter(), nmt_models, lm_models, weights, int(arguments['--beam']), int(arguments['--output_format']), verbose=arguments['--verbose'], exclude_eow=arguments['--exclude_eow']) print 'Time: {}'.format(time.clock()-t) print 'accuracy: {}'.format(accuracy) write_pred_file(output_file_path, test_results, int(arguments['--output_format'])) write_eval_file(output_file_path, accuracy, test_path)