liuxiyang641 / RAGAT

RAGAT: Relation Aware Graph Attention Network for Knowledge Graph Completion
56 stars 16 forks source link

关于RAGAT中的图5的一些疑问 #25

Closed corejjelyar closed 5 months ago

corejjelyar commented 5 months ago

学长好,我在复现RAGAT的图5时有一些问题,比如在选择组合运算符的时候,我选择sub和sub+wr,在代码的结果中sub也就是去掉方向矩阵的数值比有要好,按理来说应该是去掉方向矩阵wr性能下降才对,其他的组合运算符也有同样的情况,所以为了得到图5中的结果,除了要更改 rel_transform中的组合外,还要更改其他参数吗?

corejjelyar commented 5 months ago

比如在论文里给出cross w/o wr的数值分别是 0.362 0.271 0.398 0.542,但我选择ent_embed * rel_embed + ent_embed组合也就是没有wr的cross得到出来的结果是: QQ截图20240513215710 这个数据和最佳参数接近了,所以我没从代码阶段看出wr的作用,我觉得是我可能遗漏了哪个部分

liuxiyang641 commented 5 months ago

具体的做消融实验的实现细节过去比较久,我记不太清楚了,比如在消融实验里是否还考虑消融了方向矩阵 $W_{dir}$ ,你可以试试。 此外你确定实验的参数都是正确的吗?比如使用sub是不是比使用cross效果差?

corejjelyar commented 5 months ago

参数都是对的,主要是想得到这个去掉组合运算符中的wr来看看结果,sub确实比cross差但是这些数据都比论文里给出的数据要高一点,我只是去掉了组合运算符中的wr,有时会出现去掉效果更好的情况

corejjelyar commented 5 months ago

另外在您的代码里,跟compgcn对比,有一个邻居信息获取函数: def gather_neighbours(self): edge_weight = torch.ones_like(self.edge_type).float().unsqueeze(1) deg = self.special_spmm(self.edge_index, edge_weight, self.p.num_ent, self.p.num_ent, 1, dim=1) deg[deg == 0.0] = 1.0 entity_neighbours = self.init_embed[self.edge_index[1, :], :] entity_gathered = self.special_spmm( self.edge_index, entity_neighbours, self.p.num_ent, self.p.num_ent, self.p.init_dim, dim=1).div(deg) relation_neighbours = torch.index_select(self.init_rel, 0, self.edge_type) relation_gathered = self.special_spmm( self.edge_index, relation_neighbours, self.p.num_ent, self.p.num_ent, self.p.init_dim, dim=1).div(deg) return entity_gathered, relation_gathered 论文中的描述是学习θr以提取关系特定特征,相邻实体嵌入和关系嵌入被分组并馈入不同的消息函数。所以为了得到广泛使用的没有可学习参数的Wr,除了删除ragat_conv中和可学习参数有关的部分,这个邻接信息获取的函数是否也是要去掉呢?

liuxiyang641 commented 5 months ago

抱歉,时间过去比较久了,我也记不太清楚这个函数是否有被真的调用。印象中好像没有?你可以调试下看看代码是否会跳转到这个函数。 如果是想做消融掉所有与relation相关参数的话,可以考虑下把relation方向相关的参数$W_{dir}$消融掉看看效果。

corejjelyar commented 5 months ago

去掉这个函数性能会下降一些但是没有明显的调用,我在试试谢谢学长