Beispiel #1
0
def main(start_epoch, end_epoch, n_in, n_mid, n_out, batchsize, gpu):
    # ネットワークインスタンス作成
    net = JAtoENG(n_in, n_mid, n_out, batchsize, gpu)

    # 途中のエポックから処理を行う場合、その直前のモデルを読み込んでから学習・テストを行う
    if start_epoch != 1:
        model_file = "/home/kaneko-takayuki/NLP/ja_eng_lib/model_mse/epoch" + str(start_epoch) + "_model.npz"
        net.load(model_file)

    # 実験で使用する補完関数を設定
    jw2v_func.set_completion_func(jw2v_func.return_none)
    ew2v_func.set_completion_func(ew2v_func.return_none)

    # 実験で使用するword2vecモデルを読み込む
    jw2v_func.load_w2v("/home/kaneko-takayuki/NLP/w2v_model/nwcj_word_1_200_8_25_0_1e4_32_1_15.bin")
    ew2v_func.load_w2v("/home/kaneko-takayuki/NLP/w2v_model/GoogleNews-vectors-negative300.bin")

    net.set_train_data(read_all())

    # 繰り返し学習・テスト
    for epoch in range(start_epoch, end_epoch + 1):
        sys.stdout.write("epoch" + str(epoch) + ": ")
        sys.stdout.flush()
        net.train()
        net.save("/home/kaneko-takayuki/NLP/ja_eng_lib/model_mse/epoch" + str(epoch) + "_model.npz")
def main():

    # 実験で使用するword2vecモデルを読み込む
    ew2v_func.load_w2v(
        "/home/kaneko-takayuki/NLP/w2v_model/GoogleNews-vectors-negative300.bin"
    )

    # 既知語について
    with open(
            "/home/kaneko-takayuki/NLP/ja_eng_lib/similarity_test/well_known_words_corpus.txt",
            'r') as f:
        with open(
                "/home/kaneko-takayuki/NLP/ja_eng_lib/similarity_test/well_known_words_result.txt",
                'w') as o:
            for line in f:
                word = line.replace('\n', '')
                result = w2v.model.most_similar(
                    positive=[np.asarray(vectorizer.word_vector_to_eng(word))],
                    topn=10)
                o.write(word + ": " + str(result) + '\n')

    # 未知語について
    with open(
            "/home/kaneko-takayuki/NLP/ja_eng_lib/similarity_test/unknown_words_corpus.txt",
            'r') as f:
        with open(
                "/home/kaneko-takayuki/NLP/ja_eng_lib/similarity_test/unknown_words_result.txt",
                'w') as o:
            for line in f:
                word = line.replace('\n', '')
                result = w2v.model.most_similar(
                    positive=[np.asarray(vectorizer.word_vector_to_eng(word))],
                    topn=10)
                o.write(word + ": " + str(result) + '\n')
Beispiel #3
0
def main(n_in, n_mid, n_out, gpu, dir_name):
    # cudaへのパス
    os.environ[
        "PATH"] = "/usr/local/cuda-7.5/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

    # ネットワークインスタンス作成
    net = JAtoENG(n_in, n_mid, n_out, None, gpu)
    net.load(dir_name + "epoch230_model.npz")

    # 実験で使用する補完関数を設定
    jw2v_func.set_completion_func(jw2v_func.return_none)
    ew2v_func.set_completion_func(ew2v_func.return_none)

    # 実験で使用するword2vecモデルを読み込む
    jw2v_func.load_w2v(
        "/home/kaneko-takayuki/NLP/w2v_model/nwcj_word_1_200_8_25_0_1e4_32_1_15.bin"
    )
    ew2v_func.load_w2v(
        "/home/kaneko-takayuki/NLP/w2v_model/GoogleNews-vectors-negative300.bin"
    )

    # for epoch in range(1, 2001):
    #     sys.stdout.write("epoch" + str(epoch) + "...")
    #     sys.stdout.flush()
    #     # 使用するモデルのロード
    #     net.load(dir_name + "epoch" + str(epoch) + "_model.npz")
    #
    #     # 学習データと同じものを読み込む
    #     data = read_all()
    #     keys = ['日本']
    #
    #     # 学習データ・類似度を出力
    #     with open("/home/kaneko-takayuki/NLP/ja_eng_lib/similarity_test/epoch" + str(epoch) + ".tsv", 'w') as f:
    #         for key in keys:
    #             for e_word in data[key]:
    #                 similarity = net.similarity(key, e_word)
    #                 if similarity == 0.0:  # 日単語か英単語がKeyErrorなら、飛ばす
    #                     continue
    #                 f.write(key + '\t' + e_word + '\t' + str(similarity) + '\n')
    #     print("完了")

    # 繰り返し入力を得て、マッチする英単語を求める
    while (True):
        j_word = input()
        matched_eword = net.most_similar(j_word)
        print(matched_eword)
