INK-USC / RE-Net

Recurrent Event Network: Autoregressive Structure Inference over Temporal Knowledge Graphs (EMNLP 2020)
http://inklab.usc.edu/renet/
435 stars 95 forks source link

utils.get_true_distribution函数有两个逻辑问题 #78

Open y17733806775 opened 7 months ago

y17733806775 commented 7 months ago

1.作者想让true_prob_s 的每一行数组都代表一个时间步t中的每个节点的贡献率,但实际上每一组数组都混入了一个下一个t的数据 2.true_prob_s 最后会有一行零行

1.混入下一个时间步的数据问题: 这个问题发生的原因是,在每次循环的末尾,true_s 和 true_o 被重置为零,并开始累积下一个时间步的数据,但在重置之前,它们的值已经被用于更新 true_prob_s 和 true_prob_o。这意味着每次当 current_t 更新时,我们实际上是在使用包含下一个时间步 t 开始部分的数据来计算当前时间步的分布。 解决方案:应该在更新 current_t 之前,立即计算并存储当前时间步的分布。这样可以确保每个时间步的数据仅用于其对应的分布计算中。

2.最后一行为零的问题: 这个问题发生是因为在循环结束后,你又执行了一次 np.concatenate 操作,将 true_s 和 true_o(这时已经被重置为零)添加到了 true_prob_s 和 true_prob_o。由于在循环的最后一次迭代中,true_s 和 true_o 已经被重置并且没有再次被填充(因为没有更多的数据),所以你最终得到了一行全零。 解决方案:在循环结束后,应该检查 true_s 和 true_o 是否全为零(或者更准确地,是否有必要将它们添加到分布中)。如果它们确实包含有效数据(即循环中的最后一个时间步的数据),那么应该在重置之前添加它们。否则,就不应该再添加。