Ejemplo n.º 1
0
def main():
    # parse args first
    parser = argparse.ArgumentParser()
    parser.add_argument('-m')
    parser.add_argument('-cfg', nargs='*')
    args = parser.parse_args()

    if args.m:
        cfg.mode = args.m
    parse_arg_cfg(args)

    if cfg.mode == 'validate' or cfg.mode == 'adjust':
        assert (cfg.eval_load_path != 'to be input')
        cfg.gpt_path = cfg.eval_load_path
        if cfg.mode == 'adjust':
            cfg.mode = 'train'
    else:  # train
        if cfg.exp_path in ['', 'to be generated']:

            experiments_path = './experiments'
            cfg.exp_path = os.path.join(
                experiments_path, '{}_sd{}_lr{}_bs{}_ga{}_ctx{}'.format(
                    cfg.exp_no, cfg.seed, cfg.lr, cfg.batch_size,
                    cfg.gradient_accumulation_steps, cfg.context_scheme))
            if cfg.save_log:
                if not os.path.exists(cfg.exp_path):
                    os.mkdir(cfg.exp_path)

            # to gpt later
            cfg.model_path = os.path.join(cfg.exp_path, 'model.pkl')
            cfg.result_path = os.path.join(cfg.exp_path, 'result.csv')
            cfg.vocab_path_eval = os.path.join(cfg.exp_path, 'vocab')
            cfg.eval_load_path = cfg.exp_path

    cfg._init_logging_handler(args.m)

    #fix random seed
    torch.manual_seed(cfg.seed)
    torch.cuda.manual_seed(cfg.seed)
    random.seed(cfg.seed)
    np.random.seed(cfg.seed)

    #initialize model
    m = UBARdoc(cfg.device)

    if cfg.mode == 'train':
        m.train()
    elif cfg.mode == 'validate':
        m.validate()

    print('done')

    return 0
Ejemplo n.º 2
0
def main():
    if not os.path.exists('./experiments'):
        os.mkdir('./experiments')

    if not os.path.exists('./experiments_21'):
        os.mkdir('./experiments_21')

    parser = argparse.ArgumentParser()
    parser.add_argument('-mode')
    parser.add_argument('-cfg', nargs='*')
    args = parser.parse_args()

    cfg.mode = args.mode
    if args.mode == 'test' or args.mode == 'adjust':
        parse_arg_cfg(args)
        # cfg.model_path = cfg.eval_load_path
        cfg.gpt_path = cfg.eval_load_path
    else:  # train
        parse_arg_cfg(args)
        if cfg.exp_path in ['', 'to be generated']:
            # log file path, control the factors: seed, learning_rate, batch_size, early_stop_count, weight decay...
            # cfg.exp_path = 'experiments/{}_{}_sd{}_lr{}_bs{}_sp{}_dc{}/'.format('-'.join(cfg.exp_domains),
            #                                                                     cfg.exp_no, cfg.seed, cfg.lr, cfg.batch_size,
            #                                                                     cfg.early_stop_count, cfg.weight_decay_count)

            experiments_path = './experiments' if 'all' in cfg.exp_domains else './experiments_Xdomain'
            cfg.exp_path = os.path.join(
                experiments_path, '{}_{}_sd{}_lr{}_bs{}_ga{}'.format(
                    '-'.join(cfg.exp_domains), cfg.exp_no, cfg.seed, cfg.lr,
                    cfg.batch_size, cfg.gradient_accumulation_steps))
            logging.info('save path:', cfg.exp_path)
            if cfg.save_log:
                if not os.path.exists(cfg.exp_path):
                    os.mkdir(cfg.exp_path)

            # to gpt later
            cfg.model_path = os.path.join(cfg.exp_path, 'model.pkl')
            cfg.result_path = os.path.join(cfg.exp_path, 'result.csv')
            cfg.vocab_path_eval = os.path.join(cfg.exp_path, 'vocab')
            cfg.eval_load_path = cfg.exp_path

    cfg._init_logging_handler(args.mode)
    if cfg.cuda:
        if len(cfg.cuda_device) == 1:
            cfg.multi_gpu = False
            # torch.cuda.set_device(cfg.cuda_device[0])
            device = torch.device("cuda:{}".format(cfg.cuda_device[0]))
        else:
            pass  # multi-gpu
    else:
        device = torch.device('cpu')
        logging.info('Device: {}'.format(torch.cuda.current_device()))

    # fix random seed
    torch.manual_seed(cfg.seed)
    torch.cuda.manual_seed(cfg.seed)
    random.seed(cfg.seed)
    np.random.seed(cfg.seed)

    # initialize model
    m = Modal(device)

    if args.mode == 'train':  # train
        if cfg.save_log:  # save cfg details.
            pass
        if cfg.context_scheme == 'UBARU':
            m.train()
        elif cfg.context_scheme == 'URURU':
            m.train_URURU()
        else:
            logging.info('Invalid context Scheme. must be UBARU or URURU')
            exit()
    elif args.mode == 'adjuest':
        pass
    else:  # test
        logging.info(
            "Generate setting: \n\t use true_prev_bspn={} \n\t use true_prev_aspn={} \n\t use true_db_pointer={} \n\t use true_prev_resp={} \n\t use true_curr_bspn={} \n\t use true_curr_aspn={} \n\t use_all_previous_context={}"
            .format(cfg.use_true_prev_bspn, cfg.use_true_prev_aspn,
                    cfg.use_true_db_pointer, cfg.use_true_prev_resp,
                    cfg.use_true_curr_bspn, cfg.use_true_curr_aspn,
                    cfg.use_all_previous_context))

        if cfg.context_scheme == 'UBARU':
            m.validate()
            m.validate('test')
        elif cfg.context_scheme == 'URURU':
            m.validate_URURU()
            m.validate_URURU('test')
