Beispiel #1
0
 def train_epoch(self, train_set, valid_data, epoch, shuffle=True):
     if shuffle:
         random.shuffle(train_set)
     train_set = batchnize_dataset(train_set, self.cfg.batch_size)
     num_batches = len(train_set)
     prog = Progbar(target=num_batches)
     for i, batch_data in enumerate(train_set):
         feed_dict = self._get_feed_dict(
             batch_data,
             emb_keep_prob=self.cfg["emb_keep_prob"],
             rnn_keep_prob=self.cfg["rnn_keep_prob"],
             attn_keep_prob=self.cfg["attn_keep_prob"],
             is_train=True,
             lr=self.cfg["lr"])
         _, train_loss, summary = self.sess.run(
             [self.train_op, self.loss, self.summary], feed_dict=feed_dict)
         cur_step = (epoch - 1) * num_batches + (i + 1)
         prog.update(i + 1, [("Global Step", int(cur_step)),
                             ("Train Loss", train_loss)])
         self.train_writer.add_summary(summary, cur_step)
         if i % 100 == 0:
             valid_feed_dict = self._get_feed_dict(valid_data)
             valid_summary = self.sess.run(self.summary,
                                           feed_dict=valid_feed_dict)
             self.test_writer.add_summary(valid_summary, cur_step)
Beispiel #2
0
def play_with_model(mode):
    # build tf flags
    tf_config = create_configurations()
    # process dataset
    if not os.path.exists(tf_config["save_dir"]) or not os.listdir(
            tf_config["save_dir"]):
        sys.stdout.write(
            "No preprocessed dataset found, create from {} raw data...\n".
            format(tf_config["dataset_name"]))
        sys.stdout.flush()
        process_europarl(tf_config)
    # create configurations
    sys.stdout.write("Load configurations...\n")
    sys.stdout.flush()
    config = Config(tf_config)
    if mode == "train":
        # prepare training dataset batches
        sys.stdout.write("Load dataset and create batches...\n")
        sys.stdout.flush()
        train_batches, test_batches = batchnize_dataset(
            tf_config["dataset"], config.batch_size, config.target_dict)
        # build model and start training
        sys.stdout.write("Building model...\n")
        sys.stdout.flush()
        seq2seq_model = SequenceToSequence(config, mode="train")
        seq2seq_model.train(train_batches, test_batches, epochs=config.epochs)
    elif mode == "decode":
        # build model and start training
        sys.stdout.write("Building model...\n")
        sys.stdout.flush()
        seq2seq_model = SequenceToSequence(config, mode="decode")
        seq2seq_model.restore_last_session()
        sys.stdout.write("> ")
        sys.stdout.flush()
        top_n = False  # if beam search, return all decoded results or just the first one
        source_language = "french" if tf_config["fr_to_en"] else "english"
        sentence = sys.stdin.readline()
        sent_ids = sentence_to_ids(sentence, config.source_dict,
                                   source_language, tf_config["lower"],
                                   tf_config["keep_number"])
        while sentence:
            predict_ids = seq2seq_model.inference(sent_ids)
            response = ids_to_sentence(
                predict_ids, config.rev_target_dict,
                config.target_dict)[0]  # batch_size == 1
            print(response)
            if top_n:
                print("\n".join(response))
            else:
                print(response[0])
            sys.stdout.write("> ")
            sys.stdout.flush()
            sentence = sys.stdin.readline()
            sent_ids = sentence_to_ids(sentence, config.source_dict,
                                       source_language, tf_config["lower"],
                                       tf_config["keep_number"])
    else:
        raise ValueError(
            "ERROR: Unknown mode name {}, support modes: (train | decode)".
            format(mode))
Beispiel #3
0
	def read_dataset_helper(self, file_dict, dataset_name):
		dataset = dict()
		print(len(file_dict['train']))
		print(len(file_dict['dev']))
		print(len(file_dict['test']))
		train_set = batchnize_dataset(file_dict['train'], self.config["batch_size"], shuffle=True)
		# used for computing validate loss
		valid_data = batchnize_dataset(file_dict['dev'], batch_size=1000, shuffle=True)[0]
		# used for computing validate accuracy, precision, recall and F1 scores
		valid_set = batchnize_dataset(file_dict['dev'], self.config["batch_size"], shuffle=False)
		# used for computing test accuracy, precision, recall and F1 scores
		test_set = batchnize_dataset(file_dict['test'], self.config["batch_size"], shuffle=False)
		dataset["train_set"] = train_set
		dataset["dev_data"] = valid_data
		dataset["dev_set"] = valid_set
		dataset["test_set"] = test_set

		return dataset
tf.flags.DEFINE_string("summary_path", "ckpt/media/summary/",
                       "path to save summaries")
tf.flags.DEFINE_string("model_name", "multi_attention_model", "models name")

# convert parameters to dict
config = tf.flags.FLAGS.flag_values_dict()

# create dataset from raw data files
if not os.path.exists(config["save_path"]) or not os.listdir(
        config["save_path"]):
    process_data(config)

print("Load datasets...")
train_data = load_dataset(config["train_set"])
valid_set = batchnize_dataset(config["dev_set"],
                              config["batch_size"],
                              shuffle=False)
test_set = batchnize_dataset(config["test_set"],
                             config["batch_size"],
                             shuffle=False)
valid_data = batchnize_dataset(config["dev_set"], shuffle=False)

print("Build models...")
model = SequenceLabelModel(config)
model.train(train_data, valid_data, valid_set, test_set)

print("Inference...")
sentences = [
    "alors une nuit le DIZAINE MOIS UNITE MILLE UNITE",
    "dans un hôtel à XVILLE dans le centre ville"
]
Beispiel #5
0
from models.blstm_cnn_crf_model import SequenceLabelModel
from utils import batchnize_dataset
from configs.conll_pos_blstm_cnn_crf_cfg import create_configuration

print("Build configurations...")
config = create_configuration()

print("Load datasets...")
# used for training
train_set = batchnize_dataset(config["train_set"],
                              config["batch_size"],
                              shuffle=True)
# used for computing validate loss
valid_data = batchnize_dataset(config["dev_set"],
                               batch_size=1000,
                               shuffle=True)[0]
# used for computing validate accuracy, precision, recall and F1 scores
valid_set = batchnize_dataset(config["dev_set"],
                              config["batch_size"],
                              shuffle=False)
# used for computing test accuracy, precision, recall and F1 scores
test_set = batchnize_dataset(config["test_set"],
                             config["batch_size"],
                             shuffle=False)

print("Build models...")
model = SequenceLabelModel(config)
model.train(train_set, valid_data, valid_set, test_set)

print("Inference...")
sentences = ["EU rejects German call to boycott British lamb ."]