def main(): """ dialogs: dict, dialogs of the dataset. emo_dict: dict, emotions of all utterances. out_dict: dict, output logits of emotion classifier. """ dialogs = joblib.load('./data/dialog_iemocap.pkl') emo_dict = joblib.load('./data/emo_all_iemocap.pkl') out_dict = joblib.load('./data/outputs.pkl') # set log logging.basicConfig(stream=sys.stdout, format='%(asctime)s %(levelname)s:%(message)s', level=logging.INFO, datefmt='%I:%M:%S') # Split dialogs by speakers spk_dialogs = utils.split_dialog(dialogs) logging.info("Average number of speaker's utterances per dialog: %.3f" % np.mean( [len(i) for i in spk_dialogs.values()])) # arguments args = parse_args() print('=' * 60 + '\n') logging.info('Parameters are:\n%s\n', json.dumps(vars(args), sort_keys=False, indent=4)) print('=' * 60 + '\n') if args.transition_bias > 0: # Use given p_0 p_0 = args.transition_bias else: # Estimate p_0 of ALL dialogs. p_0, total_transit = utils.transition_bias(spk_dialogs, emo_dict) print("\n"+"#"*50) logging.info('p_0: %.3f , total transition: %d\n' % (p_0, total_transit)) print("#"*50) bias_dict = utils.get_val_bias(spk_dialogs, emo_dict) print("#"*50+"\n") trace = [] label = [] org_pred = [] DED = bs.BeamSearch(p_0, args.crp_alpha, args.num_state, args.beam_size, args.test_iteration, emo_dict, out_dict) for i, dia in enumerate(dialogs): logging.info("Decoding dialog: {}/{}, {}".format(i,len(dialogs),dia)) # Apply p_0 estimated from other 4 sessions. DED.transition_bias = bias_dict[dia[:5]] # Beam search decoder out = DED.decode(dialogs[dia]) trace += out label += [utils.convert_to_index(emo_dict[utt]) for utt in dialogs[dia]] org_pred += [np.argmax(out_dict[utt]) for utt in dialogs[dia]] if args.verbosity > 0: logging.info("Output: {}\n".format(out)) print("#"*50+"\n") # Print the results of emotino classifier module uar, acc, conf = utils.evaluate(org_pred, label) logging.info('Original performance: uar: %.3f, acc: %.3f' % (uar, acc)) # Eval ded outputs results = vars(args) uar, acc, conf = utils.evaluate(trace, label) logging.info('DED performance: uar: %.3f, acc: %.3f' % (uar, acc)) logging.info('Confusion matrix:\n%s' % conf) # Save results results['uar'] = uar results['acc'] = acc results['conf'] = str(conf) logging.info('Save results:') logging.info('\n%s\n', json.dumps(results, sort_keys=False, indent=4)) json.dump(results, open(args.out_dir+'/%s.json' % args.result_file, "w"))
def main(): """ dialogs: dict, dialogs of the dataset. emo_dict: dict, emotions of all utterances. out_dict: dict, output logits of emotion classifier. """ dialogs = joblib.load('./data/dialogs.pkl') #dialogs_edit = joblib.load('./data/dialog_rearrange_4emo_iemocap.pkl') #dialogs = joblib.load('./data/dialog_iemocap.pkl') #out_dict = joblib.load('./data/outputs.pkl') emo_dict = joblib.load('./data/emo_all.pkl') output_fold1 = joblib.load('./data/original_iaan/utt_logits_outputs_fold1.pkl') output_fold2 = joblib.load('./data/original_iaan/utt_logits_outputs_fold2.pkl') output_fold3 = joblib.load('./data/original_iaan/utt_logits_outputs_fold3.pkl') output_fold4 = joblib.load('./data/original_iaan/utt_logits_outputs_fold4.pkl') output_fold5 = joblib.load('./data/original_iaan/utt_logits_outputs_fold5.pkl') out_dict = {} for utt in output_fold1: if utt[4] == '1': out_dict[utt] = output_fold1[utt] elif utt[4] == '2': out_dict[utt] = output_fold2[utt] elif utt[4] == '3': out_dict[utt] = output_fold3[utt] elif utt[4] == '4': out_dict[utt] = output_fold4[utt] elif utt[4] == '5': out_dict[utt] = output_fold5[utt] ''' out_dict = joblib.load('./data/DAG_emo_output_all_fold_multi8_rearrange.pkl') C2C_emo_dict = joblib.load('./data/C2C_4emo_all_iemocap.pkl') U2U_emo_dict = joblib.load('./data/U2U_4emo_all_iemocap.pkl') LogisticRegression_emo_shift_output = joblib.load('./data/LogisticRegression_emo_shift_output.pkl') RandomForest_emo_shift_output = joblib.load('./data/RandomForest_emo_shift_output.pkl') iaan_emo_shift_output = joblib.load('./data/iaan_emo_shift_output_rearrange.pkl') mlp_sklearn_emo_shift_output = joblib.load('./data/MLPSklearn_emo_shift_output.pkl') svm_emo_shift_output = joblib.load('./data/SVM_emo_shift_output.pkl') MLPPytorch_emo_shift_output = joblib.load('./data/MLPPytorch_emo_shift_output.pkl') ''' #DAG_emo_shift_output_all_fold = joblib.load('./data/DAG_emo_shift_output_all_fold_multi4_rearrange.pkl') # set log logging.basicConfig(stream=sys.stdout, format='%(asctime)s %(levelname)s:%(message)s', level=logging.INFO, datefmt='%I:%M:%S') # Split dialogs by speakers spk_dialogs = utils.split_dialog(dialogs) #spk_dialogs_edit = utils.split_dialog(dialogs_edit) logging.info("Average number of speaker's utterances per dialog: %.3f" % np.mean( [len(i) for i in spk_dialogs.values()])) # arguments args = parse_args() print('=' * 60 + '\n') logging.info('Parameters are:\n%s\n', json.dumps(vars(args), sort_keys=False, indent=4)) print('=' * 60 + '\n') if args.transition_bias > 0: # Use given p_0 p_0 = args.transition_bias else: # Estimate p_0 of ALL dialogs. p_0, total_transit = utils.transition_bias(spk_dialogs, emo_dict) print("\n"+"#"*50) logging.info('p_0: %.3f , total transition: %d\n' % (p_0, total_transit)) print("#"*50) bias_dict = utils.get_val_bias(spk_dialogs, emo_dict) print("#"*50+"\n") # rule based ddCRP alpha (ref: https://arxiv.org/pdf/1911.01266.pdf) #alpha_dict = utils.get_val_alpha(spk_dialogs_edit, emo_dict) #seq_emo_trans_prob_dict, intra_emo_trans_prob_dict = utils.get_val_emo_trans_prob(emo_dict, dialogs_edit, softmax_or_not=1, Bi_or_Tri=2) #seq_emo_trans_prob_dict, intra_emo_trans_prob_dict = utils.get_val_emo_trans_prob(emo_dict, dialogs_edit, softmax_or_not=0, Bi_or_Tri=2) #seq_emo_trans_prob_dict, intra_emo_trans_prob_dict = utils.get_val_emo_trans_prob(emo_dict, dialogs_edit, softmax_or_not=1, Bi_or_Tri=3) #seq_emo_trans_prob_dict, intra_emo_trans_prob_dict = utils.get_val_emo_trans_prob(emo_dict, dialogs_edit, softmax_or_not=0, Bi_or_Tri=3) #seq_emo_trans_prob_dict, intra_emo_trans_prob_dict = utils.get_val_emo_trans_prob(C2C_emo_dict, dialogs, softmax_or_not=1, Bi_or_Tri=2) #seq_emo_trans_prob_dict, intra_emo_trans_prob_dict = utils.get_val_emo_trans_prob(C2C_emo_dict, dialogs, softmax_or_not=0, Bi_or_Tri=2) #seq_emo_trans_prob_dict, intra_emo_trans_prob_dict = utils.get_val_emo_trans_prob(C2C_emo_dict, dialogs, softmax_or_not=1, Bi_or_Tri=3) #seq_emo_trans_prob_dict, intra_emo_trans_prob_dict = utils.get_val_emo_trans_prob(C2C_emo_dict, dialogs, softmax_or_not=0, Bi_or_Tri=3) #seq_emo_trans_prob_dict, intra_emo_trans_prob_dict = utils.get_val_emo_trans_prob(U2U_emo_dict, dialogs, softmax_or_not=1, Bi_or_Tri=2) #seq_emo_trans_prob_dict, intra_emo_trans_prob_dict = utils.get_val_emo_trans_prob(U2U_emo_dict, dialogs, softmax_or_not=0, Bi_or_Tri=2) #seq_emo_trans_prob_dict, intra_emo_trans_prob_dict = utils.get_val_emo_trans_prob(U2U_emo_dict, dialogs, softmax_or_not=1, Bi_or_Tri=3) #seq_emo_trans_prob_dict, intra_emo_trans_prob_dict = utils.get_val_emo_trans_prob(U2U_emo_dict, dialogs, softmax_or_not=0, Bi_or_Tri=3) trace = [] label = [] org_pred = [] DED = bs.BeamSearch(p_0, {}, args.crp_alpha, args.num_state, args.beam_size, args.test_iteration, emo_dict, out_dict, {}) model_pred_dict = {} for i, dia in enumerate(dialogs): logging.info("Decoding dialog: {}/{}, {}".format(i,len(dialogs),dia)) # Apply p_0 estimated from other 4 sessions. DED.transition_bias = bias_dict[dia[:5]] #DED.crp_alpha = alpha_dict[dia[:5]] # Apply emo_trans_prob_dict estimated from other 4 sessions. #DED.emo_trans_prob_dict = intra_emo_trans_prob_dict[dia[:5]] # Beam search decoder out = DED.decode(dialogs[dia], model_pred_dict) trace += out label += [utils.convert_to_index(emo_dict[utt]) for utt in dialogs[dia]] org_pred += [np.argmax(out_dict[utt]) for utt in dialogs[dia]] if args.verbosity > 0: logging.info("Output: {}\n".format(out)) print("#"*50+"\n") # Print the results of emotino classifier module uar, acc, conf = utils.evaluate(org_pred, label) logging.info('Original performance: uar: %.3f, acc: %.3f' % (uar, acc)) # Eval ded outputs results = vars(args) uar, acc, conf = utils.evaluate(trace, label) logging.info('DED performance: uar: %.3f, acc: %.3f' % (uar, acc)) logging.info('Confusion matrix:\n%s' % conf) # Save results results['uar'] = uar results['acc'] = acc results['conf'] = str(conf) logging.info('Save results:') logging.info('\n%s\n', json.dumps(results, sort_keys=False, indent=4)) json.dump(results, open(args.out_dir+'/%s.json' % args.result_file, "w")) joblib.dump(model_pred_dict, './outputs/preds_4.pkl')
def main(): """ dialogs: dict, dialogs of the dataset. emo_dict: dict, emotions of all utterances. out_dict: dict, output logits of emotion classifier. """ train_dialogs = joblib.load('./data/train_dialogs.pkl') val_dialogs = joblib.load('./data/val_dialogs.pkl') test_dialogs = joblib.load('./data/test_dialogs.pkl') train_val_dialogs = dict(train_dialogs) train_val_dialogs.update(val_dialogs) #dialogs_edit = joblib.load('./data/dialog_6emo_iemocap.pkl') train_emo_dict = joblib.load('./data/train_emo_all.pkl') val_emo_dict = joblib.load('./data/val_emo_all.pkl') test_emo_dict = joblib.load('./data/test_emo_all.pkl') train_val_emo_dict = dict(train_emo_dict) train_val_emo_dict.update(val_emo_dict) train_out_dict = joblib.load('./data/train_utts_logit.pkl') val_out_dict = joblib.load('./data/train_utts_logit.pkl') test_out_dict = joblib.load('./data/test_utts_logit.pkl') train_val_out_dict = dict(train_out_dict) train_val_out_dict.update(val_out_dict) ''' for utt in train_out_dict: train_out_dict[utt] = softmax(train_out_dict[utt]) for utt in val_out_dict: val_out_dict[utt] = softmax(val_out_dict[utt]) for utt in test_out_dict: test_out_dict[utt] = softmax(test_out_dict[utt]) for utt in train_val_out_dict: test_out_dict[utt] = softmax(train_val_out_dict[utt]) ''' #C2C_emo_dict = joblib.load('./data/C2C_4emo_all_iemocap.pkl') #U2U_emo_dict = joblib.load('./data/U2U_6emo_all_iemocap.pkl') # set log logging.basicConfig(stream=sys.stdout, format='%(asctime)s %(levelname)s:%(message)s', level=logging.INFO, datefmt='%I:%M:%S') # Split dialogs by speakers #train_val_spk_dialogs = utils.split_dialog(train_val_dialogs) train_spk_dialogs = utils.split_dialog(train_dialogs) #test_spk_dialogs = utils.split_dialog(test_dialogs) logging.info("Average number of speaker's utterances per dialog: %.3f" % np.mean( [len(i) for i in train_spk_dialogs.values()])) # arguments args = parse_args() print(args) print('=' * 60 + '\n') logging.info('Parameters are:\n%s\n', json.dumps(vars(args), sort_keys=False, indent=4)) print('=' * 60 + '\n') if args.transition_bias > 0: # Use given p_0 p_0 = args.transition_bias else: # Estimate p_0 of ALL dialogs. #train_val_p_0, train_val_total_transit = utils.transition_bias(train_val_spk_dialogs, train_val_emo_dict) train_p_0, train_total_transit = utils.transition_bias(train_spk_dialogs, train_emo_dict) #test_p_0, test_total_transit = utils.transition_bias(test_spk_dialogs, test_emo_dict) print("\n"+"#"*50) logging.info('p_0: %.3f , total transition: %d\n' % (train_p_0, train_total_transit)) print("#"*50) #seq_emo_trans_prob_dict, intra_emo_trans_prob_dict = utils.get_val_emo_trans_prob(emo_dict, dialogs_edit, softmax_or_not=1, Bi_or_Tri=2) #seq_emo_trans_prob_dict, intra_emo_trans_prob_dict = utils.get_val_emo_trans_prob(emo_dict, dialogs_edit, softmax_or_not=0, Bi_or_Tri=2) #seq_emo_trans_prob_dict, intra_emo_trans_prob_dict = utils.get_val_emo_trans_prob(emo_dict, dialogs_edit, softmax_or_not=1, Bi_or_Tri=3) #seq_emo_trans_prob_dict, intra_emo_trans_prob_dict = utils.get_val_emo_trans_prob(emo_dict, dialogs_edit, softmax_or_not=0, Bi_or_Tri=3) #seq_emo_trans_prob_dict, intra_emo_trans_prob_dict = utils.get_val_emo_trans_prob(C2C_emo_dict, dialogs, softmax_or_not=1, Bi_or_Tri=2) #seq_emo_trans_prob_dict, intra_emo_trans_prob_dict = utils.get_val_emo_trans_prob(C2C_emo_dict, dialogs, softmax_or_not=0, Bi_or_Tri=2) #seq_emo_trans_prob_dict, intra_emo_trans_prob_dict = utils.get_val_emo_trans_prob(C2C_emo_dict, dialogs, softmax_or_not=1, Bi_or_Tri=3) #seq_emo_trans_prob_dict, intra_emo_trans_prob_dict = utils.get_val_emo_trans_prob(C2C_emo_dict, dialogs, softmax_or_not=0, Bi_or_Tri=3) #seq_emo_trans_prob_dict, intra_emo_trans_prob_dict = utils.get_val_emo_trans_prob(U2U_emo_dict, dialogs, softmax_or_not=1, Bi_or_Tri=2) #seq_emo_trans_prob_dict, intra_emo_trans_prob_dict = utils.get_val_emo_trans_prob(U2U_emo_dict, dialogs, softmax_or_not=0, Bi_or_Tri=2) #seq_emo_trans_prob_dict, intra_emo_trans_prob_dict = utils.get_val_emo_trans_prob(U2U_emo_dict, dialogs, softmax_or_not=1, Bi_or_Tri=3) #seq_emo_trans_prob_dict, intra_emo_trans_prob_dict = utils.get_val_emo_trans_prob(U2U_emo_dict, dialogs, softmax_or_not=0, Bi_or_Tri=3) trace = [] label = [] org_pred = [] DED = bs.BeamSearch(train_p_0, {}, args.crp_alpha, args.num_state, args.beam_size, args.test_iteration, test_emo_dict, test_out_dict) model_pred_dict = {} for i, dia in enumerate(test_dialogs): logging.info("Decoding dialog: {}/{}, {}".format(i,len(test_dialogs),dia)) # Apply p_0 estimated from train_val data DED.transition_bias = train_p_0 # Apply emo_trans_prob_dict estimated from other 4 sessions. #DED.emo_trans_prob_dict = seq_emo_trans_prob_dict[dia[:5]] # Beam search decoder out = DED.decode(test_dialogs[dia], model_pred_dict) trace += out label += [utils.convert_to_index(test_emo_dict[utt]) for utt in test_dialogs[dia]] org_pred += [np.argmax(test_out_dict[utt]) for utt in test_dialogs[dia]] if args.verbosity > 0: logging.info("Output: {}\n".format(out)) print("#"*50+"\n") # Print the results of emotino classifier module uar, acc, weighted_f1, conf = utils.evaluate(org_pred, label) logging.info('Original performance: uar: %.4f, acc: %.4f, weighted f1: %.4f' % (uar, acc, weighted_f1)) print(conf) # Eval ded outputs results = vars(args) uar, acc, weighted_f1, conf = utils.evaluate(trace, label) logging.info('DED performance: uar: %.4f, acc: %.4f, weighted f1: %.4f' % (uar, acc, weighted_f1)) #logging.info('Confusion matrix:\n%s' % conf) print(conf) # Save results results['uar'] = uar results['acc'] = acc results['weighted_f1'] = weighted_f1 results['conf'] = str(conf) logging.info('Save results:') logging.info('\n%s\n', json.dumps(results, sort_keys=False, indent=4)) json.dump(results, open(args.out_dir+'/%s.json' % args.result_file, "w")) joblib.dump(model_pred_dict, './outputs/preds_4.pkl')