ShomyLiu / pytorch-relation-extraction

distant supervised relation extraction models: PCNN MIL (Zeng 2015), PCNN+ATT(Lin 2016). 关系抽取
498 stars 118 forks source link

关于PCNN-ATT中test计算attention的问题 #51

Open mz2sj opened 4 years ago

mz2sj commented 4 years ago

博主您好,在test的时候,我们遍历所有的relation进行attention。 res = torch.cat(pre_y, 1).max(1)[0] 假设使用label 0 ([6901])这个relation来作attention,将attention后的结果用于计算各个关系的概率分布。 ` out = self.test_scale_p bags_feature.mm(self.rel_embs.t()) + self.rel_bias` ([128,53]) 这里的max是指在第2维度取最大值作为label 0这个relation的概率吗?依次类推遍历所有relation,就能得到在所有relation上的概率。 这里可不可以不作max,直接取out中label 0对应的维度所对应的概率作为结果。 还有一个问题,PCNN-ATT中eval_metric_var,这是直接对预测概率排名前2000的计算pr吗?

mz2sj commented 4 years ago

第一个问题我是觉得,我用这个relation作attention,那么我默认这个包的label就是relation,那我们也应该取relation对应的维度结果作为概率

ShomyLiu commented 4 years ago
  1. 不好意思,第一个问题没太看明白,在PCNN-ATT中,在test的时候,就是在遍历每个relation去计算这个relation的概率,假设一共54个relation, 当前遍历到第4个relation,那么首先用这个relation去做attention,之后算出54个概率,取第四个作为这个的预测概率。
  2. 第二个问题,对。排名之后,取Top2000
shanry commented 4 years ago
  1. 不好意思,第一个问题没太看明白,在PCNN-ATT中,在test的时候,就是在遍历每个relation去计算这个relation的概率,假设一共54个relation, 当前遍历到第4个relation,那么首先用这个relation去做attention,之后算出54个概率,取第四个作为这个的预测概率。
  2. 第二个问题,对。排名之后,取Top2000

按照这种假设,每一个bag最后输出的特征形状是54*54, 每一行代表每一种relation,那么代码中每一行取max似乎不合理,应该取对角线元素才对?

ShomyLiu commented 4 years ago

@shanry 对,当时一开始我记得是按照对角线元素取的,这个你可以看下代码里面其实有段注释。 后来改成max 了, 原因好像是因为原文最开始版本代码取的max。。不过这两个效果类似。