Skip to content

Commit

Permalink
Add files via upload
Browse files Browse the repository at this point in the history
  • Loading branch information
Tianyu Zhu authored Jun 30, 2021
1 parent e75a214 commit a1d0b28
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 43 deletions.
24 changes: 12 additions & 12 deletions SCML.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,17 @@ def __init__(self, num_user, num_item, args):

with tf.name_scope('Mult-DAE'):
# input
self.rating_u = tf.placeholder(tf.float32, [None, self.num_item], name="rating_u") # user's rating vector
self.keep_prob = tf.placeholder(tf.float32, name="keep_prob")
self.rating_u = tf.placeholder(tf.float32, [None, self.num_item], name='rating_u') # user's rating vector
self.keep_prob = tf.placeholder(tf.float32, name='keep_prob')

# parameters
# item embeddings
W_in_rating = tf.Variable(tf.random_normal([self.num_item, self.num_factor], stddev=0.01), name="W_in_rating")
W_out_rating = tf.Variable(tf.random_normal([self.num_factor, self.num_item], stddev=0.01), name="W_out_rating")
W_in_rating = tf.Variable(tf.random_normal([self.num_item, self.num_factor], stddev=0.01), name='W_in_rating')
W_out_rating = tf.Variable(tf.random_normal([self.num_factor, self.num_item], stddev=0.01), name='W_out_rating')

# bias
b_in_rating = tf.Variable(tf.zeros([1, self.num_factor]), name="b_in_rating")
b_out_rating = tf.Variable(tf.zeros([1, self.num_item]), name="b_out_rating")
b_in_rating = tf.Variable(tf.zeros([1, self.num_factor]), name='b_in_rating')
b_out_rating = tf.Variable(tf.zeros([1, self.num_item]), name='b_out_rating')

# model
# l2 normalize
Expand All @@ -51,18 +51,18 @@ def __init__(self, num_user, num_item, args):

with tf.name_scope('Mult-STE'):
# input
self.social_u = tf.placeholder(tf.float32, [None, self.num_user], name="social_u") # users' adjacency vectors
self.social_u = tf.placeholder(tf.float32, [None, self.num_user], name='social_u') # users' adjacency vectors

# parameters
# user embedding
W_in_social = tf.Variable(tf.random_normal([self.num_user, self.num_factor], stddev=0.01), name="W_in_social")
W_in_social = tf.Variable(tf.random_normal([self.num_user, self.num_factor], stddev=0.01), name='W_in_social')

# item embedding
W_out_social = tf.Variable(tf.random_normal([self.num_factor, self.num_item], stddev=0.01), name="W_out_social")
W_out_social = tf.Variable(tf.random_normal([self.num_factor, self.num_item], stddev=0.01), name='W_out_social')

# bias
b_in_social = tf.Variable(tf.zeros([1, self.num_factor]), name="b_in_social")
b_out_social = tf.Variable(tf.zeros([1, self.num_item]), name="b_out_social")
b_in_social = tf.Variable(tf.zeros([1, self.num_factor]), name='b_in_social')
b_out_social = tf.Variable(tf.zeros([1, self.num_item]), name='b_out_social')

# model
# l2 normalize
Expand Down Expand Up @@ -99,7 +99,7 @@ def __init__(self, num_user, num_item, args):

with tf.name_scope('test'):
# candidate items
self.i = tf.placeholder(tf.int32, [None, 100], name="i")
self.i = tf.placeholder(tf.int32, [None, 100], name='i')

# Mult-DAE prediction
i_emb_rating = tf.nn.embedding_lookup(tf.transpose(W_out_rating), self.i)
Expand Down
42 changes: 21 additions & 21 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,52 +50,52 @@
[training_dict, test_dict, validation_dict, negative_dict, social_dict, num_user, num_item] = np.load('data/{dataset}/{dataset}.npy'.format(dataset=args.dataset), allow_pickle=True)
print('num_user:%d, num_item:%d' % (num_user, num_item))

rating_matrix_sparse = generate_sparse_rating_matrix(training_dict, num_user, num_item)
social_matrix_sparse = generate_sparse_social_matrix(social_dict, num_user)
validation_data = generate_test_data(validation_dict, negative_dict)
test_data = generate_test_data(test_dict, negative_dict)
rating_matrix_sparse = get_sparse_rating_matrix(training_dict, num_user, num_item)
social_matrix_sparse = get_sparse_social_matrix(social_dict, num_user)
validation_data = get_test_data(validation_dict, negative_dict)
test_data = get_test_data(test_dict, negative_dict)

print("Model preparing...")
print('Model preparing...')
model = SCML(num_user, num_item, args)
sess.run(tf.global_variables_initializer())

