Ejemplo n.º 1
0
def main():
    debug = False
    parser = argparse.ArgumentParser()
    parser.add_argument('--nn_weights', type=str)
    parser.add_argument('--output_file', type=str)
    parser.add_argument('--bimpmp', action='store_true')
    args = parser.parse_args()
    weightFn = args.nn_weights
    output_fn = args.output_file
    assert weightFn
    isBimpmp = args.bimpmp
    if isBimpmp:
        print "using bimpmp"
        config = BimpmpConfig()
    else:
        print "using bidirattn"
        config = BiDirAttnBidirCondConfig()

    # Create result directories
    linear_related_preds = classify_related_unrelated()
    glove_matrix, related_h_glove_index_matrix, related_a_glove_index_matrix, related_h_seq_lengths, related_a_seq_lengths, max_input_lengths, related_labels, unrelated_labels = create_sub_class_test_data(
        linear_related_preds, config)
    test_set = [
        related_h_glove_index_matrix, related_a_glove_index_matrix,
        related_h_seq_lengths, related_a_seq_lengths, related_labels
    ]
    sub1_labels = vectorize_stances(unrelated_labels)
    with tf.Graph().as_default():
        print 80 * "="
        print "INITIALIZING"
        print 80 * "="
        print "Building model...",
        scoring_fn = lambda actual, preds: report_pipeline_score(
            actual, preds, sub1_labels)
        if isBimpmp:
            model = Bimpmp(config, scoring_fn, max_input_lengths, glove_matrix,
                           debug)
        else:
            model = Bidirectional_Attention_Conditonal_Encoding_LSTM_Model(
                config, scoring_fn, max_input_lengths, glove_matrix, debug)
        model.print_params()
        # Initialize variables
        init = tf.global_variables_initializer()
        with tf.Session() as session:
            session.run(init)
            saver = create_tensorflow_saver(model.exclude_names)
            saver.restore(session, weightFn)
            # Finalize graph
            session.graph.finalize()
            print "TESTING"
            test_score, preds, test_confusion_matrix_str = model.predict(
                session, test_set, save_preds=True, UseShuffle=False)
            print preds
            print test_confusion_matrix_str
            with open(output_file, 'w') as file:
                file.write(test_confusion_matrix_str)
                file.write(preds)
Ejemplo n.º 2
0
def run_model(config, max_input_lengths, glove_matrix, args, train_examples,
              dev_set, test_set):
    """ Run the model.
    """
    with tf.Graph().as_default():
        print 80 * "="
        print "INITIALIZING"
        print 80 * "="

        # Create and configure model
        print "Building model...",
        start = time.time()
        model = Bidirectional_Attention_Conditonal_Encoding_LSTM_Model(
            config, report_score, max_input_lengths, glove_matrix)
        model.print_params()
        print "took {:.2f} seconds\n".format(time.time() - start)

        # Initialize variables
        init = tf.global_variables_initializer()
        saver = tf.train.Saver()

        with tf.Session() as session:
            # Load weights if necessary
            session.run(init)
            saver = create_tensorflow_saver(model.exclude_names)
            if args.restore:
                saver.restore(session, model.curr_weights_fn)

            # Finalize graph
            session.graph.finalize()

            # Train Model
            print 80 * "="
            print "TRAINING"
            print 80 * "="
            model.fit(session, saver, train_examples, dev_set)

            print 80 * "="
            print "TESTING"
            print 80 * "="
            print "Restoring the best model weights found on the dev set"
            saver.restore(session, model.best_weights_fn)

            print "Final evaluation on test set",
            test_score, _, test_confusion_matrix_str = model.predict(
                session, test_set, save_preds=True)
            with open(model.test_confusion_matrix_fn, 'w') as file:
                file.write(test_confusion_matrix_str)
            print "- test Score: {:.2f}".format(test_score)
            return test_score, test_confusion_matrix_str
