def recommend(): with tf.Session(config=tf.ConfigProto( allow_soft_placement=True, log_device_placement=FLAGS.device_log)) as sess: print("reading data") task = Task(FLAGS.dataset) (_, items_dev, _, _, u_attributes, i_attributes, item_ind2logit_ind, logit_ind2item_ind, _) = read_data(task) Evaluate = task.get_evaluation() evaluation = Evaluate(logit_ind2item_ind, ta=FLAGS.ta, test=FLAGS.test) model = create_model(sess, u_attributes, i_attributes, item_ind2logit_ind, logit_ind2item_ind, loss=FLAGS.loss, ind_item=None) Uinds = evaluation.get_uinds() N = len(Uinds) print("N = %d" % N) Uinds = [p for p in Uinds if p in items_dev] mylog("new N = {}, (reduced from original {})".format(len(Uinds), N)) if len(Uinds) < N: evaluation.set_uinds(Uinds) N = len(Uinds) rec = np.zeros((N, FLAGS.top_N_items), dtype=int) count = 0 time_start = time.time() for idx_s in range(0, N, FLAGS.batch_size): count += 1 if count % 100 == 0: print("idx: %d, c: %d" % (idx_s, count)) idx_e = idx_s + FLAGS.batch_size if idx_e <= N: users = Uinds[idx_s:idx_e] items_input = [items_dev[u] for u in users] items_input = map(list, zip(*items_input)) recs = model.step(sess, users, items_input, forward_only=True, recommend=True, recommend_new=FLAGS.recommend_new) rec[idx_s:idx_e, :] = recs else: users = range(idx_s, N) + [0] * (idx_e - N) users = [Uinds[t] for t in users] items_input = [items_dev[u] for u in users] items_input = map(list, zip(*items_input)) recs = model.step(sess, users, items_input, forward_only=True, recommend=True, recommend_new=FLAGS.recommend_new) idx_e = N rec[idx_s:idx_e, :] = recs[:(idx_e - idx_s), :] # return rec: i: uinds[i] --> logid time_end = time.time() mylog("Time used %.1f" % (time_end - time_start)) R = evaluation.gen_rec(rec, FLAGS.recommend_new) evaluation.eval_on(R) s1, s2, s3, s4, s5 = evaluation.get_scores() mylog('scores: \n\t{}\n\t{}\n\t{}\n'.format(s1, s2, s3)) mylog("SCORE_FORMAT: {} {} {}".format(s1[0], s2[0], s3[0])) mylog("METRIC_FORMAT1: {}".format(s4)) mylog("METRIC_FORMAT2: {}".format(s5)) return