print("Model training...")
print('Model training...')
for epoch in range(1, args.num_epoch+1):
print("epoch: %d" % epoch)
print('epoch: %d' % epoch)
time_start = time.time()
user_batch = generate_user_batch(num_user, args.batch_size)
user_batch = get_user_batch(num_user, args.batch_size)
training_dae_loss = list()
training_ste_loss = list()
for batch in range(len(user_batch)):
dae_loss, ste_loss, _ = sess.run([model.dae_loss, model.ste_loss, model.train_op], feed_dict=feed_dict_training(model, user_batch[batch], rating_matrix_sparse, social_matrix_sparse, args.keep_prob))
for batch in user_batch:
dae_loss, ste_loss, _ = sess.run([model.dae_loss, model.ste_loss, model.train_op], feed_dict=feed_dict_training(model, batch, rating_matrix_sparse, social_matrix_sparse, args.keep_prob))
training_dae_loss.append(dae_loss)
training_ste_loss.append(ste_loss)
training_dae_loss = np.mean(training_dae_loss)
training_ste_loss = np.mean(training_ste_loss)
print("time: %.2fs" % (time.time() - time_start))
print("training dae loss: %.2f, training ste loss: %.2f" % (training_dae_loss, training_ste_loss))
print('time: %.2fs' % (time.time() - time_start))
print('training dae loss: %.2f, training ste loss: %.2f' % (training_dae_loss, training_ste_loss))

batch_size_test = 1000
rank_list_r = list()
rank_list_s = list()
for start in range(0, num_user, batch_size_test):
r_hat_r, r_hat_s = sess.run([model.r_hat_ui_rating, model.r_hat_ui_social], feed_dict=feed_dict_test(model, validation_data, rating_matrix_sparse, social_matrix_sparse, start, start+batch_size_test))
rank_list_r.extend(r_hat_r.argsort()[:, ::-1].tolist())
rank_list_s.extend(r_hat_s.argsort()[:, ::-1].tolist())
rank_list_r += r_hat_r.argsort()[:, ::-1].tolist()
rank_list_s += r_hat_s.argsort()[:, ::-1].tolist()
validation_hr_r, validation_ndcg_r = evaluate(rank_list_r, 0, 10)
validation_hr_s, validation_ndcg_s = evaluate(rank_list_s, 0, 10)
print("validation HR@10 for Mult-DAE: %.4f, validation NDCG@10 for Mult-DAE: %.4f" % (validation_hr_r, validation_ndcg_r))
print("validation HR@10 for Mult-STE: %.4f, validation NDCG@10 for Mult-STE: %.4f" % (validation_hr_s, validation_ndcg_s))
print('validation HR@10 for Mult-DAE: %.4f, validation NDCG@10 for Mult-DAE: %.4f' % (validation_hr_r, validation_ndcg_r))
print('validation HR@10 for Mult-STE: %.4f, validation NDCG@10 for Mult-STE: %.4f' % (validation_hr_s, validation_ndcg_s))

print("Model testing...")
print('Model testing...')
batch_size_test = 1000
rank_list_r = list()
rank_list_s = list()
for start in range(0, num_user, batch_size_test):
r_hat_r, r_hat_s = sess.run([model.r_hat_ui_rating, model.r_hat_ui_social], feed_dict=feed_dict_test(model, test_data, rating_matrix_sparse, social_matrix_sparse, start, start+batch_size_test))
rank_list_r.extend(r_hat_r.argsort()[:, ::-1].tolist())
rank_list_s.extend(r_hat_s.argsort()[:, ::-1].tolist())
rank_list_r += r_hat_r.argsort()[:, ::-1].tolist()
rank_list_s += r_hat_s.argsort()[:, ::-1].tolist()
test_hr_r, test_ndcg_r = evaluate(rank_list_r, 0, 10)
test_hr_s, test_ndcg_s = evaluate(rank_list_s, 0, 10)
print("test HR@10 for Mult-DAE: %.4f, test NDCG@10 for Mult-DAE: %.4f" % (test_hr_r, test_ndcg_r))
print("test HR@10 for Mult-STE: %.4f, test NDCG@10 for Mult-STE: %.4f" % (test_hr_s, test_ndcg_s))
print('test HR@10 for Mult-DAE: %.4f, test NDCG@10 for Mult-DAE: %.4f' % (test_hr_r, test_ndcg_r))
print('test HR@10 for Mult-STE: %.4f, test NDCG@10 for Mult-STE: %.4f' % (test_hr_s, test_ndcg_s))
20 changes: 10 additions & 10 deletions util.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
import scipy.sparse as sp


def generate_sparse_rating_matrix(training_dict, num_user, num_item):
row = []
col = []
def get_sparse_rating_matrix(training_dict, num_user, num_item):
row = list()
col = list()
for u in training_dict:
for i in training_dict[u]:
row.append(u)
Expand All @@ -13,9 +13,9 @@ def generate_sparse_rating_matrix(training_dict, num_user, num_item):
return rating_matrix_sparse


def generate_sparse_social_matrix(social_dict, num_user):
row = []
col = []
def get_sparse_social_matrix(social_dict, num_user):
row = list()
col = list()
for u in social_dict:
for v in social_dict[u]:
row.append(u)
Expand All @@ -24,8 +24,8 @@ def generate_sparse_social_matrix(social_dict, num_user):
return social_matrix_sparse


def generate_user_batch(num_user, batch_size):
user_batch = []
def get_user_batch(num_user, batch_size):
user_batch = list()
user_list = list(range(num_user))
np.random.shuffle(user_list)
i = 0
Expand All @@ -35,8 +35,8 @@ def generate_user_batch(num_user, batch_size):
return user_batch


def generate_test_data(test_dict, negative_dict):
test_data = []
def get_test_data(test_dict, negative_dict):
test_data = list()
for u in test_dict:
test_data.append([u, test_dict[u]] + negative_dict[u])
test_data = np.asarray(test_data)
Expand Down

0 comments on commit a1d0b28

Please sign in to comment.