Beispiel #4
0
def main():
    """
    5分割交差検定1回目限定スクリプト
    :return: 
    """
    # cudaへのパス
    os.environ[
        "PATH"] = "/usr/local/cuda-7.5/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

    # 実験ディレクトリ
    base = os.path.dirname(os.path.abspath(__file__))
    experiment_dir = base + "/../amazon_corpus/lstm_w2v/random/"

    # 実験で使用する補完関数を設定
    w2v_func.set_completion_func(w2v_func.create_random_vector)

    # 実験で使用するword2vecモデルを読み込む
    w2v_func.load_w2v(
        "/home/kaneko-takayuki/NLP/w2v_model/GoogleNews-vectors-negative300.bin"
    )

    for epoch in range(1, 51):
        sys.stdout.write("epoch" + str(epoch) + "...")
        sys.stdout.flush()
        net = make_sv_lstm.MakeSentenceVectorLSTM(n_in=300,
                                                  n_mid=1000,
                                                  n_out=5,
                                                  batchsize=30,
                                                  gpu=0)
        net.load(experiment_dir + "model_2layer/cross_validation1/epoch" +
                 str(epoch) + "_model.npz")

        # テストデータについて
        _sentence, _label = read_amazon_corpus(constants.AMAZON_BOOKDATA_DIR +
                                               "dataset1.tsv")
        net.set_test_data(_sentence, _label)
        net.output(experiment_dir + "out/cross_validation1/epoch" +
                   str(epoch) + "_test.tsv")
        # 学習データについて
        for i in range(2, 6):
            _sentence, _label = read_amazon_corpus(
                constants.AMAZON_BOOKDATA_DIR + "dataset" + str(i) + ".tsv")
            net.set_test_data(_sentence, _label)
            net.output(experiment_dir + "out/cross_validation1/epoch" +
                       str(epoch) + "_train" + str(i - 1) + ".tsv")
        print("完了")
