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')
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)
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("--------------------------------------------------------------")
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("完了")