DGCF
DGCF copied to clipboard
[ICDM 2020] Python implementation for "Dynamic Graph Collaborative Filtering."
根据论文所提出的3阶更新机制,对某节点进行update时,应包含该节点上一时刻的embedding、新交互节点的embedding以及新交互节点的1-hop邻居的聚合embedding。 即在以下代码中, `user_embedding_output = model.forward(user_embedding_input, item_embedding_input, timediffs=user_timediffs_tensor, features=feature_tensor, adj_embeddings=user_adj_embedding, select='user_update')` 传入的`adj_embedding`应为`item_adj_embedding`, `item_embedding_output = model.forward(user_embedding_input, item_embedding_input, timediffs=item_timediffs_tensor, features=feature_tensor, adj_embeddings=item_adj_embedding, select='item_update')`传入的`adj_embedding`应为`user_adj_embedding`。 目前仓库中的代码实现似乎有误。 此外,若直接进行以上修改,或许会带来数据泄露的问题:模型依靠t-batch算法进行并行计算,目前的代码实现中,` lib.current_tbatches_user_adj[tbatch_to_insert].append(user_adj[userid]) # item``lib.current_tbatches_item_adj[tbatch_to_insert].append(item_adj[itemid]) # user`存入的是整个数据的user-item邻接关系,前序t-batch数据可以使用到后续t-batch的邻接关系,造成数据泄露。 另,`evaluate_interaction_prediction.py`中的`set_embeddings_training_end`应该注释掉,因为目前`DGCF.py`的实现中并未存入有意义的`_embeddings_time_series`。