def output(self, file_name, sentence, corr_label, phrases_probability): """ テストを行なった結果をファイルに書き出す :param file_name: 出力ファイル名 :param sentence: 文章 :param corr_label: 正解ラベル :param phrases_probability: ある文章の各フレーズに対する出力リスト :return: なし """ # フレーズリストを出す phrases = spliter.phrases(sentence, self.window_size) # 文に対する予測ラベルを出す pred_label = self.consult_softmax(phrases_probability) # 出力 with open(file_name, 'a') as f: f.write(str(corr_label) + '\t' + str(pred_label) + '\t' + sentence + '\n') # 各フレーズに関する出力をまとめる for i in range(len(phrases)): f.write('\t'.join(phrases_probability) + ' '.join(phrases[i]) + '\n') # 各文章の終わりに空行を入れる with open(file_name, 'a') as f: f.write('\n')
def sentence_vector_to_eng(sentence, window_size=1): """ 日本語文章を英語ベクトル化する :param sentence: 日本語文章 <class: 'str'> :param window_size: 切り取るウィンドウサイズ <class: 'int'> :return: 文章から得られるフレーズベクトルリスト <class: 'list'> """ _sentence_vector = [] # 文章ベクトル count = spliter.word_count(sentence) # 単語数 phrases = spliter.phrases(sentence, window_size) # フレーズリスト if len(phrases) == 0: # window_sizeが単語数より大きくて、フレーズが得られなかった # 補完関数を用いて、window_sizeに合うようにベクトルを生成 completion_vector = [] words = spliter.words(sentence) # それぞれの単語についてベクトルを取得 for word in words: completion_vector.extend(word_vector_to_eng(word)) # 補完を行う for _ in range(window_size - count): random_vector = [random.uniform(-0.25, 0.25) for _ in range(300)] completion_vector.extend(random_vector) # 補完済のベクトルをフレーズベクトルリストとする _sentence_vector.append(completion_vector) else: # フレーズを一つベクトル化する for phrase in phrases: _sentence_vector.append(phrase_vector_to_eng(phrase)) return _sentence_vector
def sentence_vector(sentence, window_size=1): """ 文章をベクトル化する :param sentence: 日本語文章 <class: 'str'> :param window_size: 切り取るウィンドウサイズ <class: 'int'> :return: 文章から得られるフレーズベクトルリスト <class: 'list'> """ _sentence_vector = [] # 文章ベクトル count = spliter.word_count(sentence) # 単語数 phrases = spliter.phrases(sentence, window_size) # フレーズリスト if len(phrases) == 0: # window_sizeが単語数より大きくて、フレーズが得られなかった # 補完関数を用いて、window_sizeに合うようにベクトルを生成 completion_vector = [] words = spliter.words(sentence) # それぞれの単語についてベクトルを取得 for word in words: completion_vector.extend(word_vector(word)) # 補完関数が設定されていなかったら、エラー処理 if w2v.completion_func is None: sys.stderr.write("KeyError: 補完用のコールバック関数を指定してください。\n") exit() # 補完を行う for _ in range(window_size - count): completion_vector.extend(w2v.completion_func(w2v.vector_size)) # 補完済のベクトルをフレーズベクトルリストとする _sentence_vector.append(completion_vector) else: # フレーズを一つベクトル化する for phrase in phrases: _sentence_vector.append(phrase_vector(phrase)) return _sentence_vector
def output(self, file_name, sentence, corr_label, pred_labels1, pred_labels2, pred_labels3, pred_labels4): """ テストを行なった結果をファイルに書き出す :param file_name: 出力ファイル名 :param sentence: 文章 :param corr_label: 正解ラベル :param pred_labels1: ラベルが1以上の予測確率 :param pred_labels2: ラベルが2以上の予測確率 :param pred_labels3: ラベルが3以上の予測確率 :param pred_labels4: ラベルが4以上の予測確率 :return: なし """ # フレーズリストを出す phrases = spliter.phrases(sentence, self.window_size) # 出力 with open(file_name, 'a') as f: f.write(str(corr_label) + '\t' + sentence + '\n') # 各フレーズに関する出力をまとめる for i in range(len(phrases)): pred_label1 = [str(label_pred) for label_pred in pred_labels1.data[i]] pred_label2 = [str(label_pred) for label_pred in pred_labels2.data[i]] pred_label3 = [str(label_pred) for label_pred in pred_labels3.data[i]] pred_label4 = [str(label_pred) for label_pred in pred_labels4.data[i]] f.write('\t'.join(pred_label1) + '\t' + '\t'.join(pred_label2) + '\t' + '\t'.join(pred_label3) + '\t' + '\t'.join(pred_label4) + '\t' + ' '.join(phrases[i]) + '\n') # 各文章の終わりに空行を入れる with open(file_name, 'a') as f: f.write('\n')
def output(self, file_name, sentence, corr_label, pred_labels): """ 結果をファイルに出力 :param file_name: 出力ファイル :param sentence: 文章 :param corr_label: 正解ラベル :param pred_labels: 予測確率 :return: なし """ # フレーズリストを出す phrases = spliter.phrases(sentence, self.window_size) with open(file_name, 'a') as f: f.write(str(corr_label) + '\t' + sentence + '\n') # 各フレーズに関する出力をまとめる for (phrase, pred_label) in zip(phrases, pred_labels.data): pred_label = [str(label) for label in pred_label] f.write('\t'.join(pred_label) + '\t' + ' '.join(phrase) + '\n') # 各文章の終わりに空行を入れる with open(file_name, 'a') as f: f.write('\n')