Closed Jim-Hou closed 2 years ago
你好,抱歉我刚刚看到这个issue。
SpecialSpmmFinal()
这个方法的作用应该是按照edge_index
中的索引,把具有相同索引(也就是相同头实体)的info_emb_weighted
相加,得到的输出是计算attention时使用的softmax
函数的分子部分和embedding相乘之后的聚合结果。
由于每个实体对于不同邻居的分母是一样的,所以在之后统一除以分母emb_agg.div(weight_rowsum)
。MRR: 0.362, MR: 195, HIT@1: 0.270, HIT@3: 0.399, HIT@10: 0.547
谢谢学长!我了解您的代码了,似乎实际上是把softmax函数分开写了。 我的模型是基于CompGCN基础上做的改进,对于dropout值的调试我很困惑,我看您代码里,在注意力部分使用了dropout,同时在传出RAGAT层之前进行了dropout,传出到models里后又进行了一次dropout,这样是您测试出来的最优结果嘛?这么多dropout是可以减少过拟合,提高鲁棒性吗?因为我的模型仅仅是在传出models后做了一次dropout。 另外,我看您的代码里,在计算compute_norm之后,再进行了注意力机制的计算,我理解那个compute_norm就是GCN里面关于节点度的归一化处理。而注意力里面使用的softmax,本质上也是对相同头实体的邻居节点进行了归一化,这两者是否有些重复?还是说有意为之呢? 谢谢!!!
你好,
compute_norm()
函数只有在不使用attention的时候才会使用,在利用attention的时候norm
都是设置为None
的。好的,十分感谢!
如果没有问题的话我就关闭issue了。
okok
学长您好,我在阅读您的论文时,理解您是在CompGCN的基础上,给关系、尾节点cross过后的嵌入通过软注意力学习了一个权重,再按权重聚合到头节点上。请问这部分思想的代码实现位置是agg_multi_head()这里吗,这个函数中的写法我没有太看懂,主要是对SpecialSpmmFinal()不太理解,可否大致解释一下呢? 另外,我看您在FB-237的MRR值达到了0.365,使用的是二头。我没有复现您的模型进行测试,想问您如果去掉多头,MRR值大约是多少呢? 感谢!