Ejemplo n.º 3
0
def main(debug=True):
    # Parse Arguments
    parser = argparse.ArgumentParser()
    parser.add_argument('--epoch', type=int, default=5)
    parser.add_argument('--restore', action='store_true')
    args = parser.parse_args()

    # Create Config
    config = Config()
    if args.epoch:
        config.n_epochs = args.epoch

    X, y, glove_matrix, max_input_lengths, word_to_glove_index = create_embeddings(
        training_size=config.training_size,
        random_split=config.random_split,
        truncate_headlines=config.truncate_headlines,
        truncate_articles=config.truncate_articles,
        classification_problem=config.classification_problem,
        max_headline_length=config.max_headline_length,
        max_article_length=config.max_article_length,
        glove_set=None,
        debug=debug)

    if config.uniform_data_split:
        X, y = produce_uniform_data_split(X, y)

    # Each set is of the form:
    # [headline_glove_index_matrix, article_glove_index_matrix, h_seq_lengths, a_seq_lengths, labels]
    train_examples, dev_set, test_set = create_data_sets_for_model(X, y)
    print "Distribution of Train {}".format(np.sum(train_examples[4], axis=0))
    print "Distribtion of Dev {}".format(np.sum(dev_set[4], axis=0))
    print "Distribution of Test{}".format(np.sum(test_set[4], axis=0))

    with tf.Graph().as_default():
        print 80 * "="
        print "INITIALIZING"
        print 80 * "="

        # Create and configure model
        print "Building model...",
        start = time.time()
        model = Attention_Conditonal_Encoding_LSTM_Model(
            config, report_score, max_input_lengths, glove_matrix, debug)
        model.print_params()
        print "took {:.2f} seconds\n".format(time.time() - start)

        # Initialize variables
        init = tf.global_variables_initializer()
        saver = None if debug else tf.train.Saver()

        with tf.Session() as session:
            # Load weights if necessary
            session.run(init)
            saver = create_tensorflow_saver(model.exclude_names)
            if args.restore:
                saver.restore(session, model.curr_weights_fn)

            # Finalize graph
            session.graph.finalize()

            # Train Model
            print 80 * "="
            print "TRAINING"
            print 80 * "="
            model.fit(session, saver, train_examples, dev_set)

            if not debug:
                print 80 * "="
                print "TESTING"
                print 80 * "="
                print "Restoring the best model weights found on the dev set"
                saver.restore(session, model.best_weights_fn)

                print "Final evaluation on test set",
                test_score, _, test_confusion_matrix_str = model.predict(
                    session, test_set, save_preds=True)
                with open(model.test_confusion_matrix_fn, 'w') as file:
                    file.write(test_confusion_matrix_str)
Ejemplo n.º 4
0
def main(debug=True):
    # Parse Arguments
    arg_epoch, arg_restore, arg_test = parse_args()

    # Create Config
    config = Config()
    if arg_epoch:
        config.n_epochs = arg_epoch

    X, y, glove_matrix, max_input_lengths, word_to_glove_index = create_embeddings(
        training_size=config.training_size,
        random_split=config.random_split,
        truncate_headlines=config.truncate_headlines,
        truncate_articles=config.truncate_articles,
        classification_problem=config.classification_problem,
        max_headline_length=config.max_headline_length,
        max_article_length=config.max_article_length,
        glove_set=None,
        debug=debug)

    if config.uniform_data_split:
        X, y = produce_uniform_data_split(X, y)

    # Each set is of the form:
    # [headline_glove_index_matrix, article_glove_index_matrix, h_seq_lengths, a_seq_lengths, labels]
    train_examples, dev_set, test_set = create_data_sets_for_model(X, y)
    print "Distribution of Train {}".format(np.sum(train_examples[4], axis=0))
    print "Distribtion of Dev {}".format(np.sum(dev_set[4], axis=0))
    print "Distribution of Test{}".format(np.sum(test_set[4], axis=0))

    with tf.Graph().as_default():
        print 80 * "="
        print "INITIALIZING"
        print 80 * "="

        # Create and configure model
        print "Building model...",
        start = time.time()
        model = Bimpmp(config, report_score, max_input_lengths, glove_matrix,
                       debug)
        model.print_params()
        print "took {:.2f} seconds\n".format(time.time() - start)

        # Initialize variables
        init = tf.global_variables_initializer()
        saver = None if debug else tf.train.Saver()

        with tf.Session(config=tf.ConfigProto(
                log_device_placement=True)) as session:
            # Load weights if necessary
            session.run(init)
            saver = create_tensorflow_saver(model.exclude_names)
            if arg_restore != None:
                weights_path = './data/{}/{}/weights'.format(
                    model.get_model_name(), arg_restore)
                restore_path = '{}/{}'.format(weights_path,
                                              model.get_fn_names()[1])
                saver.restore(session, model.curr_weights_fn)

            # Finalize graph
            session.graph.finalize()
            # train_vars = [var for var in tf.global_variables()]
            # for var in train_vars:
            #     print (var.name, var.get_shape())

            # Train Model
            print 80 * "="
            print "TRAINING"
            print 80 * "="
            model.fit(session, saver, train_examples, dev_set)

            if not debug:
                print 80 * "="
                print "TESTING"
                print 80 * "="
                print "Restoring the best model weights found on the dev set"
                saver.restore(session, model.best_weights_fn)

                print "Final evaluation on test set",
                test_score, _, test_confusion_matrix_str = model.predict(
                    session, test_set, save_preds=True)
                with open(model.test_confusion_matrix_fn, 'w') as file:
                    file.write(test_confusion_matrix_str)
