def score(self, user, candidates, context):
# i_mat is (n_item_context, n_item) for all possible items
# extract only target items
i_mat = self.i_mat[:, candidates]
n_target = len(candidates)
# u_mat will be (n_user_context, n_item) for the target user
u_vec = np.concatenate((user.feature, context))
u_vec = np.array([u_vec]).T
u_mat = sp.csr_matrix(np.repeat(u_vec, n_target, axis=1))
# stack them into (p, n_item) matrix
Y = sp.vstack((u_mat, i_mat))
Y = self.proj.reduce(Y)
Y = sp.csr_matrix(preprocessing.normalize(Y, norm='l2', axis=0))
X = np.identity(self.k) - np.dot(self.U_r, self.U_r.T)
A = safe_sparse_dot(X, Y, dense_output=True)
return ln.norm(A, axis=0, ord=2)
评论列表
文章目录