带有 TensorFlow 的推荐系统 (SVD)
Recommender System (SVD) with TensorFlow
我正在尝试创建一个协同过滤算法来向特定用户推荐产品。
我很快就开始使用 TensorFlow(我认为它足够有效和灵活)。
我发现这段代码可以做我感兴趣的事情,创建模型并训练用户 ID、产品和评级:https://github.com/songgc/TF-recomm
我启动了代码并训练了模型。
训练模型后,我需要进行预测,即为每个用户获取建议,以便将它们保存在我使用 NODE.js 应用程序访问的数据库中。
训练完成后如何为每个用户检索此建议列表?
if __name__ == '__main__':
df_train, df_test=get_data()
svd(df_train, df_test)
print("Done!")
你可以运行
predict_result = sess.run(inter_op, feed_dict={user_batch:users, item_batch:items})
which users表示所有用户id和item对应所有item id,predict_result是每个用户对所有item的评分,可以将predict_result存入DB;
您需要修改代码的预测部分以输出top K
推荐产品。当前进行预测的代码是:
embd_user = tf.nn.embedding_lookup(w_user, user_batch, name="embedding_user")
embd_item = tf.nn.embedding_lookup(w_item, item_batch, name="embedding_item")
infer = tf.reduce_sum(tf.multiply(embd_user, embd_item), 1)
这里的 embed_user
是特定用户的用户嵌入,embd_item
是针对特定项目的。因此,不是将 particular user
与 particular item
进行比较,而是需要更改它以将其与所有项目进行比较。矩阵 w_item
是所有项目的嵌入。这可以通过以下方式完成:
embd_user = tf.nn.embedding_lookup(w_user, user_batch, name="embedding_user")
# Multiply user embedding of shape: [1 x dim]
# with every item embeddings of shape: [item_num, dim],
# to produce rank of all items of shape: [item_num]
predict = tf.matmul(embd_user, w_item, transpose_b=True)
然后你可以select预测输出中最大值的top k
索引。
我正在尝试创建一个协同过滤算法来向特定用户推荐产品。
我很快就开始使用 TensorFlow(我认为它足够有效和灵活)。 我发现这段代码可以做我感兴趣的事情,创建模型并训练用户 ID、产品和评级:https://github.com/songgc/TF-recomm
我启动了代码并训练了模型。
训练模型后,我需要进行预测,即为每个用户获取建议,以便将它们保存在我使用 NODE.js 应用程序访问的数据库中。
训练完成后如何为每个用户检索此建议列表?
if __name__ == '__main__':
df_train, df_test=get_data()
svd(df_train, df_test)
print("Done!")
你可以运行
predict_result = sess.run(inter_op, feed_dict={user_batch:users, item_batch:items})
which users表示所有用户id和item对应所有item id,predict_result是每个用户对所有item的评分,可以将predict_result存入DB;
您需要修改代码的预测部分以输出top K
推荐产品。当前进行预测的代码是:
embd_user = tf.nn.embedding_lookup(w_user, user_batch, name="embedding_user")
embd_item = tf.nn.embedding_lookup(w_item, item_batch, name="embedding_item")
infer = tf.reduce_sum(tf.multiply(embd_user, embd_item), 1)
这里的 embed_user
是特定用户的用户嵌入,embd_item
是针对特定项目的。因此,不是将 particular user
与 particular item
进行比较,而是需要更改它以将其与所有项目进行比较。矩阵 w_item
是所有项目的嵌入。这可以通过以下方式完成:
embd_user = tf.nn.embedding_lookup(w_user, user_batch, name="embedding_user")
# Multiply user embedding of shape: [1 x dim]
# with every item embeddings of shape: [item_num, dim],
# to produce rank of all items of shape: [item_num]
predict = tf.matmul(embd_user, w_item, transpose_b=True)
然后你可以select预测输出中最大值的top k
索引。