def main(start_k, end_k, start_epoch, end_epoch, n_in, n_mid, batchsize, gpu, window_size, patience=0):
    """
    Amazonコーパスに対して、
    FFNNモデルで、フレーズベクトルを素性として、学習・テストを行う
    :param start_k: 5分割交差検定において、どこから行うか
    :param end_k: 5分割交差検定において、どこまで行うか
    :param start_epoch: 開始エポック数
    :param end_epoch: 限界終了エポック数
    :param n_in: 入力次元数
    :param n_mid: 中間次元数
    :param batchsize: バッチサイズ
    :param gpu: GPUを利用するかどうか
    :param window_size: フレーズを区切るウィンドウサイズ
    :param patience: early stoppingに関して、様子見する回数(0の時、early stoppingはしない)
    :return: なし
    """
    print("-------------------------------------")
    print("exec_file: en_amazon_gnews2vec_ffnn_softmax.py")
    print("start_k: " + str(start_k))
    print("end_k: " + str(end_k))
    print("start_epoch: " + str(start_epoch))
    print("end_epoch: " + str(end_epoch))
    print("入力次元数: " + str(n_in))
    print("中間次元数: " + str(n_mid))
    print("バッチサイズ: " + str(batchsize))
    print("GPU: " + str(gpu))
    print("ウィンドウサイズ: " + str(window_size))
    print("patience: " + str(patience))
    print("-------------------------------------")

    # 実験ディレクトリ
    experiment_dir = constants.AMAZON_DIR + "experiment/en/gnews2vec_ffnn_softmax/window" + str(window_size) + "/"
    experiment_majority_dir = constants.AMAZON_DIR + "experiment/en/gnews2vec_ffnn_majority/window" + str(window_size) + "/"

    # 実験で使用する補完関数を設定
    w2v_func.set_completion_func(w2v_func.create_random_vector)

    # 実験で使用するword2vecモデルを読み込む
    w2v_func.load_w2v(constants.W2V_MODEL_DIR + "GoogleNews-vectors-negative300.bin")

    # k_start〜k_endで5分割交差検定
    # k: k回目の検定
    for k in range(start_k, end_k+1):
        print(str(k) + " / 5 分割目")
        # ネットワークインスタンス作成
        net = GNEWS2VECFFNNSOFTMAX(n_in, n_mid, batchsize, gpu, window_size)

        # 途中のエポックから処理を行う場合、その直前のモデルを読み込んでから学習・テストを行う
        if start_epoch != 1:
            model_file = experiment_dir + "model/cross_validation" + str(k) + "/" \
                         + "epoch" + str(start_epoch-1) + "_model.npz"
            net.load(model_file)

        # 学習データ, テストデータの準備
        train_sentences = []
        train_labels = []
        dev_sentences = []
        dev_labels = []
        test_sentences = []
        test_labels = []

        # あらかじめ5分割しておいたデータセットを学習用とテスト用に振り分ける
        # 3/5が学習用、1/5が検証用、5/1がテスト用
        for i in range(1, 6):
            _sentence, _label = read_amazon_corpus(constants.AMAZON_EN_BOOKDATA_DIR + "dataset" + str(i) + ".tsv")

            if ((k + i) % 5 == 0) and (patience > 0):
                dev_sentences.extend(_sentence)  # 検証用
                dev_labels.extend(_label)
            if (k + i) % 5 == 1:
                test_sentences.extend(_sentence)  # テスト用
                test_labels.extend(_label)
            else:
                train_sentences.extend(_sentence)  # 学習用
                train_labels.extend(_label)

        # データのセット
        net.set_train_data(train_sentences, train_labels)
        net.set_dev_data(dev_sentences, dev_labels)
        net.set_test_data(test_sentences, test_labels)

        # 繰り返し学習・テスト
        print("--------------------------------------------------------------")
        print(" epoch | train_loss | test_accuracy | dev_accuracy ")
        for epoch in range(start_epoch, end_epoch+1):
            sys.stdout.write(str(epoch).center(7) + '|')
            sys.stdout.flush()

            # 学習フェーズ
            train_loss = '-'
            if os.path.exists(experiment_majority_dir + "model/cross_validation" + str(k) + "/epoch" + str(epoch) + "_model.npz"):
                net.load(experiment_majority_dir + "model/cross_validation" + str(k) + "/epoch" + str(epoch) + "_model.npz")
            else:
                train_loss = net.train()
            sys.stdout.write(str(train_loss)[:10].center(12) + '|')
            sys.stdout.flush()

            # テストフェーズ
            test_accuracy = net.test(experiment_dir + "out/cross_validation" + str(k) + "/epoch" + str(epoch) + ".tsv")
            sys.stdout.write(str(test_accuracy)[:13].center(15) + '|')
            sys.stdout.flush()

            # モデルの保存
            net.save(experiment_dir + "model/cross_validation" + str(k) + "/epoch" + str(epoch) + "_model.npz")

            # 収束検証フェーズ
            if patience > 0:
                dev_accuracy, early_stopping_flag = net.dev(patience)
                sys.stdout.write(str(dev_accuracy)[:12].center(14))
                sys.stdout.flush()
                if early_stopping_flag:
                    break
            print()
        print("--------------------------------------------------------------")