Ejemplo n.º 3
0
def main():
    if not os.path.exists('./experiments'):
        os.mkdir('./experiments')

    parser = argparse.ArgumentParser()
    parser.add_argument('-mode')
    parser.add_argument('-cfg', nargs='*')
    args = parser.parse_args()

    cfg.mode = args.mode
    if args.mode == 'test' or args.mode == 'adjust':
        parse_arg_cfg(args)
        cfg_load = json.loads(
            open(os.path.join(cfg.eval_load_path, 'config.json'), 'r').read())
        for k, v in cfg_load.items():
            if k in [
                    'mode', 'cuda', 'cuda_device', 'eval_load_path',
                    'eval_per_domain', 'use_true_pv_resp',
                    'use_true_prev_bspn', 'use_true_prev_aspn',
                    'use_true_curr_bspn', 'use_true_curr_aspn',
                    'name_slot_unable', 'book_slot_unable',
                    'count_req_dials_only', 'log_time', 'model_path',
                    'result_path', 'model_parameters', 'multi_gpu',
                    'use_true_bspn_for_ctr_eval', 'nbest', 'limit_bspn_vocab',
                    'limit_aspn_vocab', 'same_eval_as_cambridge', 'beam_width',
                    'use_true_domain_for_ctr_eval', 'use_true_prev_dspn',
                    'aspn_decode_mode', 'beam_diverse_param',
                    'same_eval_act_f1_as_hdsa', 'topk_num', 'nucleur_p',
                    'act_selection_scheme', 'beam_penalty_type', 'record_mode'
            ]:
                continue
            setattr(cfg, k, v)
            cfg.model_path = os.path.join(cfg.eval_load_path, 'model.pkl')
            cfg.result_path = os.path.join(cfg.eval_load_path, 'result.csv')
    else:
        parse_arg_cfg(args)
        if cfg.exp_path in ['', 'to be generated']:
            cfg.exp_path = 'experiments/{}_{}_sd{}_lr{}_bs{}_sp{}_dc{}/'.format(
                '-'.join(cfg.exp_domains), cfg.exp_no, cfg.seed, cfg.lr,
                cfg.batch_size, cfg.early_stop_count, cfg.weight_decay_count)
            if cfg.save_log:
                os.mkdir(cfg.exp_path)
            cfg.model_path = os.path.join(cfg.exp_path, 'model.pkl')
            cfg.result_path = os.path.join(cfg.exp_path, 'result.csv')
            cfg.vocab_path_eval = os.path.join(cfg.exp_path, 'vocab')
            cfg.eval_load_path = cfg.exp_path

    cfg._init_logging_handler(args.mode)
    if cfg.cuda:
        if len(cfg.cuda_device) == 1:
            cfg.multi_gpu = False
            torch.cuda.set_device(cfg.cuda_device[0])
        else:
            # cfg.batch_size *= len(cfg.cuda_device)
            cfg.multi_gpu = True
            torch.cuda.set_device(cfg.cuda_device[0])
        logging.info('Device: {}'.format(torch.cuda.current_device()))

    torch.manual_seed(cfg.seed)
    torch.cuda.manual_seed(cfg.seed)
    random.seed(cfg.seed)
    np.random.seed(cfg.seed)
    m = Model()
    cfg.model_parameters = m.count_params()
    logging.info(str(cfg))

    if args.mode == 'train':
        if cfg.save_log:
            # open(cfg.exp_path + 'config.json', 'w').write(str(cfg))
            m.reader.vocab.save_vocab(cfg.vocab_path_eval)
            with open(os.path.join(cfg.exp_path, 'config.json'), 'w') as f:
                json.dump(cfg.__dict__, f, indent=2)
        # m.load_glove_embedding()
        m.train()
    elif args.mode == 'adjust':
        m.load_model(cfg.model_path)
        m.train()
    elif args.mode == 'test':
        m.load_model(cfg.model_path)
        # m.train()
        m.eval(data='test')