DreamInvoker / GAIN

Source code for EMNLP 2020 paper: Double Graph Based Reasoning for Document-level Relation Extraction
MIT License
142 stars 30 forks source link

关于代码的部分问题和总结 #36

Open LawsonAbs opened 2 years ago

LawsonAbs commented 2 years ago

先说一下我的运行环境: dgl 0.6.1 torch 1.8.0 这份代码貌似问题有点儿多啊! (1)DGLREDataloader 类中的使用for循环对mapping的zero_()操作是否有点儿冗余,直接将外层声明tensor的语句放到for循环内部不就可以了吗?

LawsonAbs commented 2 years ago

(2)大家的程序大概跑多久啊?我在GPU(2张3090)上训练了大概2天才跑完300epoch,使用的是Bert-base.

LawsonAbs commented 2 years ago

(3)代码run_GAIN__BERT.sh 中的 --test_epoch 的叫法明显有点儿问题,其作用应该就是每隔几个epoch就测一下在训练的模型在验证集上的效果,所以这里是不是叫做 dev_period 比较好?

LawsonAbs commented 2 years ago

(4)请问data.py 中的DGLREDataloader 类的 iter方法下的这段代码的具体含义是什么? `

for h_idx in range(L): for t_idx in range(L): if h_idx != t_idx: hlist, tlist = entities[h_idx], entities[t_idx] ht_pairs[i, j, :] = torch.Tensor([h_idx + 1, t_idx + 1]) relation_mask[i, j] = 1 delta_dis = hlist[0]['global_pos'][0] - tlist[0]['global_pos'][0] if delta_dis < 0: ht_pair_distance[i, j] = -int(self.dis2idx[-delta_dis]) + self.dis_size // 2 else: ht_pair_distance[i, j] = int(self.dis2idx[delta_dis]) + self.dis_size // 2 j += 1

`

LawsonAbs commented 2 years ago

(5) 请问test.py 中的test 函数里面的那个 ours参数是什么作用?

LawsonAbs commented 2 years ago

(6)h_t_limit_per_batch=300, h_t_limit=1722, 这两个参数分别代表什么含义,且它们在DGLREDataloader中的值是怎么设定的啊?

LawsonAbs commented 2 years ago

(7)在data.py 中,create_entity_graph() 中创建的path是按照(i+1,j+1) = (val+1)规则创建的。这是有什么特殊的意义吗?可以直接使用(i,j) = set(val) 表示节点i和节点j均可到达的公共节点集合为set(val)吗?

LawsonAbs commented 2 years ago

(8)在 RelGraphConvLayer 中,代码 weight = self.basis() if self.use_basis else self.weight # TODO? 的逻辑是什么?这里的self.use_basis 是什么意思呢?

LawsonAbs commented 2 years ago

(9)test.py 中的4重for循环严重影响了模型的性能,这里是直接对所有的head_entity 和 tail_entity 以及 relation 进行一个组合,导致模型的复杂度很高,是否可以直接遍历golden_label,然后同时对predict的数据进行处理即可?这样是否可以加快模型的处理速度?

ridiculouz commented 2 years ago

(2)大家的程序大概跑多久啊?我在GPU(2张3090)上训练了大概2天才跑完300epoch,使用的是Bert-base.

我训练22h,大概能跑100epoch,感觉代码的cpu部分太多了,gpu利用率并不高。 想问一下您的训练log大概是怎么样的?大概在多少epoch能达到最高,以及最高的dev f1和auc是多少呢?感谢!

SnowWangyue commented 1 year ago

先说一下我的运行环境:这份代码貌似问题有点儿多啊!(1)DGLREDataloader 类中的使用for循环对mapping的zero_()操作是否有点儿冗余,直接将外层声明tensor的语句放到for循环内部不就可以了吗?dgl 0.6.1 torch 1.8.0

您好,可以详细说一下您的环境配置吗?

hoooperrr commented 1 year ago

(4)请问data.py 中的DGLREDataloader 类的 iter方法下的这段代码的具体含义是什么? `

for h_idx in range(L): for t_idx in range(L): if h_idx != t_idx: hlist, tlist = entities[h_idx], entities[t_idx] ht_pairs[i, j, :] = torch.Tensor([h_idx + 1, t_idx + 1]) relation_mask[i, j] = 1 delta_dis = hlist[0]['global_pos'][0] - tlist[0]['global_pos'][0] if delta_dis < 0: ht_pair_distance[i, j] = -int(self.dis2idx[-delta_dis]) + self.dis_size // 2 else: ht_pair_distance[i, j] = int(self.dis2idx[delta_dis]) + self.dis_size // 2 j += 1

`

想请问一下现在知道了吗?我也有这个问题~

msy0513 commented 1 year ago

可以分享一下dgl大于0.5版本的代码吗?