Beispiel #6
0
def main(start_k, end_k, start_epoch, end_epoch, n_in, n_mid, batchsize, gpu,
         window_size, completion):
    """
    Amazonコーパスに対して、
    sigmoidを5つ使用したモデルで、フレーズベクトルを素性として、学習・テストを行う
    :param start_k: 5分割交差検定において、どこから行うか
    :param end_k: 5分割交差検定において、どこまで行うか
    :param start_epoch: 開始エポック数
    :param end_epoch: 終了エポック数
    :param n_in: 入力次元数
    :param n_mid: 中間次元数
    :param batchsize: バッチサイズ
    :param gpu: GPUを利用するかどうか
    :param window_size: フレーズを区切るウィンドウサイズ
    :param completion: 補完関数(zero, random)
    :return: なし
    """
    print("-------------------------------------")
    print("exec_file: exec_amazon_w2v_sigmoid5.py")
    print("start_k: " + str(start_k))
    print("end_k: " + str(end_k))
    print("start_epoch: " + str(start_epoch))
    print("end_epoch: " + str(end_epoch))
    print("入力次元数: " + str(n_in))
    print("中間次元数: " + str(n_mid))
    print("バッチサイズ: " + str(batchsize))
    print("GPU: " + str(gpu))
    print("ウィンドウサイズ: " + str(window_size))
    print("補完関数: " + completion)
    print("-------------------------------------")

    # 実験ディレクトリ
    experiment_dir = "amazon_corpus/sigmoid5_w2v/window" + str(
        window_size) + "/" + completion + "/"

    # 実験で使用する補完関数を設定
    if completion == "zero":
        w2v_func.set_completion_func(w2v_func.create_zero_vector)
    elif completion == "random":
        w2v_func.set_completion_func(w2v_func.create_random_vector)
    else:
        sys.stderr.write("指定した補完関数が適切ではありません\n")
        exit()

    # 実験で使用するword2vecモデルを読み込む
    w2v_func.load_w2v(
        "/home/kaneko-takayuki/NLP/w2v_model/GoogleNews-vectors-negative300.bin"
    )

    # k_start〜k_endで5分割交差検定
    # k: k回目の検定
    for k in range(start_k, end_k + 1):
        print("-------------------")
        print(str(k) + " / 5 分割目")
        print("-------------------")
        # ネットワークインスタンス作成
        net = EW2VSigmoid5(n_in, n_mid, batchsize, gpu, window_size)

        # 途中のエポックから処理を行う場合、その直前のモデルを読み込んでから学習・テストを行う
        if start_epoch != 1:
            model_file = experiment_dir + "model/cross_validation" + str(k) + "/" \
                         + "epoch" + str(start_epoch-1) + "_model.npz"
            net.load(model_file)

        # 学習データ, テストデータの準備
        train_sentences = []
        train_labels = []
        test_sentences = []
        test_labels = []

        # あらかじめ5分割しておいたデータセットを学習用とテスト用に振り分ける
        # 5/4が学習用、5/1がテスト用
        for i in range(1, 6):
            _sentence, _label = read_amazon_corpus(
                constants.AMAZON_EN_BOOKDATA_DIR + "dataset" + str(i) + ".tsv")
            if k != i:
                train_sentences.extend(_sentence)
                train_labels.extend(_label)
            else:
                test_sentences.extend(_sentence)
                test_labels.extend(_label)

        # 繰り返し学習・テスト
        for epoch in range(start_epoch, end_epoch + 1):
            sys.stdout.write("epoch" + str(epoch) + "...")
            sys.stdout.flush()
            net.set_train_data(train_sentences, train_labels)
            net.set_test_data(test_sentences, test_labels)
            net.train()
            net.test(experiment_dir + "out/cross_validation" + str(k) +
                     "/epoch" + str(epoch) + ".tsv")
            net.save(experiment_dir + "model/cross_validation" + str(k) +
                     "/epoch" + str(epoch) + "_model.npz")
            print("完了")