Ejemplo n.º 5
0
def main(debug=True):
    parser = argparse.ArgumentParser()
    parser.add_argument('--epoch', type=int, default=5)
    parser.add_argument('--restore', action='store_true')
    args = parser.parse_args()

    if not os.path.exists('./data/weights/'):
        os.makedirs('./data/weights/')

    if not os.path.exists('./data/predictions/'):
        os.makedirs('./data/predictions/')

    if not os.path.exists('./data/plots/'):
        os.makedirs('./data/plots/')

    with tf.Graph().as_default():
        print 80 * "="
        print "INITIALIZING"
        print 80 * "="
        config = Config()

        if args.epoch:
            config.n_epochs = args.epoch

        # Load Data
        # Note: X_train_input, X_dev_input, X_test_input are lists where each item is an example.
        # Each example is a sparse representation of a headline + article, where the text
        # is encoded as a series of indices into the glove-vectors.
        # y_train_input, y_dev_input, y_test_input are matrices (num_examples, num_classes)
        X_train_input, X_dev_input, X_test_input, y_train_input, y_dev_input, y_test_input, glove_matrix, max_lengths = create_inputs_by_glove(
        )
        config.max_length = max_lengths[0] + max_lengths[1]
        print "Max Length is {}".format(config.max_length)

        # Create Basic LSTM Model
        config.pretrained_embeddings = glove_matrix
        model = BasicLSTM(config)

        # Create Data Lists
        train_examples = [X_train_input, y_train_input]
        dev_set = [X_dev_input, y_dev_input]
        test_set = [X_test_input, y_test_input]
        print "Building model...",
        start = time.time()
        print "took {:.2f} seconds\n".format(time.time() - start)

        init = tf.global_variables_initializer()
        with tf.Session() as session:
            session.run(init)
            exclude_names = set([
                "embedding_matrix:0", "embedding_matrix/Adam:0",
                "embedding_matrix/Adam_1:0"
            ])
            saver = create_tensorflow_saver(exclude_names)
            if args.restore:
                saver.restore(session,
                              './data/weights/basic_lstm_curr_stance.weights')
                print "Restored weights from ./data/weights/basic_lstm_curr_stance.weights"
                print "-------------------------------------------"
            session.graph.finalize()

            print 80 * "="
            print "TRAINING"
            print 80 * "="
            model.fit(session, saver, train_examples, dev_set)

            if saver:
                print 80 * "="
                print "TESTING"
                print 80 * "="
                print "Restoring the best model weights found on the dev set"
                saver.restore(session,
                              './data/weights/basic_lstm_best_stance.weights')
                print "Final evaluation on test set",

                prog = Progbar(target=1 + len(test_set[0]) / config.batch_size)
                actual = vectorize_stances(test_set[1])
                preds = []
                for i, (inputs_batch, labels_batch) in enumerate(
                        minibatches(test_set, config.batch_size)):
                    predictions_batch = list(
                        model.predict_on_batch(session, inputs_batch))
                    preds.extend(predictions_batch)
                    prog.update(i + 1)
                test_score, test_lines = report_score(actual, preds)

                print "- test Score: {:.2f}".format(test_score)
                print "Writing predictions"
                with open('./data/predictions/basic_lstm_predicted.pkl',
                          'w') as f:
                    cPickle.dump(preds, f, -1)
                print "Done!"
Ejemplo n.º 6
0
def main(debug=True):
    # Parse Arguments
    parser = argparse.ArgumentParser()
    parser.add_argument('--epoch', type=int, default=5)
    parser.add_argument('--restore', action='store_true')
    args = parser.parse_args()

    # Create Config
    config = Config()
    if args.epoch:
        config.n_epochs = args.epoch

    # Load Data
    X, y, glove_matrix, max_input_lengths, word_to_glove_index = create_embeddings(
        training_size=0.8,
        random_split=False,
        truncate_headlines=False,
        truncate_articles=True,
        classification_problem=3,
        max_headline_length=500,
        max_article_length=200,
        glove_set=None,
        debug=debug)

    # TODO: Remove This
    # X, y = produce_uniform_data_split(X, y)

    with tf.Graph().as_default():
        print 80 * "="
        print "INITIALIZING"
        print 80 * "="

        # Create and configure model
        print "Building model...",
        model = Two_LSTM_Encoders_Model(config, report_score, max_lengths,
                                        glove_matrix)
        start = time.time()
        print "took {:.2f} seconds\n".format(time.time() - start)

        # Initialize variables
        init = tf.global_variables_initializer()
        saver = None if debug else tf.train.Saver()

        with tf.Session() as session:
            # Load weights if necessary
            session.run(init)
            saver = create_tensorflow_saver(model.exclude_names)
            if args.restore:
                saver.restore(session, model.curr_weights_fn)

            # Finalize graph
            session.graph.finalize()

            # Train Model
            print 80 * "="
            print "TRAINING"
            print 80 * "="
            model.fit(session, saver, train_examples, dev_set)

            if not debug:
                print 80 * "="
                print "TESTING"
                print 80 * "="
                print "Restoring the best model weights found on the dev set"
                saver.restore(session, model.best_weights_fn)

                print "Final evaluation on test set",
                test_score, _, _ = model.predict(session,
                                                 test_set,
                                                 save_preds=True)
                print "- test Score: {:.2f}".format(test_score)