def main(start_k, end_k, start_epoch, end_epoch, n_in, n_mid, n_out, batchsize,
         gpu, completion):
    """
    Amazonコーパスに対して、
    FFNNモデルで、フレーズベクトルを素性として、学習・テストを行う
    :param start_k: 5分割交差検定において、どこから行うか
    :param end_k: 5分割交差検定において、どこまで行うか
    :param start_epoch: 開始エポック数
    :param end_epoch: 終了エポック数
    :param n_in: 入力次元数
    :param n_mid: 中間次元数
    :param n_out: 出力次元数
    :param batchsize: バッチサイズ
    :param gpu: GPUを利用するかどうか
    :param completion: 補完関数(random, zero)
    :return: なし
    """
    print("-------------------------------------")
    print("exec_file: exec_amazon_make_sentence_vector.py")
    print("start_k: " + str(start_k))
    print("end_k: " + str(end_k))
    print("start_epoch: " + str(start_epoch))
    print("end_epoch: " + str(end_epoch))
    print("入力次元数: " + str(n_in))
    print("中間次元数: " + str(n_mid))
    print("バッチサイズ: " + str(batchsize))
    print("GPU: " + str(gpu))
    print("補完関数: " + completion)
    print("-------------------------------------")

    # 実験ディレクトリ
    base = os.path.dirname(os.path.abspath(__file__))
    experiment_dir = base + "/../../amazon_corpus/lstm_w2v/random/"

    # 実験で使用する補完関数を設定
    if completion == "zero":
        w2v_func.set_completion_func(w2v_func.create_random_vector)
    elif completion == "random":
        w2v_func.set_completion_func(w2v_func.create_random_vector)
    else:
        sys.stderr.write("補完関数の指定方法を見なおしてください\n")
        exit()

    # 実験で使用するword2vecモデルを読み込む
    w2v_func.load_w2v(
        "/home/kaneko-takayuki/NLP/w2v_model/GoogleNews-vectors-negative300.bin"
    )

    # k_start〜k_endで5分割交差検定
    # k: k回目の検定
    for k in range(start_k, end_k + 1):
        print("-------------------")
        print(str(k) + " / 5 分割目")
        print("-------------------")
        # ネットワークインスタンス作成
        net = make_lstm(n_in, n_mid, n_out, batchsize, gpu)

        # 途中のエポックから処理を行う場合、その直前のモデルを読み込んでから学習・テストを行う
        if start_epoch != 1:
            model_file = experiment_dir + "model/cross_validation" + str(k) + "/" \
                         + "epoch" + str(start_epoch - 1) + "_model.npz"
            net.load(model_file)

        # 学習データ, テストデータの準備
        train_sentences = []
        train_labels = []
        test_sentences = []
        test_labels = []

        # あらかじめ5分割しておいたデータセットを学習用とテスト用に振り分ける
        # 5/4が学習用、5/1がテスト用
        for i in range(1, 6):
            _sentence, _label = read_amazon_corpus(
                constants.AMAZON_EN_BOOKDATA_DIR + "dataset" + str(i) + ".tsv")
            # 5分割したデータのうち、一つだけをテストデータに回し、それ以外を学習データとする
            if k != i:
                train_sentences.extend(_sentence)
                train_labels.extend(_label)
            else:
                test_sentences.extend(_sentence)
                test_labels.extend(_label)

        # 繰り返し学習・テスト
        for epoch in range(start_epoch, end_epoch + 1):
            sys.stdout.write("epoch" + str(epoch) + "...")
            sys.stdout.flush()
            net.set_train_data(train_sentences, train_labels)
            net.set_test_data(test_sentences, test_labels)
            net.train()
            net.output(experiment_dir + "out/cross_validation" + str(k) +
                       "/epoch" + str(epoch) + ".tsv")
            net.save(experiment_dir + "model/cross_validation" + str(k) +
                     "/epoch" + str(epoch) + "_model.npz")
            print("完了")